Skip to content

CI (pr: #32)

CI (pr: #32) #148

Workflow file for this run

name: CI
run-name: "CI (${{ github.event_name == 'pull_request' && format('pr: #{0}', github.event.number) || format('{0}: {1}', startsWith(github.event.ref, 'refs/tags') && 'tag' || 'branch', github.ref_name) }})"
on:
- push
- pull_request
env:
COLUMNS: 190
concurrency:
# Concurrency is defined in a way that concurrent builds against branches do
# not cancel previous builds.
# However, for every new build against the same pull request source branch,
# all older builds against that same branch get canceled.
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.repository }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
Pre-Commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-actionlint
- uses: ./.github/actions/setup-shellcheck
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Set Cache Key
run: |
echo "PY=$(python --version --version | sha256sum | cut -d' ' -f1)" >> "$GITHUB_ENV"
- uses: actions/cache@v3
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}|${{ hashFiles('.pre-commit-hooks/*') }}
- name: Install Dependencies
run: |
python -m pip install pre-commit
pre-commit install --install-hooks
- name: Run Pre-Commit
run: |
pre-commit run --show-diff-on-failure --color=always --all-files
PyLint:
runs-on: ubuntu-latest
needs: Pre-Commit
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.9 For Nox
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Install Nox
run: |
python -m pip install --upgrade pip
pip install nox
- name: Install Lint Requirements
run: |
nox --force-color -e lint --install-only
- name: Run PyLint
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --force-color -e lint
Docs:
runs-on: ubuntu-latest
needs: Pre-Commit
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.9 For Nox
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Install Nox
run: |
python -m pip install --upgrade pip
pip install nox
- name: Install Doc Requirements
run: |
nox --force-color -e docs --install-only
- name: Build Docs
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --force-color -e docs
Linux:
runs-on: ubuntu-latest
needs: Pre-Commit
timeout-minutes: 15
strategy:
fail-fast: false
max-parallel: 10
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
pytest-version:
- "7.1.0"
- "7.2.0"
- "7.3.0"
- "7.4.0"
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Nox
run: |
python -m pip install --upgrade pip
pip install nox
- name: Install Test Requirements
env:
PYTEST_VERSION_REQUIREMENT: pytest~=${{ matrix.pytest-version }}
run: |
nox --force-color -e tests-3 --install-only
- name: Test
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --force-color -e tests-3 -- -vv tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-project.xml
flags: src,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: project-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-tests.xml
flags: tests,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: tests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload Logs
if: always()
uses: actions/upload-artifact@main
with:
name: runtests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}.log
path: artifacts/runtests-*.log
Windows:
runs-on: windows-latest
needs: Pre-Commit
timeout-minutes: 40
strategy:
fail-fast: false
max-parallel: 10
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
pytest-version:
- "7.3.0"
- "7.4.0"
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Nox
run: |
python -m pip install --upgrade pip
pip install nox
- name: Install Test Requirements
shell: bash
env:
PYTEST_VERSION_REQUIREMENT: pytest~=${{ matrix.pytest-version }}
run: |
export PATH="/C/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64;$PATH"
nox --force-color -e tests-3 --install-only
- name: Test
shell: bash
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
export PATH="/C/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64;$PATH"
nox --force-color -e tests-3 -- -vv tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-project.xml
flags: src,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: project-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-tests.xml
flags: tests,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: tests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload Logs
if: always()
uses: actions/upload-artifact@main
with:
name: runtests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}.log
path: artifacts/runtests-*.log
macOS:
runs-on: macOS-latest
needs: Pre-Commit
timeout-minutes: 40
strategy:
fail-fast: false
max-parallel: 10
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
pytest-version:
- "7.3.0"
- "7.4.0"
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Nox
run: |
python -m pip install --upgrade pip
pip install nox
- name: Install Test Requirements
env:
PYTEST_VERSION_REQUIREMENT: pytest~=${{ matrix.pytest-version }}
run: |
nox --force-color -e tests-3 --install-only
- name: Test
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --force-color -e tests-3 -- -vv tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-project.xml
flags: src,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: project-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: artifacts/
fail_ci_if_error: false
files: coverage-tests.xml
flags: tests,${{ runner.os }},py${{ matrix.python-version }},pytest-${{ matrix.pytest-version }}
name: tests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}
verbose: true
- name: Upload Logs
if: always()
uses: actions/upload-artifact@main
with:
name: runtests-${{ runner.os }}-Py${{ matrix.python-version}}-Pytest${{ matrix.pytest-version }}.log
path: artifacts/runtests-*.log
Build:
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
needs:
- Docs
- PyLint
- Linux
- Windows
- macOS
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Install Nox
run: |
python -m pip install nox
- name: Build a binary wheel and a source tarball
run: |
nox -e build
- name: Publish distribution 📦 to Test PyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
print-hash: true
skip-existing: true
verify-metadata: true
set-pipeline-exit-status:
# This step is just so we can make github require this step, to pass checks
# on a pull request instead of requiring all
name: Set the ${{ github.workflow }} Pipeline Exit Status
if: always()
runs-on: ubuntu-latest
needs:
- pre-commit
- Docs
- PyLint
- Linux
- Windows
- MacOS
- Build
steps:
- name: Get workflow information
id: get-workflow-info
uses: technote-space/workflow-conclusion-action@v3
- name: Set Pipeline Exit Status
shell: bash
run: |
if [ "${{ steps.get-workflow-info.outputs.conclusion }}" != "success" ]; then
exit 1
else
exit 0
fi
- name: Done
if: always()
run:
echo "All worflows finished"