Merge pull request #1046 from PolicyEngine/agent/stage-3/pr-3b-scoped… #454
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: Push to main | |
| on: | |
| push: | |
| branches: [main] | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - run: pip install ruff>=0.9.0 | |
| - run: ruff format --check . | |
| run-context: | |
| name: Run context | |
| runs-on: ubuntu-latest | |
| outputs: | |
| run_id: ${{ steps.run-context.outputs.run_id }} | |
| github_run_url: ${{ steps.run-context.outputs.github_run_url }} | |
| env: | |
| MODAL_ENVIRONMENT: main | |
| US_DATA_MODAL_APP_PREFIX: us-data | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.14" | |
| - name: Resolve run context | |
| id: run-context | |
| run: python .github/scripts/resolve_run_context.py | |
| policyengine-us-freshness: | |
| name: PolicyEngine US freshness | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.14" | |
| - name: Require current PolicyEngine US dependency | |
| run: python .github/scripts/check_policyengine_us_dependency.py --mode fail | |
| data-release-version: | |
| name: Data release version | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.14" | |
| - name: Require pyproject.toml to match finalized HF release base | |
| run: python .github/scripts/check_data_release_version.py --mode fail | |
| # ── Documentation ────────────────────────────────────────── | |
| docs: | |
| name: Documentation | |
| runs-on: ubuntu-latest | |
| if: | | |
| !startsWith(github.event.head_commit.message, 'Update publication candidate') && | |
| !startsWith(github.event.head_commit.message, 'Finalize package version') | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.14" | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| - uses: astral-sh/setup-uv@v8.1.0 | |
| - run: uv sync --dev | |
| - name: Generate pipeline documentation artifacts | |
| run: uv run python scripts/extract_pipeline_docs.py | |
| - name: Build documentation | |
| run: uv run make documentation | |
| env: | |
| BASE_URL: /policyengine-us-data | |
| - name: Deploy to GitHub Pages | |
| uses: JamesIves/github-pages-deploy-action@v4 | |
| with: | |
| branch: gh-pages | |
| folder: docs/_build/html | |
| clean: true | |
| # ── Publication candidate scope + changelog snapshot on ordinary pushes ── | |
| versioning: | |
| name: Versioning | |
| runs-on: ubuntu-latest | |
| needs: | |
| - run-context | |
| - policyengine-us-freshness | |
| - data-release-version | |
| if: | | |
| !startsWith(github.event.head_commit.message, 'Update publication candidate') && | |
| !startsWith(github.event.head_commit.message, 'Finalize package version') | |
| outputs: | |
| version_sha: ${{ steps.version-commit.outputs.sha }} | |
| steps: | |
| - name: Generate GitHub App token | |
| id: app-token | |
| uses: actions/create-github-app-token@v3 | |
| with: | |
| app-id: ${{ secrets.APP_ID }} | |
| private-key: ${{ secrets.APP_PRIVATE_KEY }} | |
| - uses: actions/checkout@v6 | |
| with: | |
| token: ${{ steps.app-token.outputs.token }} | |
| fetch-depth: 0 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.14" | |
| - uses: astral-sh/setup-uv@v8.1.0 | |
| - name: Snapshot candidate changelog fragments | |
| env: | |
| US_DATA_RUN_ID: ${{ needs.run-context.outputs.run_id }} | |
| run: | | |
| python .github/bump_version.py | |
| - name: Generate pipeline documentation artifacts | |
| run: uv run --no-sync --with pyyaml python scripts/extract_pipeline_docs.py | |
| - name: Update lockfile | |
| run: uv lock | |
| - name: Update changelog | |
| uses: EndBug/add-and-commit@v10 | |
| with: | |
| add: "." | |
| message: Update publication candidate | |
| - name: Capture version commit | |
| id: version-commit | |
| run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" | |
| # ── Full publication pipeline ─────────────────────────────── | |
| launch-pipeline: | |
| name: Launch publication pipeline | |
| runs-on: ubuntu-latest | |
| needs: | |
| - lint | |
| - run-context | |
| - policyengine-us-freshness | |
| - data-release-version | |
| if: startsWith(github.event.head_commit.message, 'Update publication candidate') | |
| permissions: | |
| actions: write | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Dispatch pipeline workflow | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| US_DATA_RUN_ID: ${{ needs.run-context.outputs.run_id }} | |
| SOURCE_SHA: ${{ github.sha }} | |
| run: | | |
| export CANDIDATE_VERSION="$(python .github/scripts/fetch_publication_scope.py candidate_scope)" | |
| export BASE_RELEASE_VERSION="$(python .github/scripts/fetch_publication_scope.py base_release_version)" | |
| export RELEASE_BUMP="$(python .github/scripts/fetch_publication_scope.py release_bump)" | |
| bash .github/scripts/dispatch_publication_pipeline.sh |