Dashboard › craft › Distillation
9a17d662-e80b-4159-93c1-bdd3d1540b22["lore_tm_v1_8i3Aa2ZBDQd6BcCb3U2FUqKZY_xVAdJcndrkACOY7Mg","lore_tm_v1_rTfxmWq5DhwEbJVqQZ5A_Sh83dM2pvpJOQXwnTXRmHk","lore_tm_v1_MIU1pBJYEQ-vpxbNry83gzKfNOVkIC0S8UfauqnzfLs","lore_tm_v1_RLJR8DB9FE2friCmvd1wZ1QKhd4SlxpPtCJD5WWdkko","lore_tm_v1_LhVQtiZkrf91K1Jn1-Deeto8mpNOyORDOIouLSguNG0"]
Date: Aug 24, 2026
minVersion side.--workspace --dry-run) must never be mistaken for a workspace name.getConfiguration() requires explicit workspace selection through --workspace <name> or CRAFT_WORKSPACE whenever config.workspaces is defined; it lists available workspace names and does not implicitly select the first workspace.isVersionGteMinVersion(config.minVersion, WORKSPACES_MIN_VERSION); configurations using workspaces throw ConfigurationError unless minVersion >= WORKSPACES_MIN_VERSION."2.27.0-dev.0" to "2.29.0-dev.0". For a prerelease current version, effectiveCurrentVersion removes both pre and build; otherwise it calls withoutBuildMetadata(currentVersion). It compares this against withoutBuildMetadata(minVersion) using versionGreaterOrEqualThan(...).X.Y.Z satisfy configuration minimum versions up to X.Y.Z; configured minVersion prerelease/build metadata is not relaxed, but build metadata is stripped before comparison.extractWorkspaceSelection() tests ensure a bare --workspace does not consume a following option as its value: ['publish', '--workspace', '--dry-run'] falls back to CRAFT_WORKSPACE: 'mcp', or returns undefined with NO_ENV.validateConfiguration() tests: a workspace configuration with minVersion: '2.27.0', top-level GitHub { owner: 'getsentry', repo: 'toolkit' }, workspace cli overriding releaseBranchPrefix: 'release/cli', github.projectPath: 'cli', and GitHub target tagPrefix: 'cli@', plus workspace mcp with GitHub target tagPrefix: 'mcp@', validates unchanged.github may be partial: { workspaces: { cli: { github: { projectPath: 'cli' } } } } does not require owner or repo, because those fields are inherited./home/byk/Code/getsentry/craft-workspaces-schema/package.json (129 lines): package is @sentry/craft, version 2.29.0-dev.0, description "The universal sentry workflow CLI", repository https://github.com/getsentry/craft, MIT license, and binaries craft and sentry-craft both map to dist/craft./home/byk/Code/getsentry/craft-workspaces-schema/package.json scripts include build:fat: "tsc -p tsconfig.build.json", build:watch: "tsc -p tsconfig.build.json --watch", build: "node build.mjs", precli: "pnpm build", cli: "node -r source-map-support/register dist/craft", lint: "eslint --cache --cache-strategy content", test: "vitest run", and typecheck: "tsc --noEmit"./home/byk/Code/getsentry/craft-workspaces-schema/package.json pins Volta node: "24.18.0" and pnpm: "10.27.0"; runtime dependencies are @vercel/client: "^18.2.5", fastest-levenshtein: "^1.0.16", ignore: "^7.0.5", marked: "^17.0.1", p-limit: "^6.2.0", and semver: "^7.7.3".projectPath matches. Workspace GitHub merge behavior is documented in /home/byk/Code/getsentry/craft-workspaces-schema/src/config.ts:106-107: github is shallow-merged across owner, repo, and projectPath, allowing a workspace to override only projectPath while inheriting owner/repo./home/byk/Code/getsentry/craft-workspaces-schema/src/schemas/project_config.ts:46 defines projectPath: z.string().optional(). Its workspace-schema documentation around line 205 says workspaces can override only projectPath or owner/repo while inheriting the remaining GitHub fields./home/byk/Code/getsentry/craft-workspaces-schema/src/__tests__/config.test.ts has workspace GitHub inheritance tests around lines 272-276 (inherits owner/repo and overrides projectPath: 'cli'), line 290 (workspace mcp inherits base GitHub when it does not override projectPath), and lines 360-398 (workspace only sets github.projectPath without top-level GitHub).getConfiguration(), including /home/byk/Code/getsentry/craft-workspaces-schema/src/targets/github.ts:113,722; /home/byk/Code/getsentry/craft-workspaces-schema/src/commands/targets.ts:10; /home/byk/Code/getsentry/craft-workspaces-schema/src/commands/publish.ts:68,254,574; /home/byk/Code/getsentry/craft-workspaces-schema/src/commands/prepare.ts:704,819; and /home/byk/Code/getsentry/craft-workspaces-schema/src/commands/config.ts:11./home/byk/Code/getsentry/craft-workspaces-schema/src/__tests__/config.test.ts:351 notes that getConfiguration().targets is used to compute --target choices when a workspace is selected./home/byk/Code/getsentry/craft-workspaces-schema/src/commands/targets.ts (21 lines). The targets command has description "List defined targets as JSON array"; its handler() gets getConfiguration().targets || [], expands them with await expandWorkspaceTargets(definedTargets), filters targets whose names occur in getAllTargetNames(), maps them through BaseTarget.getId, and prints formatJson(allowedTargetNames).