Skip to content

test(context): add coverage for WorkContext #2407

test(context): add coverage for WorkContext

test(context): add coverage for WorkContext #2407

Workflow file for this run

# Based on https://fedoramagazine.org/github-actions-use-podman-to-run-fedora-linux/
name: CI
on:
pull_request:
permissions:
contents: read
jobs:
unit:
name: unit
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version:
- "3.12"
- "3.13"
- "3.14"
rust-version:
# RHEL 9.4 has rustc 1.75
- "1.75"
os:
- ubuntu-latest
- macos-latest
steps:
- name: Get source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
- name: Set up Rust ${{ matrix.rust-version }}
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
with:
toolchain: ${{ matrix.rust-version }}
default: true
override: true
- name: Disable AppArmor restriction for unprivileged user namespaces
if: matrix.os == 'ubuntu-latest'
run: sudo sysctl kernel.apparmor_restrict_unprivileged_userns=0
- name: Check unshare is working
if: matrix.os == 'ubuntu-latest'
run: unshare -rn echo "unshare works"
- name: Install dependencies
run: python -m pip install hatch 'click!=8.3.0'
- name: Run tests
run: hatch run test:test --with-network
- name: Upload coverage
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: coverage-unit-py${{ matrix.python-version }}-rs${{ matrix.rust-version }}-${{ matrix.os }}
path: .coverage.*
include-hidden-files: true
if-no-files-found: ignore
retention-days: 1
e2e:
name: e2e
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version:
- "3.12"
- "3.13"
- "3.14"
rust-version:
# RHEL 9.4 has rustc 1.75
- "1.75"
test-script:
- ci_bootstrap_suite
- ci_bootstrap_parallel_suite
- ci_build_suite
- ci_config_suite
- ci_specialized_suite
- ci_workflow_suite
os:
- ubuntu-latest
- macos-latest
exclude:
# macOS tests are slower and congested
# only run macOS tests on latest stable Python version
- os: macos-latest
python-version: "3.12"
- os: macos-latest
python-version: "3.13"
steps:
- name: Get source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
- name: Set up Rust ${{ matrix.rust-version }}
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
with:
toolchain: ${{ matrix.rust-version }}
default: true
override: true
- name: Disable AppArmor restriction for unprivileged user namespaces
if: matrix.os == 'ubuntu-latest'
run: sudo sysctl kernel.apparmor_restrict_unprivileged_userns=0
- name: Check unshare is working
if: matrix.os == 'ubuntu-latest'
run: unshare -rn echo "unshare works"
- name: Install dependencies
run: python -m pip install hatch 'click!=8.3.0'
- name: Run tests
run: HATCH_PYTHON=${{ matrix.python-version }} ./e2e/${{ matrix.test-script }}.sh
- name: Upload logs for debugging
if: ${{ failure() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: ${{ matrix.test-script }}-py${{ matrix.python-version }}-rs${{ matrix.rust-version }}-${{ matrix.os }}
path: |
e2e-output
e2e-failed-*
- name: Upload coverage
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: coverage-e2e-${{ matrix.test-script }}-py${{ matrix.python-version }}-rs${{ matrix.rust-version }}-${{ matrix.os }}
path: .coverage.*
include-hidden-files: true
if-no-files-found: ignore
retention-days: 1
coverage:
name: Coverage report
runs-on: ubuntu-latest
needs:
- unit
- e2e
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: 3.12
cache: pip
cache-dependency-path: |
**/pyproject.toml
- name: Install dependencies
run: python -m pip install hatch 'click!=8.3.0'
- name: Download coverage data
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: coverage-*
merge-multiple: true
- name: Coverage report
run: |
hatch run test:coverage combine
hatch run test:coverage report
hatch run test:coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
hatch run test:coverage report --fail-under=60
- name: Upload report
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
path: htmlcov
name: htmlcov
retention-days: 7