Dashboard › craft › Distillation
4828d927-0125-414b-b7ba-388a555eddf1["lore_tm_v1_jYBpOWa1vMGNcsfbUeqG7aavwgJWCuvq6yhTER4pjXs","lore_tm_v1_Se3EEeklDieFVYbP4o0ikxGm6dePACO8uFh023fWB-8","lore_tm_v1_8I_nS0JHpUkLgUeMcR2lZvngcqsy0A5sO37EkL_MPQM"]
Date: September 8, 2026
ci-ready after checking CI; waiting-for-ci removes any existing ci-ready first so the fresh label event triggers the publish happy path..github/workflows/publish.yml waiting-for-ci job runs in production on labeled, open publish: issues when the added label is accepted; workflow concurrency groups by ${{ github.event.issue.title }} and sets cancel-in-progress: false.waiting-for-ci creates a sentry-internal-app token, idempotently removes ci-failed and ci-ready, then adds ci-pending via gh issue edit; this ensures retries after CI failure reset state and retries after publish failure can emit a new ci-ready labeled event.waiting-for-ci comments Retrying β CI was previously failed. Checking CI status now. if the issue previously carried ci-failed; otherwise it comments Approved. Checking CI status on the release branch. Publishing will start automatically when CI passes.waiting-for-ci best-effort creates a CI_POLLER_APP token with continue-on-error: true; if successful it sets CI_POLLER_HAS_PENDING to "true" through gh variable set, then immediately dispatches ci-poller.yml using the internal app token because GITHUB_TOKEN-originated workflow_dispatch events are suppressed..github/workflows/publish.yml publish job runs only for an open issueβs ci-ready label event when labels include accepted and ci-ready but exclude ci-pending and ci-failed; it has timeout-minutes: 90, uses the production environment, and does not run directly on accepted to avoid racing waiting-for-ci..__publish__ using actions/checkout@v6, sets up Node 24 with Yarn cache keyed to .__publish__/yarn.lock, installs dependencies with yarn install --cwd ".__publish__", and runs src/publish/inputs.js plus src/publish/resolve-release-revision.js.sentry-release-bot token (owner: getsentry) and checks out getsentry/${{ fromJSON(steps.inputs.outputs.result).repo }} into __repo__ at the CI-approved ${{ steps.release-revision.outputs.revision }} with fetch-depth: 0.src/publish/discover-location.js, passing PUBLISH_ARGS and PUBLISH_REPOSITORY_DIRECTORY: __repo__.Set targets step constructs an already-published JSON payload from CRAFT_PUBLISH_TARGETS_JSON, validates that realpath -m "/github/workspace/__repo__/$CRAFT_PUBLISH_PATH" remains within /github/workspace/__repo__, hashes that container cwd with SHA-1 truncated to 12 characters, and writes state under $GITHUB_WORKSPACE/.craft-state/craft.version-${version_encoded}, and optional workspaces use URL-safe base64 as workspace-${workspace_encoded}-. This prevents target repository contents from pre-populating Craftβs state because state resides outside __repo__/.docker://getsentry/craft:latest, changes into __repo__/${{ fromJSON(steps.location.outputs.result).path }}, and executes craft publish <version> --rev <CI-approved revision> with XDG_STATE_HOME: /github/workspace/.craft-state; CRAFT_PUBLISH_STATE_GITHUB_REPO remains the issue checkout identity rather than a workspace GitHub release-repository override..github/workflows/test.yml line 19 uses actions/checkout@v6; .github/workflows/publish.yml lines 120 and 159 use actions/checkout@v6; .github/workflows/ci-poller.yml line 52 uses actions/checkout@v7; .github/workflows/auto-approve.yml line 16 uses actions/checkout@v4.yarn v1.22.22 completed yarn check:generated && vitest run --printConsoleTrace; generated parser check ran as node scripts/generate-publish-issue-title-parser.js --check. Vitest v4.1.0 reported exactly 14 test files passed and 91 tests passed, with duration 2.37s; the full Yarn command completed in 3.58s.