Dashboard › craft › Distillation
88949084-6e44-4c5e-b4a6-e5a878d1d5ab["lore_tm_v1_-h1YSIHscBi3dEEop0kJTDpZ5jWTIVSbxCphbo0fLFQ","lore_tm_v1_E-MW-Par1zdxWmp59nDiJ5ZOq8JKW9M_MHen7njKtJc","lore_tm_v1_hgIn_E1ilkECdn8rqWUCX-XQ6csbUVXIcKAuhrVouu4","lore_tm_v1__tVS4zPv-GB27u1R8pkdzeiY1sh19jsLZz_PmoPDzUQ","lore_tm_v1_AUTarzvXpfSdDF0PrwjsGu2FsK_mReckMi6n8CEeinM","lore_tm_v1_-7Qc2tPZnEO-bsn5llKvuUG26Vwv-0B-3n0zJIpm_cQ","lore_tm_v1_NIGcadzmWuwxUt4jVDQrDrCdUyVpK9CuKBplTMykGgs","lore_tm_v1_R-XFR4DMDkSNIQijZ43aUH0j2mQ08IaXNU63hALOQdk"]
Date: Aug 25, 2026
/home/byk/Code/getsentry/craft-workspace-action-propagation on branch feat/workspace-action-propagation, compared with origin/master; explicitly directed that no files be modified.action.yml and .github/workflows/release.yml; inspect relevant source and test context.workflow_dispatch) and reusable (workflow_call) forwarding; shell quoting/injection; publish-controller title grammar compatibility; targets and prepare workspace selection; workspace newline/unsafe-value failure before prepare side effects; dry-run behavior; and issue/state identity collision.publish: getsentry/repo/path@version; workspace form publish: getsentry/repo/path [workspace: <JSON string>] @version.file:line evidence, PASS/FAIL for each concern, testing gaps, a clear MERGE/DO-NOT-MERGE verdict, and “No rubber stamp.”/home/byk/Code/getsentry/craft-workspace-action-propagation contained 32 entries, including .github/, action.yml, src/, dist/, package.json, pnpm-lock.yaml, node_modules/, vitest.config.mts, and AGENTS.md..github/workflows/release.yml and action.yml; current branch was feat/workspace-action-propagation; compared commit identifier shown was 21270a1d12a60b461c51fba93bd076b90d9cf4af..github/workflows/release.yml had 9 insertions; action.yml had 30 insertions and 3 deletions; total 36 insertions and 3 deletions across 2 files..github/workflows/release.yml adds optional workspace input to workflow_dispatch, described as “Named Craft release workspace to prepare and publish.”.github/workflows/release.yml adds optional string workspace input to workflow_call, described as “Named Craft release workspace to prepare and publish,” and forwards it to the external-repository getsentry/craft@v2 “Prepare release” action step via workspace: ${{ inputs.workspace }}.action.yml sets WORKSPACE: ${{ inputs.workspace }} in the “Craft Prepare” step environment, rejects a workspace containing \n or \r with ::error::Workspace names cannot contain line breaks when creating a publish request. and exit 1, before the subsequent git remote set-head origin --auto command.action.yml “Read Craft Targets” sets WORKSPACE: ${{ inputs.workspace }}, initializes CRAFT_ARGS=(), conditionally assigns CRAFT_ARGS=(--workspace "$WORKSPACE") when nonempty, and invokes craft targets "${CRAFT_ARGS[@]}" | jq -r '.[]|" - [ ] \(.)"'.pnpm; never use npm or yarn.v22.12.0.pnpm install --frozen-lockfile.src/utils/publishState.ts: getPublishStateFilename(version, githubConfig, cwd, workspace?) isolates selected release-workspace state using workspace-${Buffer.from(workspace).toString('base64url')}-; GitHub-config filenames include publish-state-${owner}-${repo}-${shortCwdHash(cwd)}-${workspacePrefix}${safeVersion}.json, while non-GitHub filenames include publish-state-${cwdDigest}-${workspacePrefix}${safeVersion}.json.src/utils/helpers.ts: extractWorkspaceSelection() extracts --workspace before middleware/config access; supports --workspace foo and --workspace=foo; Node built-in argument parsing prevents --workspace --dry-run from being interpreted as a workspace name; --workspace=-foo is valid inline syntax, while --workspace --foo is not.--workspace --dry-run must never be mistaken for a workspace name.src/index.ts imports extractWorkspaceSelection and setActiveWorkspace; line 98 calls setActiveWorkspace(extractWorkspaceSelection(argv)) before yargs parsing because command builders may access configuration before middleware. The global workspace option is a string, described as selecting a named workspace/release unit and required when config defines "workspaces"; environment source is CRAFT_WORKSPACE.src/utils/__tests__/helpers.test.ts covers --workspace foo, --workspace=foo, --workspace=-cli, CLI-over-environment precedence, repeated workspace flags using the last value, bare/final --workspace falling back to environment, --workspace --dry-run not consuming the following flag, and empty --workspace= falling back to environment.src/utils/__tests__/publishState.test.ts contains tests for getPublishStateFilename, including workspace-related filename distinctions; src/commands/publish.ts calls getPublishStatePath and reads/writes/removes the selected publish-state file.src/index.ts:44-50 defines global dry-run as a boolean-style option with default: process.env.DRY_RUN and description “Dry run mode: no file writes, commits, pushes, or API mutations.”src/index.ts:89-98 preprocesses process.argv.slice(2) through fixGlobalBooleanFlags(), then resolves active workspace from raw argv/environment before yargs command builders; comments state this is required because builders can validate workspace config before middleware.src/index.ts:100-134 configures yargs with .env('CRAFT'), registered prepare, publish, targets, config, artifacts, and changelog commands, global workspace string option at lines 124-130, strict commands, and .middleware(setGlobals).