Compare commits

..

8 Commits

Author SHA1 Message Date
CrazyMax
2c60cad840 Merge pull request #40 from crazy-max/debug
Some checks failed
publish / publish (push) Has been cancelled
some debug logs
2023-02-18 06:00:54 +01:00
CrazyMax
847887b312 some debug logs
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2023-02-18 04:36:32 +01:00
CrazyMax
d9984214c9 Merge pull request #39 from crazy-max/buildkit-ctn-prefix
buildx: make containerNamePrefix static and public
2023-02-18 02:20:37 +01:00
CrazyMax
33b4390bc2 buildx: make containerNamePrefix static and public
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2023-02-18 02:12:09 +01:00
CrazyMax
5e8f679709 Merge pull request #38 from crazy-max/util-quote
Some checks failed
publish / publish (push) Has been cancelled
util: handle quote opt with the same api for input list
2023-02-18 01:57:40 +01:00
CrazyMax
f288f4f7ea util: handle quote opt with the same api for input list
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2023-02-18 01:53:59 +01:00
CrazyMax
cb9121174a Merge pull request #37 from crazy-max/toolkit-builder
toolkit: add builder
2023-02-18 01:37:42 +01:00
CrazyMax
464dfbe1ec toolkit: add builder
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2023-02-18 01:33:37 +01:00
7 changed files with 32 additions and 13 deletions

View File

@@ -79,9 +79,15 @@ describe('getInputList', () => {
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
});
it('do not escape surrounding quotes', async () => {
setInput('driver-opts', `"env.no_proxy=localhost,127.0.0.1,.mydomain"`);
const res = Util.getInputList('driver-opts', {ignoreComma: true, quote: false});
expect(res).toEqual(['"env.no_proxy=localhost,127.0.0.1,.mydomain"']);
});
it('escape surrounding quotes', async () => {
setInput('platforms', 'linux/amd64\n"linux/arm64,linux/arm/v7"');
const res = Util.getInputList('platforms', {escapeQuotes: true});
const res = Util.getInputList('platforms');
expect(res).toEqual(['linux/amd64', 'linux/arm64', 'linux/arm/v7']);
});

View File

