use methods from toolkit to handle provenance attrs
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									80def7c74e
								
							
						
					
					
						commit
						b3435979d1
					
				| @ -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); | ||||
|     } | ||||
|  | ||||
| @ -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": { | ||||
|  | ||||
| @ -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()}`; | ||||
| } | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax