diff --git a/packages/app/server/routes/publish.post.ts b/packages/app/server/routes/publish.post.ts index 0edc6853..f57b5d89 100644 --- a/packages/app/server/routes/publish.post.ts +++ b/packages/app/server/routes/publish.post.ts @@ -202,6 +202,20 @@ export default eventHandler(async (event) => { }); } + if ( + workflowData.headBranch && + workflowData.headBranch !== workflowData.ref + ) { + const branchCursorKey = `${baseKey}:${workflowData.headBranch}`; + const branchCursor = await cursorBucket.getItem(branchCursorKey); + if (!branchCursor || branchCursor.timestamp < runId) { + await cursorBucket.setItem(branchCursorKey, { + sha: workflowData.sha, + timestamp: runId, + }); + } + } + await workflowsBucket.removeItem(key); const urls = packagesWithoutPrefix.map((packageName) => diff --git a/packages/app/server/routes/webhook.post.ts b/packages/app/server/routes/webhook.post.ts index 2e2504bc..64a74af3 100644 --- a/packages/app/server/routes/webhook.post.ts +++ b/packages/app/server/routes/webhook.post.ts @@ -55,11 +55,18 @@ export default eventHandler(async (event) => { const lookupKey = isNewPullRequest ? prKey : oldPrDataHash; const prNumber = await pullRequestNumbersBucket.getItem(lookupKey); + const headBranch = payload.workflow_run.head_branch; + const isHeadOnUpstream = + payload.workflow_run.head_repository?.full_name === + payload.repository.full_name; + const data: WorkflowData = { owner, repo, sha: payload.workflow_run.head_sha, - ref: isPullRequest ? `${prNumber}` : payload.workflow_run.head_branch!, // it's a pull request workflow + ref: isPullRequest ? `${prNumber}` : headBranch!, + headBranch: + isPullRequest && isHeadOnUpstream && headBranch ? headBranch : null, }; // Publishing is only available throughout the lifetime of a workflow_job diff --git a/packages/app/server/types.ts b/packages/app/server/types.ts index b99e35f7..050c77eb 100644 --- a/packages/app/server/types.ts +++ b/packages/app/server/types.ts @@ -3,6 +3,7 @@ export interface WorkflowData { repo: string; sha: string; ref: string; + headBranch?: string | null; } export interface PullRequestData {