Unit Tests #968
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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" | |