mirror of
https://github.com/docker/setup-buildx-action.git
synced 2025-06-27 21:21:08 +02:00
Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
988b5a0280 | |||
2c215620b8 | |||
3382292cd5 | |||
3d68780484 | |||
d069e98648 | |||
8b850f86dc | |||
aa33708b10 | |||
2d99e3412d | |||
4dab43650b | |||
49a04d6890 | |||
a6ade2e34f | |||
2f2694b8d1 | |||
0a4bab6632 | |||
2ad185228a | |||
560ac469d6 | |||
b3a341759e |
@ -52,7 +52,7 @@ inputs:
|
||||
description: 'Cleanup temp files and remove builder at the end of a job'
|
||||
default: 'true'
|
||||
required: false
|
||||
# deprecated inputs
|
||||
# TODO: remove deprecated config and config-inline inputs
|
||||
config:
|
||||
description: 'BuildKit daemon config file'
|
||||
deprecationMessage: 'Use buildkitd-config instead'
|
||||
|
6
dist/index.js
generated
vendored
6
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
@ -26,7 +26,7 @@
|
||||
"packageManager": "yarn@3.6.3",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.1",
|
||||
"@docker/actions-toolkit": "^0.31.0",
|
||||
"@docker/actions-toolkit": "^0.35.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"uuid": "^10.0.0"
|
||||
},
|
||||
|
61
src/main.ts
61
src/main.ts
@ -1,5 +1,6 @@
|
||||
import * as fs from 'fs';
|
||||
import * as yaml from 'js-yaml';
|
||||
import * as uuid from 'uuid';
|
||||
import * as core from '@actions/core';
|
||||
import * as actionsToolkit from '@docker/actions-toolkit';
|
||||
|
||||
@ -11,6 +12,7 @@ import {Toolkit} from '@docker/actions-toolkit/lib/toolkit';
|
||||
import {Util} from '@docker/actions-toolkit/lib/util';
|
||||
|
||||
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 stateHelper from './state-helper';
|
||||
@ -68,6 +70,51 @@ actionsToolkit.run(
|
||||
fs.mkdirSync(Buildx.certsDir, {recursive: true});
|
||||
stateHelper.setCertsDir(Buildx.certsDir);
|
||||
|
||||
// if the default context has TLS data loaded and endpoint is not set, then
|
||||
// we create a temporary docker context only if driver is docker-container
|
||||
// https://github.com/docker/buildx/blob/b96ad59f64d40873e4959336d294b648bb3937fe/builder/builder.go#L489
|
||||
// https://github.com/docker/setup-buildx-action/issues/105
|
||||
if (!standalone && inputs.driver == 'docker-container' && (await Docker.context()) == 'default' && inputs.endpoint.length == 0) {
|
||||
let defaultContextWithTLS: boolean = false;
|
||||
await core.group(`Inspecting default docker context`, async () => {
|
||||
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;
|
||||
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()}`;
|
||||
await core.group(`Creating temp docker context (TLS data loaded in default one)`, async () => {
|
||||
await Docker.getExecOutput(['context', 'create', tmpDockerContext], {
|
||||
ignoreReturnCode: true
|
||||
}).then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
core.warning(`Cannot create docker context ${tmpDockerContext}: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||
} else {
|
||||
core.info(`Setting builder endpoint to ${tmpDockerContext} context`);
|
||||
inputs.endpoint = tmpDockerContext;
|
||||
stateHelper.setTmpDockerContext(tmpDockerContext);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (inputs.driver !== 'docker') {
|
||||
await core.group(`Creating a new builder instance`, async () => {
|
||||
const certsDriverOpts = Buildx.resolveCertsDriverOpts(inputs.driver, inputs.endpoint, {
|
||||
@ -181,7 +228,7 @@ actionsToolkit.run(
|
||||
async () => {
|
||||
if (stateHelper.IsDebug && stateHelper.containerName.length > 0) {
|
||||
await core.group(`BuildKit container logs`, async () => {
|
||||
await Exec.getExecOutput('docker', ['logs', `${stateHelper.containerName}`], {
|
||||
await Docker.getExecOutput(['logs', `${stateHelper.containerName}`], {
|
||||
ignoreReturnCode: true
|
||||
}).then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
@ -214,6 +261,18 @@ actionsToolkit.run(
|
||||
});
|
||||
}
|
||||
|
||||
if (stateHelper.tmpDockerContext) {
|
||||
await core.group(`Removing temp docker context`, async () => {
|
||||
await Exec.getExecOutput('docker', ['context', 'rm', '-f', stateHelper.tmpDockerContext], {
|
||||
ignoreReturnCode: true
|
||||
}).then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
core.warning(`${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (stateHelper.certsDir.length > 0 && fs.existsSync(stateHelper.certsDir)) {
|
||||
await core.group(`Cleaning up certificates`, async () => {
|
||||
fs.rmSync(stateHelper.certsDir, {recursive: true});
|
||||
|
@ -6,6 +6,7 @@ export const builderName = process.env['STATE_builderName'] || '';
|
||||
export const builderDriver = process.env['STATE_builderDriver'] || '';
|
||||
export const containerName = process.env['STATE_containerName'] || '';
|
||||
export const certsDir = process.env['STATE_certsDir'] || '';
|
||||
export const tmpDockerContext = process.env['STATE_tmpDockerContext'] || '';
|
||||
export const cleanup = /true/i.test(process.env['STATE_cleanup'] || '');
|
||||
|
||||
export function setDebug(debug: string) {
|
||||
@ -32,6 +33,10 @@ export function setCertsDir(certsDir: string) {
|
||||
core.saveState('certsDir', certsDir);
|
||||
}
|
||||
|
||||
export function setTmpDockerContext(tmpDockerContext: string) {
|
||||
core.saveState('tmpDockerContext', tmpDockerContext);
|
||||
}
|
||||
|
||||
export function setCleanup(cleanup: boolean) {
|
||||
core.saveState('cleanup', cleanup);
|
||||
}
|
||||
|
33
yarn.lock
33
yarn.lock
@ -12,9 +12,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@actions/artifact@npm:^2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@actions/artifact@npm:2.1.7"
|
||||
"@actions/artifact@npm:^2.1.8":
|
||||
version: 2.1.8
|
||||
resolution: "@actions/artifact@npm:2.1.8"
|
||||
dependencies:
|
||||
"@actions/core": ^1.10.0
|
||||
"@actions/github": ^5.1.1
|
||||
@ -30,7 +30,7 @@ __metadata:
|
||||
jwt-decode: ^3.1.2
|
||||
twirp-ts: ^2.5.0
|
||||
unzip-stream: ^0.3.1
|
||||
checksum: 346c7caf43bdeb4a96c044ca3a6a005d82b977178b1a6be2c6954dfd59fef3344d2576bdd07c6cac9b54207cc88d7b1161cabd08c7cc15a1db86bf82463b36c7
|
||||
checksum: 51a47c21bcdac705abb61dbaef923f2760354c39bcad44a31b129e18bf31f646e5148f92ee7e1198275d1dba7bebfd1d1500ad7f62f6de1e65b57b2d092d5341
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -1071,11 +1071,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docker/actions-toolkit@npm:^0.31.0":
|
||||
version: 0.31.0
|
||||
resolution: "@docker/actions-toolkit@npm:0.31.0"
|
||||
"@docker/actions-toolkit@npm:^0.35.0":
|
||||
version: 0.35.0
|
||||
resolution: "@docker/actions-toolkit@npm:0.35.0"
|
||||
dependencies:
|
||||
"@actions/artifact": ^2.1.7
|
||||
"@actions/artifact": ^2.1.8
|
||||
"@actions/cache": ^3.2.4
|
||||
"@actions/core": ^1.10.1
|
||||
"@actions/exec": ^1.1.1
|
||||
@ -1093,10 +1093,10 @@ __metadata:
|
||||
he: ^1.2.0
|
||||
js-yaml: ^4.1.0
|
||||
jwt-decode: ^4.0.0
|
||||
semver: ^7.6.2
|
||||
semver: ^7.6.3
|
||||
tar-stream: ^3.1.7
|
||||
tmp: ^0.2.3
|
||||
checksum: 34fdc08b6380bbee05fc740b161bb1172658da6d3e58f0f9cf8bc12011da638b37314e2a92a689542955189459ace241769c9f247a6917bf8365bc461221eecd
|
||||
checksum: 27fa4a500e94beff376bc322cc1074c82b20f6ceb0104c43ed5efc613763c8b7ea37b231c32c4dfcb5f7ce8a14948eecc799aa363d60d11d848466d5718d63f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -3168,7 +3168,7 @@ __metadata:
|
||||
resolution: "docker-setup-buildx@workspace:."
|
||||
dependencies:
|
||||
"@actions/core": ^1.10.1
|
||||
"@docker/actions-toolkit": ^0.31.0
|
||||
"@docker/actions-toolkit": ^0.35.0
|
||||
"@types/js-yaml": ^4.0.9
|
||||
"@types/node": ^20.12.12
|
||||
"@types/uuid": ^10.0.0
|
||||
@ -5940,7 +5940,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.6.0, semver@npm:^7.6.2":
|
||||
"semver@npm:^7.6.0":
|
||||
version: 7.6.2
|
||||
resolution: "semver@npm:7.6.2"
|
||||
bin:
|
||||
@ -5949,6 +5949,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.6.3":
|
||||
version: 7.6.3
|
||||
resolution: "semver@npm:7.6.3"
|
||||
bin:
|
||||
semver: bin/semver.js
|
||||
checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"shebang-command@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "shebang-command@npm:2.0.0"
|
||||
|
Reference in New Issue
Block a user