diff --git a/__tests__/github.test.ts b/__tests__/github.test.ts index 37a771f..3ac4008 100644 --- a/__tests__/github.test.ts +++ b/__tests__/github.test.ts @@ -97,7 +97,10 @@ describe('repository', () => { describe('workflowRunURL', () => { it('returns 2188748038', async () => { - expect(GitHub.workflowRunURL).toEqual('https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'); + expect(GitHub.workflowRunURL()).toEqual('https://github.com/docker/actions-toolkit/actions/runs/2188748038'); + }); + it('returns 2188748038 with attempts 2', async () => { + expect(GitHub.workflowRunURL(true)).toEqual('https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'); }); }); diff --git a/src/buildx/build.ts b/src/buildx/build.ts index c2f5263..9d4c71b 100644 --- a/src/buildx/build.ts +++ b/src/buildx/build.ts @@ -131,7 +131,7 @@ export class Build { return input; } try { - return core.getBooleanInput(name) ? `builder-id=${GitHub.workflowRunURL}` : 'false'; + return core.getBooleanInput(name) ? `builder-id=${GitHub.workflowRunURL(true)}` : 'false'; } catch (err) { // not a valid boolean, so we assume it's a string return Build.resolveProvenanceAttrs(input); @@ -140,7 +140,7 @@ export class Build { public static resolveProvenanceAttrs(input: string): string { if (!input) { - return `builder-id=${GitHub.workflowRunURL}`; + return `builder-id=${GitHub.workflowRunURL(true)}`; } // parse attributes from input const fields = parse(input, { @@ -158,7 +158,7 @@ export class Build { } } // if not add builder-id attribute - return `${input},builder-id=${GitHub.workflowRunURL}`; + return `${input},builder-id=${GitHub.workflowRunURL(true)}`; } public static resolveCacheToAttrs(input: string, githubToken?: string): string { diff --git a/src/github.ts b/src/github.ts index d0da748..39bfdcf 100644 --- a/src/github.ts +++ b/src/github.ts @@ -68,10 +68,10 @@ export class GitHub { return `${github.context.repo.owner}/${github.context.repo.repo}`; } - static get workflowRunURL(): string { - const runID = process.env.GITHUB_RUN_ID || github.context.runId; - const runAttempt = process.env.GITHUB_RUN_ATTEMPT || 1; - return `${GitHub.serverURL}/${GitHub.repository}/actions/runs/${runID}/attempts/${runAttempt}`; + public static workflowRunURL(setAttempts?: boolean): string { + // TODO: runAttempt is not yet part of github.context but will be in a + // future release of @actions/github package: https://github.com/actions/toolkit/commit/faa425440f86f9c16587a19dfb59491253a2c92a + return `${GitHub.serverURL}/${GitHub.repository}/actions/runs/${github.context.runId}${setAttempts ? `/attempts/${process.env.GITHUB_RUN_ATTEMPT || 1}` : ''}`; } static get actionsRuntimeToken(): GitHubActionsRuntimeToken | undefined { @@ -191,7 +191,7 @@ export class GitHub { const artifactId = BigInt(finalizeArtifactResp.artifactId); core.info(`Artifact successfully finalized (${artifactId})`); - const artifactURL = `${GitHub.workflowRunURL}/artifacts/${artifactId}`; + const artifactURL = `${GitHub.workflowRunURL()}/artifacts/${artifactId}`; core.info(`Artifact download URL: ${artifactURL}`); return {