@@ -33,7 +33,6 @@ export interface BuildKitOpts {
export class BuildKit {
private readonly context: Context;
private readonly buildx: Buildx;
private containerNamePrefix = 'buildx_buildkit_';
public readonly config: Config;
@@ -67,7 +66,7 @@ export class BuildKit {
private async getVersionWithinImage(nodeName: string): Promise<string> {
return exec
.getExecOutput(`docker`, ['inspect', '--format', '{{.Config.Image}}', `${this.containerNamePrefix}${nodeName}`], {
.getExecOutput(`docker`, ['inspect', '--format', '{{.Config.Image}}', `${Buildx.containerNamePrefix}${nodeName}`], {
ignoreReturnCode: true,
silent: true
})

View File

@@ -16,6 +16,7 @@
import fs from 'fs';
import path from 'path';
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as semver from 'semver';
@@ -36,6 +37,7 @@ export class Buildx {
public readonly inputs: Inputs;
public readonly standalone: boolean;
public static readonly containerNamePrefix = 'buildx_buildkit_';
constructor(opts: BuildxOpts) {
this.context = opts.context;
@@ -122,9 +124,12 @@ export class Buildx {
public async versionSatisfies(range: string, version?: string): Promise<boolean> {
const ver = version ?? (await this.version);
if (!ver) {
core.debug(`Buildx.versionSatisfies false: undefined version`);
return false;
}
return semver.satisfies(ver, range) || /^[0-9a-f]{7}$/.exec(ver) !== null;
const res = semver.satisfies(ver, range) || /^[0-9a-f]{7}$/.exec(ver) !== null;
core.debug(`Buildx.versionSatisfies ${ver} statisfies ${range}: ${res}`);
return res;
}
public static resolveCertsDriverOpts(driver: string, endpoint: string, cert: Cert): Array<string> {

View File

@@ -80,7 +80,7 @@ export class Install {
} else {
vspec = await Git.getRemoteSha(repo, ref);
}
core.debug(`Tool version spec ${vspec}`);
core.debug(`Install.build: tool version spec ${vspec}`);
let toolPath: string;
toolPath = tc.find('buildx', vspec);
@@ -112,16 +112,16 @@ export class Install {
let buildStandalone = false;
if (this.standalone && buildxStandaloneFound) {
core.debug(`Buildx standalone found, build with it`);
core.debug(`Install.buildCommand: Buildx standalone found, build with it`);
buildStandalone = true;
} else if (!this.standalone && buildxPluginFound) {
core.debug(`Buildx plugin found, build with it`);
core.debug(`Install.buildCommand: Buildx plugin found, build with it`);
buildStandalone = false;
} else if (buildxStandaloneFound) {
core.debug(`Buildx plugin not found, but standalone found so trying to build with it`);
core.debug(`Install.buildCommand: Buildx plugin not found, but standalone found so trying to build with it`);
buildStandalone = true;
} else if (buildxPluginFound) {
core.debug(`Buildx standalone not found, but plugin found so trying to build with it`);
core.debug(`Install.buildCommand: Buildx standalone not found, but plugin found so trying to build with it`);
buildStandalone = false;
} else {
throw new Error(`Neither buildx standalone or plugin have been found to build from ref ${gitContext}`);

View File

@@ -16,6 +16,7 @@
import os from 'os';
import path from 'path';
import * as core from '@actions/core';
import * as exec from '@actions/exec';
export class Docker {
@@ -32,21 +33,25 @@ export class Docker {
})
.then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
core.debug(`Docker.isAvailable error: ${res.stderr}`);
dockerAvailable = false;
} else {
core.debug(`Docker.isAvailable ok`);
dockerAvailable = res.exitCode == 0;
}
})
// eslint-disable-next-line @typescript-eslint/no-unused-vars
.catch(error => {
core.debug(`Docker.isAvailable failed: ${error}`);
dockerAvailable = false;
});
return dockerAvailable;
}
public static async printVersion(standalone?: boolean) {
public static async printVersion(standalone?: boolean): Promise<void> {
const noDocker = standalone ?? !Docker.isAvailable;
if (noDocker) {
core.debug('Docker.printVersion: Docker is not available, skipping.');
return;
}
await exec.exec('docker', ['version'], {
@@ -54,9 +59,10 @@ export class Docker {
});
}
public static async printInfo(standalone?: boolean) {
public static async printInfo(standalone?: boolean): Promise<void> {
const noDocker = standalone ?? !Docker.isAvailable;
if (noDocker) {
core.debug('Docker.printInfo: Docker is not available, skipping.');
return;
}
await exec.exec('docker', ['info'], {

View File

@@ -17,6 +17,7 @@
import {Context} from './context';
import {Buildx} from './buildx/buildx';
import {Install} from './buildx/install';
import {Builder} from './buildx/builder';
import {BuildKit} from './buildkit/buildkit';
import {GitHub} from './github';
@@ -33,6 +34,7 @@ export class Toolkit {
public github: GitHub;
public buildx: Buildx;
public buildxInstall: Install;
public builder: Builder;
public buildkit: BuildKit;
constructor(opts: ToolkitOpts = {}) {
@@ -40,6 +42,7 @@ export class Toolkit {
this.github = new GitHub({token: opts.githubToken});
this.buildx = new Buildx({context: this.context});
this.buildxInstall = new Install({context: this.context, standalone: this.buildx.standalone});
this.builder = new Builder({context: this.context, buildx: this.buildx});
this.buildkit = new BuildKit({context: this.context, buildx: this.buildx});
}
}

View File

@@ -19,7 +19,7 @@ import {parse} from 'csv-parse/sync';
export interface InputListOpts {
ignoreComma?: boolean;
escapeQuotes?: boolean;
quote?: string | boolean | Buffer | null;
}
export class Util {
@@ -37,7 +37,7 @@ export class Util {
comment: '#',
relaxColumnCount: true,
skipEmptyLines: true,
quote: opts?.escapeQuotes ?? `"`
quote: opts?.quote
});
for (const record of records as Array<string[]>) {