Dashboard › publish › Distillation
c28257e2-76a6-449c-8ee2-1f8bbdf32b15["lore_tm_v1_kubmcSEIyZB2-j3axp1AGxam3kQPGSl9sW-11W2syyY","lore_tm_v1_ea2tTt4Irsz_ofkN3Djr1s72AWA9xN-idEn4OK9-vKw","lore_tm_v1_t4Y7ml4VXlJPXChuhf4BD_irBre2UFhjOsOogiM7Rew","lore_tm_v1__1wned3TeVIqRSWZn-eH18kgNuarbKwOWJZtd6PHY2I"]
Date: Sep 10, 2026
.github/workflows/ci-poller-dispatch.yml; protected environment secrets must enforce that an arbitrary dispatched ref cannot add them./home/byk/Code/getsentry/publish/.github/workflows/ci-poller-dispatch.yml has 16 lines: workflow_dispatch trigger at lines 3-4, permissions: {} at line 6, one dispatch job using environment: production and runs-on: ubuntu-latest at lines 9-14, and a sole run: ":" step at line 16./home/byk/Code/getsentry/publish/.github/workflows/test.yml has 34 lines. It runs on pushes to main and pull requests, grants only contents: read, defaults to Bash, and defines one unit-test job on ubuntu-latest./home/byk/Code/getsentry/publish/.github/workflows/test.yml:19-34 checks out with actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803, configures Node 24 using actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38, caches node_modules using actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 with key ${{ runner.os }}-node_modules-${{ hashFiles('package.json', 'yarn.lock') }}, runs yarn install --frozen-lockfile only when steps.cache.outputs.cache-hit != 'true', then runs yarn test..github/workflows/publish.yml uses actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 at lines 36, 192, and 274; actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 at lines 42, 52, 149, and 268; actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 at line 223; and docker://getsentry/craft@sha256:9a4a5d5efa44a00c2215078ead39800d4aaa5a97908b94f45a64d7d506d6e14b at line 353..github/workflows/ci-poller.yml uses actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 at line 49 and actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 at lines 60, 71, and 420; .github/workflows/auto-approve.yml uses actions/checkout@11d5960a326750d5838078e36cf38b85af677262 at line 18 and actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 at line 24; .github/workflows/test.yml uses pinned actions/checkout at line 19, actions/setup-node at line 20, and actions/cache at line 23./home/byk/Code/getsentry/publish/src/publish/__tests__/authorize-approval.js contains 7 tests across 236 lines for the authorize-approval entry point.src/publish/__tests__/authorize-approval.js:11-17 snapshots process.env; after each test it restores the environment, calls vi.restoreAllMocks(), and calls vi.resetModules().src/publish/__tests__/authorize-approval.js:19-43 defines jsonResponse(json) and runAuthorization({ actor, issueTitle, responses }). runAuthorization() sets GITHUB_OUTPUT=/tmp/github-output, APPROVAL_TOKEN=release-bot-token, APPROVAL_ACTOR, APPROVAL_ISSUE_NUMBER=123, APPROVAL_ISSUE_REPOSITORY=getsentry/publish, and APPROVAL_ISSUE_TITLE; it mocks fs.appendFileSync and sequential global.fetch responses, invokes main(), waits for output, and returns the mocks.src/publish/__tests__/authorize-approval.js:46-54 mocks an allowlist containing exact paths getsentry/sentry-javascript and getsentry/objectstore/clients; getAutoApprovedRepositories() must return both in a Set.src/publish/__tests__/authorize-approval.js:56-94 verifies successful collaborator authorization for actor contractor, issue publish: getsentry/sentry-javascript@10.0.0, permission role_name: "write", open issue body Merge target: main, accepted label, requester requester, and accepted event ID "100" authored by contractor. It requires a request to https://api.github.com/repos/getsentry/sentry-javascript/collaborators/contractor/permission with Authorization: "Bearer release-bot-token" and output matching authorized=true\napproval_attestation=<!-- publish-approval .+ -->\n.src/publish/__tests__/authorize-approval.js:96-123 rejects self-approval when contractor is both requester and accepting actor, writing exactly authorized=false\n.src/publish/__tests__/authorize-approval.js:125-168 authorizes allowlisted automated release publish: getsentry/relay@1.2.3 opened by getsantry[bot] and accepted by sentry-internal-app[bot] when a github-actions[bot] comment contains createAutoApprovalAttestation({ autoApprover: "getsantry[bot]", issue }). It must not query a /collaborators/ endpoint and must emit authorized=true plus a <!-- publish-approval ... --> attestation.src/publish/__tests__/authorize-approval.js:170-199 rejects the same automated approval flow when the comments response is empty and no request proof exists, writing exactly authorized=false\n.src/publish/__tests__/authorize-approval.js:201-213 rejects direct approval by automated opener sentry-release-bot[bot] for publish: getsentry/relay@1.2.3, performs no fetch, and writes exactly authorized=false\n.src/publish/__tests__/authorize-approval.js:215-235 verifies fail-closed behavior when GitHub returns HTTP 404 for contractor permission on getsentry/sentry-javascript: main() must reject with Could not retrieve contractor's permission for getsentry/sentry-javascript: GitHub returned 404, must not call console.error, and must not write to GITHUB_OUTPUT.