Skip to content

feat: implement externalized IAM feature (#91) #4

feat: implement externalized IAM feature (#91)

feat: implement externalized IAM feature (#91) #4

name: Test Externalized IAM
on:
pull_request:
branches:
- main
- 'feature/**'
- '**-externalized-iam'
paths:
- 'deploy/**'
- 'modules/**'
- 'test/**'
- '.github/workflows/test-externalized-iam.yml'
push:
branches:
- main
paths:
- 'deploy/**'
- 'modules/**'
- 'test/**'
workflow_dispatch:
permissions:
contents: read
pull-requests: write # For PR comments
checks: write # For test status
jobs:
unit-tests:
name: Unit Tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
fail-fast: false
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: 'deploy/pyproject.toml'
- name: Install dependencies
run: make install-dev
- name: Run unit tests with coverage
run: make test-coverage
- name: Upload coverage to Codecov (Python 3.11 only)
if: matrix.python-version == '3.11'
uses: codecov/codecov-action@v4
with:
files: ./deploy/coverage.xml
flags: unit-tests
name: codecov-umbrella
fail_ci_if_error: false
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-py${{ matrix.python-version }}
path: deploy/test-results/
- name: Upload coverage report
if: matrix.python-version == '3.11'
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: deploy/htmlcov/
- name: Generate test summary
if: always()
run: |
echo "## Test Results (Python ${{ matrix.python-version }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ -f deploy/.coverage ]; then
echo "✅ Tests completed" >> $GITHUB_STEP_SUMMARY
else
echo "❌ Tests failed" >> $GITHUB_STEP_SUMMARY
fi
lint:
name: Code Quality Checks
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
cache-dependency-path: 'deploy/pyproject.toml'
- name: Install dependencies
run: make install-dev
- name: Run code quality checks
run: make lint-python
- name: Generate lint summary
if: always()
run: |
echo "## Code Quality Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- Black: Format check" >> $GITHUB_STEP_SUMMARY
echo "- Ruff: Linting" >> $GITHUB_STEP_SUMMARY
echo "- Mypy: Type checking" >> $GITHUB_STEP_SUMMARY
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [unit-tests, lint]
if: always()
steps:
- name: Check test results
run: |
echo "## Overall Test Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [[ "${{ needs.unit-tests.result }}" == "success" && "${{ needs.lint.result }}" == "success" ]]; then
echo "✅ All tests passed!" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "❌ Some tests failed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- Unit Tests: ${{ needs.unit-tests.result }}" >> $GITHUB_STEP_SUMMARY
echo "- Linting: ${{ needs.lint.result }}" >> $GITHUB_STEP_SUMMARY
exit 1
fi