mirror of
https://github.com/docker/setup-buildx-action.git
synced 2026-03-20 04:20:20 +08:00
Use BuildPulse config
This commit is contained in:
parent
afeb29a6e0
commit
66bd59d4e8
10 changed files with 9110 additions and 2466 deletions
|
|
@ -1,16 +1,21 @@
|
|||
import * as crypto from 'crypto';
|
||||
import * as core from '@actions/core';
|
||||
|
||||
import * as TOML from '@iarna/toml';
|
||||
|
||||
import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
|
||||
import {Util} from '@docker/actions-toolkit/lib/util';
|
||||
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit';
|
||||
|
||||
import {Node} from '@docker/actions-toolkit/lib/types/buildx/builder';
|
||||
import path from 'path';
|
||||
import * as fs from 'fs';
|
||||
|
||||
export const builderNodeEnvPrefix = 'BUILDER_NODE';
|
||||
const defaultBuildkitdFlags = '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host';
|
||||
|
||||
export interface Inputs {
|
||||
buildpulseBuilder: string;
|
||||
version: string;
|
||||
name: string;
|
||||
driver: string;
|
||||
|
|
@ -29,8 +34,9 @@ export interface Inputs {
|
|||
|
||||
export async function getInputs(): Promise<Inputs> {
|
||||
return {
|
||||
buildpulseBuilder: core.getInput('buildpulse-builder'),
|
||||
version: core.getInput('version'),
|
||||
name: await getBuilderName(core.getInput('driver') || 'docker-container'),
|
||||
name: core.getInput('name') || (await getBuilderName(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'),
|
||||
|
|
@ -51,11 +57,23 @@ export async function getBuilderName(driver: string): Promise<string> {
|
|||
}
|
||||
|
||||
export async function getCreateArgs(inputs: Inputs, toolkit: Toolkit): Promise<Array<string>> {
|
||||
const args: Array<string> = ['create', '--name', inputs.name, '--driver', inputs.driver];
|
||||
const remoteBuilderEnabled = inputs.buildpulseBuilder && inputs.buildpulseBuilder.length > 0;
|
||||
|
||||
// if remote builder is enabled, use 'kubernetes' driver
|
||||
const driverInput = remoteBuilderEnabled ? 'kubernetes' : inputs.driver;
|
||||
const args: Array<string> = ['create', '--name', inputs.name, '--driver', driverInput];
|
||||
if (await toolkit.buildx.versionSatisfies('>=0.3.0')) {
|
||||
await Util.asyncForEach(inputs.driverOpts, async (driverOpt: string) => {
|
||||
args.push('--driver-opt', driverOpt);
|
||||
});
|
||||
|
||||
// if remote builder is enabled, specify which runner type to use
|
||||
if (remoteBuilderEnabled) {
|
||||
const arch = inputs.buildpulseBuilder.includes('arm64') ? 'arm64' : 'x64';
|
||||
const remoteBuilderDriverOpt = `nodeselector=eks.amazonaws.com/nodegroup=eks-nodegroup-${inputs.buildpulseBuilder},namespace=${inputs.buildpulseBuilder},image=796224758921.dkr.ecr.us-east-1.amazonaws.com/moby/buildkit:buildx-stable-1-${arch}`;
|
||||
args.push('--driver-opt', remoteBuilderDriverOpt);
|
||||
}
|
||||
|
||||
if (inputs.buildkitdFlags) {
|
||||
args.push('--buildkitd-flags', inputs.buildkitdFlags);
|
||||
} else if (driverSupportsBuildkitdFlags(inputs.driver)) {
|
||||
|
|
@ -68,17 +86,53 @@ export async function getCreateArgs(inputs: Inputs, toolkit: Toolkit): Promise<A
|
|||
if (inputs.use) {
|
||||
args.push('--use');
|
||||
}
|
||||
|
||||
// modify BuildKit config to include local registry
|
||||
if (inputs.buildkitdConfig) {
|
||||
args.push('--config', toolkit.buildkit.config.resolveFromFile(inputs.buildkitdConfig));
|
||||
} else if (inputs.buildkitdConfigInline) {
|
||||
args.push('--config', toolkit.buildkit.config.resolveFromString(inputs.buildkitdConfigInline));
|
||||
const newBuildkitConfigPath = await addClusterLocalRegistryConfigFile(inputs.buildkitdConfig);
|
||||
|
||||
args.push('--config', toolkit.buildkit.config.resolveFromFile(newBuildkitConfigPath));
|
||||
} else {
|
||||
const startingConfig = inputs.buildkitdConfigInline || '';
|
||||
const newBuildKitToml = addClusterLocalRegistryConfig(startingConfig);
|
||||
|
||||
args.push('--config', toolkit.buildkit.config.resolveFromString(newBuildKitToml));
|
||||
}
|
||||
|
||||
if (inputs.endpoint) {
|
||||
args.push(inputs.endpoint);
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
||||
async function addClusterLocalRegistryConfigFile(buildkitConfigPath: string): Promise<string> {
|
||||
const configDir = path.dirname(buildkitConfigPath);
|
||||
const newBuildkitConfigPath = path.join(configDir, 'buildpulse_buildkit.toml');
|
||||
|
||||
const buildkitConfigContent = await fs.promises.readFile(buildkitConfigPath, 'utf-8');
|
||||
const newBuildkitConfigContent = addClusterLocalRegistryConfig(buildkitConfigContent);
|
||||
await fs.promises.writeFile(newBuildkitConfigPath, newBuildkitConfigContent);
|
||||
|
||||
return newBuildkitConfigPath;
|
||||
}
|
||||
|
||||
function addClusterLocalRegistryConfig(buildkitConfig: string): string {
|
||||
const inlineToml = TOML.parse(buildkitConfig);
|
||||
if (!inlineToml['registry']) {
|
||||
inlineToml['registry'] = {};
|
||||
}
|
||||
|
||||
const buildpulseDockerRegistry = process.env.BP_DOCKER_REGISTRY;
|
||||
if (buildpulseDockerRegistry && buildpulseDockerRegistry.length && !inlineToml['registry'][buildpulseDockerRegistry]) {
|
||||
inlineToml['registry'][buildpulseDockerRegistry] = {
|
||||
http: true,
|
||||
insecure: true
|
||||
};
|
||||
}
|
||||
|
||||
return TOML.stringify(inlineToml);
|
||||
}
|
||||
|
||||
export async function getAppendArgs(inputs: Inputs, node: Node, toolkit: Toolkit): Promise<Array<string>> {
|
||||
const args: Array<string> = ['create', '--name', inputs.name, '--append'];
|
||||
if (node.name) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue