Merge pull request #31 from crazy-max/buildx-install

buildx: install method
This commit is contained in:
CrazyMax 2023-02-17 20:14:42 +01:00 committed by GitHub
commit 875c6c9e95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 8 deletions

View File

@ -88,6 +88,14 @@ describe('certsDir', () => {
});
});
describe('install', () => {
it('acquires buildx v0.9.1', async () => {
const buildx = new Buildx({context: new Context()});
const buildxBin = await buildx.install('v0.9.1', tmpDir);
expect(fs.existsSync(buildxBin)).toBe(true);
}, 100000);
});
describe('isAvailable', () => {
it('docker cli', async () => {
const execSpy = jest.spyOn(exec, 'getExecOutput');

View File

@ -14,26 +14,31 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, beforeEach} from '@jest/globals';
import {describe, expect, it, jest, test, beforeEach, afterEach} from '@jest/globals';
import * as fs from 'fs';
import * as path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/buildx/install';
// prettier-ignore
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-jest').split(path.sep).join(path.posix.sep);
beforeEach(() => {
jest.clearAllMocks();
});
afterEach(function () {
rimraf.sync(tmpDir);
});
describe('install', () => {
// prettier-ignore
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-install-jest').split(path.sep).join(path.posix.sep);
// prettier-ignore
test.each([
['v0.4.1', false],
['v0.9.1', false],
['latest', false],
['v0.4.1', true],
['v0.9.1', true],
['latest', true]
])(
'acquires %p of buildx (standalone: %p)', async (version, standalone) => {

View File

@ -34,16 +34,16 @@ export interface BuildxOpts {
export class Buildx {
private readonly context: Context;
private _version: string | undefined;
private _install: Install;
public readonly inputs: Inputs;
public readonly install: Install;
public readonly standalone: boolean;
constructor(opts: BuildxOpts) {
this.context = opts.context;
this.inputs = new Inputs(this.context);
this.install = new Install({standalone: opts.standalone});
this.standalone = opts?.standalone ?? !Docker.isAvailable;
this._install = new Install({standalone: opts.standalone});
}
static get configDir(): string {
@ -61,6 +61,10 @@ export class Buildx {
};
}
public async install(version: string, dest: string): Promise<string> {
return await this._install.install(version, dest);
}
public async isAvailable(): Promise<boolean> {
const cmd = this.getCommand([]);
return await exec