Dashboard › craft › Distillation
a41543f1-ee77-455c-83f4-cb7fe2ef8cb6["lore_tm_v1_m0ucHC1bKh_UGWByy4wrV9ZoTpqqk1C4EK72IUVwXyE","lore_tm_v1_wNCNgF8PBC1KJNdzTMRDc-nXczA9RoWKGlcQ_v8jCx0","lore_tm_v1_NJAQs37ljZgDlp9Msy7i6I8VYN_jCXuT3euu1KBOdZw","lore_tm_v1_GivhvbpniIUlOvbQ8YkGbsgxuYuW5TaPmaN45r1HdNM","lore_tm_v1_cKWcVc-6wDP16Lg_Vr8RUKQ2ysMI_zoW8IlTLXQYL6E","lore_tm_v1_xvW51xSpcmxW-2asB1-8cyG9L9a3yWyy8bxCw5vvwVc","lore_tm_v1_tK3NAbQKlPk6Ss_LsgVTIOkb4-eNKGGwbbVF8FSRRCU"]
Date: Aug 29, 2026
ci-ready revision before resolving a compact title, creating state, or starting Craft.ci-ready..github/workflows/publish.yml comments describe a waiting-for-ci flow that adds ci-pending and removes ci-failed when retrying; the publish job is named Publish a new version and is intended not to conflict with waiting-for-ci on the same event because the poller adds ci-ready.src/modules/publish-location.js exports resolvePublishLocation({ path, workspace, workspaceNames }): an explicit workspace returns { path, workspace }; otherwise it validates every discovered name with isWorkspaceName(), converts a single-segment ./<name> path into { path: ".", workspace: <name> } when <name> is in workspaceNames, and otherwise returns { path }.src/modules/publish-location.js rejects invalid workspace-discovery entries with Craft workspace discovery returned an invalid workspace list.; isWorkspaceName(name) requires a string other than __proto__ matching /^[A-Za-z0-9_.-]+$/.src/publish/resolve-location.js reads PUBLISH_ARGS as JSON and CRAFT_WORKSPACE_NAMES as JSON defaulting to "[]"; it rejects a non-array CRAFT_WORKSPACE_NAMES value with Craft workspace discovery returned an invalid workspace list., calls resolvePublishLocation({ path: input.path, workspace: input.workspace, workspaceNames }), and writes the result through core.setOutput("result", ...).craft-workspace-action-propagation/.github/workflows/image.yml runs on pull_request and pushes to master, release/**, and test-me-*; its image job runs on ubuntu-latest with contents: read and packages: write.image.yml checks out via actions/checkout@v6; builds ghcr.io/getsentry/craft-builder:latest with docker buildx build --target builder, optionally using --cache-from after docker pull -q; then builds ghcr.io/getsentry/craft:latest with SOURCE_COMMIT=$GITHUB_SHA and BUILDKIT_INLINE_CACHE=1.image.yml logs into ghcr.io as ${{ github.actor }} using ${{ secrets.GITHUB_TOKEN }} only when the event is not pull_request; it then pushes ghcr.io/getsentry/craft-builder:latest, tags ghcr.io/getsentry/craft:latest as ghcr.io/getsentry/craft:${GITHUB_SHA}, and pushes both the versioned tag and latest.