Skip to content

Commit b343597

Browse files
committed
use methods from toolkit to handle provenance attrs
Signed-off-by: CrazyMax <[email protected]>
1 parent 80def7c commit b343597

File tree

4 files changed

+11
-47
lines changed

4 files changed

+11
-47
lines changed

__tests__/context.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as path from 'path';
44
import {Builder} from '@docker/actions-toolkit/lib/buildx/builder';
55
import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx';
66
import {Context} from '@docker/actions-toolkit/lib/context';
7-
import {Docker} from '@docker/actions-toolkit/lib/docker';
7+
import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
88
import {GitHub} from '@docker/actions-toolkit/lib/github';
99
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit';
1010
import {BuilderInfo} from '@docker/actions-toolkit/lib/types/builder';
@@ -42,9 +42,9 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<Bu
4242
lastActivity: new Date('2023-01-16 09:45:23 +0000 UTC'),
4343
nodes: [
4444
{
45-
buildkitVersion: 'v0.11.0',
46-
buildkitdFlags: '--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host',
47-
driverOpts: ['BUILDKIT_STEP_LOG_MAX_SIZE=10485760', 'BUILDKIT_STEP_LOG_MAX_SPEED=10485760', 'JAEGER_TRACE=localhost:6831', 'image=moby/buildkit:latest', 'network=host'],
45+
buildkit: 'v0.11.0',
46+
'buildkitd-flags': '--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host',
47+
'driver-opts': ['BUILDKIT_STEP_LOG_MAX_SIZE=10485760', 'BUILDKIT_STEP_LOG_MAX_SPEED=10485760', 'JAEGER_TRACE=localhost:6831', 'image=moby/buildkit:latest', 'network=host'],
4848
endpoint: 'unix:///var/run/docker.sock',
4949
name: 'builder20',
5050
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`],
609609
jest.spyOn(Buildx.prototype, 'version').mockImplementation(async (): Promise<string> => {
610610
return buildxVersion;
611611
});
612-
const inp = await context.getInputs();
612+
const inp = await context.getInputs(toolkit);
613613
const res = await context.getArgs(inp, toolkit);
614614
expect(res).toEqual(expected);
615615
}

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
"dependencies": {
3131
"@actions/core": "^1.10.0",
3232
"@docker/actions-toolkit": "^0.1.0-beta.19",
33-
"csv-parse": "^5.3.5",
3433
"handlebars": "^4.7.7"
3534
},
3635
"devDependencies": {

src/context.ts

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import * as core from '@actions/core';
2-
import {parse} from 'csv-parse/sync';
32
import * as handlebars from 'handlebars';
43
import {Context} from '@docker/actions-toolkit/lib/context';
54
import {GitHub} from '@docker/actions-toolkit/lib/github';
@@ -40,7 +39,7 @@ export interface Inputs {
4039
githubToken: string;
4140
}
4241

43-
export async function getInputs(): Promise<Inputs> {
42+
export async function getInputs(toolkit: Toolkit): Promise<Inputs> {
4443
return {
4544
addHosts: Util.getInputList('add-hosts'),
4645
allow: Util.getInputList('allow'),
@@ -60,7 +59,7 @@ export async function getInputs(): Promise<Inputs> {
6059
noCacheFilters: Util.getInputList('no-cache-filters'),
6160
outputs: Util.getInputList('outputs', {ignoreComma: true}),
6261
platforms: Util.getInputList('platforms'),
63-
provenance: getProvenanceInput('provenance'),
62+
provenance: toolkit.buildx.inputs.getProvenanceInput('provenance'),
6463
pull: core.getBooleanInput('pull'),
6564
push: core.getBooleanInput('push'),
6665
sbom: core.getInput('sbom'),
@@ -145,10 +144,10 @@ async function getBuildArgs(inputs: Inputs, context: string, toolkit: Toolkit):
145144
if (GitHub.context.payload.repository?.private ?? false) {
146145
// if this is a private repository, we set the default provenance
147146
// attributes being set in buildx: https://github.com/docker/buildx/blob/fb27e3f919dcbf614d7126b10c2bc2d0b1927eb6/build/build.go#L603
148-
args.push('--provenance', getProvenanceAttrs(`mode=min,inline-only=true`));
147+
args.push('--provenance', toolkit.buildx.inputs.resolveProvenanceAttrs(`mode=min,inline-only=true`));
149148
} else {
150149
// for a public repository, we set max provenance mode.
151-
args.push('--provenance', getProvenanceAttrs(`mode=max`));
150+
args.push('--provenance', toolkit.buildx.inputs.resolveProvenanceAttrs(`mode=max`));
152151
}
153152
}
154153
if (inputs.sbom) {
@@ -215,37 +214,3 @@ async function getCommonArgs(inputs: Inputs, toolkit: Toolkit): Promise<Array<st
215214
}
216215
return args;
217216
}
218-
219-
function getProvenanceInput(name: string): string {
220-
const input = core.getInput(name);
221-
if (!input) {
222-
// if input is not set, default values will be set later.
223-
return input;
224-
}
225-
try {
226-
return core.getBooleanInput(name) ? `builder-id=${Context.provenanceBuilderID()}` : 'false';
227-
} catch (err) {
228-
// not a valid boolean, so we assume it's a string
229-
return getProvenanceAttrs(input);
230-
}
231-
}
232-
233-
function getProvenanceAttrs(input: string): string {
234-
// parse attributes from input
235-
const fields = parse(input, {
236-
relaxColumnCount: true,
237-
skipEmptyLines: true
238-
})[0];
239-
// check if builder-id attribute exists in the input
240-
for (const field of fields) {
241-
const parts = field
242-
.toString()
243-
.split(/(?<=^[^=]+?)=/)
244-
.map(item => item.trim());
245-
if (parts[0] == 'builder-id') {
246-
return input;
247-
}
248-
}
249-
// if not add builder-id attribute
250-
return `${input},builder-id=${Context.provenanceBuilderID()}`;
251-
}

src/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as stateHelper from './state-helper';
33
import * as core from '@actions/core';
44
import * as actionsToolkit from '@docker/actions-toolkit';
55
import {Context} from '@docker/actions-toolkit/lib/context';
6-
import {Docker} from '@docker/actions-toolkit/lib/docker';
6+
import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
77
import {Exec} from '@docker/actions-toolkit/lib/exec';
88
import {GitHub} from '@docker/actions-toolkit/lib/github';
99
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit';
@@ -13,8 +13,8 @@ import * as context from './context';
1313
actionsToolkit.run(
1414
// main
1515
async () => {
16-
const inputs: context.Inputs = await context.getInputs();
1716
const toolkit = new Toolkit();
17+
const inputs: context.Inputs = await context.getInputs(toolkit);
1818

1919
await core.group(`GitHub Actions runtime token ACs`, async () => {
2020
try {

0 commit comments

Comments
 (0)