mirror of
https://gitea.com/docker/build-push-action.git
synced 2024-11-22 17:39:38 +01:00
Merge pull request #349 from crazy-max/remove-os-limitation
Remove os limitation
This commit is contained in:
commit
3ce082ae8d
7 changed files with 63 additions and 25 deletions
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
|
uses: crazy-max/ghaction-dump-context@v1
|
||||||
|
|
||||||
error:
|
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
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
|
|
|
@ -43,7 +43,6 @@ ___
|
||||||
* [outputs](#outputs)
|
* [outputs](#outputs)
|
||||||
* [Troubleshooting](#troubleshooting)
|
* [Troubleshooting](#troubleshooting)
|
||||||
* [Keep up-to-date with GitHub Dependabot](#keep-up-to-date-with-github-dependabot)
|
* [Keep up-to-date with GitHub Dependabot](#keep-up-to-date-with-github-dependabot)
|
||||||
* [Limitation](#limitation)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -243,7 +242,3 @@ updates:
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
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
|
# Troubleshooting
|
||||||
|
|
||||||
* [Cannot push to a registry](#cannot-push-to-a-registry)
|
* [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
|
## 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
|
[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.
|
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)
|
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.
|
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
|
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.
|
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 });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = __importStar(__webpack_require__(747));
|
const fs = __importStar(__webpack_require__(747));
|
||||||
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 exec = __importStar(__webpack_require__(757));
|
||||||
|
@ -2396,18 +2395,20 @@ const core = __importStar(__webpack_require__(186));
|
||||||
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') {
|
core.startGroup(`Docker info`);
|
||||||
throw new Error(`Only supported on linux platform`);
|
yield exec.exec('docker', ['version']);
|
||||||
}
|
yield exec.exec('docker', ['info']);
|
||||||
|
core.endGroup();
|
||||||
if (!(yield buildx.isAvailable())) {
|
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());
|
stateHelper.setTmpDir(context.tmpDir());
|
||||||
const buildxVersion = yield buildx.getVersion();
|
const buildxVersion = yield buildx.getVersion();
|
||||||
core.info(`📣 Buildx version: ${buildxVersion}`);
|
core.info(`Using buildx ${buildxVersion}`);
|
||||||
const defContext = context.defaultContext();
|
const defContext = context.defaultContext();
|
||||||
let inputs = yield context.getInputs(defContext);
|
let inputs = yield context.getInputs(defContext);
|
||||||
core.info(`🏃 Starting build...`);
|
core.info(`Building...`);
|
||||||
const args = yield context.getArgs(inputs, defContext, buildxVersion);
|
const args = yield context.getArgs(inputs, defContext, buildxVersion);
|
||||||
yield exec.exec('docker', args).then(res => {
|
yield exec.exec('docker', args).then(res => {
|
||||||
if (res.stderr != '' && !res.success) {
|
if (res.stderr != '' && !res.success) {
|
||||||
|
@ -2416,9 +2417,10 @@ function run() {
|
||||||
});
|
});
|
||||||
const imageID = yield buildx.getImageID();
|
const imageID = yield buildx.getImageID();
|
||||||
if (imageID) {
|
if (imageID) {
|
||||||
core.info('🛒 Extracting digest...');
|
core.startGroup(`Extracting digest`);
|
||||||
core.info(`${imageID}`);
|
core.info(`${imageID}`);
|
||||||
core.setOutput('digest', imageID);
|
core.setOutput('digest', imageID);
|
||||||
|
core.endGroup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
@ -2429,8 +2431,9 @@ function run() {
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (stateHelper.tmpDir.length > 0) {
|
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 });
|
fs.rmdirSync(stateHelper.tmpDir, { recursive: true });
|
||||||
|
core.endGroup();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -4695,7 +4698,7 @@ function parseVersion(stdout) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const matches = /\sv?([0-9.]+)/.exec(stdout);
|
const matches = /\sv?([0-9.]+)/.exec(stdout);
|
||||||
if (!matches) {
|
if (!matches) {
|
||||||
throw new Error(`Cannot parse Buildx version`);
|
throw new Error(`Cannot parse buildx version`);
|
||||||
}
|
}
|
||||||
return semver.clean(matches[1]);
|
return semver.clean(matches[1]);
|
||||||
});
|
});
|
||||||
|
|
|
@ -100,7 +100,7 @@ export async function getVersion(): Promise<string> {
|
||||||
export async function parseVersion(stdout: string): Promise<string> {
|
export async function parseVersion(stdout: string): Promise<string> {
|
||||||
const matches = /\sv?([0-9.]+)/.exec(stdout);
|
const matches = /\sv?([0-9.]+)/.exec(stdout);
|
||||||
if (!matches) {
|
if (!matches) {
|
||||||
throw new Error(`Cannot parse Buildx version`);
|
throw new Error(`Cannot parse buildx version`);
|
||||||
}
|
}
|
||||||
return semver.clean(matches[1]);
|
return semver.clean(matches[1]);
|
||||||
}
|
}
|
||||||
|
|
21
src/main.ts
21
src/main.ts
|
@ -1,5 +1,4 @@
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
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 exec from './exec';
|
||||||
|
@ -8,22 +7,24 @@ import * as core from '@actions/core';
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
if (os.platform() !== 'linux') {
|
core.startGroup(`Docker info`);
|
||||||
throw new Error(`Only supported on linux platform`);
|
await exec.exec('docker', ['version']);
|
||||||
}
|
await exec.exec('docker', ['info']);
|
||||||
|
core.endGroup();
|
||||||
|
|
||||||
if (!(await buildx.isAvailable())) {
|
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());
|
stateHelper.setTmpDir(context.tmpDir());
|
||||||
|
|
||||||
const buildxVersion = await buildx.getVersion();
|
const buildxVersion = await buildx.getVersion();
|
||||||
core.info(`📣 Buildx version: ${buildxVersion}`);
|
core.info(`Using buildx ${buildxVersion}`);
|
||||||
|
|
||||||
const defContext = context.defaultContext();
|
const defContext = context.defaultContext();
|
||||||
let inputs: context.Inputs = await context.getInputs(defContext);
|
let inputs: context.Inputs = await context.getInputs(defContext);
|
||||||
|
|
||||||
core.info(`🏃 Starting build...`);
|
core.info(`Building...`);
|
||||||
const args: string[] = await context.getArgs(inputs, defContext, buildxVersion);
|
const args: string[] = await context.getArgs(inputs, defContext, buildxVersion);
|
||||||
await exec.exec('docker', args).then(res => {
|
await exec.exec('docker', args).then(res => {
|
||||||
if (res.stderr != '' && !res.success) {
|
if (res.stderr != '' && !res.success) {
|
||||||
|
@ -33,9 +34,10 @@ async function run(): Promise<void> {
|
||||||
|
|
||||||
const imageID = await buildx.getImageID();
|
const imageID = await buildx.getImageID();
|
||||||
if (imageID) {
|
if (imageID) {
|
||||||
core.info('🛒 Extracting digest...');
|
core.startGroup(`Extracting digest`);
|
||||||
core.info(`${imageID}`);
|
core.info(`${imageID}`);
|
||||||
core.setOutput('digest', imageID);
|
core.setOutput('digest', imageID);
|
||||||
|
core.endGroup();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
|
@ -44,8 +46,9 @@ async function run(): Promise<void> {
|
||||||
|
|
||||||
async function cleanup(): Promise<void> {
|
async function cleanup(): Promise<void> {
|
||||||
if (stateHelper.tmpDir.length > 0) {
|
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});
|
fs.rmdirSync(stateHelper.tmpDir, {recursive: true});
|
||||||
|
core.endGroup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue