diff --git a/.github/workflows/sbom-provenance.yml b/.github/workflows/sbom-provenance.yml index 04742847..51287427 100644 --- a/.github/workflows/sbom-provenance.yml +++ b/.github/workflows/sbom-provenance.yml @@ -123,50 +123,6 @@ jobs: echo "components=$JSON" >> "$GITHUB_OUTPUT" echo "Selected components: $JSON" - test-web-readiness: - needs: detect-components - if: contains(needs.detect-components.outputs.components, 'web') - runs-on: ubuntu-latest - timeout-minutes: 10 - strategy: - fail-fast: false - matrix: - readiness-scenario: [healthy, database-degraded, database-timeout, horizon-degraded, horizon-timeout, dependencies-unavailable, mixed-dependency-timeout] - env: - TZ: UTC - steps: - - name: Harden Runner - uses: step-security/harden-runner@v2 - with: - egress-policy: audit - - - name: Checkout - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.0.0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: pnpm - - - name: Install dependencies - run: | - cd ${{ github.workspace }} - pnpm install --frozen-lockfile - - - name: Run web tests (readiness/liveness focus) - run: pnpm --dir web exec vitest run src/app/api/health/health.test.ts - env: - READINESS_SCENARIO: ${{ matrix.readiness-scenario }} - MOCK_CLOCK_ISO: "2024-01-01T00:00:00.000Z" - generate-sdk: needs: detect-components if: contains(needs.detect-components.outputs.components, 'sdk') @@ -268,7 +224,7 @@ jobs: } echo "cdx-json=${BASE}.cdx.json" >> "$GITHUB_OUTPUT" - echo "cdx-name=talos-sdk-${GITHUB_REF_NAME:-$SHA}-$TS" >> "$GITHUB_OUTPUT" + echo "cdx-name=talos-sdk-${SHA}-$TS" >> "$GITHUB_OUTPUT" - name: Validate CycloneDX SBOM shell: bash @@ -456,7 +412,7 @@ jobs: builder: { id: 'https://github.com/actions/runner/github-hosted' }, metadata: { invocationId: '${{ github.run_id }}-${{ github.run_attempt }}', - startedOn: '${{ github.event.head_commit.timestamp || new Date().toISOString() }}', + startedOn: new Date().toISOString(), completedOn: new Date().toISOString() } } @@ -471,9 +427,9 @@ jobs: shell: bash run: | SHA="${GITHUB_SHA:0:7}" - echo "cyclonedx-artifact=sbom-sdk-cyclonedx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "spdx-artifact=sbom-sdk-spdx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "signature-artifact=sbom-sdk-signatures-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" + echo "cyclonedx-artifact=sbom-sdk-cyclonedx-${SHA}" >> "$GITHUB_OUTPUT" + echo "spdx-artifact=sbom-sdk-spdx-${SHA}" >> "$GITHUB_OUTPUT" + echo "signature-artifact=sbom-sdk-signatures-${SHA}" >> "$GITHUB_OUTPUT" - name: Upload CycloneDX SBOM uses: actions/upload-artifact@v4 @@ -605,7 +561,7 @@ jobs: } echo "cdx-json=${BASE}.cdx.json" >> "$GITHUB_OUTPUT" - echo "cdx-name=talos-agent-${GITHUB_REF_NAME:-$SHA}-$TS" >> "$GITHUB_OUTPUT" + echo "cdx-name=talos-agent-${SHA}-$TS" >> "$GITHUB_OUTPUT" - name: Generate SPDX SBOM id: spdx @@ -731,9 +687,9 @@ jobs: shell: bash run: | SHA="${GITHUB_SHA:0:7}" - echo "cyclonedx-artifact=sbom-agent-cyclonedx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "spdx-artifact=sbom-agent-spdx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "signature-artifact=sbom-agent-signatures-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" + echo "cyclonedx-artifact=sbom-agent-cyclonedx-${SHA}" >> "$GITHUB_OUTPUT" + echo "spdx-artifact=sbom-agent-spdx-${SHA}" >> "$GITHUB_OUTPUT" + echo "signature-artifact=sbom-agent-signatures-${SHA}" >> "$GITHUB_OUTPUT" - name: Upload CycloneDX uses: actions/upload-artifact@v4 @@ -860,7 +816,7 @@ jobs: fi echo "cdx-json=${BASE}.cdx.json" >> "$GITHUB_OUTPUT" - echo "cdx-name=talos-contracts-${GITHUB_REF_NAME:-$SHA}-$TS" >> "$GITHUB_OUTPUT" + echo "cdx-name=talos-contracts-${SHA}-$TS" >> "$GITHUB_OUTPUT" - name: Generate SPDX SBOM id: spdx @@ -968,7 +924,7 @@ jobs: ]; const wasms=fs.readdirSync('contracts/target/wasm32-unknown-unknown/release').filter(f=>f.endsWith('.wasm')); for (const w of wasms) subjects.push({name:w,digest:{sha256:sha256('contracts/target/wasm32-unknown-unknown/release/'+w)}}); - const pred={'_type':'https://in-toto.io/Statement/v1',subject, + const pred={'_type':'https://in-toto.io/Statement/v1',subject: subjects, predicateType:'https://slsa.dev/provenance/v1', predicate:{buildDefinition:{ buildType:'https://github.com/slsa-framework/slsa-github-generator/generic@v1', @@ -986,9 +942,9 @@ jobs: shell: bash run: | SHA="${GITHUB_SHA:0:7}" - echo "cyclonedx-artifact=sbom-contracts-cyclonedx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "spdx-artifact=sbom-contracts-spdx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "signature-artifact=sbom-contracts-signatures-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" + echo "cyclonedx-artifact=sbom-contracts-cyclonedx-${SHA}" >> "$GITHUB_OUTPUT" + echo "spdx-artifact=sbom-contracts-spdx-${SHA}" >> "$GITHUB_OUTPUT" + echo "signature-artifact=sbom-contracts-signatures-${SHA}" >> "$GITHUB_OUTPUT" - name: Upload CycloneDX uses: actions/upload-artifact@v4 @@ -1110,7 +1066,7 @@ jobs: " } echo "cdx-json=${BASE}.cdx.json" >> "$GITHUB_OUTPUT" - echo "cdx-name=talos-web-${GITHUB_REF_NAME:-$SHA}-$TS" >> "$GITHUB_OUTPUT" + echo "cdx-name=talos-web-${SHA}-$TS" >> "$GITHUB_OUTPUT" - name: Generate SPDX SBOM id: spdx @@ -1214,9 +1170,9 @@ jobs: shell: bash run: | SHA="${GITHUB_SHA:0:7}" - echo "cyclonedx-artifact=sbom-web-cyclonedx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "spdx-artifact=sbom-web-spdx-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" - echo "signature-artifact=sbom-web-signatures-${GITHUB_REF_NAME:-$SHA}" >> "$GITHUB_OUTPUT" + echo "cyclonedx-artifact=sbom-web-cyclonedx-${SHA}" >> "$GITHUB_OUTPUT" + echo "spdx-artifact=sbom-web-spdx-${SHA}" >> "$GITHUB_OUTPUT" + echo "signature-artifact=sbom-web-signatures-${SHA}" >> "$GITHUB_OUTPUT" - name: Upload CycloneDX uses: actions/upload-artifact@v4 @@ -1291,7 +1247,7 @@ jobs: echo "| Component | CycloneDX | SPDX | Provenance | Signatures |" >> "$GITHUB_STEP_SUMMARY" echo "|-----------|-----------|------|------------|------------|" >> "$GITHUB_STEP_SUMMARY" for comp in sdk agent contracts web; do - res="SKIPPED" + need="generate-$comp" case "$comp" in sdk) res="${{ needs.generate-sdk.result }}" ;; agent) res="${{ needs.generate-agent.result }}" ;; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 24a6dae3..94db0de2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -202,159 +202,6 @@ If you are iterating on contract behavior, also run the Wasm-target test path us cargo test --target wasm32-unknown-unknown ``` -## Focused Test Selection and CI Triage - -Run the smallest test set that covers the files you touched before falling back to a full suite. The commands below avoid database resets and hidden local state. Run them after installing dependencies with `pnpm install` at the repository root, `uv sync --extra dev` in `packages/prime-agent/`, or the Rust setup from the prerequisites. In this section, commands that call package scripts use `pnpm run