From 8608cc9bac03e24bee3852041e35adff23bd7229 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 | 48 +++++++++++++++++++++++++++- __tests__/github.test.itg.ts | 2 +- src/buildx/history.ts | 5 +-- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/__tests__/buildx/history.test.itg.ts b/__tests__/buildx/history.test.itg.ts index 78188c31..22456283 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'; @@ -146,4 +146,50 @@ maybe('exportBuild', () => { expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true); expect(exportRes?.summaries).toBeDefined(); }); + + it('with custom export build image', async () => { + 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; + }); + + 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() + ]); + 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/__tests__/github.test.itg.ts b/__tests__/github.test.itg.ts index 5c3642ea..e8e6e503 100644 --- a/__tests__/github.test.itg.ts +++ b/__tests__/github.test.itg.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {describe, expect, it, test} from '@jest/globals'; +import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals'; import fs from 'fs'; import * as path from 'path'; 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(' ')}`);