Skip to content

Unit Tests

Unit Tests #974

Workflow file for this run

name: Unit Tests
on:
push:
branches: [ main, develop ]
paths:
- 'src/**'
- 'tests/**'
- 'pyproject.toml'
- 'requirements*.txt'
- 'uv.lock'
- '.github/workflows/ci-tests.yml'
pull_request:
branches: [ main, develop ]
paths:
- 'src/**'
- 'tests/**'
- 'pyproject.toml'
- 'requirements*.txt'
- 'uv.lock'
- '.github/workflows/ci-tests.yml'
schedule:
- cron: '0 2 * * *'
permissions:
contents: read
jobs:
config:
name: Configuration
uses: ./.github/workflows/shared-config.yml
setup-cache:
name: Setup Test Cache
needs: config
uses: ./.github/workflows/cache-management.yml
with:
cache-type: dependencies
cache-key-base: test-deps
python-version: ${{ needs.config.outputs.default-python-version }}
tests:
name: Unit Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: unit
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: false
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
integration-tests:
name: Integration Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: integration
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: false
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
e2e-tests:
name: End-to-End Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: e2e
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: true
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
onmoto-tests:
name: Onmoto Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: onmoto
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: false
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
providers-tests:
name: Providers & Infrastructure Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: providers
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: false
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
infrastructure-tests:
name: Infrastructure Tests (Default Python)
needs: [config, setup-cache]
uses: ./.github/workflows/reusable-test.yml
with:
test-type: infrastructure
python-version: ${{ needs.config.outputs.default-python-version }}
default-python-version: ${{ needs.config.outputs.default-python-version }}
continue-on-error: false
aws-region: ${{ needs.config.outputs.aws-region }}
aws-access-key: ${{ needs.config.outputs.aws-access-key }}
aws-secret-key: ${{ needs.config.outputs.aws-secret-key }}
environment: ${{ needs.config.outputs.environment }}
testing-flag: ${{ needs.config.outputs.testing-flag }}
build-and-package:
name: Build & Package
runs-on: ubuntu-latest
needs: [config, setup-cache]
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup UV with cache
uses: ./.github/actions/setup-uv-cached
with:
cache-key: ${{ needs.setup-cache.outputs.cache-key }}
fail-on-cache-miss: false
- name: Build package
run: make build
- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: build-artifacts-${{ needs.config.outputs.package-version }}
retention-days: 60
path: |
dist/
build/
test-report:
name: Generate Test Report
runs-on: ubuntu-latest
needs: [config, setup-cache, tests, integration-tests, e2e-tests, onmoto-tests, providers-tests, infrastructure-tests]
if: always()
permissions:
contents: read
issues: read
checks: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup UV with cache
uses: ./.github/actions/setup-uv-cached
with:
cache-key: ${{ needs.setup-cache.outputs.cache-key }}
fail-on-cache-miss: false
- name: Download test results
uses: actions/download-artifact@v8
with:
path: test-results/
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
continue-on-error: true
with:
files: "test-results/**/junit-*.xml"
check_name: "Test Results Summary"
comment_mode: "always"
job_summary: true
action_fail: false
fail_on: "nothing"