mirror of
				https://gitea.com/docker/build-push-action.git
				synced 2025-10-31 09:08:18 +07:00 
			
		
		
		
	export build record and upload artifact
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									86c2bd0031
								
							
						
					
					
						commit
						e51051ad0b
					
				
							
								
								
									
										56
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -4,11 +4,14 @@ import * as stateHelper from './state-helper'; | |||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| import * as actionsToolkit from '@docker/actions-toolkit'; | import * as actionsToolkit from '@docker/actions-toolkit'; | ||||||
| 
 | 
 | ||||||
|  | import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx'; | ||||||
|  | import {History as BuildxHistory} from '@docker/actions-toolkit/lib/buildx/history'; | ||||||
| import {Context} from '@docker/actions-toolkit/lib/context'; | import {Context} from '@docker/actions-toolkit/lib/context'; | ||||||
| import {Docker} from '@docker/actions-toolkit/lib/docker/docker'; | import {Docker} from '@docker/actions-toolkit/lib/docker/docker'; | ||||||
| import {Exec} from '@docker/actions-toolkit/lib/exec'; | import {Exec} from '@docker/actions-toolkit/lib/exec'; | ||||||
| import {GitHub} from '@docker/actions-toolkit/lib/github'; | import {GitHub} from '@docker/actions-toolkit/lib/github'; | ||||||
| import {Toolkit} from '@docker/actions-toolkit/lib/toolkit'; | import {Toolkit} from '@docker/actions-toolkit/lib/toolkit'; | ||||||
|  | import {Util} from '@docker/actions-toolkit/lib/util'; | ||||||
| 
 | 
 | ||||||
| import {ConfigFile} from '@docker/actions-toolkit/lib/types/docker/docker'; | import {ConfigFile} from '@docker/actions-toolkit/lib/types/docker/docker'; | ||||||
| 
 | 
 | ||||||
| @ -17,6 +20,7 @@ import * as context from './context'; | |||||||
| actionsToolkit.run( | actionsToolkit.run( | ||||||
|   // main
 |   // main
 | ||||||
|   async () => { |   async () => { | ||||||
|  |     const startedTime = new Date(); | ||||||
|     const inputs: context.Inputs = await context.getInputs(); |     const inputs: context.Inputs = await context.getInputs(); | ||||||
|     core.debug(`inputs: ${JSON.stringify(inputs)}`); |     core.debug(`inputs: ${JSON.stringify(inputs)}`); | ||||||
| 
 | 
 | ||||||
| @ -87,11 +91,12 @@ actionsToolkit.run( | |||||||
|     core.debug(`buildCmd.command: ${buildCmd.command}`); |     core.debug(`buildCmd.command: ${buildCmd.command}`); | ||||||
|     core.debug(`buildCmd.args: ${JSON.stringify(buildCmd.args)}`); |     core.debug(`buildCmd.args: ${JSON.stringify(buildCmd.args)}`); | ||||||
| 
 | 
 | ||||||
|  |     let err: Error | undefined; | ||||||
|     await Exec.getExecOutput(buildCmd.command, buildCmd.args, { |     await Exec.getExecOutput(buildCmd.command, buildCmd.args, { | ||||||
|       ignoreReturnCode: true |       ignoreReturnCode: true | ||||||
|     }).then(res => { |     }).then(res => { | ||||||
|       if (res.stderr.length > 0 && res.exitCode != 0) { |       if (res.stderr.length > 0 && res.exitCode != 0) { | ||||||
|         throw new Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`); |         err = Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`); | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| @ -118,9 +123,39 @@ actionsToolkit.run( | |||||||
|         core.setOutput('metadata', metadatadt); |         core.setOutput('metadata', metadatadt); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|  |     await core.group(`Reference`, async () => { | ||||||
|  |       const ref = await buildRef(toolkit, startedTime, inputs.builder); | ||||||
|  |       if (ref) { | ||||||
|  |         core.info(ref); | ||||||
|  |         stateHelper.setBuildRef(ref); | ||||||
|  |       } else { | ||||||
|  |         core.warning('No build ref found'); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |     if (err) { | ||||||
|  |       throw err; | ||||||
|  |     } | ||||||
|   }, |   }, | ||||||
|   // post
 |   // post
 | ||||||
|   async () => { |   async () => { | ||||||
|  |     if (stateHelper.buildRef.length > 0) { | ||||||
|  |       await core.group(`Exporting build record`, async () => { | ||||||
|  |         try { | ||||||
|  |           const buildxHistory = new BuildxHistory(); | ||||||
|  |           const exportRes = await buildxHistory.export({ | ||||||
|  |             refs: [stateHelper.buildRef] | ||||||
|  |           }); | ||||||
|  |           core.info(`Build record exported to ${exportRes.dockerbuildFilename} (${Util.formatFileSize(exportRes.dockerbuildSize)})`); | ||||||
|  |           await GitHub.uploadArtifact({ | ||||||
|  |             filename: exportRes.dockerbuildFilename, | ||||||
|  |             mimeType: 'application/gzip', | ||||||
|  |             retentionDays: 90 | ||||||
|  |           }); | ||||||
|  |         } catch (e) { | ||||||
|  |           core.warning(e.message); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|     if (stateHelper.tmpDir.length > 0) { |     if (stateHelper.tmpDir.length > 0) { | ||||||
|       await core.group(`Removing temp folder ${stateHelper.tmpDir}`, async () => { |       await core.group(`Removing temp folder ${stateHelper.tmpDir}`, async () => { | ||||||
|         fs.rmSync(stateHelper.tmpDir, {recursive: true}); |         fs.rmSync(stateHelper.tmpDir, {recursive: true}); | ||||||
| @ -128,3 +163,22 @@ actionsToolkit.run( | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| ); | ); | ||||||
|  | 
 | ||||||
|  | async function buildRef(toolkit: Toolkit, since: Date, builder?: string): Promise<string> { | ||||||
|  |   // get ref from metadata file
 | ||||||
|  |   const ref = toolkit.buildxBuild.resolveRef(); | ||||||
|  |   if (ref) { | ||||||
|  |     return ref; | ||||||
|  |   } | ||||||
|  |   // otherwise, look for the very first build ref since the build has started
 | ||||||
|  |   if (!builder) { | ||||||
|  |     const currentBuilder = await toolkit.builder.inspect(); | ||||||
|  |     builder = currentBuilder.name; | ||||||
|  |   } | ||||||
|  |   const refs = Buildx.refs({ | ||||||
|  |     dir: Buildx.refsDir, | ||||||
|  |     builderName: builder, | ||||||
|  |     since: since | ||||||
|  |   }); | ||||||
|  |   return Object.keys(refs).length > 0 ? Object.keys(refs)[0] : ''; | ||||||
|  | } | ||||||
|  | |||||||
| @ -1,7 +1,12 @@ | |||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| 
 | 
 | ||||||
| export const tmpDir = process.env['STATE_tmpDir'] || ''; | export const tmpDir = process.env['STATE_tmpDir'] || ''; | ||||||
|  | export const buildRef = process.env['STATE_buildRef'] || ''; | ||||||
| 
 | 
 | ||||||
| export function setTmpDir(tmpDir: string) { | export function setTmpDir(tmpDir: string) { | ||||||
|   core.saveState('tmpDir', tmpDir); |   core.saveState('tmpDir', tmpDir); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export function setBuildRef(buildRef: string) { | ||||||
|  |   core.saveState('buildRef', buildRef); | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user