Better parsing of outputs

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
pull/185/head
CrazyMax 2020-10-19 22:12:33 +02:00
parent fb848139a7
commit 75727aa23f
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7
3 changed files with 51 additions and 21 deletions

36
dist/index.js generated vendored
View File

@ -5327,7 +5327,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.parseVersion = exports.getVersion = exports.isAvailable = exports.getSecret = exports.getImageID = exports.getImageIDFile = void 0; exports.parseVersion = exports.getVersion = exports.isAvailable = exports.hasGitAuthToken = exports.isLocalOrTarExporter = exports.getSecret = exports.getImageID = exports.getImageIDFile = void 0;
const fs_1 = __importDefault(__webpack_require__(747)); const fs_1 = __importDefault(__webpack_require__(747));
const path_1 = __importDefault(__webpack_require__(622)); const path_1 = __importDefault(__webpack_require__(622));
const semver = __importStar(__webpack_require__(383)); const semver = __importStar(__webpack_require__(383));
@ -5360,6 +5360,26 @@ function getSecret(kvp) {
}); });
} }
exports.getSecret = getSecret; exports.getSecret = getSecret;
function isLocalOrTarExporter(outputs) {
for (let output of outputs) {
for (let [key, value] of output.split(/\s*,\s*/).map(chunk => chunk.split('='))) {
if (key == 'type' && (value == 'local' || value == 'tar')) {
return true;
}
}
}
return false;
}
exports.isLocalOrTarExporter = isLocalOrTarExporter;
function hasGitAuthToken(secrets) {
for (let secret of secrets) {
if (secret.startsWith('GIT_AUTH_TOKEN=')) {
return true;
}
}
return false;
}
exports.hasGitAuthToken = hasGitAuthToken;
function isAvailable() { function isAvailable() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
return yield exec.exec(`docker`, ['buildx'], true).then(res => { return yield exec.exec(`docker`, ['buildx'], true).then(res => {
@ -13692,15 +13712,13 @@ function getBuildArgs(inputs, defaultContext, buildxVersion) {
if (inputs.platforms.length > 0) { if (inputs.platforms.length > 0) {
args.push('--platform', inputs.platforms.join(',')); args.push('--platform', inputs.platforms.join(','));
} }
let isLocalOrTarExporter = false;
yield exports.asyncForEach(inputs.outputs, (output) => __awaiter(this, void 0, void 0, function* () { yield exports.asyncForEach(inputs.outputs, (output) => __awaiter(this, void 0, void 0, function* () {
if (output.startsWith('type=local') || output.startsWith('type=tar')) {
isLocalOrTarExporter = true;
}
args.push('--output', output); args.push('--output', output);
})); }));
// TODO: Remove platforms length cond when buildx >0.4.2 available on runner (docker/buildx#351) // TODO: Remove platforms length cond when buildx >0.4.2 available on runner (docker/buildx#351)
if (inputs.platforms.length == 0 && !isLocalOrTarExporter && semver.satisfies(buildxVersion, '>=0.4.2')) { if (inputs.platforms.length == 0 &&
!buildx.isLocalOrTarExporter(inputs.outputs) &&
semver.satisfies(buildxVersion, '>=0.4.2')) {
args.push('--iidfile', yield buildx.getImageIDFile()); args.push('--iidfile', yield buildx.getImageIDFile());
} }
yield exports.asyncForEach(inputs.cacheFrom, (cacheFrom) => __awaiter(this, void 0, void 0, function* () { yield exports.asyncForEach(inputs.cacheFrom, (cacheFrom) => __awaiter(this, void 0, void 0, function* () {
@ -13709,14 +13727,10 @@ function getBuildArgs(inputs, defaultContext, buildxVersion) {
yield exports.asyncForEach(inputs.cacheTo, (cacheTo) => __awaiter(this, void 0, void 0, function* () { yield exports.asyncForEach(inputs.cacheTo, (cacheTo) => __awaiter(this, void 0, void 0, function* () {
args.push('--cache-to', cacheTo); args.push('--cache-to', cacheTo);
})); }));
let hasGitAuthToken = false;
yield exports.asyncForEach(inputs.secrets, (secret) => __awaiter(this, void 0, void 0, function* () { yield exports.asyncForEach(inputs.secrets, (secret) => __awaiter(this, void 0, void 0, function* () {
if (secret.startsWith('GIT_AUTH_TOKEN=')) {
hasGitAuthToken = true;
}
args.push('--secret', yield buildx.getSecret(secret)); args.push('--secret', yield buildx.getSecret(secret));
})); }));
if (inputs.githubToken && !hasGitAuthToken && inputs.context == defaultContext) { if (inputs.githubToken && !buildx.hasGitAuthToken(inputs.secrets) && inputs.context == defaultContext) {
args.push('--secret', yield buildx.getSecret(`GIT_AUTH_TOKEN=${inputs.githubToken}`)); args.push('--secret', yield buildx.getSecret(`GIT_AUTH_TOKEN=${inputs.githubToken}`));
} }
if (inputs.file) { if (inputs.file) {

View File

@ -25,6 +25,26 @@ export async function getSecret(kvp: string): Promise<string> {
return `id=${key},src=${secretFile}`; return `id=${key},src=${secretFile}`;
} }
export function isLocalOrTarExporter(outputs: string[]): Boolean {
for (let output of outputs) {
for (let [key, value] of output.split(/\s*,\s*/).map(chunk => chunk.split('='))) {
if (key == 'type' && (value == 'local' || value == 'tar')) {
return true;
}
}
}
return false;
}
export function hasGitAuthToken(secrets: string[]): Boolean {
for (let secret of secrets) {
if (secret.startsWith('GIT_AUTH_TOKEN=')) {
return true;
}
}
return false;
}
export async function isAvailable(): Promise<Boolean> { export async function isAvailable(): Promise<Boolean> {
return await exec.exec(`docker`, ['buildx'], true).then(res => { return await exec.exec(`docker`, ['buildx'], true).then(res => {
if (res.stderr != '' && !res.success) { if (res.stderr != '' && !res.success) {

View File

@ -93,15 +93,15 @@ async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersio
if (inputs.platforms.length > 0) { if (inputs.platforms.length > 0) {
args.push('--platform', inputs.platforms.join(',')); args.push('--platform', inputs.platforms.join(','));
} }
let isLocalOrTarExporter: boolean = false;
await asyncForEach(inputs.outputs, async output => { await asyncForEach(inputs.outputs, async output => {
if (output.startsWith('type=local') || output.startsWith('type=tar')) {
isLocalOrTarExporter = true;
}
args.push('--output', output); args.push('--output', output);
}); });
// TODO: Remove platforms length cond when buildx >0.4.2 available on runner (docker/buildx#351) // TODO: Remove platforms length cond when buildx >0.4.2 available on runner (docker/buildx#351)
if (inputs.platforms.length == 0 && !isLocalOrTarExporter && semver.satisfies(buildxVersion, '>=0.4.2')) { if (
inputs.platforms.length == 0 &&
!buildx.isLocalOrTarExporter(inputs.outputs) &&
semver.satisfies(buildxVersion, '>=0.4.2')
) {
args.push('--iidfile', await buildx.getImageIDFile()); args.push('--iidfile', await buildx.getImageIDFile());
} }
await asyncForEach(inputs.cacheFrom, async cacheFrom => { await asyncForEach(inputs.cacheFrom, async cacheFrom => {
@ -110,14 +110,10 @@ async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersio
await asyncForEach(inputs.cacheTo, async cacheTo => { await asyncForEach(inputs.cacheTo, async cacheTo => {
args.push('--cache-to', cacheTo); args.push('--cache-to', cacheTo);
}); });
let hasGitAuthToken: boolean = false;
await asyncForEach(inputs.secrets, async secret => { await asyncForEach(inputs.secrets, async secret => {
if (secret.startsWith('GIT_AUTH_TOKEN=')) {
hasGitAuthToken = true;
}
args.push('--secret', await buildx.getSecret(secret)); args.push('--secret', await buildx.getSecret(secret));
}); });
if (inputs.githubToken && !hasGitAuthToken && inputs.context == defaultContext) { if (inputs.githubToken && !buildx.hasGitAuthToken(inputs.secrets) && inputs.context == defaultContext) {
args.push('--secret', await buildx.getSecret(`GIT_AUTH_TOKEN=${inputs.githubToken}`)); args.push('--secret', await buildx.getSecret(`GIT_AUTH_TOKEN=${inputs.githubToken}`));
} }
if (inputs.file) { if (inputs.file) {