DashboardpublishDistillation

Distillation

ID: d59100b6-5cc0-40d2-b37f-6df409461e90
Session: 1V5okji1pQaM
Generation: 0
Tokens: 6911
R_compression: 63.372
C_norm: 0.001
Archived: No
Created: 2026-09-10 16:26:48
Source IDs:
["lore_tm_v1_bVVowaWJfPdWQXoU5-wg7ZJ7TNcKt3eL8W8Nd3HUQzg","lore_tm_v1_q_8szer1iK7jl7KFGSsk_GTIpdnPngSh4tG_90sk1Zc","lore_tm_v1_vpl49nGft6TV_D_Kd2plunktwNQtPgnSWshbSyo3HqY","lore_tm_v1_ze5Y_EFCWaCDO-LsMGqgOe8ksH_yn33jO3BoM7VBKh4","lore_tm_v1_cjmbMJZSUaQ45yLt-llI9XlABaFteIG91lbCu3X4naU","lore_tm_v1_0bka_wk87hPrJoyJItTFFHatzacDw1II3tU7TQ-0a_g","lore_tm_v1_gycY_pHSedjjvt7cmMFMg_CdqcsiSubz-Z7-5e3W8j8","lore_tm_v1_UhiGBDw4oUZw0fHUzkyav_l2ROQLkvsF7yonNk7YhY4","lore_tm_v1_62otrxV-RMXMsx3pq63hzmpvnOgOQGTtIotErbdNljY","lore_tm_v1_nLzYEb45LAXfPkrAsaqIfJsc1OrpZ6QRIp2CxMgxZfM","lore_tm_v1_vNgr-bnOVL_oM4tx4pLAIKr3BxcpcyPPgB7O6xqLi7I","lore_tm_v1_QfJOrO5nkZTrtzJm_-DVDwSo0sSVp20Vg06b67dWdPs","lore_tm_v1_md7qjhX5fNd7aW6btTXlc3XDtzESHUs-zwQJCoTQx4Y","lore_tm_v1_pEaJGHplno4xXatlOmJ3oUdvyu-_hDwlLsMcxby03E4","lore_tm_v1_DsHvdJcm7T5-ucT7nn8YcfYGSfw7PmEv8O7K85Kzy0g","lore_tm_v1_sGv6uTiJR8_nxNNX1bl6mNhBacEkeRdjcu_Ed8YdULg","lore_tm_v1_2_7hms5iwp6KsgwVws11tYQi0n45SuhteDSkxFJ4esI","lore_tm_v1_7LnuUKR7dMUhfp1qjN3dqfYm8_MFqG4JRGYUbdxaE0c","lore_tm_v1_adjuPJDuKagJT4PlPUIR1XmAT34Ehzm-57_x4Rnzd0Y","lore_tm_v1_4xCIqcJHsCbb1p0-_GSBl2Pyv8sBUG8_AeKOiecHods","lore_tm_v1_lcwgWZLnMfkwOpK8QsWh6fE9mYZl7GhYo0U-0wmMKv4","lore_tm_v1_oK-H-a3hX45t3TjIcAJVKr23orcdN9mmjqdd8af9maE","lore_tm_v1_DnnhgkVWYVUkfri72E4se0EgFQcAk6Xhy67-23-nmj0","lore_tm_v1_idqoCWVTgDpI_e0EnNWyV6lehLWRjeLg9ByqyIf0cyE","lore_tm_v1_5hEKAG-q6H1QPX0yVaJYYWGhQjFTqF-cyAh3QERaOy8"]

Observations

