1
0
Fork 0
mirror of https://github.com/docker/setup-buildx-action.git synced 2025-06-06 13:41:51 +02:00

Support to retain cache

Signed-off-by: Balaji Arun <balajia@vt.edu>
This commit is contained in:
Balaji Arun 2023-02-23 13:11:05 -08:00 committed by Balaji Arun
parent 3f1544eb9e
commit 703e95926c
11 changed files with 2049 additions and 2497 deletions

View file

@ -100,6 +100,7 @@ The following inputs can be used as `step.with` keys:
| `append` | YAML | | [Append additional nodes](https://docs.docker.com/build/ci/github-actions/configure-builder/#append-additional-nodes-to-the-builder) to the builder |
| `cache-binary` | Bool | `true` | Cache buildx binary to GitHub Actions cache backend |
| `cleanup` | Bool | `true` | Cleanup temp files and remove builder at the end of a job |
| `name` | String | Default Docker Context | Name of the builder to create or use. If a builder with this name already exists, it will be used instead of creating a new one. |
> [!IMPORTANT]
> If you set the `buildkitd-flags` input, the default flags (`--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host`)

View file

@ -56,6 +56,7 @@ describe('getCreateArgs', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
[
'create',
@ -74,6 +75,7 @@ describe('getCreateArgs', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
[
'create',
@ -92,6 +94,7 @@ describe('getCreateArgs', () => {
['driver-opts', 'image=moby/buildkit:master\nnetwork=host'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
[
'create',
@ -112,6 +115,7 @@ describe('getCreateArgs', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
[
'create',
@ -132,6 +136,7 @@ describe('getCreateArgs', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
[
'create',
@ -151,6 +156,7 @@ describe('getCreateArgs', () => {
['driver-opts', `"env.no_proxy=localhost,127.0.0.1,.mydomain"`],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -169,6 +175,7 @@ describe('getCreateArgs', () => {
['platforms', 'linux/amd64\n"linux/arm64,linux/arm/v7"'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -187,6 +194,7 @@ describe('getCreateArgs', () => {
['driver', 'unknown'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -203,6 +211,7 @@ describe('getCreateArgs', () => {
['buildkitd-config', path.join(fixturesDir, 'buildkitd.toml')],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -221,6 +230,7 @@ describe('getCreateArgs', () => {
['buildkitd-config-inline', 'debug = true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -240,6 +250,7 @@ describe('getCreateArgs', () => {
['buildkitd-flags', '--allow-insecure-entitlement network.host'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false'],
]),
[
'create',
@ -247,7 +258,45 @@ describe('getCreateArgs', () => {
'--driver', 'cloud',
'--buildkitd-flags', '--allow-insecure-entitlement network.host',
]
]
],
[
11,
'v0.10.3',
new Map<string, string>([
['install', 'false'],
['use', 'true'],
['cleanup', 'true'],
['cache-binary', 'true'],
['keep-state', 'false'],
['name', 'test-builder-name'],
]),
[
'create',
'--name', 'test-builder-name',
'--driver', 'docker-container',
'--buildkitd-flags', '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host',
'--use'
]
],
[
12,
'v0.10.3',
new Map<string, string>([
['install', 'false'],
['use', 'true'],
['cleanup', 'true'],
['cache-binary', 'true'],
['keep-state', 'true'],
['name', 'test-builder-name'],
]),
[
'create',
'--name', 'test-builder-name',
'--driver', 'docker-container',
'--buildkitd-flags', '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host',
'--use',
]
],
])(
'[%d] given buildx %s and %p as inputs, returns %p',
async (num: number, buildxVersion: string, inputs: Map<string, string>, expected: Array<string>) => {
@ -285,6 +334,7 @@ describe('getAppendArgs', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
{
"name": "aws_graviton2",
@ -343,6 +393,7 @@ describe('getVersion', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
''
],
@ -354,7 +405,8 @@ describe('getVersion', () => {
['install', 'false'],
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true']
['cleanup', 'true'],
['keep-state', 'false']
]),
'latest'
],
@ -366,7 +418,8 @@ describe('getVersion', () => {
['install', 'false'],
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true']
['cleanup', 'true'],
['keep-state', 'false']
]),
'edge'
],
@ -378,7 +431,8 @@ describe('getVersion', () => {
['install', 'false'],
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true']
['cleanup', 'true'],
['keep-state', 'false']
]),
'v0.19.2'
],
@ -391,7 +445,8 @@ describe('getVersion', () => {
['install', 'false'],
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true']
['cleanup', 'true'],
['keep-state', 'false']
]),
'cloud:latest'
],
@ -404,7 +459,8 @@ describe('getVersion', () => {
['install', 'false'],
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true']
['cleanup', 'true'],
['keep-state', 'false']
]),
'cloud:edge'
],
@ -417,6 +473,7 @@ describe('getVersion', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
'cloud:latest'
],
@ -430,6 +487,7 @@ describe('getVersion', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
'cloud:v0.11.2-desktop.2'
],
@ -442,6 +500,7 @@ describe('getVersion', () => {
['use', 'true'],
['cache-binary', 'true'],
['cleanup', 'true'],
['keep-state', 'false']
]),
'cloud:v0.11.2-desktop.2'
],

View file

@ -50,6 +50,12 @@ inputs:
cleanup:
description: 'Cleanup temp files and remove builder at the end of a job'
default: 'true'
keep-state:
description: 'Keep BuildKit state on cleanup. This is only useful on persistent self-hosted runners.'
default: 'false'
required: false
name:
description: 'Builder name set when creating the builder. If not specified, one will be generated.'
required: false
# TODO: remove deprecated config and config-inline inputs
config:

48
dist/index.js generated vendored

File diff suppressed because one or more lines are too long

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

950
dist/licenses.txt generated vendored

File diff suppressed because it is too large Load diff

2
dist/sourcemap-register.js generated vendored

File diff suppressed because one or more lines are too long

View file

@ -25,12 +25,13 @@ export interface Inputs {
append: string;
cacheBinary: boolean;
cleanup: boolean;
keepState: boolean;
}
export async function getInputs(): Promise<Inputs> {
return {
version: core.getInput('version'),
name: await getBuilderName(core.getInput('driver') || 'docker-container'),
name: await getBuilderName(core.getInput('name'), core.getInput('driver') || 'docker-container'),
driver: core.getInput('driver') || 'docker-container',
driverOpts: Util.getInputList('driver-opts', {ignoreComma: true, quote: false}),
buildkitdFlags: core.getInput('buildkitd-flags'),
@ -42,12 +43,16 @@ export async function getInputs(): Promise<Inputs> {
buildkitdConfigInline: core.getInput('buildkitd-config-inline') || core.getInput('config-inline'),
append: core.getInput('append'),
cacheBinary: core.getBooleanInput('cache-binary'),
cleanup: core.getBooleanInput('cleanup')
cleanup: core.getBooleanInput('cleanup'),
keepState: core.getBooleanInput('keep-state')
};
}
export async function getBuilderName(driver: string): Promise<string> {
return driver == 'docker' ? await Docker.context() : `builder-${crypto.randomUUID()}`;
export async function getBuilderName(name: string, driver: string): Promise<string> {
if (driver == 'docker') {
return await Docker.context();
}
return name || `builder-${crypto.randomUUID()}`;
}
export async function getCreateArgs(inputs: Inputs, toolkit: Toolkit): Promise<Array<string>> {

View file

@ -115,6 +115,7 @@ actionsToolkit.run(
});
}
}
stateHelper.setKeepState(inputs.keepState);
if (inputs.driver !== 'docker') {
await core.group(`Creating a new builder instance`, async () => {
@ -249,7 +250,7 @@ actionsToolkit.run(
const buildx = new Buildx({standalone: stateHelper.standalone});
const builder = new Builder({buildx: buildx});
if (await builder.exists(stateHelper.builderName)) {
const rmCmd = await buildx.getCommand(['rm', stateHelper.builderName]);
const rmCmd = await buildx.getCommand(['rm', stateHelper.builderName, ...(stateHelper.keepState ? ['--keep-state'] : [])]);
await Exec.getExecOutput(rmCmd.command, rmCmd.args, {
ignoreReturnCode: true
}).then(res => {

View file

@ -9,6 +9,7 @@ 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 const buildxIsDefaultBuilder = /true/i.test(process.env['STATE_buildxIsDefaultBuilder'] || '');
export const keepState = !!process.env['STATE_keepState'];
export function setDebug(debug: string) {
core.saveState('isDebug', debug);
@ -45,3 +46,7 @@ export function setCleanup(cleanup: boolean) {
export function setBuildxIsDefaultBuilder(buildxIsDefaultBuilder: boolean) {
core.saveState('buildxIsDefaultBuilder', buildxIsDefaultBuilder);
}
export function setKeepState(retain: boolean) {
core.saveState('keepState', retain);
}

3445
yarn.lock

File diff suppressed because it is too large Load diff