Skip to content

Commit dd1544e

Browse files
authored
Merge pull request #64 from crazy-max/builder-exists
builder: exists method
2 parents 2090433 + 32af66c commit dd1544e

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

__tests__/buildx/builder.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import * as fs from 'fs';
1919
import * as path from 'path';
2020

2121
import {Builder} from '../../src/buildx/builder';
22+
import {Exec} from '../../src/exec';
2223

2324
import {BuilderInfo} from '../../src/types/builder';
2425

@@ -47,6 +48,19 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<Bu
4748
};
4849
});
4950

51+
describe('exists', () => {
52+
it('valid', async () => {
53+
const execSpy = jest.spyOn(Exec, 'getExecOutput');
54+
const builder = new Builder();
55+
await builder.exists('foo');
56+
// eslint-disable-next-line jest/no-standalone-expect
57+
expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx', 'inspect', 'foo'], {
58+
silent: true,
59+
ignoreReturnCode: true
60+
});
61+
});
62+
});
63+
5064
describe('inspect', () => {
5165
it('valid', async () => {
5266
const builder = new Builder();

src/buildx/builder.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import * as core from '@actions/core';
18+
1719
import {Buildx} from './buildx';
1820
import {Exec} from '../exec';
1921

@@ -30,6 +32,29 @@ export class Builder {
3032
this.buildx = opts?.buildx || new Buildx();
3133
}
3234

35+
public async exists(name: string): Promise<boolean> {
36+
const cmd = await this.buildx.getCommand(['inspect', name]);
37+
38+
const ok: boolean = await Exec.getExecOutput(cmd.command, cmd.args, {
39+
ignoreReturnCode: true,
40+
silent: true
41+
})
42+
.then(res => {
43+
if (res.stderr.length > 0 && res.exitCode != 0) {
44+
core.debug(`Builder.exists cmd err: ${res.stderr.trim()}`);
45+
return false;
46+
}
47+
return res.exitCode == 0;
48+
})
49+
.catch(error => {
50+
core.debug(`Builder.exists error: ${error}`);
51+
return false;
52+
});
53+
54+
core.debug(`Builder.exists: ${ok}`);
55+
return ok;
56+
}
57+
3358
public async inspect(name: string): Promise<BuilderInfo> {
3459
const cmd = await this.buildx.getCommand(['inspect', name]);
3560
return await Exec.getExecOutput(cmd.command, cmd.args, {

src/buildx/buildx.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class Buildx {
7676
})
7777
.then(res => {
7878
if (res.stderr.length > 0 && res.exitCode != 0) {
79-
core.debug(`Buildx.isAvailable cmd err: ${res.stderr}`);
79+
core.debug(`Buildx.isAvailable cmd err: ${res.stderr.trim()}`);
8080
return false;
8181
}
8282
return res.exitCode == 0;

0 commit comments

Comments
 (0)