mirror of
				https://gitea.com/docker/build-push-action.git
				synced 2025-10-31 09:08:18 +07:00 
			
		
		
		
	Merge pull request #195 from crazy-max/docker-driver
Throw error message instead of exit code
This commit is contained in:
		
						commit
						99ba0e6cbf
					
				
							
								
								
									
										58
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -197,6 +197,64 @@ jobs: | |||||||
|         if: always() |         if: always() | ||||||
|         uses: crazy-max/ghaction-dump-context@v1 |         uses: crazy-max/ghaction-dump-context@v1 | ||||||
| 
 | 
 | ||||||
|  |   error: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - | ||||||
|  |         name: Checkout | ||||||
|  |         uses: actions/checkout@v2.3.3 | ||||||
|  |       - | ||||||
|  |         name: Set up QEMU | ||||||
|  |         uses: docker/setup-qemu-action@v1 | ||||||
|  |       - | ||||||
|  |         name: Set up Docker Buildx | ||||||
|  |         uses: docker/setup-buildx-action@v1 | ||||||
|  |       - | ||||||
|  |         name: Build | ||||||
|  |         continue-on-error: true | ||||||
|  |         uses: ./ | ||||||
|  |         with: | ||||||
|  |           context: ./test | ||||||
|  |           file: ./test/Dockerfile | ||||||
|  |           platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x | ||||||
|  |           push: true | ||||||
|  |           tags: localhost:5000/name/app:latest | ||||||
|  |       - | ||||||
|  |         name: Dump context | ||||||
|  |         if: always() | ||||||
|  |         uses: crazy-max/ghaction-dump-context@v1 | ||||||
|  | 
 | ||||||
|  |   docker-driver: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         push: | ||||||
|  |           - true | ||||||
|  |           - false | ||||||
|  |     services: | ||||||
|  |       registry: | ||||||
|  |         image: registry:2 | ||||||
|  |         ports: | ||||||
|  |           - 5000:5000 | ||||||
|  |     steps: | ||||||
|  |       - | ||||||
|  |         name: Checkout | ||||||
|  |         uses: actions/checkout@v2.3.3 | ||||||
|  |       - | ||||||
|  |         name: Build | ||||||
|  |         continue-on-error: ${{ matrix.push }} | ||||||
|  |         uses: ./ | ||||||
|  |         with: | ||||||
|  |           context: ./test | ||||||
|  |           file: ./test/Dockerfile | ||||||
|  |           push: ${{ matrix.push }} | ||||||
|  |           tags: localhost:5000/name/app:latest | ||||||
|  |       - | ||||||
|  |         name: Dump context | ||||||
|  |         if: always() | ||||||
|  |         uses: crazy-max/ghaction-dump-context@v1 | ||||||
|  | 
 | ||||||
