From 23208073ee1ae8fdffad0e9d863c5202877a7d88 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Mon, 15 Jul 2024 12:17:51 +0200 Subject: [PATCH] buildx(history): env var to override export build image Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- __tests__/buildx/history.test.itg.ts | 51 +++++++++++++++++++++++++++- src/buildx/history.ts | 5 +-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/__tests__/buildx/history.test.itg.ts b/__tests__/buildx/history.test.itg.ts index 78188c31..efcf1e8e 100644 --- a/__tests__/buildx/history.test.itg.ts +++ b/__tests__/buildx/history.test.itg.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {describe, expect, test} from '@jest/globals'; +import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals'; import * as fs from 'fs'; import * as path from 'path'; @@ -147,3 +147,52 @@ maybe('exportBuild', () => { expect(exportRes?.summaries).toBeDefined(); }); }); + +maybe('exportBuild custom image', () => { + const originalEnv = process.env; + beforeEach(() => { + jest.resetModules(); + process.env = { + ...originalEnv, + DOCKER_BUILD_EXPORT_BUILD_IMAGE: 'docker.io/dockereng/export-build:0.2.2' + }; + }); + afterEach(() => { + process.env = originalEnv; + }); + + it('with custom image', async () => { + const buildx = new Buildx(); + const build = new Build({buildx: buildx}); + + fs.mkdirSync(tmpDir, {recursive: true}); + await expect( + (async () => { + // prettier-ignore + const buildCmd = await buildx.getCommand([ + '--builder', process.env.CTN_BUILDER_NAME ?? 'default', + 'build', '-f', path.join(fixturesDir, 'hello.Dockerfile'), + '--metadata-file', build.getMetadataFilePath(), + fixturesDir + ]); + await Exec.exec(buildCmd.command, buildCmd.args); + })() + ).resolves.not.toThrow(); + + const metadata = build.resolveMetadata(); + expect(metadata).toBeDefined(); + const buildRef = build.resolveRef(metadata); + expect(buildRef).toBeDefined(); + + const history = new History({buildx: buildx}); + const exportRes = await history.export({ + refs: [buildRef ?? ''] + }); + + expect(exportRes).toBeDefined(); + expect(exportRes?.dockerbuildFilename).toBeDefined(); + expect(exportRes?.dockerbuildSize).toBeDefined(); + expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true); + expect(exportRes?.summaries).toBeDefined(); + }); +}); diff --git a/src/buildx/history.ts b/src/buildx/history.ts index 744549e8..abaca495 100644 --- a/src/buildx/history.ts +++ b/src/buildx/history.ts @@ -36,7 +36,8 @@ export interface HistoryOpts { export class History { private readonly buildx: Buildx; - private static readonly EXPORT_TOOL_IMAGE: string = 'docker.io/dockereng/export-build:latest'; + private static readonly EXPORT_BUILD_IMAGE_DEFAULT: string = 'docker.io/dockereng/export-build:latest'; + private static readonly EXPORT_BUILD_IMAGE_ENV: string = 'DOCKER_BUILD_EXPORT_BUILD_IMAGE'; constructor(opts?: HistoryOpts) { this.buildx = opts?.buildx || new Buildx(); @@ -131,7 +132,7 @@ export class History { 'run', '--rm', '-i', '-v', `${Buildx.refsDir}:/buildx-refs`, '-v', `${outDir}:/out`, - opts.image || History.EXPORT_TOOL_IMAGE, + opts.image || process.env[History.EXPORT_BUILD_IMAGE_ENV] || History.EXPORT_BUILD_IMAGE_DEFAULT, ...ebargs ] core.info(`[command]docker ${dockerRunArgs.join(' ')}`);