Dashboard › craft › Distillation
081912b4-2cbf-4ec2-9da9-a738231ab197["lore_tm_v1_GDvCIEOmfQO8BeGHq81d6e6DapAG7kVRyQR8pd33qug","lore_tm_v1_scOV03RLxtdfl-ZJjchcCjYV8e6TcXMXgkBcHDxTuUQ","lore_tm_v1_AV1hcLi8GG5conymzFCRRkTmcMfd7rkL1lKp4n721-0","lore_tm_v1_jNrIE49XMvbsJoka4jTNB6kdh8Dx5UCQULzexHbbaCs","lore_tm_v1_rgFQvLkA0179z52FP6rJS3KstDO_vK0h0T16Dqwy71c","lore_tm_v1_Bd8ODw-NkQWHGXQyB1IF9ZPbrgrpGGaBeK82oJYlXG0","lore_tm_v1_N5TSlFJftDy2pRkLfQ3Oh3ygC6i-Ymun9uvWnFKhl9A"]
Date: Aug 27, 2026
57 workspace-related matches in publish-workspace-acceptance, including src/modules/details-from-context.js, src/modules/__tests__/details-from-context.js, src/modules/__tests__/publish-workflow.js, src/publish/inputs.js, src/publish/update-issue.js, and src/publish/post-result.js.ci-ready label..github/workflows/publish.yml is triggered by labeled issue events and includes a “Waiting for CI” job. It adds ci-pending; if the issue already has ci-failed, it handles that state; it sets the repository variable CI_POLLER_HAS_PENDING to "true"; and it uses SENTRY_INTERNAL_APP_PRIVATE_KEY to obtain a token..github/workflows/publish.yml has a publish-job gate requiring the event label to be ci-ready and the issue’s labels to contain ci-ready. Its comments explain that the poller removes ci-ready first so adding it creates a fresh labeled event, preventing a race with the waiting-for-CI workflow..github/workflows/publish.yml runs node .__publish__/src/publish/inputs.js and node .__publish__/src/publish/post-workflow-details.js, determines the target-repository checkout branch from parsed inputs, checks out the target repository with fetch-depth: 0, and supplies Craft target/workspace/state environment values including CRAFT_PUBLISH_TARGETS_JSON, CRAFT_MERGE_TARGET, CRAFT_PUBLISH_STATE_GITHUB_REPO, and CRAFT_PUBLISH_WORKSPACE..github/workflows/publish.yml reconstructs Craft publish-state filenames in a .craft-state/craft/ directory using a SHA-1-derived cwd hash (sha1sum | cut -c1-12); state filenames incorporate the CRAFT_PUBLISH_WORKSPACE when nonempty. Tests expect the monorepo example .craft-state/craft/publish-state-getsentry-toolkit-21cf7beaeda4-workspace-Y2xp-1.2.3.json..github/workflows/publish.yml exposes publishing credentials to the release step through secrets: NPM_TOKEN, GEM_HOST_API_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, NUGET_API_TOKEN, POWERSHELL_API_KEY, GPG_PRIVATE_KEY, GPG_PASSPHRASE, OSSRH_USERNAME, OSSRH_PASSWORD, PUBDEV_ACCESS_TOKEN, PUBDEV_REFRESH_TOKEN, and VERCEL_TOKEN; it exposes VERCEL_ORG_ID from repository variables..github/workflows/publish.yml runs node .__publish__/src/publish/update-issue.js with PUBLISH_ARGS, CRAFT_STATE_FILE_PATH, and GITHUB_TOKEN to update completed targets and remove the label. On cancellation it runs node .__publish__/src/publish/post-result.js cancelled; on failure it runs post-result.js failure; on success it runs post-result.js success.craft-workspace-action-propagation/action.yml creates/updates publish-issue bodies containing Requested by: @${GITHUB_ACTOR}, Merge target: ${MERGE_TARGET}, changes and check-runs URLs, accepted-label approval guidance, ### Targets, and the instruction: “Checked targets will be skipped (either already published or user-requested skip). Uncheck to retry a target.”craft-workspace-action-propagation/action.yml:348-362, a matching existing publish issue is refreshed using gh issue edit "$existing_issue_number" -R "$PUBLISH_REPO" --body "$body" while preserving checked target states; permission failure logs a warning and leaves the existing issue unchanged. Otherwise it creates an issue with gh issue create -R "$PUBLISH_REPO" --title "$title" --body "$body" and outputs issue_url.src/config.ts:setActiveWorkspace(name) sets _activeWorkspaceName, invalidates _configCache and _globalGitHubConfigCache, and must be called before initial configuration resolution; getActiveWorkspace() returns the selected workspace name or undefined.src/config.ts:resolveWorkspaceConfig() throws ConfigurationError for an unknown workspace, including available workspace names when present. Workspace release fields replace top-level values wholesale rather than deep-merging; workspaces and minVersion are omitted from the resolved config. The special github merge adopts the merged config only if it has both owner and repo; otherwise it deletes github so git-remote detection can still supply owner/repo.src/schemas/project_config.ts defines GitHubGlobalConfigSchema with required owner and repo plus optional projectPath. WorkspaceSchema makes this GitHub configuration partial, allowing a workspace to override only projectPath, owner, or repo while inheriting other top-level values.CraftProjectConfigSchema supports named independently-versioned workspaces via z.record(z.string(), WorkspaceSchema).optional(). When workspaces are present, a release must select one with --workspace <name> or CRAFT_WORKSPACE; when absent, Craft retains backward-compatible single implicit top-level release-unit behavior.src/schemas/project_config.ts include github, targets, preReleaseCommand, postReleaseCommand, releaseBranchPrefix, changelog, deprecated changelogPolicy, requireNames, statusProvider, artifactProvider, versioning, and noMerge. noMerge means not merging the release branch after publishing and defaults to true for compiled Node.js GitHub Actions with a dist/ folder.VersioningPolicy values are auto, manual, and calver; CalVerConfigSchema supports optional numeric offset (documented default 14) and optional format (documented default %y.%-m). CraftProjectConfigSchema.minVersion must match /^\d+\.\d+\.\d+.*$/.