From 580d5c72a254e3d04247d28c61adcc1956cbd510 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sun, 11 Jul 2021 22:42:19 +0200 Subject: [PATCH] Explicit version spec for caching Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 1 + __tests__/buildx.test.ts | 9 +++++++-- dist/index.js | 14 ++++++++++---- src/buildx.ts | 13 +++++++++---- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d78e96c7..a1c38eb3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -323,6 +323,7 @@ jobs: - master - refs/tags/v0.5.1 - refs/pull/648/head + - 67bd6f4dc82a9cd96f34133dab3f6f7af803bb14 steps: - name: Checkout diff --git a/__tests__/buildx.test.ts b/__tests__/buildx.test.ts index fcc99b62..d6898798 100644 --- a/__tests__/buildx.test.ts +++ b/__tests__/buildx.test.ts @@ -93,12 +93,17 @@ describe('inspect', () => { }); describe('build', () => { - it.skip('valid', async () => { - const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'setup-buildx-')); + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'setup-buildx-')); + it.skip('builds refs/pull/648/head', async () => { const buildxBin = await buildx.build('https://github.com/docker/buildx.git#refs/pull/648/head', tmpDir); console.log(buildxBin); expect(fs.existsSync(buildxBin)).toBe(true); }, 100000); + it.skip('builds 67bd6f4dc82a9cd96f34133dab3f6f7af803bb14', async () => { + const buildxBin = await buildx.build('https://github.com/docker/buildx.git#67bd6f4dc82a9cd96f34133dab3f6f7af803bb14', tmpDir); + console.log(buildxBin); + expect(fs.existsSync(buildxBin)).toBe(true); + }, 100000); }); describe('install', () => { diff --git a/dist/index.js b/dist/index.js index 08c3e215..62bcaed1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -151,10 +151,16 @@ function build(inputBuildRef, dockerConfigHome) { if (ref.length == 0) { ref = 'master'; } - const sha = yield git.getRemoteSha(repo, ref); - core.debug(`Remote ref ${sha} found`); + let vspec; + if (ref.match(/^[0-9a-fA-F]{40}$/)) { + vspec = ref; + } + else { + vspec = yield git.getRemoteSha(repo, ref); + } + core.debug(`Tool version spec ${vspec}`); let toolPath; - toolPath = tc.find('buildx', sha); + toolPath = tc.find('buildx', vspec); if (!toolPath) { const outFolder = path.join(context.tmpDir(), 'out').split(path.sep).join(path.posix.sep); toolPath = yield exec @@ -165,7 +171,7 @@ function build(inputBuildRef, dockerConfigHome) { if (res.stderr.length > 0 && res.exitCode != 0) { core.warning(res.stderr.trim()); } - return tc.cacheFile(`${outFolder}/buildx`, context.osPlat == 'win32' ? 'docker-buildx.exe' : 'docker-buildx', 'buildx', sha); + return tc.cacheFile(`${outFolder}/buildx`, context.osPlat == 'win32' ? 'docker-buildx.exe' : 'docker-buildx', 'buildx', vspec); }); } return setPlugin(toolPath, dockerConfigHome); diff --git a/src/buildx.ts b/src/buildx.ts index 97bb475d..c2518ed2 100644 --- a/src/buildx.ts +++ b/src/buildx.ts @@ -117,11 +117,16 @@ export async function build(inputBuildRef: string, dockerConfigHome: string): Pr ref = 'master'; } - const sha = await git.getRemoteSha(repo, ref); - core.debug(`Remote ref ${sha} found`); + let vspec: string; + if (ref.match(/^[0-9a-fA-F]{40}$/)) { + vspec = ref; + } else { + vspec = await git.getRemoteSha(repo, ref); + } + core.debug(`Tool version spec ${vspec}`); let toolPath: string; - toolPath = tc.find('buildx', sha); + toolPath = tc.find('buildx', vspec); if (!toolPath) { const outFolder = path.join(context.tmpDir(), 'out').split(path.sep).join(path.posix.sep); toolPath = await exec @@ -132,7 +137,7 @@ export async function build(inputBuildRef: string, dockerConfigHome: string): Pr if (res.stderr.length > 0 && res.exitCode != 0) { core.warning(res.stderr.trim()); } - return tc.cacheFile(`${outFolder}/buildx`, context.osPlat == 'win32' ? 'docker-buildx.exe' : 'docker-buildx', 'buildx', sha); + return tc.cacheFile(`${outFolder}/buildx`, context.osPlat == 'win32' ? 'docker-buildx.exe' : 'docker-buildx', 'buildx', vspec); }); }