diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 98bfcf6a..f45f886f 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -58,17 +58,15 @@ describe('parseGitRef', () => { }); // prettier-ignore test.each([ - ['refs/heads/master', '860c1904a1ce19322e91ac35af1ab07466440c37', false, '860c1904a1ce19322e91ac35af1ab07466440c37'], - ['master', '860c1904a1ce19322e91ac35af1ab07466440c37', false, '860c1904a1ce19322e91ac35af1ab07466440c37'], - ['refs/pull/15/merge', '860c1904a1ce19322e91ac35af1ab07466440c37', false, 'refs/pull/15/merge'], - ['refs/heads/master', '', false, 'refs/heads/master'], - ['master', '', false, 'master'], - ['refs/tags/v1.0.0', '', false, 'refs/tags/v1.0.0'], - ['refs/pull/15/merge', '', false, 'refs/pull/15/merge'], - ['refs/pull/15/merge', '', true, 'refs/pull/15/head'], - ])('given %p and %p, should return %p', async (ref: string, sha: string, prHeadRef: boolean, expected: string) => { + ['refs/heads/master', false, 'refs/heads/master'], + ['master', false, 'master'], + ['refs/pull/15/merge', false, 'refs/pull/15/merge'], + ['refs/tags/v1.0.0', false, 'refs/tags/v1.0.0'], + ['refs/pull/15/merge', true, 'refs/pull/15/head'], + ['', false, '860c1904a1ce19322e91ac35af1ab07466440c37'], + ])('given %p and %p, should return %p', async (ref: string, prHeadRef: boolean, expected: string) => { process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : ''; - expect(Context.parseGitRef(ref, sha)).toEqual(expected); + expect(Context.parseGitRef(ref, '860c1904a1ce19322e91ac35af1ab07466440c37')).toEqual(expected); }); }); diff --git a/src/context.ts b/src/context.ts index 502bb3e9..75771ffb 100644 --- a/src/context.ts +++ b/src/context.ts @@ -43,13 +43,14 @@ export class Context { } public static parseGitRef(ref: string, sha: string): string { - const setPullRequestHeadRef: boolean = !!(process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF && process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF === 'true'); - if (sha && ref && !ref.startsWith('refs/')) { - ref = `refs/heads/${ref}`; + if (!ref) { + if (!sha) { + throw new Error('Git reference or commit SHA is required'); + } + return sha; } - if (sha && !ref.startsWith(`refs/pull/`)) { - ref = sha; - } else if (ref.startsWith(`refs/pull/`) && setPullRequestHeadRef) { + const setPullRequestHeadRef: boolean = !!(process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF && process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF === 'true'); + if (ref.startsWith(`refs/pull/`) && setPullRequestHeadRef) { ref = ref.replace(/\/merge$/g, '/head'); } return ref;