From 32a260e6e5750d6ef447de3a8d5c17a370c9067e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 30 Jan 2023 20:08:54 +0100 Subject: [PATCH] buildx: do not set version in constructor Signed-off-by: CrazyMax --- __tests__/buildx.test.ts | 4 ++-- src/buildx.ts | 38 +++++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/__tests__/buildx.test.ts b/__tests__/buildx.test.ts index 7dd2e33..944633a 100644 --- a/__tests__/buildx.test.ts +++ b/__tests__/buildx.test.ts @@ -107,12 +107,12 @@ describe('printVersion', () => { }); }); -describe('getVersion', () => { +describe('version', () => { it('valid', async () => { const buildx = new Buildx({ context: new Context() }); - expect(semver.valid(await buildx.version)).not.toBeNull(); + expect(semver.valid(await buildx.version)).not.toBeUndefined(); }); }); diff --git a/src/buildx.ts b/src/buildx.ts index 6e006fb..cfda283 100644 --- a/src/buildx.ts +++ b/src/buildx.ts @@ -15,13 +15,13 @@ export interface BuildxOpts { export class Buildx { private readonly context: Context; + private _version: string | undefined; + public standalone: boolean; - public version: Promise; constructor(opts: BuildxOpts) { this.context = opts.context; this.standalone = opts?.standalone ?? !Docker.isAvailable(); - this.version = this.getVersion(); } public getCommand(args: Array) { @@ -57,19 +57,24 @@ export class Buildx { }); } - private async getVersion(): Promise { - const cmd = this.getCommand(['version']); - return await exec - .getExecOutput(cmd.command, cmd.args, { - ignoreReturnCode: true, - silent: true - }) - .then(res => { - if (res.stderr.length > 0 && res.exitCode != 0) { - throw new Error(res.stderr.trim()); - } - return Buildx.parseVersion(res.stdout.trim()); - }); + get version() { + return (async () => { + if (!this._version) { + const cmd = this.getCommand(['version']); + this._version = await exec + .getExecOutput(cmd.command, cmd.args, { + ignoreReturnCode: true, + silent: true + }) + .then(res => { + if (res.stderr.length > 0 && res.exitCode != 0) { + throw new Error(res.stderr.trim()); + } + return Buildx.parseVersion(res.stdout.trim()); + }); + } + return this._version; + })(); } public async printVersion() { @@ -89,6 +94,9 @@ export class Buildx { public async versionSatisfies(range: string, version?: string): Promise { const ver = version ?? (await this.version); + if (!ver) { + return false; + } return semver.satisfies(ver, range) || /^[0-9a-f]{7}$/.exec(ver) !== null; }