|   multi: |   multi: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     strategy: |     strategy: | ||||||
|  | |||||||
| @ -92,7 +92,6 @@ describe('isLocalOrTarExporter', () => { | |||||||
| 
 | 
 | ||||||
| describe('getVersion', () => { | describe('getVersion', () => { | ||||||
|   it('valid', async () => { |   it('valid', async () => { | ||||||
|     await exec.exec('docker', ['buildx', 'version']); |  | ||||||
|     const version = await buildx.getVersion(); |     const version = await buildx.getVersion(); | ||||||
|     console.log(`version: ${version}`); |     console.log(`version: ${version}`); | ||||||
|     expect(semver.valid(version)).not.toBeNull(); |     expect(semver.valid(version)).not.toBeNull(); | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| import * as fs from 'fs'; | import * as fs from 'fs'; | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as context from '../src/context'; |  | ||||||
| import * as buildx from '../src/buildx'; | import * as buildx from '../src/buildx'; | ||||||
|  | import * as context from '../src/context'; | ||||||
| 
 | 
 | ||||||
| jest.spyOn(context, 'defaultContext').mockImplementation((): string => { | jest.spyOn(context, 'defaultContext').mockImplementation((): string => { | ||||||
|   return 'https://github.com/docker/build-push-action.git#test-jest'; |   return 'https://github.com/docker/build-push-action.git#test-jest'; | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2377,19 +2377,17 @@ const fs = __importStar(__webpack_require__(747)); | |||||||
| const os = __importStar(__webpack_require__(87)); | const os = __importStar(__webpack_require__(87)); | ||||||
| const buildx = __importStar(__webpack_require__(295)); | const buildx = __importStar(__webpack_require__(295)); | ||||||
| const context = __importStar(__webpack_require__(842)); | const context = __importStar(__webpack_require__(842)); | ||||||
|  | const exec = __importStar(__webpack_require__(757)); | ||||||
| const stateHelper = __importStar(__webpack_require__(647)); | const stateHelper = __importStar(__webpack_require__(647)); | ||||||
| const core = __importStar(__webpack_require__(186)); | const core = __importStar(__webpack_require__(186)); | ||||||
| const exec = __importStar(__webpack_require__(514)); |  | ||||||
| function run() { | function run() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         try { |         try { | ||||||
|             if (os.platform() !== 'linux') { |             if (os.platform() !== 'linux') { | ||||||
|                 core.setFailed('Only supported on linux platform'); |                 throw new Error(`Only supported on linux platform`); | ||||||
|                 return; |  | ||||||
|             } |             } | ||||||
|             if (!(yield buildx.isAvailable())) { |             if (!(yield buildx.isAvailable())) { | ||||||
|                 core.setFailed(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); |                 throw new Error(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||||
|                 return; |  | ||||||
|             } |             } | ||||||
|             stateHelper.setTmpDir(context.tmpDir()); |             stateHelper.setTmpDir(context.tmpDir()); | ||||||
|             const buildxVersion = yield buildx.getVersion(); |             const buildxVersion = yield buildx.getVersion(); | ||||||
| @ -2398,7 +2396,11 @@ function run() { | |||||||
|             let inputs = yield context.getInputs(defContext); |             let inputs = yield context.getInputs(defContext); | ||||||
|             core.info(`🏃 Starting build...`); |             core.info(`🏃 Starting build...`); | ||||||
|             const args = yield context.getArgs(inputs, defContext, buildxVersion); |             const args = yield context.getArgs(inputs, defContext, buildxVersion); | ||||||
|             yield exec.exec('docker', args); |             yield exec.exec('docker', args).then(res => { | ||||||
|  |                 if (res.stderr != '' && !res.success) { | ||||||
|  |                     throw new Error(`buildx call failed with: ${res.stderr.match(/(.*)\s*$/)[0]}`); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|             const imageID = yield buildx.getImageID(); |             const imageID = yield buildx.getImageID(); | ||||||
|             if (imageID) { |             if (imageID) { | ||||||
|                 core.info('🛒 Extracting digest...'); |                 core.info('🛒 Extracting digest...'); | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ export interface ExecResult { | |||||||
|   stderr: string; |   stderr: string; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export const exec = async (command: string, args: string[] = [], silent: boolean): Promise<ExecResult> => { | export const exec = async (command: string, args: string[] = [], silent?: boolean): Promise<ExecResult> => { | ||||||
|   let stdout: string = ''; |   let stdout: string = ''; | ||||||
|   let stderr: string = ''; |   let stderr: string = ''; | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -2,20 +2,18 @@ import * as fs from 'fs'; | |||||||
| import * as os from 'os'; | import * as os from 'os'; | ||||||
| import * as buildx from './buildx'; | import * as buildx from './buildx'; | ||||||
| import * as context from './context'; | import * as context from './context'; | ||||||
|  | import * as exec from './exec'; | ||||||
| import * as stateHelper from './state-helper'; | import * as stateHelper from './state-helper'; | ||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| import * as exec from '@actions/exec'; |  | ||||||
| 
 | 
 | ||||||
| async function run(): Promise<void> { | async function run(): Promise<void> { | ||||||
|   try { |   try { | ||||||
|     if (os.platform() !== 'linux') { |     if (os.platform() !== 'linux') { | ||||||
|       core.setFailed('Only supported on linux platform'); |       throw new Error(`Only supported on linux platform`); | ||||||
|       return; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!(await buildx.isAvailable())) { |     if (!(await buildx.isAvailable())) { | ||||||
|       core.setFailed(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); |       throw new Error(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||||
|       return; |  | ||||||
|     } |     } | ||||||
|     stateHelper.setTmpDir(context.tmpDir()); |     stateHelper.setTmpDir(context.tmpDir()); | ||||||
| 
 | 
 | ||||||
| @ -27,7 +25,11 @@ async function run(): Promise<void> { | |||||||
| 
 | 
 | ||||||
|     core.info(`🏃 Starting build...`); |     core.info(`🏃 Starting build...`); | ||||||
|     const args: string[] = await context.getArgs(inputs, defContext, buildxVersion); |     const args: string[] = await context.getArgs(inputs, defContext, buildxVersion); | ||||||
|     await exec.exec('docker', args); |     await exec.exec('docker', args).then(res => { | ||||||
|  |       if (res.stderr != '' && !res.success) { | ||||||
|  |         throw new Error(`buildx call failed with: ${res.stderr.match(/(.*)\s*$/)![0]}`); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
| 
 | 
 | ||||||
|     const imageID = await buildx.getImageID(); |     const imageID = await buildx.getImageID(); | ||||||
|     if (imageID) { |     if (imageID) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user