Revalidate release-plan authority before implicit recovery acts #189
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: "3.12" | |
| - run: pip install -e '.[dev]' | |
| - run: ruff check src/ tests/ | |
| - run: mypy src/durable_workflow/ | |
| test: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - run: pip install -e '.[dev]' | |
| - run: pytest tests/ -m "not integration" -q | |
| package: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: "3.12" | |
| - run: pip install build twine | |
| - run: sh -n scripts/ci/check-docs-release-audit.sh | |
| - name: Verify release recovery source contracts | |
| run: python scripts/ci/test-component-release-recovery.py | |
| - run: python -m build | |
| - run: twine check dist/* | |
| - run: python scripts/smoke-built-package.py | |
| cli-parity: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| with: | |
| path: sdk-python | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Checkout public CLI integration source | |
| run: python sdk-python/scripts/ci/checkout-public-repository.py cli cli | |
| - name: Compare shared control-plane parity fixtures | |
| working-directory: sdk-python | |
| run: python scripts/check-cli-parity.py --cli ../cli | |
| integration: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| needs: [lint, test] | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| with: | |
| path: sdk-python | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Checkout public Server integration source | |
| run: python sdk-python/scripts/ci/checkout-public-repository.py server server | |
| - run: pip install -e '.[dev]' | |
| working-directory: sdk-python | |
| - name: Start server stack | |
| working-directory: sdk-python | |
| run: | | |
| docker compose -f docker-compose.test.yml up -d --wait --timeout 300 | |
| - name: Select and probe integration endpoint | |
| working-directory: sdk-python | |
| run: python scripts/ci/configure-integration-endpoint.py | |
| - name: Run integration tests | |
| working-directory: sdk-python | |
| env: | |
| DURABLE_WORKFLOW_AUTH_TOKEN: test-token | |
| run: pytest tests/integration/ -v | |
| - name: Teardown | |
| if: always() | |
| working-directory: sdk-python | |
| run: docker compose -f docker-compose.test.yml down -v | |
| target-branch-qualification: | |
| name: Target branch qualification | |
| if: ${{ always() }} | |
| needs: [lint, test, package, cli-parity, integration] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 2 | |
| steps: | |
| - name: Require every supported Python and integration cell | |
| env: | |
| LINT_RESULT: ${{ needs.lint.result }} | |
| TEST_RESULT: ${{ needs.test.result }} | |
| PACKAGE_RESULT: ${{ needs.package.result }} | |
| PARITY_RESULT: ${{ needs.cli-parity.result }} | |
| INTEGRATION_RESULT: ${{ needs.integration.result }} | |
| run: | | |
| test "$LINT_RESULT" = success | |
| test "$TEST_RESULT" = success | |
| test "$PACKAGE_RESULT" = success | |
| test "$PARITY_RESULT" = success | |
| test "$INTEGRATION_RESULT" = success |