Dashboard › craft › Session 1XK62bR1Yejj
1XK62bR1YejjShDh0Read-only investigation in /home/byk/Code/getsentry/publish-workspace-acceptance. Do not edit files. Map the exact smallest safe change needed to classify a compact single trailing title segment as a Craft workspace only after checkout of the CI-approved release revision. Inspect .github/workflows/publish.yml and ci-poller.yml plus relevant JS inputs/parser/tests. Identify how publish workflow can obtain exact approved SHA without changing issue body, any necessary workflow reordering, exact files/line ranges, and concrete regression tests. Treat legacy titles with no new fields as legacy path-only. Return a concise adversarial design report with file:line evidence and blockers; no implementation.
<path>/home/byk/Code/getsentry/publish-workspace-acceptance</path> <type>directory</type> <entries> .eslintrc.js .git .github/ .gitignore AGENTS.md auto-approve-repos.txt docs/ LICENSE node_modules/ package.json pnpm-lock.yaml README.md src/ vitest.config.js yarn.lock (15 entries) </entries>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/AGENTS.md</path> <type>file</type> <content> 1: # AGENTS.md - Coding Agent Guidelines 2: 3: This document provides guidelines for AI coding agents working in this repository. 4: 5: ## Project Overview 6: 7: This is the **Sentry Publish Repository** - a GitHub Actions-based approval system for publishing releases across multiple Sentry projects using [Craft](https://github.com/getsentry/craft). It's a pure JavaScript (Node.js 24.0.0) project using CommonJS modules. 8: 9: ## Build/Lint/Test Commands 10: 11: ### Package Manager 12: 13: - **Yarn 1.22.22** (classic) - Do NOT use npm 14: - Version management via Volta (pinned in package.json) 15: 16: ### Commands 17: 18: ```bash 19: # Install dependencies 20: yarn install 21: 22: # Run all tests 23: yarn test 24: 25: # Run tests in watch mode 26: yarn test:watch 27: 28: # Run a single test file 29: yarn test src/modules/__tests__/update-issue.js 30: 31: # Run tests ...
No files found
No files found
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github</path> <type>directory</type> <entries> CODEOWNERS workflows/ (2 entries) </entries>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows</path> <type>directory</type> <entries> auto-approve.yml ci-poller.yml cocoapods-keepalive.yml publish.yml test.yml (5 entries) </entries>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src</path> <type>directory</type> <entries> libs/ modules/ publish/ (3 entries) </entries>
/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/update-issue.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/post-workflow-details.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/post-result.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/inputs.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/update-issue.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/process-end-state.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/post-workflow-details.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/details-from-context.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/publish-workflow.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/update-issue.js /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/process-end-state.js /home/byk/Code/getsentry/publish-wo...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/publish.yml</path>
<type>file</type>
<content>
1: name: Publish
2: on:
3: issues:
4: types: [labeled]
5:
6: concurrency:
7: # Use the issue title (e.g. "publish: getsentry/foo@1.2.3") so duplicate
8: # issues for the same repo@version share a concurrency group.
9: group: ${{ github.event.issue.title }}
10: cancel-in-progress: false
11:
12: permissions:
13: contents: read
14: issues: write
15: packages: write
16:
17: jobs:
18: # When accepted is added to a publish issue:
19: # - Add ci-pending (and remove ci-failed if retrying)
20: # - Enable the poller via CI_POLLER_HAS_PENDING=true
21: # - Comment on the issue
22: # - Trigger the poller immediately so we don't wait for the next cron tick
23: # The publish job below requires ci-ready, so it will not fire until the
24: # poller flips ci-pending → ci-ready (which also prevents publishing without
25: # CI ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/ci-poller.yml</path> <type>file</type> <content> 1: name: CI Status Poller 2: 3: on: 4: schedule: 5: - cron: "*/5 * * * *" 6: workflow_dispatch: 7: inputs: 8: attempt: 9: description: Self-dispatch attempt counter (internal use) 10: required: false 11: default: "0" 12: 13: permissions: 14: contents: read 15: issues: read 16: 17: jobs: 18: check-ci: 19: runs-on: ubuntu-latest 20: environment: production 21: # Skip entirely (no runner provisioned) when there's nothing to check. 22: # Set to "true" by ci-pending.yml, reset to "false" here when done. 23: # Always allow workflow_dispatch for manual recovery. 24: if: vars.CI_POLLER_HAS_PENDING == 'true' || github.event_name == 'workflow_dispatch' 25: concurrency: 26: group: ci-status-poller 27: cancel-in-progress: false 28: steps: 29: # sentry-internal-app token ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/inputs.js</path>
<type>file</type>
<content>
1: const github = require('@actions/github');
2: const core = require('@actions/core');
3: const { detailsFromContext } = require('../modules/details-from-context');
4:
5: async function inputs() {
6: const result = await detailsFromContext({
7: context: github.context,
8: });
9: core.setOutput('result', result);
10: }
11:
12:
13: inputs();
(End of file - total 13 lines)
</content>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/details-from-context.js</path>
<type>file</type>
<content>
1: /**
2: * Matches the entire "Targets" section of a github publish issue body.
3: */
4: const TARGETS_SECTION_PARSER_REGEX =
5: /^(?!### Targets$\s)(?: *- \[[ xX]\] \S+\s*$(?:\r?\n)?)+/m;
6:
7: /**
8: * Matches all targets of a github publish issue body in a section that was already matched and extracted with `TARGETS_PARSER_REGEX`.
9: * The "id" of the targets is captured within a capture group.
10: */
11: const TARGETS_PARSER_REGEX = /^\s*- \[[ x]\] (\S+)/gim;
12:
13: /**
14: * Matches checked targets of a github publish issue body in a section that was already matched and extracted with `TARGETS_PARSER_REGEX`.
15: * The "id" of the targets is captured within a capture group.
16: */
17: const CHECKED_TARGETS_PARSER_REGEX = /^\s*- \[x\] (\S+)/gim;
18:
19: async function detailsFromContext({ context }) {
20: if (!context || ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/details-from-context.js</path>
<type>file</type>
<content>
1: import { test, expect } from "vitest";
2:
3: const { detailsFromContext } = require("../details-from-context.js");
4:
5: const inputsArgs = {
6: context: {
7: repo: { owner: "getsentry", repo: "publish" },
8: payload: {
9: issue: {
10: number: "223",
11: title: "publish: getsentry/sentry@21.3.1",
12: body: `
13: Requested by: @BYK
14:
15: Merge target: custom-branch
16:
17: Quick links:
18: - [View changes](https://github.com/getsentry/sentry/compare/21.3.0...refs/heads/releases/21.3.1)
19: - [View check runs](https://github.com/getsentry/sentry/commit/7e5ca7ed5581552de066e2a8bc295b8306be38ac/checks/)
20:
21: Assign the **accepted** label to this issue to approve the release. ...
M package.json ?? pnpm-lock.yaml feat/workspace-acceptance b658ffa0299fedf78c9dd9a2121cd740691ca157 fix: validate publish workspace JSON
b658ffa (HEAD -> feat/workspace-acceptance, origin/feat/workspace-acceptance) fix: validate publish workspace JSON 33de3f1 feat: accept workspace publish requests 83d210b (origin/main, origin/HEAD, opencode/tidy-orchid, main) build(deps): bump js-yaml from 4.3.0 to 4.3.1 (#9174) 5268a23 feat: Add Vercel creds 92eba3f feat: Add CLOUDFLARE_API_TOKEN (#9122) ada6147 build(deps): bump js-yaml from 4.1.1 to 4.3.0 (#8731) a4f961a fix: Add GITHUB_API_TOKEN for commit-on-git target (#9069) bf10f82 build(deps): bump postcss from 8.5.15 to 8.5.23 (#9017) 837edc0 docs: fix possessive apostrophe placement (#9015) 4da4a25 chore: replace deprecated trimRight() with trimEnd() (#9012) 22fd64d docs: fix typo 'acces' -> 'access' (#9011) 24b9ce3 docs: fix missing article in rfc.md (#9014) b658ffa fix: validate publish workspace JSON .github/workflows/cocoapods-keepalive.yml | 2 +- README.md | 5 ++ docs/publish-issue-format.md | 81 ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/docs/publish-issue-format.md</path> <type>file</type> <content> 1: # Publish Issue Format 2: 3: The Publish workflow treats a publish issue as a release request. The title identifies 4: the release; the body supplies the merge target and selected targets. Do not edit the 5: title by hand unless it remains valid under this format. 6: 7: ## Title 8: 9: Every title starts with `publish: `. 10: 11: Legacy releases without a workspace use this form: 12: 13: ```text 14: publish: getsentry/<repository><optional-path>@<version> 15: ``` 16: 17: Workspace releases use this form: 18: 19: ```text 20: publish: getsentry/<repository><optional-path> [workspace: <json-string>] @<version> 21: ``` 22: 23: Examples: 24: 25: ```text 26: publish: getsentry/sentry@21.3.1 27: publish: getsentry/toolkit/cli@1.2.3 28: publish: getsentry/toolkit/cli [workspace: "cli/v2"] @1.2.3 29: publish: getsentry/toolkit [workspace: "cli [preview] ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "publish",
3: "private": true,
4: "version": "0.0.1",
5: "description": "Approval-based publishing system for Sentry",
6: "main": "index.js",
7: "repository": "git@github.com:getsentry/publish.git",
8: "author": "Sentry Open Source <oss@sentry.io>",
9: "license": "Apache-2.0",
10: "volta": {
11: "node": "24.0.0",
12: "yarn": "1.22.22"
13: },
14: "resolutions": {
15: "undici": "^6.23.0"
16: },
17: "scripts": {
18: "test": "vitest run",
19: "test:watch": "vitest",
20: "lint": "eslint src .github --ignore-pattern '!.github'",
21: "prettier": "prettier --write src"
22: },
23: "devDependencies": {
24: "eslint": "^8.9.0",
25: "eslint-config-prettier": "^8.3.0",
26: "eslint-plugin-yml": "^0.13.0",
27: "peggy": "5.1.0",
28: "prettier": "^2.2.1",
29: "vitest": "^4.1.0"
30: },
31: ...
Found 100 matches (more matches available)
/home/byk/Code/getsentry/publish-workspace-acceptance/AGENTS.md:
Line 78: - **camelCase** for variables and functions: `detailsFromContext`, `publishRepo`
Line 97: const { detailsFromContext } = require("../modules/details-from-context");
/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/publish.yml:
Line 7: # Use the issue title (e.g. "publish: getsentry/foo@1.2.3") so duplicate
Line 33: && startsWith(github.event.issue.title, 'publish: ')
Line 98: publish:
Line 166: echo "target_repo_branch=$MERGE_TARGET" >> "$GITHUB_OUTPUT"
Line 181: ref: ${{ steps.target-repo-branch.outputs.target_repo_branch || ''}}
Line 194: CRAFT_PUBLISH_WORKSPACE: ${{ fromJSON(steps.inputs.outputs.result).workspace || '' }}
Line 202: # `/github/workspace/__repo__/<path>` inside the container;
Line 204: # (mapped to `/github/workspace/.craft-state` in the
...
commit 33de3f1df5bdb9a6a480e9217d566df7b5a48b8e
Author: Burak Yigit Kaya <byk@sentry.io>
AuthorDate: Wed Aug 26 14:15:22 2026 +0000
Commit: Burak Yigit Kaya <byk@sentry.io>
CommitDate: Wed Aug 26 14:15:22 2026 +0000
feat: accept workspace publish requests
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index cff6bc3..c283b79 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -184,12 +184,14 @@ jobs:
fetch-depth: 0
- name: Set targets
+ id: craft-state
shell: bash
if: fromJSON(steps.inputs.outputs.result).targets
env:
CRAFT_PUBLISH_REPO: ${{ fromJSON(steps.inputs.outputs.result).repo }}
CRAFT_PUBLISH_PATH: ${{ fromJSON(steps.inputs.outputs.result).path }}
CRAFT_PUBLISH_VERSION: ${{ fromJSON(steps.inputs.outputs.result).version }}
+ CRAFT_PUBLISH_WORKSPACE: ${{ fromJSON(steps.inputs.outputs.result).workspace || '' }}
...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/publish-workflow.js</path>
<type>file</type>
<content>
1: import { spawnSync } from "child_process";
2: import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "fs";
3: import { tmpdir } from "os";
4: import { join } from "path";
5:
6: import { afterEach, expect, test } from "vitest";
7:
8: const temporaryDirectories = [];
9:
10: function getSetTargetsScript() {
11: const workflow = readFileSync(
12: join(__dirname, "../../../.github/workflows/publish.yml"),
13: "utf8"
14: );
15: const section = workflow.match(
16: / {6}- name: Set targets[\s\S]*? {8}run: \|\n(?<script>[\s\S]*?)\n {6}- uses: docker:\/\/getsentry\/craft:latest/
17: );
18: if (!section?.groups?.script) {
19: throw new Error("Missing Set targets workflow script");
20: }
21: return section.groups.script.replace(/^ {10}/gm, "");
22: }
23:
24: function runSetTargets({ path, repo, version, workspace = ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/auto-approve.yml</path>
<type>file</type>
<content>
1: name: auto-approve non-sdks
2: on:
3: issues:
4: types: [opened]
5:
6: permissions:
7: contents: read
8:
9: jobs:
10: auto-approve:
11: runs-on: ubuntu-latest
12: if: |
13: (github.actor == 'sentry-release-bot[bot]' || github.actor == 'getsantry[bot]') &&
14: startsWith(github.event.issue.title, 'publish: ')
15: steps:
16: - uses: actions/checkout@v4
17: with:
18: sparse-checkout: auto-approve-repos.txt
19: sparse-checkout-cone-mode: false
20: - name: Get auth token
21: id: token
22: uses: actions/create-github-app-token@v3
23: with:
24: client-id: ${{ vars.SENTRY_INTERNAL_APP_ID }}
25: private-key: ${{ secrets.SENTRY_INTERNAL_APP_PRIVATE_KEY }}
26: - name: Auto-approve if repo is in the list
27: env:
28: ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/post-workflow-details.js</path>
<type>file</type>
<content>
1: const postWorkflowDetails = require('../modules/post-workflow-details.js');
2: const {getGitHubToken} = require('../libs/github');
3: const github = require('@actions/github');
4:
5: const context = github.context;
6: const octokit = github.getOctokit(getGitHubToken());
7:
8: postWorkflowDetails({context, octokit});
(End of file - total 8 lines)
</content>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/post-workflow-details.js</path>
<type>file</type>
<content>
1: async function postWorkflowDetails({context, octokit}) {
2: const { repo: publishRepo, runId: run_id } = context;
3: const { number: issue_number } = context.payload.issue;
4:
5: const workflowInfo = (
6: await octokit.rest.actions.getWorkflowRun({
7: ...publishRepo,
8: run_id,
9: })
10: ).data;
11:
12: return octokit.rest.issues.createComment({
13: ...publishRepo,
14: issue_number,
15: body: `Publishing: [run#${run_id}](${workflowInfo.html_url})`,
16: });
17: }
18:
19: module.exports = postWorkflowDetails;
(End of file - total 19 lines)
</content>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/publish.yml</path>
<type>file</type>
<content>
1: name: Publish
2: on:
3: issues:
4: types: [labeled]
5:
6: concurrency:
7: # Use the issue title (e.g. "publish: getsentry/foo@1.2.3") so duplicate
8: # issues for the same repo@version share a concurrency group.
9: group: ${{ github.event.issue.title }}
10: cancel-in-progress: false
11:
12: permissions:
13: contents: read
14: issues: write
15: packages: write
16:
17: jobs:
18: # When accepted is added to a publish issue:
19: # - Add ci-pending (and remove ci-failed if retrying)
20: # - Enable the poller via CI_POLLER_HAS_PENDING=true
21: # - Comment on the issue
22: # - Trigger the poller immediately so we don't wait for the next cron tick
23: # The publish job below requires ci-ready, so it will not fire until the
24: # poller flips ci-pending → ci-ready (which also prevents publishing without
25: # CI ...
Found 6 matches
/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/update-issue.js:
Line 5: const context = github.context;
/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/post-workflow-details.js:
Line 5: const context = github.context;
/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/post-result.js:
Line 5: const context = github.context;
/home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/inputs.js:
Line 2: const core = require('@actions/core');
Line 7: context: github.context,
Line 9: core.setOutput('result', result);
Found 10 matches
/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/publish-workflow.js:
Line 11: const workflow = readFileSync(
Line 12: join(__dirname, "../../../.github/workflows/publish.yml"),
Line 15: const section = workflow.match(
Line 19: throw new Error("Missing Set targets workflow script");
Line 25: const directory = mkdtempSync(join(tmpdir(), "publish-workflow-test-"));
/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/update-issue.js:
Line 80: // This path comes from the workflow's secure state-file step output.
/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/process-end-state.js:
Line 102: "body": "Publish workflow cancelled. ([run logs](https://github.com/getsentry/sentry/actions/runs/1234?check_suite_focus=true#step:8))
/home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/post-workflow-details.js:
Line 5: const ...
No files found
Found 32 matches /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/details-from-context.js: Line 25: /^publish: (?:getsentry\/)?(?<repo>[A-Za-z0-9_.-]+)(?<path>\/[\w./-]+)?(?: \[workspace: (?<workspace>"(?:[^"\\]|\\.)*")\] )?@(?<version>[\w.+-]+)$/; /home/byk/Code/getsentry/publish-workspace-acceptance/src/modules/__tests__/details-from-context.js: Line 11: title: "publish: getsentry/sentry@21.3.1", Line 56: title: "publish: getsentry/sentry-forked-django-stubs@4.2.6+sentry1", Line 72: title: "publish: getsentry/sentry@21.3.1", Line 111: title: 'publish: getsentry/toolkit [workspace: "cli/v2"] @1.2.3', Line 134: 'publish: getsentry/toolkit [workspace: "cli [preview] \\"next\\""] @1.2.3', Line 153: 'publish: getsentry/toolkit [workspace: "cli-\u65e5\u672c\u8a9e"] @1.2.3', Line 170: title: "publish: getsentry/toolkit @1.2.3", Line 188: 'publish: ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/AGENTS.md</path> <type>file</type> <content> 1: # AGENTS.md - Coding Agent Guidelines 2: 3: This document provides guidelines for AI coding agents working in this repository. 4: 5: ## Project Overview 6: 7: This is the **Sentry Publish Repository** - a GitHub Actions-based approval system for publishing releases across multiple Sentry projects using [Craft](https://github.com/getsentry/craft). It's a pure JavaScript (Node.js 24.0.0) project using CommonJS modules. 8: 9: ## Build/Lint/Test Commands 10: 11: ### Package Manager 12: 13: - **Yarn 1.22.22** (classic) - Do NOT use npm 14: - Version management via Volta (pinned in package.json) 15: 16: ### Commands 17: 18: ```bash 19: # Install dependencies 20: yarn install 21: 22: # Run all tests 23: yarn test 24: 25: # Run tests in watch mode 26: yarn test:watch 27: 28: # Run a single test file 29: yarn test src/modules/__tests__/update-issue.js 30: 31: # Run tests ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/AGENTS.md</path>
<type>file</type>
<content>
241: ```javascript
242: const { repo, owner, issueNumber } = context;
243: ```
244:
245: ### Spread Operator for Object Merging
246:
247: ```javascript
248: const fullContext = { ...publishRepo, additionalProp: value };
249: ```
250:
251: ### Template Literals
252:
253: ```javascript
254: const message = `Release ${version} published successfully`;
255: ```
256:
257: ### Regular Expressions with Named Groups
258:
259: ```javascript
260: const PARSER_REGEX = /(?<name>\w+): (?<value>.+)/;
261: const match = text.match(PARSER_REGEX);
262: const { name, value } = match.groups;
263: ```
264:
265: ## GitHub Actions Context
266:
267: This codebase interacts heavily with GitHub Actions. ...
Found 5 matches
/home/byk/Code/getsentry/craft/action.yml:
Line 241: title="publish: ${GITHUB_REPOSITORY}${SUBDIRECTORY}@${RESOLVED_VERSION}"
Line 243: # Check if issue already exists by listing all open issues and filtering by exact title match.
Line 246: # the first match to handle the theoretical case of duplicate titles.
Line 247: existing_issue=$(gh -R "$PUBLISH_REPO" issue list --json title,url,number,body | jq -r --arg t "$title" '[.[] | select(.title == $t)] | first // empty')
Line 330: issue_url=$(gh issue create -R "$PUBLISH_REPO" --title "$title" --body "$body")
<path>/home/byk/Code/getsentry/craft/action.yml</path>
<type>file</type>
<content>
200: shell: bash
201: env:
202: # NOTE: CHANGELOG is read from a file to avoid E2BIG errors.
203: # Large changelogs (e.g. sentry's monthly releases) can exceed the ~2 MB
204: # Linux ARG_MAX limit when passed as an environment variable.
205: CHANGELOG_FILE: ${{ steps.craft.outputs.changelog_file }}
206: TARGETS: ${{ steps.craft-targets.outputs.targets }}
207: RESOLVED_VERSION: ${{ steps.craft.outputs.version }}
208: RELEASE_BRANCH: ${{ steps.craft.outputs.branch }}
209: RELEASE_SHA: ${{ steps.craft.outputs.sha }}
210: RELEASE_PREVIOUS_TAG: ${{ steps.craft.outputs.previous_tag || 'HEAD' }}
211: SUBDIRECTORY: ${{ inputs.path != '.' && format('/{0}', inputs.path) || '' }}
212: MERGE_TARGET: ${{ inputs.merge_target || '(default)' }}
213: PUBLISH_REPO: ${{ inputs.publish_repo || format('{0}/publish', ...
<path>/home/byk/Code/getsentry/publish-workspace-acceptance/.github/workflows/ci-poller.yml</path> <type>file</type> <content> 1: name: CI Status Poller 2: 3: on: 4: schedule: 5: - cron: "*/5 * * * *" 6: workflow_dispatch: 7: inputs: 8: attempt: 9: description: Self-dispatch attempt counter (internal use) 10: required: false 11: default: "0" 12: 13: permissions: 14: contents: read 15: issues: read 16: 17: jobs: 18: check-ci: 19: runs-on: ubuntu-latest 20: environment: production 21: # Skip entirely (no runner provisioned) when there's nothing to check. 22: # Set to "true" by ci-pending.yml, reset to "false" here when done. 23: # Always allow workflow_dispatch for manual recovery. 24: if: vars.CI_POLLER_HAS_PENDING == 'true' || github.event_name == 'workflow_dispatch' 25: concurrency: 26: group: ci-status-poller 27: cancel-in-progress: false 28: steps: 29: # sentry-internal-app token ...
Date: Aug 28, 2026 * 🔴 (10:33) User stated that the CI poller always adds the `ci-ready` label after checking CI; `waiting-for-ci` first removes `ci-ready`, ensuring a fresh labeled event triggers the publish workflow. * 🟡 (10:33) `src/modules/post-workflow-details.js` exports `async function postWorkflowDetails({context, octokit})`: it obtains `publishRepo` and `runId` from `context`, `issue_n…
Date: Aug 28, 2026 * 🔴 (10:10) User stated that new Craft-created publish requests always include the checkout repository identity. * 🟡 (10:10) `docs/publish-issue-format.md` defines publish-title formats: legacy `publish: getsentry/<repository><optional-path>@<version>` and workspace `publish: getsentry/<repository><optional-path> [workspace: <json-string>] @<version>`. Existing-issue parsing …
Date: Aug 28, 2026 * 🟡 (10:06) Read-only repository state showed modified `package.json`, untracked `pnpm-lock.yaml`, current branch `feat/workspace-acceptance`, and `HEAD` at `b658ffa0299fedf78c9dd9a2121cd740691ca157` (`fix: validate publish workspace JSON`). * 🟡 (10:06) Git history showed branch `feat/workspace-acceptance`/`origin/feat/workspace-acceptance` at `b658ffa fix: validate publish w…
Date: Aug 28, 2026 * 🟡 [requested-read-only-investigation] (09:49) User requested a read-only investigation in `/home/byk/Code/getsentry/publish-workspace-acceptance`; explicitly requested no file edits and no implementation. * 🟡 (09:49) User asked for the exact smallest safe change to classify a compact single trailing title segment as a Craft workspace only after checkout of the CI-approved r…