name: check on: push: pull_request: schedule: - cron: "0 8 * * *" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: name: test ${{ matrix.py }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: py: - "3.11.0-beta.4" - "3.10" - "3.9" - "3.8" - "3.7" - "3.6" - pypy-3.9-v7.3.9 - pypy-3.8-v7.3.9 - pypy-3.7-v7.3.9 - pypy-3.6-v7.3.3 os: - ubuntu-20.04 - macos-12 - windows-2022 exclude: - { os: macos-12, py: "pypy-3.6-v7.3.3" } # PyPy 3.6 does not support macOS 11/12 include: - { os: macos-12, py: "brew@3.9" } - { os: macos-12, py: "brew@3.8" } steps: - name: Install OS dependencies run: | for i in 1 2 3; do echo "try $i" && \ ${{ runner.os == 'Linux' && 'sudo apt-get update -y && sudo apt-get install snapd fish csh -y' || true }} && \ ${{ runner.os == 'Linux' && 'sudo apt-get install curl wget -y' || true }} && \ ${{ runner.os == 'Linux' && 'nushell_url=$(curl -s https://api.github.com/repos/nushell/nushell/releases/latest | grep "browser_" | grep "x86_64" | grep "linux" | grep "gnu" | cut -d\" -f4 )' || true }} && \ ${{ runner.os == 'Linux' && 'wget -O nushell.tar.gz $nushell_url' || true }} && \ ${{ runner.os == 'Linux' && 'tar -zxf nushell.tar.gz' || true }} && \ ${{ runner.os == 'Linux' && 'sudo cp nu /usr/bin' || true }} && \ ${{ runner.os == 'Windows' && 'choco install nushell' || true }} && \ ${{ runner.os == 'macOS' && 'brew install fish tcsh nushell' || true }} && \ exit 0 || true; done exit 1 shell: bash - name: Setup python for tox uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install Python 2 for cross test uses: actions/setup-python@v4 with: python-version: "2.7" - name: Setup brew python for test ${{ matrix.py }} if: startsWith(matrix.py,'brew@') run: | set -e PY=$(echo '${{ matrix.py }}' | cut -c 6-) brew upgrade python@$PY || brew install python@$PY echo "/usr/local/opt/python@$PY/libexec/bin" >>"${GITHUB_PATH}" shell: bash - name: Setup python for test ${{ matrix.py }} if: "!( startsWith(matrix.py,'brew@') || endsWith(matrix.py, '-dev') )" uses: actions/setup-python@v4 with: python-version: ${{ matrix.py }} - name: Pick environment to run run: | import os; import platform; import sys; from pathlib import Path env = f'TOXENV=py{"" if platform.python_implementation() == "CPython" else "py"}3{sys.version_info.minor}' print(f"Picked: {env} for {sys.version} based of {sys.executable}") with Path(os.environ["GITHUB_ENV"]).open("ta") as file_handler: file_handler.write(env) shell: python - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install tox run: python -m pip install tox - name: Use local virtualenv for tox run: python -m pip install . - name: Setup test suite run: tox -vv --notest - name: Run test suite run: tox --skip-pkg-install env: PYTEST_ADDOPTS: "-vv --durations=20" CI_RUN: "yes" DIFF_AGAINST: HEAD - name: Rename coverage report file run: | import os; import sys os.rename(f".tox/.coverage.{os.environ['TOXENV']}", f".tox/.coverage.{os.environ['TOXENV']}-{sys.platform}") shell: python - name: Upload coverage data uses: actions/upload-artifact@v3 with: name: coverage-data path: ".tox/.coverage.*" coverage: name: Combine coverage runs-on: ubuntu-22.04 needs: test steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install tox run: python -m pip install tox - name: Setup coverage tool run: tox -e coverage --notest - name: Install package builder run: python -m pip install build - name: Build package run: pyproject-build --wheel . - name: Download coverage data uses: actions/download-artifact@v3 with: name: coverage-data path: .tox - name: Combine and report coverage run: tox -e coverage - name: Upload HTML report uses: actions/upload-artifact@v3 with: name: html-report path: .tox/htmlcov check: name: ${{ matrix.tox_env }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: - ubuntu-22.04 - windows-2022 tox_env: - dev - docs - readme - upgrade - zipapp exclude: - { os: windows-2022, tox_env: readme } - { os: windows-2022, tox_env: docs } steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Python "3.10" uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install tox run: python -m pip install tox - name: Run check for ${{ matrix.tox_env }} run: python -m tox -e ${{ matrix.tox_env }} env: UPGRADE_ADVISORY: "yes" publish: if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') needs: [check, coverage] runs-on: ubuntu-22.04 steps: - name: Setup python to build package uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install https://pypi.org/project/build run: python -m pip install build - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Build sdist and wheel run: python -m build -s -w . -o dist - name: Publish to PyPi uses: pypa/gh-action-pypi-publish@v1.5.1 with: skip_existing: true user: __token__ password: ${{ secrets.pypi_password }}