diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 6595599..deb205a 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import {Builder} from '@docker/actions-toolkit/lib/buildx/builder'; import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx'; import {Context} from '@docker/actions-toolkit/lib/context'; -import {Docker} from '@docker/actions-toolkit/lib/docker'; +import {Docker} from '@docker/actions-toolkit/lib/docker/docker'; import {GitHub} from '@docker/actions-toolkit/lib/github'; import {Toolkit} from '@docker/actions-toolkit/lib/toolkit'; import {BuilderInfo} from '@docker/actions-toolkit/lib/types/builder'; @@ -42,9 +42,9 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<Bu lastActivity: new Date('2023-01-16 09:45:23 +0000 UTC'), nodes: [ { - buildkitVersion: 'v0.11.0', - buildkitdFlags: '--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host', - driverOpts: ['BUILDKIT_STEP_LOG_MAX_SIZE=10485760', 'BUILDKIT_STEP_LOG_MAX_SPEED=10485760', 'JAEGER_TRACE=localhost:6831', 'image=moby/buildkit:latest', 'network=host'], + buildkit: 'v0.11.0', + 'buildkitd-flags': '--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host', + 'driver-opts': ['BUILDKIT_STEP_LOG_MAX_SIZE=10485760', 'BUILDKIT_STEP_LOG_MAX_SPEED=10485760', 'JAEGER_TRACE=localhost:6831', 'image=moby/buildkit:latest', 'network=host'], endpoint: 'unix:///var/run/docker.sock', name: 'builder20', platforms: 'linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6', @@ -609,7 +609,7 @@ nproc=3`], jest.spyOn(Buildx.prototype, 'version').mockImplementation(async (): Promise<string> => { return buildxVersion; }); - const inp = await context.getInputs(); + const inp = await context.getInputs(toolkit); const res = await context.getArgs(inp, toolkit); expect(res).toEqual(expected); } diff --git a/package.json b/package.json index e21b81c..3cb1dd2 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "dependencies": { "@actions/core": "^1.10.0", "@docker/actions-toolkit": "^0.1.0-beta.19", - "csv-parse": "^5.3.5", "handlebars": "^4.7.7" }, "devDependencies": { diff --git a/src/context.ts b/src/context.ts index 91121a0..efb2230 100644 --- a/src/context.ts +++ b/src/context.ts @@ -1,5 +1,4 @@ import * as core from '@actions/core'; -import {parse} from 'csv-parse/sync'; import * as handlebars from 'handlebars'; import {Context} from '@docker/actions-toolkit/lib/context'; import {GitHub} from '@docker/actions-toolkit/lib/github'; @@ -40,7 +39,7 @@ export interface Inputs { githubToken: string; } -export async function getInputs(): Promise<Inputs> { +export async function getInputs(toolkit: Toolkit): Promise<Inputs> { return { addHosts: Util.getInputList('add-hosts'), allow: Util.getInputList('allow'), @@ -60,7 +59,7 @@ export async function getInputs(): Promise<Inputs> { noCacheFilters: Util.getInputList('no-cache-filters'), outputs: Util.getInputList('outputs', {ignoreComma: true}), platforms: Util.getInputList('platforms'), - provenance: getProvenanceInput('provenance'), + provenance: toolkit.buildx.inputs.getProvenanceInput('provenance'), pull: core.getBooleanInput('pull'), push: core.getBooleanInput('push'), sbom: core.getInput('sbom'), @@ -145,10 +144,10 @@ async function getBuildArgs(inputs: Inputs, context: string, toolkit: Toolkit): if (GitHub.context.payload.repository?.private ?? false) { // if this is a private repository, we set the default provenance // attributes being set in buildx: https://github.com/docker/buildx/blob/fb27e3f919dcbf614d7126b10c2bc2d0b1927eb6/build/build.go#L603 - args.push('--provenance', getProvenanceAttrs(`mode=min,inline-only=true`)); + args.push('--provenance', toolkit.buildx.inputs.resolveProvenanceAttrs(`mode=min,inline-only=true`)); } else { // for a public repository, we set max provenance mode. - args.push('--provenance', getProvenanceAttrs(`mode=max`)); + args.push('--provenance', toolkit.buildx.inputs.resolveProvenanceAttrs(`mode=max`)); } } if (inputs.sbom) { @@ -215,37 +214,3 @@ async function getCommonArgs(inputs: Inputs, toolkit: Toolkit): Promise<Array<st } return args; } - -function getProvenanceInput(name: string): string { - const input = core.getInput(name); - if (!input) { - // if input is not set, default values will be set later. - return input; - } - try { - return core.getBooleanInput(name) ? `builder-id=${Context.provenanceBuilderID()}` : 'false'; - } catch (err) { - // not a valid boolean, so we assume it's a string - return getProvenanceAttrs(input); - } -} - -function getProvenanceAttrs(input: string): string { - // parse attributes from input - const fields = parse(input, { - relaxColumnCount: true, - skipEmptyLines: true - })[0]; - // check if builder-id attribute exists in the input - for (const field of fields) { - const parts = field - .toString() - .split(/(?<=^[^=]+?)=/) - .map(item => item.trim()); - if (parts[0] == 'builder-id') { - return input; - } - } - // if not add builder-id attribute - return `${input},builder-id=${Context.provenanceBuilderID()}`; -} diff --git a/src/main.ts b/src/main.ts index ea470c5..5debee2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import * as stateHelper from './state-helper'; import * as core from '@actions/core'; import * as actionsToolkit from '@docker/actions-toolkit'; import {Context} from '@docker/actions-toolkit/lib/context'; -import {Docker} from '@docker/actions-toolkit/lib/docker'; +import {Docker} from '@docker/actions-toolkit/lib/docker/docker'; import {Exec} from '@docker/actions-toolkit/lib/exec'; import {GitHub} from '@docker/actions-toolkit/lib/github'; import {Toolkit} from '@docker/actions-toolkit/lib/toolkit'; @@ -13,8 +13,8 @@ import * as context from './context'; actionsToolkit.run( // main async () => { - const inputs: context.Inputs = await context.getInputs(); const toolkit = new Toolkit(); + const inputs: context.Inputs = await context.getInputs(toolkit); await core.group(`GitHub Actions runtime token ACs`, async () => { try {