From 32af66cb28398b5c3016608631585299b3b1a04d Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Fri, 3 Mar 2023 14:48:12 +0100 Subject: [PATCH] builder: exists method Signed-off-by: CrazyMax --- __tests__/buildx/builder.test.ts | 14 ++++++++++++++ src/buildx/builder.ts | 25 +++++++++++++++++++++++++ src/buildx/buildx.ts | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/__tests__/buildx/builder.test.ts b/__tests__/buildx/builder.test.ts index 7dae7908..9d4de10a 100644 --- a/__tests__/buildx/builder.test.ts +++ b/__tests__/buildx/builder.test.ts @@ -19,6 +19,7 @@ import * as fs from 'fs'; import * as path from 'path'; import {Builder} from '../../src/buildx/builder'; +import {Exec} from '../../src/exec'; import {BuilderInfo} from '../../src/types/builder'; @@ -47,6 +48,19 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise { + it('valid', async () => { + const execSpy = jest.spyOn(Exec, 'getExecOutput'); + const builder = new Builder(); + await builder.exists('foo'); + // eslint-disable-next-line jest/no-standalone-expect + expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx', 'inspect', 'foo'], { + silent: true, + ignoreReturnCode: true + }); + }); +}); + describe('inspect', () => { it('valid', async () => { const builder = new Builder(); diff --git a/src/buildx/builder.ts b/src/buildx/builder.ts index fab1930a..c8755a31 100644 --- a/src/buildx/builder.ts +++ b/src/buildx/builder.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import * as core from '@actions/core'; + import {Buildx} from './buildx'; import {Exec} from '../exec'; @@ -30,6 +32,29 @@ export class Builder { this.buildx = opts?.buildx || new Buildx(); } + public async exists(name: string): Promise { + const cmd = await this.buildx.getCommand(['inspect', name]); + + const ok: boolean = await Exec.getExecOutput(cmd.command, cmd.args, { + ignoreReturnCode: true, + silent: true + }) + .then(res => { + if (res.stderr.length > 0 && res.exitCode != 0) { + core.debug(`Builder.exists cmd err: ${res.stderr.trim()}`); + return false; + } + return res.exitCode == 0; + }) + .catch(error => { + core.debug(`Builder.exists error: ${error}`); + return false; + }); + + core.debug(`Builder.exists: ${ok}`); + return ok; + } + public async inspect(name: string): Promise { const cmd = await this.buildx.getCommand(['inspect', name]); return await Exec.getExecOutput(cmd.command, cmd.args, { diff --git a/src/buildx/buildx.ts b/src/buildx/buildx.ts index 12f4c7af..85e83e9a 100644 --- a/src/buildx/buildx.ts +++ b/src/buildx/buildx.ts @@ -76,7 +76,7 @@ export class Buildx { }) .then(res => { if (res.stderr.length > 0 && res.exitCode != 0) { - core.debug(`Buildx.isAvailable cmd err: ${res.stderr}`); + core.debug(`Buildx.isAvailable cmd err: ${res.stderr.trim()}`); return false; } return res.exitCode == 0;