Merge pull request #349 from crazy-max/remove-os-limitation
Remove os limitation
This commit is contained in:
		
						commit
						3ce082ae8d
					
				
							
								
								
									
										
											BIN
										
									
								
								.github/build-push-action.png
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.github/build-push-action.png
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 29 KiB | 
							
								
								
									
										31
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -207,6 +207,37 @@ jobs: | ||||
|         uses: crazy-max/ghaction-dump-context@v1 | ||||
| 
 | ||||
|   error: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - | ||||
|         name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - | ||||
|         name: Stop docker | ||||
|         run: | | ||||
|           sudo systemctl stop docker | ||||
|       - | ||||
|         name: Build | ||||
|         id: docker_build | ||||
|         continue-on-error: true | ||||
|         uses: ./ | ||||
|         with: | ||||
|           context: ./test | ||||
|           file: ./test/Dockerfile | ||||
|       - | ||||
|         name: Check | ||||
|         run: | | ||||
|           echo "${{ toJson(steps.docker_build) }}" | ||||
|           if [ "${{ steps.docker_build.outcome }}" != "failure" ] || [ "${{ steps.docker_build.conclusion }}" != "success" ]; then | ||||
|             echo "::error::Should have failed" | ||||
|             exit 1 | ||||
|           fi | ||||
|       - | ||||
|         name: Dump context | ||||
|         if: always() | ||||
|         uses: crazy-max/ghaction-dump-context@v1 | ||||
| 
 | ||||
