From 8729954e7c88803f0872d326a38c7bba240054bc Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 27 Apr 2021 16:09:40 +0200 Subject: [PATCH] Remove os limitation Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ README.md | 5 ----- TROUBLESHOOTING.md | 6 ++++++ dist/index.js | 23 +++++++++++++---------- src/buildx.ts | 2 +- src/main.ts | 21 ++++++++++++--------- 6 files changed, 63 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dbf5e2ed8..bd30beda6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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: - diff --git a/README.md b/README.md index dcf15e0f5..6a1dfa35b 100644 --- a/README.md +++ b/README.md @@ -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). diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 8ca55bb4d..42bf57bc8 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -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. diff --git a/dist/index.js b/dist/index.js index c5ff16008..7ed1c91f8 100644 --- a/dist/index.js +++ b/dist/index.js @@ -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]); }); diff --git a/src/buildx.ts b/src/buildx.ts index 327604ad7..061271096 100644 --- a/src/buildx.ts +++ b/src/buildx.ts @@ -100,7 +100,7 @@ export async function getVersion(): Promise { export async function parseVersion(stdout: string): Promise { 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]); } diff --git a/src/main.ts b/src/main.ts index 4a0fae7e9..03fb28256 100644 --- a/src/main.ts +++ b/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 { 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 { 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 { async function cleanup(): Promise { 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(); } }