mirror of
https://github.com/docker/setup-buildx-action
synced 2024-11-10 06:01:40 +00:00
Merge pull request #347 from crazy-max/skip-malformed-context
check for malformed docker context
This commit is contained in:
commit
988b5a0280
3 changed files with 27 additions and 8 deletions
2
dist/index.js
generated
vendored
2
dist/index.js
generated
vendored
File diff suppressed because one or more lines are too long
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
29
src/main.ts
29
src/main.ts
|
@ -12,6 +12,7 @@ import {Toolkit} from '@docker/actions-toolkit/lib/toolkit';
|
||||||
import {Util} from '@docker/actions-toolkit/lib/util';
|
import {Util} from '@docker/actions-toolkit/lib/util';
|
||||||
|
|
||||||
import {Node} from '@docker/actions-toolkit/lib/types/buildx/builder';
|
import {Node} from '@docker/actions-toolkit/lib/types/buildx/builder';
|
||||||
|
import {ContextInfo} from '@docker/actions-toolkit/lib/types/docker/docker';
|
||||||
|
|
||||||
import * as context from './context';
|
import * as context from './context';
|
||||||
import * as stateHelper from './state-helper';
|
import * as stateHelper from './state-helper';
|
||||||
|
@ -74,18 +75,36 @@ actionsToolkit.run(
|
||||||
// https://github.com/docker/buildx/blob/b96ad59f64d40873e4959336d294b648bb3937fe/builder/builder.go#L489
|
// https://github.com/docker/buildx/blob/b96ad59f64d40873e4959336d294b648bb3937fe/builder/builder.go#L489
|
||||||
// https://github.com/docker/setup-buildx-action/issues/105
|
// https://github.com/docker/setup-buildx-action/issues/105
|
||||||
if (!standalone && inputs.driver == 'docker-container' && (await Docker.context()) == 'default' && inputs.endpoint.length == 0) {
|
if (!standalone && inputs.driver == 'docker-container' && (await Docker.context()) == 'default' && inputs.endpoint.length == 0) {
|
||||||
const contextInfo = await Docker.contextInspect('default');
|
let defaultContextWithTLS: boolean = false;
|
||||||
core.debug(`context info: ${JSON.stringify(contextInfo, undefined, 2)}`);
|
await core.group(`Inspecting default docker context`, async () => {
|
||||||
const hasTLSData = Object.keys(contextInfo.Endpoints).length > 0 && Object.values(contextInfo.Endpoints)[0].TLSData;
|
await Docker.getExecOutput(['context', 'inspect', '--format=json', 'default'], {
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
}).then(res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
core.info(`Cannot inspect default docker context: ${res.stderr.trim()}`);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const contextInfo = (<Array<ContextInfo>>JSON.parse(res.stdout.trim()))[0];
|
||||||
|
core.info(JSON.stringify(JSON.parse(res.stdout.trim()), undefined, 2));
|
||||||
|
const hasTLSData = Object.keys(contextInfo.Endpoints).length > 0 && Object.values(contextInfo.Endpoints)[0].TLSData !== undefined;
|
||||||
const hasTLSMaterial = Object.keys(contextInfo.TLSMaterial).length > 0 && Object.values(contextInfo.TLSMaterial)[0].length > 0;
|
const hasTLSMaterial = Object.keys(contextInfo.TLSMaterial).length > 0 && Object.values(contextInfo.TLSMaterial)[0].length > 0;
|
||||||
if (hasTLSData || hasTLSMaterial) {
|
defaultContextWithTLS = hasTLSData || hasTLSMaterial;
|
||||||
|
} catch (e) {
|
||||||
|
core.info(`Unable to parse default docker context info: ${e}`);
|
||||||
|
core.info(res.stdout.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (defaultContextWithTLS) {
|
||||||
const tmpDockerContext = `buildx-${uuid.v4()}`;
|
const tmpDockerContext = `buildx-${uuid.v4()}`;
|
||||||
await core.group(`Creating temp docker context (TLS data loaded in default one)`, async () => {
|
await core.group(`Creating temp docker context (TLS data loaded in default one)`, async () => {
|
||||||
await Docker.getExecOutput(['context', 'create', tmpDockerContext], {
|
await Docker.getExecOutput(['context', 'create', tmpDockerContext], {
|
||||||
ignoreReturnCode: true
|
ignoreReturnCode: true
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
core.warning(`cannot create docker context ${tmpDockerContext}: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
core.warning(`Cannot create docker context ${tmpDockerContext}: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||||
} else {
|
} else {
|
||||||
core.info(`Setting builder endpoint to ${tmpDockerContext} context`);
|
core.info(`Setting builder endpoint to ${tmpDockerContext} context`);
|
||||||
inputs.endpoint = tmpDockerContext;
|
inputs.endpoint = tmpDockerContext;
|
||||||
|
|
Loading…
Reference in a new issue