]> git.phdru.name Git - cookiecutter.git/commitdiff
Feat(GHActions): Update workflow
authorOleg Broytman <phd@phdru.name>
Tue, 27 Aug 2024 17:44:58 +0000 (20:44 +0300)
committerOleg Broytman <phd@phdru.name>
Tue, 27 Aug 2024 17:44:58 +0000 (20:44 +0300)
Python 3.12, setup-miniconda, PyPy 3.9.

project_template/.github/workflows/test-publish.yaml

index 5c4ae126d6be9999d4e171b960a03acd5ea37947..b42167a35d96f45be3d8a8527490fc90c767be1b 100644 (file)
@@ -8,17 +8,32 @@ on: [push, pull_request]
 jobs:
   run-tests:
     env:
-      not_in_conda: "['3.11', 'pypy-3.7']"
+      not_in_conda: "[]"
 
     strategy:
       matrix:
-        os: [ubuntu-latest, macos-11, windows-latest]
-        python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "pypy-3.7"]
+        os: [ubuntu-latest, macos-latest, windows-latest]
+        python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "=3.9[build=*_pypy]"]
+        exclude:
+        - os: windows-latest
+          python-version: "2.7"
+        - os: macos-latest
+          python-version: "2.7"
+        - os: macos-latest
+          python-version: "3.5"
+        - os: macos-latest
+          python-version: "3.6"
+        - os: macos-latest
+          python-version: "3.7"
+        - os: macos-latest
+          python-version: "=3.9[build=*_pypy]"
+        - os: windows-latest
+          python-version: "=3.9[build=*_pypy]"
         include:
         - os: ubuntu-latest
           os-name: Linux
           pip-cache-path: ~/.cache/pip
-        - os: macos-11
+        - os: macos-latest
           os-name: MacOS
           pip-cache-path: ~/Library/Caches/pip
         - os: windows-latest
@@ -29,63 +44,89 @@ jobs:
     runs-on: ${{ matrix.os }}
 
     steps:
-
       # Setup Python/pip
-      - uses: s-weigand/setup-conda@v1
+      - uses: actions/checkout@v4
+      - uses: conda-incubator/setup-miniconda@v3
         with:
+          miniforge-version: latest
           python-version: ${{ matrix.python-version }}
-        if: ${{ runner.os == 'Linux' && !contains(fromJSON(env.not_in_conda), matrix.python-version) }}
+        if: ${{ !contains(fromJSON(env.not_in_conda), matrix.python-version) }}
+      # Python 3.7 is needed for ghactions-release script
+      - name: Install additional Python 3.7
+        run: |
+          conda create -n py37 --yes python=3.7
+          py37_prefix="`echo $CONDA_PREFIX | sed 's/__setup_conda/py37/'`"
+          ln -s "$py37_prefix/bin/python" "$CONDA_PREFIX/bin/python3.7"
+          ln -s "$py37_prefix/bin/pip" "$CONDA_PREFIX/bin/pip3.7"
+          python3.7 --version
+          pip3.7 --version
+        shell: bash
+        if: ${{ matrix.python-version == '2.7' && runner.os != 'Windows' && startsWith(github.ref, 'refs/tags/') }}
       - uses: actions/setup-python@v4
         with:
           python-version: ${{ matrix.python-version }}
-        if: ${{ runner.os != 'Linux' || contains(fromJSON(env.not_in_conda), matrix.python-version) }}
+        if: ${{ contains(fromJSON(env.not_in_conda), matrix.python-version) }}
+      - uses: actions/cache@v3
+        with:
+          path: ~/conda_pkgs_dir
+          key: ${{ runner.os }}-conda
       - name: Cache pip
         uses: actions/cache@v3
         with:
           path: ${{ matrix.pip-cache-path }}
           key: ${{ runner.os }}-pip
-
       # Setup tox
       - name: Install dependencies
         run: |
           python --version
+          python -m pip || python -m ensurepip --default-pip --upgrade
           python -m pip install --upgrade pip setuptools wheel
           pip --version
-          pip install --upgrade virtualenv tox
+          pip install --upgrade virtualenv "tox >= 3.15, < 4"
+        shell: bash -el {0}
       - name: Set TOXENV
         run: |
+          python -c "
           import os, sys
           ld_library_path = None
           if hasattr(sys, 'pypy_version_info'):
-            toxenv = 'pypy3'
+              toxenv = 'pypy3'
           else:
-            pyver = '%d%d' % tuple(sys.version_info[:2])
-            if os.name == 'posix':
-              if pyver == '27':  # Python 2.7 on Linux requires `$LD_LIBRARY_PATH`
-                ld_library_path = os.path.join(
-                  os.path.dirname(os.path.dirname(sys.executable)), 'lib')
-            toxenv = 'py%s' % pyver
-            if os.name == 'posix':
-              toxenv += ',py%s-flake8' % pyver
+              pyver = '%d%d' % tuple(sys.version_info[:2])
+              if (pyver == '27') and (os.name == 'posix'):  # Python 2.7 on Linux requires `$LD_LIBRARY_PATH`
+                  ld_library_path = os.path.join(
+                      os.path.dirname(os.path.dirname(sys.executable)), 'lib')
+              toxenv = 'py%s' % pyver
+              if os.name == 'posix':
+                  toxenv += ',py%s-flake8' % pyver
           with open(os.environ['GITHUB_ENV'], 'a') as f:
-            if ld_library_path:
-              f.write('LD_LIBRARY_PATH=' + ld_library_path + '\n')
-            f.write('TOXENV=' + toxenv + '\n')
-          print(toxenv)
-        shell: python
+              if ld_library_path:
+                  f.write('LD_LIBRARY_PATH=' + ld_library_path + '\n')
+              f.write('TOXENV=' + toxenv + '\n')
+          "
+        shell: bash -el {0}
 
       - name: Run tox
         run: |
           python -c "import os; print(os.environ['TOXENV'])"
           tox --version
           tox
+        shell: bash -el {0}
 
-      - name: Build and publish wheel
+      - name: Build and publish sdist and wheel on Unix
+        run: |
+          pip install -U --ignore-installed certifi # Replace conda-installed
+          devscripts/CI/ghactions-release
+        env:
+          TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
+          TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
+        if: ${{ !startsWith(matrix.python-version, 'pypy') && runner.os != 'Windows' && startsWith(github.ref, 'refs/tags/') }}
+      - name: Build and publish wheel on w32
         run: |
           pip install -U pip setuptools twine wheel
           python setup.py bdist_wheel
           twine upload --disable-progress-bar --skip-existing dist\*
-        if: ${{ startsWith(github.ref, 'refs/tags/') }}
+        if: ${{ !startsWith(matrix.python-version, 'pypy') && runner.os == 'Windows' && startsWith(github.ref, 'refs/tags/') }}
         env:
           TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
           TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
@@ -98,8 +139,8 @@ jobs:
           omitBodyDuringUpdate: true
           omitNameDuringUpdate: true
           omitPrereleaseDuringUpdate: true
-          prerelease: false
+          prerelease: true
           replacesArtifacts: false
           skipIfReleaseExists: false
           updateOnlyUnreleased: false
-        if: ${{ startsWith(github.ref, 'refs/tags/') }}
+        if: ${{ !startsWith(matrix.python-version, 'pypy') && startsWith(github.ref, 'refs/tags/') }}