|   error-buildx: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - | ||||
|  | ||||
| @ -43,7 +43,6 @@ ___ | ||||
|   * [outputs](#outputs) | ||||
| * [Troubleshooting](#troubleshooting) | ||||
| * [Keep up-to-date with GitHub Dependabot](#keep-up-to-date-with-github-dependabot) | ||||
| * [Limitation](#limitation) | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| @ -243,7 +242,3 @@ updates: | ||||
|     schedule: | ||||
|       interval: "daily" | ||||
| ``` | ||||
| 
 | ||||
| ## Limitation | ||||
| 
 | ||||
| This action is only available for Linux [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources). | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| # Troubleshooting | ||||
| 
 | ||||
| * [Cannot push to a registry](#cannot-push-to-a-registry) | ||||
|   * [BuildKit container logs](#buildkit-container-logs) | ||||
|   * [With containerd](#with-containerd) | ||||
| 
 | ||||
| ## Cannot push to a registry | ||||
| 
 | ||||
| @ -16,9 +18,13 @@ These issues are not directly related to this action but are rather linked to [b | ||||
| [buildkit](https://github.com/moby/buildkit), [containerd](https://github.com/containerd/containerd) or the registry | ||||
| on which you're pushing your image. The quality of error message depends on the registry and are usually not very informative. | ||||
| 
 | ||||
| ### BuildKit container logs | ||||
| 
 | ||||
| To help you solve this, you have to [enable debugging in the setup-buildx](https://github.com/docker/setup-buildx-action#buildkit-container-logs) | ||||
| action step and attach BuildKit container logs to your issue. | ||||
| 
 | ||||
| ### With containerd | ||||
| 
 | ||||
| Next you can test pushing with [containerd action](https://github.com/crazy-max/ghaction-setup-containerd) using the | ||||
| following workflow. If it works then open an issue on [buildkit](https://github.com/moby/buildkit) repository. | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										23
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2387,7 +2387,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const fs = __importStar(__webpack_require__(747)); | ||||
| const os = __importStar(__webpack_require__(87)); | ||||
| const buildx = __importStar(__webpack_require__(295)); | ||||
| const context = __importStar(__webpack_require__(842)); | ||||
| const exec = __importStar(__webpack_require__(757)); | ||||
| @ -2396,18 +2395,20 @@ const core = __importStar(__webpack_require__(186)); | ||||
| function run() { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         try { | ||||
|             if (os.platform() !== 'linux') { | ||||
|                 throw new Error(`Only supported on linux platform`); | ||||
|             } | ||||
|             core.startGroup(`Docker info`); | ||||
|             yield exec.exec('docker', ['version']); | ||||
|             yield exec.exec('docker', ['info']); | ||||
|             core.endGroup(); | ||||
|             if (!(yield buildx.isAvailable())) { | ||||
|                 throw new Error(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||
|                 core.setFailed(`Docker buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||
|                 return; | ||||
|             } | ||||
|             stateHelper.setTmpDir(context.tmpDir()); | ||||
|             const buildxVersion = yield buildx.getVersion(); | ||||
|             core.info(`📣 Buildx version: ${buildxVersion}`); | ||||
|             core.info(`Using buildx ${buildxVersion}`); | ||||
|             const defContext = context.defaultContext(); | ||||
|             let inputs = yield context.getInputs(defContext); | ||||
|             core.info(`🏃 Starting build...`); | ||||
|             core.info(`Building...`); | ||||
|             const args = yield context.getArgs(inputs, defContext, buildxVersion); | ||||
|             yield exec.exec('docker', args).then(res => { | ||||
|                 if (res.stderr != '' && !res.success) { | ||||
| @ -2416,9 +2417,10 @@ function run() { | ||||
|             }); | ||||
|             const imageID = yield buildx.getImageID(); | ||||
|             if (imageID) { | ||||
|                 core.info('🛒 Extracting digest...'); | ||||
|                 core.startGroup(`Extracting digest`); | ||||
|                 core.info(`${imageID}`); | ||||
|                 core.setOutput('digest', imageID); | ||||
|                 core.endGroup(); | ||||
|             } | ||||
|         } | ||||
|         catch (error) { | ||||
| @ -2429,8 +2431,9 @@ function run() { | ||||
| function cleanup() { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         if (stateHelper.tmpDir.length > 0) { | ||||
|             core.info(`🚿 Removing temp folder ${stateHelper.tmpDir}`); | ||||
|             core.startGroup(`Removing temp folder ${stateHelper.tmpDir}`); | ||||
|             fs.rmdirSync(stateHelper.tmpDir, { recursive: true }); | ||||
|             core.endGroup(); | ||||
|         } | ||||
|     }); | ||||
| } | ||||
| @ -4695,7 +4698,7 @@ function parseVersion(stdout) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         const matches = /\sv?([0-9.]+)/.exec(stdout); | ||||
|         if (!matches) { | ||||
|             throw new Error(`Cannot parse Buildx version`); | ||||
|             throw new Error(`Cannot parse buildx version`); | ||||
|         } | ||||
|         return semver.clean(matches[1]); | ||||
|     }); | ||||
|  | ||||
| @ -100,7 +100,7 @@ export async function getVersion(): Promise<string> { | ||||
| export async function parseVersion(stdout: string): Promise<string> { | ||||
|   const matches = /\sv?([0-9.]+)/.exec(stdout); | ||||
|   if (!matches) { | ||||
|     throw new Error(`Cannot parse Buildx version`); | ||||
|     throw new Error(`Cannot parse buildx version`); | ||||
|   } | ||||
|   return semver.clean(matches[1]); | ||||
| } | ||||
|  | ||||
							
								
								
									
										21
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -1,5 +1,4 @@ | ||||
| import * as fs from 'fs'; | ||||
| import * as os from 'os'; | ||||
| import * as buildx from './buildx'; | ||||
| import * as context from './context'; | ||||
| import * as exec from './exec'; | ||||
| @ -8,22 +7,24 @@ import * as core from '@actions/core'; | ||||
| 
 | ||||
| async function run(): Promise<void> { | ||||
|   try { | ||||
|     if (os.platform() !== 'linux') { | ||||
|       throw new Error(`Only supported on linux platform`); | ||||
|     } | ||||
|     core.startGroup(`Docker info`); | ||||
|     await exec.exec('docker', ['version']); | ||||
|     await exec.exec('docker', ['info']); | ||||
|     core.endGroup(); | ||||
| 
 | ||||
|     if (!(await buildx.isAvailable())) { | ||||
|       throw new Error(`Buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||
|       core.setFailed(`Docker buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`); | ||||
|       return; | ||||
|     } | ||||
|     stateHelper.setTmpDir(context.tmpDir()); | ||||
| 
 | ||||
|     const buildxVersion = await buildx.getVersion(); | ||||
|     core.info(`📣 Buildx version: ${buildxVersion}`); | ||||
|     core.info(`Using buildx ${buildxVersion}`); | ||||
| 
 | ||||
|     const defContext = context.defaultContext(); | ||||
|     let inputs: context.Inputs = await context.getInputs(defContext); | ||||
| 
 | ||||
|     core.info(`🏃 Starting build...`); | ||||
|     core.info(`Building...`); | ||||
|     const args: string[] = await context.getArgs(inputs, defContext, buildxVersion); | ||||
|     await exec.exec('docker', args).then(res => { | ||||
|       if (res.stderr != '' && !res.success) { | ||||
| @ -33,9 +34,10 @@ async function run(): Promise<void> { | ||||
| 
 | ||||
|     const imageID = await buildx.getImageID(); | ||||
|     if (imageID) { | ||||
|       core.info('🛒 Extracting digest...'); | ||||
|       core.startGroup(`Extracting digest`); | ||||
|       core.info(`${imageID}`); | ||||
|       core.setOutput('digest', imageID); | ||||
|       core.endGroup(); | ||||
|     } | ||||
|   } catch (error) { | ||||
|     core.setFailed(error.message); | ||||
| @ -44,8 +46,9 @@ async function run(): Promise<void> { | ||||
| 
 | ||||
| async function cleanup(): Promise<void> { | ||||
|   if (stateHelper.tmpDir.length > 0) { | ||||
|     core.info(`🚿 Removing temp folder ${stateHelper.tmpDir}`); | ||||
|     core.startGroup(`Removing temp folder ${stateHelper.tmpDir}`); | ||||
|     fs.rmdirSync(stateHelper.tmpDir, {recursive: true}); | ||||
|     core.endGroup(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user