Dashboard › craft › Distillation
3ff63be2-c66d-429b-b8e0-43597d32b380["lore_tm_v1_UCXq5FFYW0dT_E4DnaiEC4T34pQLUrsCEHCm4py84Yw","lore_tm_v1_NtoluPqZtC6CBUM_uOqjASq1LO0319piN_z4Ft65qbg","lore_tm_v1_pjrKXNtLAQ5HznF4mObSsj4o0LS4IZyVh6iJjgQRRA4"]
Date: Aug 29, 2026
minVersion side..github/workflows/publish.yml, docs/publish-issue-format.md, package.json, src/modules/__tests__/details-from-context.js, src/modules/__tests__/publish-workflow.js, src/modules/details-from-context.js, src/modules/post-workflow-details.js, src/publish/inputs.js, and yarn.lock..github/workflows/publish.yml replaces the hard-coded Set target repo checkout branch allowlist (including sentry-migr8/tmp-merge-target, sentry-javascript versions v10 through v7/master, sentry-python/alpha, and sentry-wizard/1.x) with Resolve CI-approved release revision, ID release-revision, which invokes node .__publish__/src/publish/resolve-release-revision.js with PUBLISH_ARGS and PUBLISH_ISSUE_BODY.ref: ${{ steps.release-revision.outputs.revision }} rather than the prior branch-selection output, while retaining repository getsentry/${{ fromJSON(steps.inputs.outputs.result).repo }}, Release Bot token, and fetch-depth: 0..github/workflows/publish.yml adds Resolve publish location (ID location) after checkout and before Set targets. It evaluates needsWorkspaceDiscovery(input) from ./.__publish__/src/modules/publish-location, conditionally runs getsentry/craft:latest workspace list in Docker when discovery is needed and __repo__/.craft.yml exists, stores its JSON output in CRAFT_WORKSPACE_NAMES, then invokes node .__publish__/src/publish/resolve-location.js.CRAFT_PUBLISH_PATH and CRAFT_PUBLISH_WORKSPACE; it runs craft publish <version> --rev <CI-approved revision> from __repo__/<resolved path>.CRAFT_PUBLISH_STATE_GITHUB_REPO: getsentry/${{ fromJSON(steps.inputs.outputs.result).repo }}, rather than an optional workspace GitHub release-repository override.src/modules/__tests__/publish-workflow.js adds a workflow-ordering test requiring Check out target repo before Resolve publish location, then Set targets, then Publish using Craft; it verifies CI-approved revision checkout and publish, conditional getsentry/craft:latest workspace list, resolved path/workspace env values, and confirms the workflow no longer contains getsentry/craft:2.31.0.docs/publish-issue-format.md replaces prose title variants with canonical EBNF: title = "publish: ", [ "getsentry/" ], repository, [ path ], [ legacy-workspace ], "@", version; token permits ASCII letters, digits, ., _, -; version-character additionally permits +; and legacy-workspace is " [workspace: ", json-string, "] ".publish: getsentry/sentry@21.3.1 and publish: getsentry/toolkit/cli@1.2.3; new workspace names must match ^[A-Za-z0-9_.-]+$, and a workspace cannot use a non-root checkout path.View check runs link: with a root .craft.yml, craft workspace list supplies exact keys; a one-segment suffix exactly matching a key is a workspace, all other suffixes are checkout paths; no root .craft.yml means checkout-path behavior; workspace-discovery errors when a root configuration exists fail the release.publish: getsentry/toolkit [workspace: "cli/v2"] @1.2.3 and publish: getsentry/toolkit [workspace: "cli [preview] \"next\""] @1.2.3; legacy workspace titles must use repository root path.getsentry/ for existing issues; paths may not contain a .. segment; JSON workspace names must be nonempty and exclude Unicode categories Cc, Cf, Zl, and Zp; legacy qualified titles have one space between ] and @, while unqualified titles have none.src/modules/details-from-context.js replaces its inline regex with generated parser import const { parse: parsePublishIssueTitle } = require("./publish-issue-title");; parser failures are converted to Invalid publish issue title: '<title>', the path becomes "." + parsedTitleDetails.path, and non-root workspace paths throw A publish workspace must use the repository root path..src/modules/__tests__/details-from-context.js adds coverage rejecting publish: getsentry/toolkit/packages/cli [workspace: "cli/v2"] @1.2.3 with A publish workspace must use the repository root path..package.json adds peggy version 5.1.0, script generate: node scripts/generate-publish-issue-title-parser.js, and script check:generated: node scripts/generate-publish-issue-title-parser.js --check; test now runs yarn check:generated && vitest run.yarn.lock adds parser-generator dependency chain peggy@5.1.0 → @peggyjs/from-mem@3.1.3, commander@^14.0.3 resolved to 14.0.3, semver@7.7.4, and source-map-generator@2.0.6./home/byk/Code/getsentry/publish-workspace-acceptance/scripts/generate-publish-issue-title-parser.js.