diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6a4df71..5c8ea3c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -153,3 +153,13 @@ jobs: - name: run WP5 secret scanner smoke run: CARGO_BUILD=0 bash tests/e2e/wp5_secret_scan.sh + + - name: Sprint 2 MCP surface + run: bash tests/e2e/sprint_2_mcp_surface.sh + env: + CARGO_BUILD: "0" + + - name: Phase 3 subsystem clustering determinism + run: bash tests/e2e/phase3_subsystems.sh + env: + CARGO_BUILD: "0" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c0c2886e..db4006ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,6 +32,13 @@ jobs: steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - name: Assert tagged commit is on main + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + run: | + git fetch --no-tags origin main + git merge-base --is-ancestor "$GITHUB_SHA" origin/main || \ + { echo "::error::tag $GITHUB_REF does not point to a commit on main"; exit 1; } + - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with: toolchain: stable @@ -117,6 +124,16 @@ jobs: - name: WP5 secret scanner smoke run: CARGO_BUILD=0 bash tests/e2e/wp5_secret_scan.sh + - name: Sprint 2 MCP surface + run: bash tests/e2e/sprint_2_mcp_surface.sh + env: + CARGO_BUILD: "0" + + - name: Phase 3 subsystem clustering determinism + run: bash tests/e2e/phase3_subsystems.sh + env: + CARGO_BUILD: "0" + release-governance: name: GitHub release governance runs-on: ubuntu-latest @@ -207,22 +224,23 @@ jobs: actions: read contents: read outputs: - rust-subjects: ${{ steps.subjects.outputs.rust-subjects }} + # CI-03: includes both Rust binaries and Python plugin sdist + release-subjects: ${{ steps.subjects.outputs.release-subjects }} steps: - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: path: artifacts - - name: compute Rust archive subjects + - name: compute release artifact subjects id: subjects run: | set -euo pipefail while IFS= read -r -d '' asset; do digest=$(sha256sum "$asset" | cut -d' ' -f1) printf '%s %s\n' "$digest" "$(basename "$asset")" - done < <(find artifacts -name 'clarion-*.tar.gz' -print0 | sort -z) > rust-subjects.txt - test -s rust-subjects.txt - echo "rust-subjects=$(base64 -w0 rust-subjects.txt)" >> "$GITHUB_OUTPUT" + done < <(find artifacts \( -name 'clarion-*.tar.gz' -o -name 'clarion_plugin_python*.tar.gz' \) -print0 | sort -z) > release-subjects.txt + test -s release-subjects.txt + echo "release-subjects=$(base64 -w0 release-subjects.txt)" >> "$GITHUB_OUTPUT" build-plugin: needs: [verify, release-governance] @@ -403,7 +421,7 @@ jobs: id-token: write uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@f7dd8c54c2067bafc12ca7a55595d5ee9b75204a with: - base64-subjects: ${{ needs.release-subjects.outputs.rust-subjects }} + base64-subjects: ${{ needs.release-subjects.outputs.release-subjects }} upload-assets: true upload-tag-name: ${{ github.ref_name }} - provenance-name: clarion-rust-binaries.intoto.jsonl + provenance-name: clarion-release-artifacts.intoto.jsonl