From ecf8576eef0021c388e071131417412b47d5da68 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Tue, 27 Aug 2024 20:44:58 +0300 Subject: [PATCH] Feat(GHActions): Update workflow Python 3.12, setup-miniconda, PyPy 3.9. --- .../.github/workflows/test-publish.yaml | 97 +++++++++++++------ 1 file changed, 69 insertions(+), 28 deletions(-) diff --git a/project_template/.github/workflows/test-publish.yaml b/project_template/.github/workflows/test-publish.yaml index 5c4ae12..b42167a 100644 --- a/project_template/.github/workflows/test-publish.yaml +++ b/project_template/.github/workflows/test-publish.yaml @@ -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/') }} -- 2.39.5