Dashboard › craft › Distillation
b36f6613-9574-45d5-9053-24b736a7e579["lore_tm_v1_cKH7JLb7EttHI8M-v9TI3o7lgQ5VcB70drKdBwXapqc","lore_tm_v1_saRBOeoKr8I1UDNvHZPCq7EcR3kDlvH-pk6ktObObkA","lore_tm_v1_Xh2v6_sHooYBbQIzSjhe00LQD0O3tHtsR9rTiAmS348","lore_tm_v1_v9ApsmsOXgLzaqHisD3sxlLgWHvIrwsRgLu-mHe7fsA","lore_tm_v1_P5KuPQ0QAEuxcQZ2v6N2m3YmYf9X_1Z2QIDgQsKONW0","lore_tm_v1_Qu6mvZEzMC2ss_ZuD33TXpWh42WoYiXsltiVfXorbk4"]
Date: Aug 25, 2026
craft prepare/craft publish, especially inputs/outputs, issue title/body/labels/state keys, scripts/workflows, and tests; return a concise file:line-cited propagation map for a new workspace selection, including backward-compatibility risks and exact likely touchpoints./home/byk/Code/getsentry/craft/, including root files pnpm-lock.yaml, package.json, action.yml, build.mjs, tsconfig.build.json, tsconfig.json, eslint.config.mjs, .prettierrc.yml, .craft.yml; source entry/config files src/index.ts, src/config.ts, src/logger.ts, src/instrument.ts, src/schemas/project_config.ts; commands src/commands/publish.ts, src/commands/prepare.ts, src/commands/changelog.ts, src/commands/targets.ts, src/commands/config.ts, src/commands/artifacts.ts, src/commands/artifacts_cmds/list.ts, src/commands/artifacts_cmds/download.ts; artifact providers src/artifact_providers/none.ts, src/artifact_providers/gcs.ts, src/artifact_providers/base.ts, src/artifact_providers/github.ts; utilities src/utils/publishState.ts, helpers.ts, git.ts, releaseCommandEnv.ts, system.ts, gpg.ts, env.ts, dynamicLinkerEnv.ts, changelog.ts, version.ts, symlink.ts, packagePath.ts, githubApi.ts, errors.ts, dryRun.ts, checksum.ts, calver.ts, awsLambdaLayerManager.ts, autoVersion.ts, async.ts, registry.ts, files.ts, workspaces.ts, versionBump.ts, tracing.ts, strings.ts, objects.ts, import-meta-url.js, gcsApi.ts, filters.ts, detection.ts.src/commands/__tests__/changelog-versioning-policy.test.ts, prepare.test.ts, publish.test.ts, targets.test.ts; utility tests src/utils/__tests__/publishState.test.ts, helpers.test.ts, version.test.ts, git.test.ts, system.test.ts, githubApi.test.ts, gcsAPI.test.ts, awsLambdaLayerManager.test.ts, gpg.test.ts, env.test.ts, changelog-utils.test.ts, changelog-generate.test.ts, changelog-extract.test.ts, dryRun.test.ts, registry.test.ts, workspaces.test.ts, symlink.test.ts, strings.test.ts, packagePath.test.ts, objects.test.ts, filters.test.ts, files.test.ts, detection.test.ts, changelog-semver-warning.test.ts, changelog-file-ops.test.ts, calver.test.ts, autoVersion.test.ts, async.test.ts.src/utils/__tests__/fixtures/changelog.ts, changelog-mocks.ts; src/utils/__fixtures__/gcsFileObj.ts, gcsApi.ts; workspace fixtures src/utils/__fixtures__/workspaces/pnpm-workspace/pnpm-workspace.yaml, pnpm-workspace/package.json, pnpm-workspace/packages/pkg-a/package.json, pnpm-workspace/packages/pkg-b/package.json, npm-workspace/package.json, npm-workspace/packages/pkg-a/package.json, npm-workspace/packages/pkg-b/package.json.action.yml: input publish_repo is defined at lines 21–22 as the repository for publish issues in owner/repo format; output issue_url is defined at lines 64–66 and maps to ${{ steps.request-publish.outputs.issue_url }}.action.yml:78-79: before proceeding, the Action cancels a release when FORCE_INPUT != 'true' and gh issue list -l "$BLOCKER_LABEL_INPUT" -s open finds open release-blocking issues; it emits ::error::Open release-blocking issues found (label: $BLOCKER_LABEL_INPUT), cancelling release....action.yml:182: Action invokes craft prepare "${VERSION_ARG[@]}" "${CRAFT_ARGS[@]}".action.yml:194-196: Action writes multiline targets to $GITHUB_OUTPUT using targets<<EOF, target contents, then EOF.action.yml:198-199: publish-request step is named Request publish with id: request-publish.action.yml:213: PUBLISH_REPO resolves as ${{ inputs.publish_repo || format('{0}/publish', github.repository_owner) }}.action.yml:227: when changelog input/file data is unavailable, the publish issue is created without a changelog section.action.yml:233-238: GitHub issue body size is treated as approximately 65,536 characters; MAX_CHANGELOG_CHARS=60000, and excess changelog text is truncated with \n\n---\n*Changelog truncated for issue body.*.action.yml:241: publish issue title key is title="publish: ${GITHUB_REPOSITORY}${SUBDIRECTORY}@${RESOLVED_VERSION}".action.yml:243-254: existing publish requests are identified by exact title among open issues. gh -R "$PUBLISH_REPO" issue list --json title,url,number,body is filtered by jq; list ordering is most-recent-first and the first matching title is selected. Existing issue fields extracted: url, number, and body.action.yml:310: publish issue approval is controlled by assigning the accepted label.action.yml:316: target checkbox state represents publish state: checked targets are skipped because they were already published or user-requested skip; unchecking retries a target.action.yml:319-327: if an exact-title existing issue is found, Action updates its body while preserving checked target states. gh issue edit "$existing_issue_number" -R "$PUBLISH_REPO" --body "$body" failures are treated as permissions failures; it warns and uses the existing issue as-is, then sets issue_url=${existing_issue_url} in $GITHUB_OUTPUT.action.yml:329-332: without an existing issue, Action creates one via gh issue create -R "$PUBLISH_REPO" --title "$title" --body "$body", emits a creation notice, and writes issue_url=${issue_url} to $GITHUB_OUTPUT.src/index.ts:18-19,91-92: CLI imports ./commands/prepare and ./commands/publish and registers both commands.src/config.ts:255,502,571: configuration documentation includes behavior when supplied to craft prepare, whether a release branch should be merged after publishing, and custom expansion logic such as npm workspace expansion.src/schemas/project_config.ts:187: project configuration schema documents an option not to merge the release branch after publishing.src/utils/publishState.ts:2-16,33-34: publish state is deliberately stored outside the published repository because craft publish writes a JSON file listing targets; keeping it in the project allowed a malicious/pre-seeded state file to mark targets published. getsentry/publish runs inside Docker; the utility is exported for tests and a possible publish-workflow helper scripts/print-publish-state-path.ts.src/utils/publishState.ts:68-96: publish-state filenames are built as publish-state-<owner>-<repo>-<sha1(cwd)[:12]>-<version>.json when GitHub config is available, otherwise publish-state-<sha256(cwd)[:16]>-<version>.json; getPublishStatePath returns the full absolute state-file path.src/commands/publish.ts:50,55-56,68,84,100,124: publish imports getPublishStatePath; command syntax is publish NEW-VERSION, aliases pp and publish; options include version, source revision (Git SHA or tag if not release-branch head), no post-publish merge, and required new-version.src/commands/publish.ts:131-152: PublishOptions includes revision, one-or-more target selection, new version, no-merge, no-download-removal, no-release-branch-removal, and a published state object.src/commands/publish.ts:175-198: publishToTarget(target, version, revision) logs === Publishing to target: ..., calls target.publish(version, revision), and traces operation craft.target.publish.src/commands/publish.ts:557-562: publishMain(argv: PublishOptions) is the body of the publish command and loads publishing configuration.src/commands/publish.ts:615: publish emits the compatibility/error prompt Have you run \craft prepare` for version ${newVersion}?` when prerequisite release state is absent.src/commands/publish.ts:642: resolved revision is debug-logged.src/commands/publish.ts:671: publish expands npm workspace targets into individual package targets.src/commands/publish.ts:674-690: publish resolves global GitHub configuration before state-path construction; getPublishStatePath is called for the version and the resulting path is logged.src/commands/publish.ts:694-704: legacy repo-local state filename is .craft-publish-${newVersion}.json; if present, Craft warns that state now belongs at publishStateFile and workflow pre-seeding must be updated to the new location.src/commands/publish.ts:708-722: publish resumes if publishStateFile exists, otherwise initializes publishState = { published: Object.create(null) }; every key in publishState.published is logged as skipped and removed from targetsToPublish.src/commands/publish.ts:754-760: before publishing, state-file parent directories are created; after each successful publishToTarget, publishState.published[BaseTarget.getId(target.config)] = true and the state JSON is synchronously written.src/commands/publish.ts:812-853: publish has distinct handling for fully-published releases and post-publish merge/push failures; long-running publishes over 1 hour may have expired authentication tokens. It reports when all targets published successfully but merge or push failed.src/commands/publish.ts:869-878: publish attempts to unlink the temporary publish-state file after completing and logs Version ${newVersion} has been published!.src/commands/publish.ts:881-883: when only specific targets were published, the release branch is not merged; user is instructed to run craft publish ${newVersion} --target none after all targets publish.src/commands/publish.ts:897-899: publish command wraps publishMain in tracing with name: 'craft.publish' and op: 'craft.publish'.src/utils/helpers.ts:8-13,95,148,182: helpers define maximum byte size for values passed through GITHUB_OUTPUT, address GitHub’s approximately 65,536-character issue-body limit, access process.env.GITHUB_OUTPUT, support links from truncated issue output to source, and handle content embedded in a GitHub issue body.action.yml input path defaults to '.' (line 33), uses ${{ inputs.path }} as the craft prepare step working directory (line 187), and includes a Craft version input described as tag or "latest" (line 40).sha mapped from ${{ steps.craft.outputs.sha }} (line 54), and changelog mapped from ${{ steps.craft.outputs.changelog }} (line 60).origin/HEAD, may set CRAFT_ARGS=(--config-from "$MERGE_TARGET") (line 173), and installs Craft from either a craft-binary artifact or release URL with fallback to latest when the requested version has no release (lines 95-153).RELEASE_BRANCH: ${{ steps.craft.outputs.branch }} (line 208); supports resolving "self" to the current repository (line 215); reads CHANGELOG_FILE only when nonempty and present (line 229); extracts prior checked targets from existing body between ### Targets and Checked targets will be skipped (line 264), then preserves checked state for targets retained in the refreshed issue (lines 271-278).<summary>📋 Changelog</summary> (line 293), a compare link [View changes](https://github.com/${GITHUB_REPOSITORY}/compare/${RELEASE_PREVIOUS_TAG}...${RELEASE_BRANCH}) (line 307), and ${TARGETS} checkbox content (line 314).