mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-20 11:52:20 +02:00
fix: SHA-pin every action in the secrets-bearing eval lanes
evals.yml and evals-periodic.yml execute PR-authored code with three provider API keys in env, yet rode mutable action tags (@v7/@v8/@v2/@v4) — while quality-gate.yml, osv-scanner.yml, and dependency-review.yml already model the SHA-pin pattern. All 30 uses sites across both lanes now pin the exact commit (tag noted in a trailing comment); dependabot's github-actions ecosystem keeps them fresh via PRs instead of silent tag moves. Pulled forward from the plan's endgame on the CEO-review + outside- voice agreement: supply-chain pins on secret lanes go first, not last. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
be30f0eb52
commit
46674c7fd3
@@ -32,7 +32,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
image-tag: ${{ steps.meta.outputs.tag }}
|
image-tag: ${{ steps.meta.outputs.tag }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
|
||||||
- id: meta
|
- id: meta
|
||||||
# Keep in sync with evals.yml — key on Dockerfile + lockfile only
|
# Keep in sync with evals.yml — key on Dockerfile + lockfile only
|
||||||
@@ -40,7 +40,7 @@ jobs:
|
|||||||
# Byte-identity pinned by test/ci-image-tag-binding.test.ts.
|
# Byte-identity pinned by test/ci-image-tag-binding.test.ts.
|
||||||
run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'bun.lock', 'patches/**') }}" >> "$GITHUB_OUTPUT"
|
run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'bun.lock', 'patches/**') }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- uses: docker/login-action@v4
|
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -61,10 +61,10 @@ jobs:
|
|||||||
# Registry cache export needs a docker-container builder — the default
|
# Registry cache export needs a docker-container builder — the default
|
||||||
# `docker` driver hard-errors on cache-to.
|
# `docker` driver hard-errors on cache-to.
|
||||||
- if: steps.check.outputs.exists == 'false'
|
- if: steps.check.outputs.exists == 'false'
|
||||||
uses: docker/setup-buildx-action@v4
|
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4
|
||||||
|
|
||||||
- if: steps.check.outputs.exists == 'false'
|
- if: steps.check.outputs.exists == 'false'
|
||||||
uses: docker/build-push-action@v7
|
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
|
||||||
with:
|
with:
|
||||||
context: .github/docker
|
context: .github/docker
|
||||||
file: .github/docker/Dockerfile.ci
|
file: .github/docker/Dockerfile.ci
|
||||||
@@ -90,7 +90,7 @@ jobs:
|
|||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
options: --user runner
|
options: --user runner
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ jobs:
|
|||||||
EVALS_ALL: "1"
|
EVALS_ALL: "1"
|
||||||
run: EVALS_TIER=periodic bun run scripts/test-paid-shards.ts --tier periodic --emit-plan /tmp/paid-plan/manifest.json --slices 6
|
run: EVALS_TIER=periodic bun run scripts/test-paid-shards.ts --tier periodic --emit-plan /tmp/paid-plan/manifest.json --slices 6
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v7
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-plan/manifest.json
|
path: /tmp/paid-plan/manifest.json
|
||||||
@@ -128,7 +128,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
slice: [1, 2, 3, 4, 5, 6]
|
slice: [1, 2, 3, 4, 5, 6]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
# Full history: files with SELF-derived selection (the LLM-judge
|
# Full history: files with SELF-derived selection (the LLM-judge
|
||||||
# map, routing) walk git at module load, and selection is
|
# map, routing) walk git at module load, and selection is
|
||||||
@@ -159,7 +159,7 @@ jobs:
|
|||||||
- name: Register gstack skills for PTY tests
|
- name: Register gstack skills for PTY tests
|
||||||
uses: ./.github/actions/register-gstack-skills
|
uses: ./.github/actions/register-gstack-skills
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-plan
|
path: /tmp/paid-plan
|
||||||
@@ -177,7 +177,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload slice results
|
- name: Upload slice results
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-slice-${{ matrix.slice }}
|
name: paid-slice-${{ matrix.slice }}
|
||||||
path: /tmp/paid-slice-results
|
path: /tmp/paid-slice-results
|
||||||
@@ -185,7 +185,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload shard logs on failure
|
- name: Upload shard logs on failure
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-slice-${{ matrix.slice }}-logs
|
name: paid-slice-${{ matrix.slice }}-logs
|
||||||
# The Fix-bun-temp step points TMPDIR at /home/runner/.cache, so the
|
# The Fix-bun-temp step points TMPDIR at /home/runner/.cache, so the
|
||||||
@@ -215,7 +215,7 @@ jobs:
|
|||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
options: --user runner
|
options: --user runner
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
# Full history: files with SELF-derived selection (the LLM-judge
|
# Full history: files with SELF-derived selection (the LLM-judge
|
||||||
# map, routing) walk git at module load, and selection is
|
# map, routing) walk git at module load, and selection is
|
||||||
@@ -247,7 +247,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload census results
|
- name: Upload census results
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: gate-census
|
name: gate-census
|
||||||
path: /tmp/gate-census-results
|
path: /tmp/gate-census-results
|
||||||
@@ -266,22 +266,22 @@ jobs:
|
|||||||
# `gh api /issues` — gated by the issues permission.
|
# `gh api /issues` — gated by the issues permission.
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: oven-sh/setup-bun@v2
|
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
|
||||||
with:
|
with:
|
||||||
bun-version: 1.3.13
|
bun-version: 1.3.13
|
||||||
|
|
||||||
- run: bun install --frozen-lockfile
|
- run: bun install --frozen-lockfile
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-report
|
path: /tmp/paid-report
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
pattern: paid-slice-[0-9]*
|
pattern: paid-slice-[0-9]*
|
||||||
path: /tmp/paid-report
|
path: /tmp/paid-report
|
||||||
|
|||||||
+14
-14
@@ -33,7 +33,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
image-tag: ${{ steps.meta.outputs.tag }}
|
image-tag: ${{ steps.meta.outputs.tag }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
|
||||||
- id: meta
|
- id: meta
|
||||||
# Key on Dockerfile + lockfile only. package.json is deliberately NOT
|
# Key on Dockerfile + lockfile only. package.json is deliberately NOT
|
||||||
@@ -43,7 +43,7 @@ jobs:
|
|||||||
# overwrites /workspace and node_modules comes from the lockfile.
|
# overwrites /workspace and node_modules comes from the lockfile.
|
||||||
run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'bun.lock', 'patches/**') }}" >> "$GITHUB_OUTPUT"
|
run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'bun.lock', 'patches/**') }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- uses: docker/login-action@v4
|
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -68,10 +68,10 @@ jobs:
|
|||||||
# Registry cache export needs a docker-container builder — the default
|
# Registry cache export needs a docker-container builder — the default
|
||||||
# `docker` driver hard-errors on cache-to (first live run of the trio).
|
# `docker` driver hard-errors on cache-to (first live run of the trio).
|
||||||
- if: steps.check.outputs.exists == 'false'
|
- if: steps.check.outputs.exists == 'false'
|
||||||
uses: docker/setup-buildx-action@v4
|
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4
|
||||||
|
|
||||||
- if: steps.check.outputs.exists == 'false'
|
- if: steps.check.outputs.exists == 'false'
|
||||||
uses: docker/build-push-action@v7
|
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
|
||||||
with:
|
with:
|
||||||
context: .github/docker
|
context: .github/docker
|
||||||
file: .github/docker/Dockerfile.ci
|
file: .github/docker/Dockerfile.ci
|
||||||
@@ -116,7 +116,7 @@ jobs:
|
|||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
options: --user runner
|
options: --user runner
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
# The planner is the ONE place that needs history: diff selection
|
# The planner is the ONE place that needs history: diff selection
|
||||||
# resolves a merge-base. Executors run from the manifest and stay
|
# resolves a merge-base. Executors run from the manifest and stay
|
||||||
@@ -133,7 +133,7 @@ jobs:
|
|||||||
EVALS_ALL: ${{ (github.event_name == 'workflow_dispatch' && inputs.evals_all) && '1' || '' }}
|
EVALS_ALL: ${{ (github.event_name == 'workflow_dispatch' && inputs.evals_all) && '1' || '' }}
|
||||||
run: EVALS_TIER=gate bun run scripts/test-paid-shards.ts --tier gate --emit-plan /tmp/paid-plan/manifest.json --slices 6
|
run: EVALS_TIER=gate bun run scripts/test-paid-shards.ts --tier gate --emit-plan /tmp/paid-plan/manifest.json --slices 6
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v7
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-plan/manifest.json
|
path: /tmp/paid-plan/manifest.json
|
||||||
@@ -163,7 +163,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
slice: [1, 2, 3, 4, 5, 6]
|
slice: [1, 2, 3, 4, 5, 6]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
# Full history: files with SELF-derived selection (the LLM-judge
|
# Full history: files with SELF-derived selection (the LLM-judge
|
||||||
# map, routing) walk git at module load, and selection is
|
# map, routing) walk git at module load, and selection is
|
||||||
@@ -195,7 +195,7 @@ jobs:
|
|||||||
- name: Register gstack skills for PTY smokes
|
- name: Register gstack skills for PTY smokes
|
||||||
uses: ./.github/actions/register-gstack-skills
|
uses: ./.github/actions/register-gstack-skills
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-plan
|
path: /tmp/paid-plan
|
||||||
@@ -213,7 +213,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload slice results
|
- name: Upload slice results
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-slice-${{ matrix.slice }}
|
name: paid-slice-${{ matrix.slice }}
|
||||||
path: /tmp/paid-slice-results
|
path: /tmp/paid-slice-results
|
||||||
@@ -223,7 +223,7 @@ jobs:
|
|||||||
# later needs more than a summary line.
|
# later needs more than a summary line.
|
||||||
- name: Upload shard logs on failure
|
- name: Upload shard logs on failure
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||||
with:
|
with:
|
||||||
name: paid-slice-${{ matrix.slice }}-logs
|
name: paid-slice-${{ matrix.slice }}-logs
|
||||||
# The Fix-bun-temp step points TMPDIR at /home/runner/.cache, so the
|
# The Fix-bun-temp step points TMPDIR at /home/runner/.cache, so the
|
||||||
@@ -250,22 +250,22 @@ jobs:
|
|||||||
# `issues` permission, not `pull-requests` (#1802 CI fix).
|
# `issues` permission, not `pull-requests` (#1802 CI fix).
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: oven-sh/setup-bun@v2
|
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
|
||||||
with:
|
with:
|
||||||
bun-version: 1.3.13
|
bun-version: 1.3.13
|
||||||
|
|
||||||
- run: bun install --frozen-lockfile
|
- run: bun install --frozen-lockfile
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
name: paid-plan
|
name: paid-plan
|
||||||
path: /tmp/paid-report
|
path: /tmp/paid-report
|
||||||
|
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
pattern: paid-slice-[0-9]*
|
pattern: paid-slice-[0-9]*
|
||||||
path: /tmp/paid-report
|
path: /tmp/paid-report
|
||||||
|
|||||||
Reference in New Issue
Block a user