πŸ”΄ (16:05) /home/byk/Code/getsentry/publish/src/publish/validate-approval-attestation.js is a 158-line CommonJS executable module importing currentAcceptedEvent, currentCiReadyEvent, hasApprovalAttestation, hasCiReadyAttestation, and requestDigest from ../modules/approval-attestation.js. πŸ”΄ (16:05) src/publish/validate-approval-attestation.js:9-17 defines getGitHubResponse(path), which fetches https://api.github.com/${path} with headers Accept: "application/vnd.github+json", Authorization: \Bearer ${process.env.APPROVAL_TOKEN}`, and "X-GitHub-Api-Version": "2026-03-10". πŸ”΄ (16:05) src/publish/validate-approval-attestation.js:19-31definesgetIssue({ repository, issueNumber }); it requests repos/${repository}/issues/${issueNumber}, throws Could not retrieve issue #${issueNumber}: GitHub returned ${response.status}for a non-OK response, and otherwise returnsresponse.json(). πŸ”΄ (16:05) src/publish/validate-approval-attestation.js:33-54definesgetAllPages({ repository, issueNumber, resource }); it paginates repos/${repository}/issues/${issueNumber}/${resource}?per_page=100&page=${page}, accumulates records until a page has fewer than 100, and throws Could not retrieve ${resource} for issue #${issueNumber}: GitHub returned ${response.status}on failure. πŸ”΄ (16:05)src/publish/validate-approval-attestation.js:56-104definesvalidateApprovalAttestation(...); it concurrently retrieves the live issue, all "events", and all "comments", then derives currentAcceptedEvent(events)andcurrentCiReadyEvent(events). πŸ”΄ (16:05) validateApprovalAttestation()considers basic approval valid only if the issue remains"open", its title equals issueTitle, its live requestDigest(issue)equalsexpectedRequestDigest, it has an "accepted"label, a current accepted event exists, any suppliedexpectedAcceptedEventexactly matches that event’sactorandeventId, and hasApprovalAttestation()finds a matching attestation byattestationAuthor. πŸ”΄ (16:05) validateApprovalAttestation()returns the basic approval result directly when approval is false orrequireCiReadyAttestationis false. When CI-ready attestation is required, it additionally requires a current CI-ready event, a live"ci-ready"label, and a matchinghasCiReadyAttestation({ acceptedEvent: event, attestationAuthor, comments, ciReadyEvent, issue }). πŸ”΄ (16:05) src/publish/validate-approval-attestation.js:106-143requiresAPPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, APPROVAL_ISSUE_REPOSITORY, APPROVAL_ISSUE_TITLE, APPROVAL_ATTESTATION_AUTHOR, and EXPECTED_REQUEST_DIGEST, throwing No "<NAME>" environment variable foundif absent.EXPECTED_ACCEPTED_ACTORandEXPECTED_ACCEPTED_EVENT_IDform an optional expected event only when both exist;REQUIRE_CI_READY_ATTESTATION === "true"enables CI-ready validation. πŸ”΄ (16:05)src/publish/validate-approval-attestation.js:138-141throwsThe current accepted label has no matching approval attestationwhen validation fails. πŸ”΄ (16:05)src/publish/validate-approval-attestation.js:145-158runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports getAllPages, getGitHubResponse, getIssue, main, and validateApprovalAttestation. πŸ”΄ (16:05) /home/byk/Code/getsentry/publish/src/publish/current-accepted-event.jsis a 48-line CommonJS executable module importingcurrentAcceptedEventandgetAllPages. πŸ”΄ (16:05) src/publish/current-accepted-event.js:4-18definesgetCurrentAcceptedEvent({ getIssueEvents, issueNumber, repository }); it retrieves issue events, derives currentAcceptedEvent(...), throws The issue has no current accepted label eventif none exists, and otherwise returns the event. πŸ”΄ (16:05)src/publish/current-accepted-event.js:20-39requiresAPPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, and APPROVAL_ISSUE_REPOSITORY; its main()gets events throughgetAllPages({ repository, issueNumber, resource: "events" })and writesJSON.stringify(event)to stdout. πŸ”΄ (16:05)src/publish/current-accepted-event.js:41-48runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports { getCurrentAcceptedEvent, main }. πŸ”΄ (16:06) /home/byk/Code/getsentry/publish/src/publish/record-auto-approval-attestation.jsis a 66-line CommonJS executable module usingfs, createAutoApprovalAttestation, requestDigest, and getIssue. πŸ”΄ (16:06) src/publish/record-auto-approval-attestation.js:8-28definesrecordAutoApprovalAttestation(...); after fetching the issue, it requires the issue to remain "open", title to equal issueTitle, live requestDigest(issue)to equalexpectedRequestDigest, and issue.user?.loginto equalautoApprovercase-insensitively. Failure throwsThe automated approval request changed before approval; success returns createAutoApprovalAttestation({ autoApprover, issue }). πŸ”΄ (16:06) src/publish/record-auto-approval-attestation.js:30-57requiresGITHUB_OUTPUT, APPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, APPROVAL_ISSUE_REPOSITORY, APPROVAL_ISSUE_TITLE, AUTO_APPROVER, and EXPECTED_REQUEST_DIGEST, then appends auto_approval_attestation=${attestation}\ntoGITHUB_OUTPUT. πŸ”΄ (16:06) src/publish/record-auto-approval-attestation.js:59-66runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports { main, recordAutoApprovalAttestation }. πŸ”΄ (16:06) /home/byk/Code/getsentry/publish/src/publish/record-ci-ready-attestation.jsis a 114-line CommonJS executable module usingfs, approval-attestation helpers, and GitHub retrieval helpers from ./validate-approval-attestation.js. πŸ”΄ (16:06) src/publish/record-ci-ready-attestation.js:13-29definesgetAuthenticatedLogin(); it requests "user"throughgetGitHubResponse, throws Could not retrieve the authenticated user: GitHub returned ${response.status}on a non-OK response, requires the returnedloginto be a string or throwsGitHub returned no authenticated user login, and returns that login. πŸ”΄ (16:06) src/publish/record-ci-ready-attestation.js:31-62definesrecordCiReadyAttestation(...); it concurrently fetches the issue, issue events, and authenticated login (ciReadyActor), then derives the current accepted event. πŸ”΄ (16:06) recordCiReadyAttestation()requires the issue to remain"open", title and live request digest to match expected values, the issue to have an "accepted"label, a current accepted event to exist, and any suppliedexpectedAcceptedEventto exactly match itsactorandeventId. Failure throws The approval changed before CI could be marked ready; success returns createCiReadyAttestation({ acceptedEvent, ciReadyActor, issue }). πŸ”΄ (16:06) src/publish/record-ci-ready-attestation.js:64-101requiresGITHUB_OUTPUT, APPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, APPROVAL_ISSUE_REPOSITORY, APPROVAL_ISSUE_TITLE, and EXPECTED_REQUEST_DIGEST; EXPECTED_ACCEPTED_ACTORandEXPECTED_ACCEPTED_EVENT_IDform an optional expected event only when both exist; events are loaded viagetAllPages(..., resource: "events"); the resulting value is appended as ci_ready_attestation=${attestation}\ntoGITHUB_OUTPUT. πŸ”΄ (16:06) src/publish/record-ci-ready-attestation.js:103-114runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports getAuthenticatedLogin, main, and recordCiReadyAttestation. πŸ”΄ (16:06) /home/byk/Code/getsentry/publish/src/modules/details-from-context.jsis a 103-line CommonJS module using the generated publish-title parser plus helpers fromrelease-revision, publish-location, and publish-issue-validation. πŸ”΄ (16:06) src/modules/details-from-context.js:12-25defines target-list regexes:TARGETS_SECTION_PARSER_REGEX = /^(?!### Targets$\s)(?: - [[ xX]] \S+\s$(?:\r?\n)?)+/m, TARGETS_PARSER_REGEX = /^\s*- [[ x]] (\S+)/gim, and CHECKED_TARGETS_PARSER_REGEX = /^\s*- [x] (\S+)/gim. πŸ”΄ (16:06) src/modules/details-from-context.js:27-44definesparsePublishTitle(title); it parses with parsePublishIssueTitle, creates path = "." + titleDetails.path, and returns nullon parse errors or unlessisPublishRepository(titleDetails.repo), isReleaseVersion(titleDetails.version), and isPublishPath(path)all pass. πŸ”΄ (16:06)src/modules/details-from-context.js:46-95definesdetailsFromContext({ context }); it throws Issue context is not definedwhencontext.payload.issueis absent and emits specific errors for an invalid title, repository, version, or path. πŸ”΄ (16:06)detailsFromContext()setsdry_runto"1"when the issue has a"dry-run"label and""otherwise; computespathas"." + titleDetails.path; gets mergeTargetviagetReleaseRevisionDetails({ issueBody: context.payload.issue.body || "", repo: titleDetails.repo }); extracts checked target IDs from the matched targets section; and returns title details plus dry_run, merge_target (""whenmergeTarget === "(default)"), path, and optional targets. πŸ”΄ (16:06) src/modules/details-from-context.js:97-103exportsdetailsFromContext, TARGETS_SECTION_PARSER_REGEX, TARGETS_PARSER_REGEX, CHECKED_TARGETS_PARSER_REGEX, and parsePublishTitle. πŸ”΄ (16:06) The publish-title-related module files are /home/byk/Code/getsentry/publish/src/modules/publish-issue-validation.js, /home/byk/Code/getsentry/publish/src/modules/publish-issue-title.peggy, and /home/byk/Code/getsentry/publish/src/modules/publish-issue-title.js. πŸ”΄ (16:07) /home/byk/Code/getsentry/publish/src/modules/publish-issue-validation.jsis a 17-line CommonJS validation module. πŸ”΄ (16:07)src/modules/publish-issue-validation.js:1-9definesisPublishRepository(name): names must match /^[A-Za-z0-9_.-]+$/, must not be ".", "..", or "proto", and must not start with "-". πŸ”΄ (16:07) src/modules/publish-issue-validation.js:11-15definesisReleaseVersion(version)using/^(0|[1-9][0-9]).(0|[1-9][0-9]).(0|[1-9][0-9])(?:-?([0-9a-z-]+(?:.[0-9a-z-]+)))?(?:+([0-9a-z-]+(?:.[0-9a-z-]+)*))?$/i. πŸ”΄ (16:07) src/modules/publish-issue-validation.js:17exports{ isPublishRepository, isReleaseVersion }. πŸ”΄ (16:07) /home/byk/Code/getsentry/publish/src/modules/publish-location.jsis a 49-line CommonJS module for validating and resolving publish paths. πŸ”΄ (16:07)src/modules/publish-location.js:1-22definesresolvePublishLocation({ path, workspaceNames }); invalid paths throw Invalid publish path., any invalid workspace name throws Craft workspace discovery returned an invalid workspace list., "."returns{ path }, and a path whose complete suffix after "./"is inworkspaceNamesreturns{ path: ".", workspace }; otherwise it returns { path }. πŸ”΄ (16:07) src/modules/publish-location.js:24-31definesisPublishPath(path): valid values are the string "."or strings beginning"./"whose slash-delimited suffix consists entirely of safe workspace segments. πŸ”΄ (16:07)src/modules/publish-location.js:33-47defines internalisWorkspaceName(name)andisSafeWorkspaceSegment(segment); each segment must match /^[A-Za-z0-9_.-]+$/, must not be ".", "..", or "proto", and must not begin "-". πŸ”΄ (16:07) src/modules/publish-location.js:49exports{ resolvePublishLocation, isPublishPath }. πŸ”΄ (16:07) /home/byk/Code/getsentry/publish/src/modules/release-revision.jsis a 55-line CommonJS module usingparsefrom./publish-issue-title. πŸ”΄ (16:07) src/modules/release-revision.js:3-5definesisRevision(revision)as an exact match for/^[0-9a-f]{40}$/. πŸ”΄ (16:07) src/modules/release-revision.js:7-30definesgetReleaseRevisionDetails({ issueBody, repo }); it requires parse(issueBody, { startRule: "CheckRunsLinkCount" })to equal exactly1, otherwise throwing Expected exactly one View check runs link in Quick links for getsentry/${repo}.; it then parses ReleaseRevision, requires the parsed repository to equal repo, and otherwise throws Expected a View check runs link for getsentry/${repo} in the publish issue body.. πŸ”΄ (16:07) src/modules/release-revision.js:32-34definesgetReleaseRevision({ issueBody, repo })asgetReleaseRevisionDetails(...).revision.value. πŸ”΄ (16:07) src/modules/release-revision.js:36-49definesupdateReleaseRevision({ issueBody, repo, revision }); it requires a lowercase 40-character SHA or throws Release revision must be a lowercase 40-character SHA., obtains the current revision offsets, and replaces exactly that substring in issueBody. πŸ”΄ (16:07) src/modules/release-revision.js:51-55exportsgetReleaseRevision, getReleaseRevisionDetails, and updateReleaseRevision. πŸ”΄ (16:08) /home/byk/Code/getsentry/publish/src/modules/publish-issue-title.peggyis an 86-line Peggy grammar containing title and release-revision parsing rules. πŸ”΄ (16:08)src/modules/publish-issue-title.peggy:11-34defines canonicalPublishIssueTitlesyntax as"publish: ", optional "getsentry/", a Repository, optional Path, "@", and Version, followed by end-of-input. It returns { repo, path: path || "", version }. πŸ”΄ (16:08) In publish-issue-title.peggy, RepositoryCharacter = [A-Za-z0-9_.-]; a Pathconsists of one or more slash-prefixed nonemptyPathSegmentvalues using the same characters; andVersion = [A-Za-z0-9_.+-]+. πŸ”΄ (16:08) The grammar comment states that a title path suffix is syntactic only and the controller resolves the complete suffix as a workspace after checking out the CI-approved revision. πŸ”΄ (16:08) src/modules/publish-issue-title.peggy:36-63makesReleaseRevisionparse the request header at the beginning of the issue body and then the remainder; the header requiresRequested by: @..., Merge target: ..., Quick links:, one View changeslink, and aView check runsURL of the formhttps://github.com/getsentry/<repo>/commit/<revision>/checkswith an optional trailing slash. πŸ”΄ (16:08)CheckRunsRevisionaccepts lowercase[0-9a-f]+only when its length is exactly40and returns{ value, start, end }using source offsets.CheckRunsLinkCountscans the entire body and counts literal"- [View check runs]("entries to protect against appended decoy links. πŸ”΄ (16:08)src/modules/publish-issue-title.peggy:64-86supports spaces/tabs forIndent, blank lines, LF or CRLF newlines, MergeTargetequal to"(default)"or[A-Za-z0-9_./-]+, and LinkDestinationcontaining any characters except CR, LF, or). πŸ”΄ (16:08) /home/byk/Code/getsentry/publish/src/publish/discover-location.jsis an 85-line CommonJS executable module usingchild_process.execFileSync, fs.existsSync, Node path, @actions/core, and resolvePublishLocation. πŸ”΄ (16:08) src/publish/discover-location.js:9-10pinsCRAFT_IMAGEtogetsentry/craft@sha256:9a4a5d5efa44a00c2215078ead39800d4aaa5a97908b94f45a64d7d506d6e14b. πŸ”΄ (16:08) src/publish/discover-location.js:12-50definesgetWorkspaceNames(...); when <repositoryDirectory>/.craft.ymldoes not exist it returns[]; otherwise it synchronously executes Docker with run --rm --volume <absolute repositoryDirectory>:/github/workspace/repo --workdir /github/workspace/repo <CRAFT_IMAGE> workspace listand{ encoding: "utf8" }. πŸ”΄ (16:08) getWorkspaceNames()JSON-parses Docker output and requires an array; parse failure or a non-array value throwsCraft workspace discovery returned an invalid workspace list.. πŸ”΄ (16:08) src/publish/discover-location.js:52-61definesdiscoverLocation({ input, repositoryDirectory, exists, execFile }), which passes input.pathand the discovered workspace names toresolvePublishLocation(). πŸ”΄ (16:08) src/publish/discover-location.js:63-85parsesPUBLISH_ARGS || "{}", requires input.pathor throwsPublish input must define a path., defaults PUBLISH_REPOSITORY_DIRECTORYto"repo", emits JSON through core.setOutput("result", ...), runs main()only when invoked directly, and exports{ discoverLocation, getWorkspaceNames }. πŸ”΄ (16:09) /home/byk/Code/getsentry/publish/.github/workflows/test.ymldefines theTestworkflow for pushes tomainand allpull_requestevents, withcontents: read, default Bash shell, and one unit-testjob namedunit testsonubuntu-latest. πŸ”΄ (16:09) .github/workflows/test.ymlpinsactions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803, actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38withnode-version: 24, and actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830. πŸ”΄ (16:09) .github/workflows/test.ymlcachesnode_modulesunder key${{ runner.os }}-node_modules-${{ hashFiles('package.json', 'yarn.lock') }}; on a cache miss it runs yarn install --frozen-lockfile, then always runs yarn test. πŸ”΄ (16:09) /home/byk/Code/getsentry/publish/.github/workflows/cocoapods-keepalive.ymldefinesCocoaPods Token Keep-Alive, scheduled by cron "0 0 * * *"every day at midnight UTC because CocoaPods sessions currently expire after3 days of inactivity (VALIDITY_LENGTH). πŸ”΄ (16:09) .github/workflows/cocoapods-keepalive.ymlgrantscontents: read; its keepalivejob is namedRefresh CocoaPods Session, runs on macos-15in theproductionenvironment, and setsCOCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}. πŸ”΄ (16:09) .github/workflows/cocoapods-keepalive.ymlruns three ordered steps: 1.Install CocoaPodsviagem install cocoapods; 2. Print CocoaPods Versionviapod --version; 3. Refresh CocoaPods Sessionviapod trunk me > /dev/null 2>&1. πŸ”΄ (16:09) /home/byk/Code/getsentry/publish/src/libs/github.jsis a 19-line CommonJS helper module defining and exportinggetGitHubToken(). πŸ”΄ (16:09) src/libs/github.js:7-15returnsprocess.env.GITHUB_TOKENwhen present; otherwise it throws'No "GITHUB_TOKEN" environment variable found. Please ensure the workflow is configured correctly'. πŸ”΄ (16:10) /home/byk/Code/getsentry/publish/src/modules/ci-poller-input.jsis a 45-line CommonJS module using publish-title parsing and validation, release-revision helpers, publish-path validation, andrequestDigest. πŸ”΄ (16:10) src/modules/ci-poller-input.js:13-43definesgetCiPollerInput({ title, issueBody, labels, revision }); title parsing failures throw Invalid publish issue title: '${title}', while invalid parsed repositories, versions, and paths produce specific Invalid publish issue repository, Invalid publish issue version, and Invalid publish issue patherrors. πŸ”΄ (16:10)getCiPollerInput()computespath = `.${parsedTitle.path}`, reads currentRevision = getReleaseRevision({ issueBody, repo }), and, when revisionis truthy, createsresolvedIssueBody = updateReleaseRevision({ issueBody, repo, revision }); otherwise it retains the original body. πŸ”΄ (16:10) getCiPollerInput()returns an object containingissueBody: resolvedIssueBodyonly when a replacement revision was supplied,repo: `getsentry/${repo}`, requestDigest: requestDigest({ body: resolvedIssueBody, labels, title }), revision: currentRevision, and version. Thus revisionreports the original current revision even when the returnedissueBodyhas been rewritten. πŸ”΄ (16:10)src/modules/ci-poller-input.js:45exports{ getCiPollerInput }. πŸ”΄ (16:10) /home/byk/Code/getsentry/publish/src/modules/post-workflow-details.jsis a 19-line CommonJS module exportingpostWorkflowDetails({ context, octokit }). πŸ”΄ (16:10) postWorkflowDetails()obtainspublishRepoandrun_idfromcontext, gets issue_numberfromcontext.payload.issue.number, retrieves workflow-run data via octokit.rest.actions.getWorkflowRun({ ...publishRepo, run_id }), and creates an issue comment with body ``Publishing: [run#${run_id}](${workflowInfo.html_url})``. πŸ”΄ (16:10) /home/byk/Code/getsentry/publish/src/modules/process-end-state.jsis a 123-line CommonJS module using@sentry/nodeand exportingprocessEndState. πŸ”΄ (16:10) src/modules/process-end-state.js:3-42definesprocessEndState({ context, octokit, inputs = {}, status }); it validates statusthroughsentryInfoFromDetails()before terminal transitions, closes the issue only for"success", retrieves workflow-run details, posts an issue comment, and reports a Sentry session. πŸ”΄ (16:10) src/modules/process-end-state.js:44-72defines status-specific GitHub comments:"failure"producesFailed to publish.plus run logs ending?check_suite_focus=true#step:8and a branch-deletion link for the encoded version;"cancelled"usesPublish workflow cancelled.with the same links;"success"produces ``Published successfully: [run#${run_id}](${workflowInfo.html_url})``; unknown values throwUnknown status: '${status}'. πŸ”΄ (16:10) src/modules/process-end-state.js:74-96definesreportSession({ details, inputs }); it initializes Sentry with dsn: process.env.SENTRY_DSNandrelease = `${details.repo}@${details.version}`, tags "repository", sets "release"context containingissue_numberandinputs, captures the status message/severity, starts and ends a session with the mapped status, and awaits Sentry.close(). πŸ”΄ (16:10) src/modules/process-end-state.js:98-120maps"failure"to messageRelease failed: ${repo}, severity "error", session status "crashed"; "cancelled"toRelease cancelled: ${repo}, severity "warn", status "crashed"; and "success"toRelease succeeded: ${repo}, severity "info", status "ok". Unknown status throws Unknown status: '${status}'. πŸ”΄ (16:10) /home/byk/Code/getsentry/publish/src/modules/update-issue.jsis a 91-line CommonJS module usingfsand target-section regexes from./details-from-context. πŸ”΄ (16:10) src/modules/update-issue.js:7-38definesupdateTargets(...); it returns without action if stateFilePathis absent or does not exist, otherwise concurrently retrieves the issue and reads/parses the UTF-8 Craft state JSON, transforms the issue body, and updates the issue with the new body. πŸ”΄ (16:10)src/modules/update-issue.js:40-63definestransformIssueBody(craftState, issueBody); within the matched targets section it tracks declared target IDs, marks each target [x]whencraftState.published[targetId]is truthy and[ ]otherwise, then appends every unlisted key fromcraftState.publishedwith the corresponding checked state. πŸ”΄ (16:10)src/modules/update-issue.js:65-89definesupdateIssue({ context, octokit }); it concurrently uses Promise.allSettled()to update targets fromprocess.env.CRAFT_STATE_FILE_PATHand remove the"accepted"label. A remove-label rejection is ignored only whenreason?.status === 404; other label failures and all target-update failures are rethrown. πŸ”΄ (16:10) src/modules/update-issue.js:91exports{ updateIssue, transformIssueBody }. πŸ”΄ (16:11) /home/byk/Code/getsentry/publish/src/publish/inputs.jsis an 11-line executable module that callsdetailsFromContext({ context: github.context })and emits the JSON result throughcore.setOutput("result", JSON.stringify(result)); it invokes inputs()unconditionally. πŸ”΄ (16:11)/home/byk/Code/getsentry/publish/src/publish/post-result.jsis a 31-line CommonJS executable module wrappingprocessEndState. πŸ”΄ (16:11) src/publish/post-result.js:5-22definesmain(...)with defaultscontext = github.context, octokit = github.getOctokit(getGitHubToken()), report = processEndState, and status = process.argv.slice(2)[0]; it defaults inputsto{}, parses PUBLISH_ARGSwhen present, warnsCould not parse publish inputs; reporting without themon invalid JSON, and invokesreport({ context, octokit, inputs, status }). πŸ”΄ (16:11) src/publish/post-result.js:24-31runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports { main }. πŸ”΄ (16:11) /home/byk/Code/getsentry/publish/src/publish/post-workflow-details.jsis an 8-line executable wrapper that obtainsgithub.context, creates Octokit with github.getOctokit(getGitHubToken()), and invokes postWorkflowDetails({ context, octokit })without awaiting or explicit error handling. πŸ”΄ (16:11)/home/byk/Code/getsentry/publish/src/publish/resolve-ci-poller-input.jsis a 17-line executable module; it reads the issue body from UTF-8 filePUBLISH_ISSUE_BODY_FILEwhen set, otherwise fromPUBLISH_ISSUE_BODY || "", parses PUBLISH_ISSUE_LABELS || ""as JSON, passesPUBLISH_TITLE || ""andPUBLISH_REVISION || ""togetCiPollerInput(), and writes the JSON result to stdout. πŸ”΄ (16:12) /home/byk/Code/getsentry/publish/src/publish/update-issue.jsis a 28-line CommonJS executable wrapper aroundupdateIssue. πŸ”΄ (16:12) src/publish/update-issue.js:5-19gets GitHub context and authenticated Octokit, optionally parsesPUBLISH_ARGSintoinputs, warns Could not parse publish inputs; skipping target updateon invalid JSON, and callsupdateIssue({ context, octokit, inputs }); the shown updateIssue()implementation does not consumeinputs. πŸ”΄ (16:12) src/publish/update-issue.js:21-28runsmain()only when invoked directly, logs errors and setsprocess.exitCode = 1, and exports { main }. πŸ”΄ (16:12) /home/byk/Code/getsentry/publish/src/publish/resolve-release-revision.jsis a 19-line executable module using@actions/coreandgetReleaseRevision. πŸ”΄ (16:12) src/publish/resolve-release-revision.jsdefinesresolveReleaseRevision(); it parses PUBLISH_ARGS || "{}", requires repoor throwsPublish input must define a repository., then sets the "revision"output togetReleaseRevision({ issueBody: process.env.PUBLISH_ISSUE_BODY || "", repo })`. The function is invoked unconditionally and is not exported.