Compare commits

...

39 Commits

Author SHA1 Message Date
CrazyMax 6460b33ba7 Merge pull request #208 from crazy-max/build-summary
export build record and generate summary
2024-06-17 09:23:59 +02:00
CrazyMax bc3c21b237 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:08:30 +02:00
CrazyMax 93d1f86e62 don't generate summary for cloud driver
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:06:22 +02:00
CrazyMax 00f0c171f7 DOCKER_BUILD_NO_SUMMARY env to disable summary
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:06:22 +02:00
CrazyMax a29d7e9cb9 generate build summary
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:06:22 +02:00
CrazyMax f40a782c97 export build record and upload artifact
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:06:21 +02:00
CrazyMax bc96707098 Merge pull request #214 from docker/dependabot/npm_and_yarn/braces-3.0.3
chore(deps): Bump braces from 3.0.2 to 3.0.3
2024-06-14 16:05:22 +02:00
CrazyMax 84cc400131 Merge pull request #215 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.26.0
chore(deps): Bump @docker/actions-toolkit from 0.25.1 to 0.26.0
2024-06-14 16:04:02 +02:00
CrazyMax 0160c64311 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-14 16:02:17 +02:00
dependabot[bot] 25ba9228c1 chore(deps): Bump @docker/actions-toolkit from 0.25.1 to 0.26.0
Bumps [@docker/actions-toolkit](https://github.com/docker/actions-toolkit) from 0.25.1 to 0.26.0.
- [Release notes](https://github.com/docker/actions-toolkit/releases)
- [Commits](https://github.com/docker/actions-toolkit/compare/v0.25.1...v0.26.0)

---
updated-dependencies:
- dependency-name: "@docker/actions-toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-14 13:55:27 +00:00
dependabot[bot] 69497d5717 chore(deps): Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-12 07:47:47 +00:00
CrazyMax 2def0425f4 Merge pull request #213 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.25.1
chore(deps): Bump @docker/actions-toolkit from 0.25.0 to 0.25.1
2024-06-12 09:45:45 +02:00
CrazyMax 1f186e91c9 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-12 09:40:55 +02:00
dependabot[bot] 8473a36b83 chore(deps): Bump @docker/actions-toolkit from 0.25.0 to 0.25.1
Bumps [@docker/actions-toolkit](https://github.com/docker/actions-toolkit) from 0.25.0 to 0.25.1.
- [Release notes](https://github.com/docker/actions-toolkit/releases)
- [Commits](https://github.com/docker/actions-toolkit/compare/v0.25.0...v0.25.1)

---
updated-dependencies:
- dependency-name: "@docker/actions-toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-12 07:35:36 +00:00
CrazyMax bd980ca3d9 Merge pull request #212 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.25.0
chore(deps): Bump @docker/actions-toolkit from 0.24.0 to 0.25.0
2024-06-10 15:14:53 +02:00
CrazyMax 1a92fbfaa9 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-10 15:13:13 +02:00
CrazyMax 670407c68a fix tests after changes with provenance builder-id
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-06-10 15:10:53 +02:00
dependabot[bot] 4f5d587adf chore(deps): Bump @docker/actions-toolkit from 0.24.0 to 0.25.0
Bumps [@docker/actions-toolkit](https://github.com/docker/actions-toolkit) from 0.24.0 to 0.25.0.
- [Release notes](https://github.com/docker/actions-toolkit/releases)
- [Commits](https://github.com/docker/actions-toolkit/compare/v0.24.0...v0.25.0)

---
updated-dependencies:
- dependency-name: "@docker/actions-toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 12:56:37 +00:00
CrazyMax a99697dcb6 Merge pull request #211 from crazy-max/builder-info
show builder information before building
2024-05-29 14:20:31 +02:00
CrazyMax 702752d616 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-29 13:16:32 +02:00
CrazyMax 79fe072114 show builder information before building
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-29 13:14:09 +02:00
CrazyMax 1cc392619e Merge pull request #210 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.24.0
chore(deps): Bump @docker/actions-toolkit from 0.23.0 to 0.24.0
2024-05-27 12:53:50 +02:00
CrazyMax 334a1f6c42 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-27 12:51:27 +02:00
CrazyMax 5017dd3140 fixes since moved types
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-27 12:50:16 +02:00
dependabot[bot] 0815d964e4 chore(deps): Bump @docker/actions-toolkit from 0.23.0 to 0.24.0
Bumps [@docker/actions-toolkit](https://github.com/docker/actions-toolkit) from 0.23.0 to 0.24.0.
- [Release notes](https://github.com/docker/actions-toolkit/releases)
- [Commits](https://github.com/docker/actions-toolkit/compare/v0.23.0...v0.24.0)

---
updated-dependencies:
- dependency-name: "@docker/actions-toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-27 10:44:00 +00:00
CrazyMax 5a89abed82 Merge pull request #209 from crazy-max/update-dev-deps
chore: update dev dependencies
2024-05-15 13:51:27 +02:00
CrazyMax fdc36b0336 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-15 13:49:17 +02:00
CrazyMax 2d78083701 chore: update dev dependencies
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-15 13:48:25 +02:00
CrazyMax b38d33d426 Merge pull request #207 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.23.0
chore(deps): Bump @docker/actions-toolkit from 0.22.0 to 0.23.0
2024-05-14 14:06:24 +02:00
CrazyMax fc16f00415 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-14 14:04:22 +02:00
CrazyMax 1bc598cbb8 fixes related to actions-toolkit 0.23.0 changes
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-14 14:02:37 +02:00
dependabot[bot] 66ac74c2bc chore(deps): Bump @docker/actions-toolkit from 0.22.0 to 0.23.0
Bumps [@docker/actions-toolkit](https://github.com/docker/actions-toolkit) from 0.22.0 to 0.23.0.
- [Release notes](https://github.com/docker/actions-toolkit/releases)
- [Commits](https://github.com/docker/actions-toolkit/compare/v0.22.0...v0.23.0)

---
updated-dependencies:
- dependency-name: "@docker/actions-toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 11:45:36 +00:00
CrazyMax ea5f9ae401 Merge pull request #205 from crazy-max/align-inputs-iface
align interface fields with action inputs
2024-05-06 12:18:34 +02:00
CrazyMax 7361386105 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-06 11:51:59 +02:00
CrazyMax ae29a82e5c align interface fields with action inputs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-05-06 11:50:31 +02:00
CrazyMax 35800c73fa Merge pull request #98 from crazy-max/yarn-update
update to yarn 3.6.3
2024-05-06 11:49:45 +02:00
CrazyMax bbeabc29a1 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-04-29 13:40:47 +02:00
CrazyMax c564bf0bb0 chore: add plugin-interactive-tools yarn pkg
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-04-29 13:40:47 +02:00
CrazyMax 6281f4a902 update to yarn 3.6.3
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2024-04-29 13:40:46 +02:00
19 changed files with 7711 additions and 4976 deletions
+11 -1
View File
@@ -1,2 +1,12 @@
/coverage /coverage
/node_modules
# Dependency directories
node_modules/
jspm_packages/
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
+2
View File
@@ -1,2 +1,4 @@
/.yarn/releases/** binary
/.yarn/plugins/** binary
/dist/** linguist-generated=true /dist/** linguist-generated=true
/lib/** linguist-generated=true /lib/** linguist-generated=true
+24
View File
@@ -522,3 +522,27 @@ jobs:
name: Check docker name: Check docker
run: | run: |
docker image inspect localhost:5000/name/app:latest docker image inspect localhost:5000/name/app:latest
disable-summary:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: ${{ inputs.buildx-version || env.BUILDX_VERSION }}
driver-opts: |
image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }}
network=host
-
name: Build
uses: ./
with:
files: |
./test/config.hcl
targets: app
env:
DOCKER_BUILD_NO_SUMMARY: true
+14 -57
View File
@@ -1,12 +1,5 @@
/.dev # https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
node_modules
lib
# Jetbrains
/.idea
/*.iml
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
# Logs # Logs
logs logs
*.log *.log
@@ -14,6 +7,7 @@ npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
lerna-debug.log* lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html) # Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
@@ -24,34 +18,14 @@ pids
*.seed *.seed
*.pid.lock *.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul # Coverage directory used by tools like istanbul
coverage coverage
*.lcov *.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories # Dependency directories
node_modules/
jspm_packages/ jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache # TypeScript cache
*.tsbuildinfo *.tsbuildinfo
@@ -61,36 +35,19 @@ typings/
# Optional eslint cache # Optional eslint cache
.eslintcache .eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file # Yarn Integrity file
.yarn-integrity .yarn-integrity
# dotenv environment variables file # dotenv environment variable files
.env .env
.env.test .env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/) # yarn v2
.cache .yarn/cache
.yarn/unplugged
# next.js build output .yarn/build-state.yml
.next .yarn/install-state.gz
.pnp.*
# nuxt.js build output
.nuxt
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
+6
View File
@@ -0,0 +1,6 @@
# Dependency directories
node_modules/
jspm_packages/
# yarn v2
.yarn/
File diff suppressed because one or more lines are too long
+13
View File
@@ -0,0 +1,13 @@
logFilters:
- code: YN0013
level: discard
- code: YN0019
level: discard
- code: YN0076
level: discard
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
+7
View File
@@ -19,6 +19,7 @@ ___
* [Customizing](#customizing) * [Customizing](#customizing)
* [inputs](#inputs) * [inputs](#inputs)
* [outputs](#outputs) * [outputs](#outputs)
* [environment variables](#environment-variables)
* [Subactions](#subactions) * [Subactions](#subactions)
* [`list-targets`](#list-targets) * [`list-targets`](#list-targets)
* [Contributing](#contributing) * [Contributing](#contributing)
@@ -255,6 +256,12 @@ The following outputs are available
|------------|----------|----------------------------| |------------|----------|----------------------------|
| `targets` | List/CSV | List of extracted targest | | `targets` | List/CSV | List of extracted targest |
### environment variables
| Name | Type | Description |
|---------------------------|------|-------------------------------------------------------------------------------------------------------------------|
| `DOCKER_BUILD_NO_SUMMARY` | Bool | If `true`, [build summary](https://docs.docker.com/build/ci/github-actions/build-summary/) generation is disabled |
## Contributing ## Contributing
Want to contribute? Awesome! You can find information about contributing to Want to contribute? Awesome! You can find information about contributing to
+26 -21
View File
@@ -10,8 +10,8 @@ import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
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 {BakeDefinition} from '@docker/actions-toolkit/lib/types/bake'; import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake';
import {BuilderInfo} from '@docker/actions-toolkit/lib/types/builder'; import {BuilderInfo} from '@docker/actions-toolkit/lib/types/buildx/builder';
import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github'; import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github';
import * as context from '../src/context'; import * as context from '../src/context';
@@ -39,6 +39,11 @@ jest.spyOn(Docker, 'isAvailable').mockImplementation(async (): Promise<boolean>
return true; return true;
}); });
const metadataJson = path.join(tmpDir, 'metadata.json');
jest.spyOn(Bake.prototype, 'getMetadataFilePath').mockImplementation((): string => {
return metadataJson;
});
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => { jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
return { return {
name: 'builder2', name: 'builder2',
@@ -152,7 +157,7 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file') '--metadata-file', metadataJson
] ]
], ],
[ [
@@ -167,7 +172,7 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
'webapp', 'validate' 'webapp', 'validate'
] ]
], ],
@@ -185,7 +190,7 @@ describe('getArgs', () => {
'bake', 'bake',
'--set', '*.cache-from=type=gha', '--set', '*.cache-from=type=gha',
'--set', '*.cache-to=type=gha', '--set', '*.cache-to=type=gha',
'--metadata-file', path.join(tmpDir, 'metadata-file') '--metadata-file', metadataJson
] ]
], ],
[ [
@@ -199,8 +204,8 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
"--provenance", `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789`, "--provenance", `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`,
] ]
], ],
[ [
@@ -215,8 +220,8 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
"--provenance", `builder-id=https://github.com/docker/build-push-action/actions/runs/123456789` "--provenance", `builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`
] ]
], ],
[ [
@@ -231,8 +236,8 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
"--provenance", `mode=max,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789` "--provenance", `mode=max,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`
] ]
], ],
[ [
@@ -247,7 +252,7 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
"--provenance", 'false' "--provenance", 'false'
] ]
], ],
@@ -263,7 +268,7 @@ describe('getArgs', () => {
]), ]),
[ [
'bake', 'bake',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
"--provenance", 'builder-id=foo' "--provenance", 'builder-id=foo'
] ]
], ],
@@ -282,8 +287,8 @@ describe('getArgs', () => {
'bake', 'bake',
'--set', '*.platform=linux/amd64,linux/ppc64le,linux/s390x', '--set', '*.platform=linux/amd64,linux/ppc64le,linux/s390x',
'--set', `*.output=type=image,"name=moby/buildkit:v0.11.0,moby/buildkit:latest",push=true`, '--set', `*.output=type=image,"name=moby/buildkit:v0.11.0,moby/buildkit:latest",push=true`,
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
'--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789`, '--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`,
'image-all' 'image-all'
] ]
], ],
@@ -301,8 +306,8 @@ describe('getArgs', () => {
[ [
'bake', 'bake',
'--set', `*.labels.foo=bar=#baz`, '--set', `*.labels.foo=bar=#baz`,
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
'--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789`, '--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`,
'image-all' 'image-all'
] ]
], ],
@@ -321,8 +326,8 @@ describe('getArgs', () => {
'bake', 'bake',
'https://github.com/docker/build-push-action.git#refs/heads/master', 'https://github.com/docker/build-push-action.git#refs/heads/master',
'--file', './foo.hcl', '--file', './foo.hcl',
'--metadata-file', path.join(tmpDir, 'metadata-file'), '--metadata-file', metadataJson,
'--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789`, '--provenance', `mode=min,inline-only=true,builder-id=https://github.com/docker/build-push-action/actions/runs/123456789/attempts/1`,
] ]
], ],
])( ])(
@@ -336,11 +341,11 @@ describe('getArgs', () => {
return buildxVersion; return buildxVersion;
}); });
const inp = await context.getInputs(); const inp = await context.getInputs();
const definition = await toolkit.bake.getDefinition( const definition = await toolkit.buildxBake.getDefinition(
{ {
files: inp.files, files: inp.files,
load: inp.load, load: inp.load,
noCache: inp.noCache, noCache: inp['no-cache'],
overrides: inp.set, overrides: inp.set,
provenance: inp.provenance, provenance: inp.provenance,
push: inp.push, push: inp.push,
+12 -1
View File
@@ -5,9 +5,16 @@ ARG NODE_VERSION=20
FROM node:${NODE_VERSION}-alpine AS base FROM node:${NODE_VERSION}-alpine AS base
RUN apk add --no-cache cpio findutils git RUN apk add --no-cache cpio findutils git
WORKDIR /src WORKDIR /src
RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache <<EOT
corepack enable
yarn --version
yarn config set --home enableTelemetry 0
EOT
FROM base AS deps FROM base AS deps
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn install && mkdir /vendor && cp yarn.lock /vendor yarn install && mkdir /vendor && cp yarn.lock /vendor
@@ -28,6 +35,7 @@ EOT
FROM deps AS build FROM deps AS build
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn run build && mkdir /out && cp -Rf dist /out/ yarn run build && mkdir /out && cp -Rf dist /out/
@@ -48,20 +56,23 @@ EOT
FROM deps AS format FROM deps AS format
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn run format \ yarn run format \
&& mkdir /out && find . -name '*.ts' -not -path './node_modules/*' | cpio -pdm /out && mkdir /out && find . -name '*.ts' -not -path './node_modules/*' -not -path './.yarn/*' | cpio -pdm /out
FROM scratch AS format-update FROM scratch AS format-update
COPY --from=format /out / COPY --from=format /out /
FROM deps AS lint FROM deps AS lint
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn run lint yarn run lint
FROM deps AS test FROM deps AS test
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn run test --coverage --coverageDirectory=/tmp/coverage yarn run test --coverage --coverageDirectory=/tmp/coverage
Generated Vendored
+12 -12
View File
File diff suppressed because one or more lines are too long
Generated Vendored
+1 -1
View File
File diff suppressed because one or more lines are too long
Generated Vendored
+95 -29
View File
@@ -1330,16 +1330,6 @@ Apache-2.0
of your accepting any such warranty or additional liability. of your accepting any such warranty or additional liability.
@vercel/ncc
MIT
Copyright 2018 ZEIT, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
abort-controller abort-controller
MIT MIT
MIT License MIT License
@@ -2371,6 +2361,26 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
dot-object dot-object
MIT MIT
encoding
MIT
Copyright (c) 2012-2014 Andris Reinman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
event-target-shim event-target-shim
MIT MIT
The MIT License (MIT) The MIT License (MIT)
@@ -2506,6 +2516,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
iconv-lite
MIT
Copyright (c) 2011 Alexander Shtuchkin
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
inherits inherits
ISC ISC
The ISC License The ISC License
@@ -2567,6 +2602,31 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
isarray isarray
MIT MIT
js-yaml
MIT
(The MIT License)
Copyright (C) 2011-2015 by Vitaly Puzrin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
jwt-decode jwt-decode
MIT MIT
The MIT License (MIT) The MIT License (MIT)
@@ -3289,6 +3349,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
safer-buffer
MIT
MIT License
Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
sax sax
ISC ISC
The ISC License The ISC License
@@ -3795,25 +3880,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
yallist
ISC
The ISC License
Copyright (c) Isaac Z. Schlueter and Contributors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
zip-stream zip-stream
MIT MIT
Copyright (c) 2014 Chris Talkington, contributors. Copyright (c) 2014 Chris Talkington, contributors.
+2 -2
View File
@@ -3,7 +3,7 @@ group "default" {
} }
group "pre-checkin" { group "pre-checkin" {
targets = ["vendor-update", "format", "build"] targets = ["vendor", "format", "build"]
} }
group "validate" { group "validate" {
@@ -34,7 +34,7 @@ target "lint" {
output = ["type=cacheonly"] output = ["type=cacheonly"]
} }
target "vendor-update" { target "vendor" {
dockerfile = "dev.Dockerfile" dockerfile = "dev.Dockerfile"
target = "vendor-update" target = "vendor-update"
output = ["."] output = ["."]
+18 -18
View File
@@ -1,17 +1,16 @@
{ {
"name": "docker-buildx-bake", "name": "docker-buildx-bake",
"description": "GitHub Action to use Docker Buildx Bake as a high-level build command", "description": "GitHub Action to use Docker Buildx Bake as a high-level build command",
"main": "lib/main.js", "main": "src/main.ts",
"scripts": { "scripts": {
"build": "ncc build src/main.ts --source-map --minify --license licenses.txt", "build": "ncc build --source-map --minify --license licenses.txt",
"lint": "yarn run prettier && yarn run eslint", "lint": "yarn run prettier && yarn run eslint",
"format": "yarn run prettier:fix && yarn run eslint:fix", "format": "yarn run prettier:fix && yarn run eslint:fix",
"eslint": "eslint --max-warnings=0 .", "eslint": "eslint --max-warnings=0 .",
"eslint:fix": "eslint --fix .", "eslint:fix": "eslint --fix .",
"prettier": "prettier --check \"./**/*.ts\"", "prettier": "prettier --check \"./**/*.ts\"",
"prettier:fix": "prettier --write \"./**/*.ts\"", "prettier:fix": "prettier --write \"./**/*.ts\"",
"test": "jest", "test": "jest"
"all": "yarn run build && yarn run format && yarn test"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -25,24 +24,25 @@
], ],
"author": "Docker Inc.", "author": "Docker Inc.",
"license": "Apache-2.0", "license": "Apache-2.0",
"packageManager": "yarn@3.6.3",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.1", "@actions/core": "^1.10.1",
"@docker/actions-toolkit": "^0.22.0", "@docker/actions-toolkit": "^0.26.0",
"handlebars": "^4.7.8" "handlebars": "^4.7.8"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20.5.9", "@types/node": "^20.12.12",
"@typescript-eslint/eslint-plugin": "^6.6.0", "@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^6.6.0", "@typescript-eslint/parser": "^7.9.0",
"@vercel/ncc": "^0.38.0", "@vercel/ncc": "^0.38.1",
"eslint": "^8.48.0", "eslint": "^8.57.0",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^27.2.3", "eslint-plugin-jest": "^28.5.0",
"eslint-plugin-prettier": "^5.0.0", "eslint-plugin-prettier": "^5.1.3",
"jest": "^29.6.4", "jest": "^29.7.0",
"prettier": "^3.0.3", "prettier": "^3.2.5",
"ts-jest": "^29.1.1", "ts-jest": "^29.1.2",
"ts-node": "^10.9.1", "ts-node": "^10.9.2",
"typescript": "^5.2.2" "typescript": "^5.4.5"
} }
} }
+29 -7
View File
@@ -8,14 +8,14 @@ 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 {Util} from '@docker/actions-toolkit/lib/util';
import {BakeDefinition} from '@docker/actions-toolkit/lib/types/bake'; import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake';
export interface Inputs { export interface Inputs {
builder: string; builder: string;
files: string[]; files: string[];
workdir: string; workdir: string;
targets: string[]; targets: string[];
noCache: boolean; 'no-cache': boolean;
pull: boolean; pull: boolean;
load: boolean; load: boolean;
provenance: string; provenance: string;
@@ -23,7 +23,7 @@ export interface Inputs {
sbom: string; sbom: string;
set: string[]; set: string[];
source: string; source: string;
githubToken: string; 'github-token': string;
} }
export async function getInputs(): Promise<Inputs> { export async function getInputs(): Promise<Inputs> {
@@ -32,7 +32,7 @@ export async function getInputs(): Promise<Inputs> {
files: Util.getInputList('files'), files: Util.getInputList('files'),
workdir: core.getInput('workdir') || '.', workdir: core.getInput('workdir') || '.',
targets: Util.getInputList('targets'), targets: Util.getInputList('targets'),
noCache: core.getBooleanInput('no-cache'), 'no-cache': core.getBooleanInput('no-cache'),
pull: core.getBooleanInput('pull'), pull: core.getBooleanInput('pull'),
load: core.getBooleanInput('load'), load: core.getBooleanInput('load'),
provenance: Build.getProvenanceInput('provenance'), provenance: Build.getProvenanceInput('provenance'),
@@ -40,10 +40,32 @@ export async function getInputs(): Promise<Inputs> {
sbom: core.getInput('sbom'), sbom: core.getInput('sbom'),
set: Util.getInputList('set', {ignoreComma: true, quote: false}), set: Util.getInputList('set', {ignoreComma: true, quote: false}),
source: getSourceInput('source'), source: getSourceInput('source'),
githubToken: core.getInput('github-token') 'github-token': core.getInput('github-token')
}; };
} }
export function sanitizeInputs(inputs: Inputs) {
const res = {};
for (const key of Object.keys(inputs)) {
if (key === 'github-token') {
continue;
}
const value: string | string[] | boolean = inputs[key];
if (typeof value === 'boolean' && value === false) {
continue;
} else if (Array.isArray(value) && value.length === 0) {
continue;
} else if (!value) {
continue;
}
if (key === 'workdir' && value === '.') {
continue;
}
res[key] = value;
}
return res;
}
export async function getArgs(inputs: Inputs, definition: BakeDefinition, toolkit: Toolkit): Promise<Array<string>> { export async function getArgs(inputs: Inputs, definition: BakeDefinition, toolkit: Toolkit): Promise<Array<string>> {
// prettier-ignore // prettier-ignore
return [ return [
@@ -65,7 +87,7 @@ async function getBakeArgs(inputs: Inputs, definition: BakeDefinition, toolkit:
args.push('--set', set); args.push('--set', set);
}); });
if (await toolkit.buildx.versionSatisfies('>=0.6.0')) { if (await toolkit.buildx.versionSatisfies('>=0.6.0')) {
args.push('--metadata-file', Bake.getMetadataFilePath()); args.push('--metadata-file', toolkit.buildxBake.getMetadataFilePath());
} }
if (await toolkit.buildx.versionSatisfies('>=0.10.0')) { if (await toolkit.buildx.versionSatisfies('>=0.10.0')) {
if (inputs.provenance) { if (inputs.provenance) {
@@ -92,7 +114,7 @@ async function getBakeArgs(inputs: Inputs, definition: BakeDefinition, toolkit:
async function getCommonArgs(inputs: Inputs): Promise<Array<string>> { async function getCommonArgs(inputs: Inputs): Promise<Array<string>> {
const args: Array<string> = []; const args: Array<string> = [];
if (inputs.noCache) { if (inputs['no-cache']) {
args.push('--no-cache'); args.push('--no-cache');
} }
if (inputs.builder) { if (inputs.builder) {
+94 -8
View File
@@ -3,15 +3,17 @@ import * as path from 'path';
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 {Bake} from '@docker/actions-toolkit/lib/buildx/bake'; 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 {BakeDefinition} from '@docker/actions-toolkit/lib/types/bake'; import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake';
import {ConfigFile} from '@docker/actions-toolkit/lib/types/docker'; import {ConfigFile} from '@docker/actions-toolkit/lib/types/docker/docker';
import * as context from './context'; import * as context from './context';
import * as stateHelper from './state-helper'; import * as stateHelper from './state-helper';
@@ -19,9 +21,14 @@ import * as stateHelper from './state-helper';
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)}`);
stateHelper.setInputs(inputs);
const toolkit = new Toolkit(); const toolkit = new Toolkit();
const gitAuthToken = process.env.BUILDX_BAKE_GIT_AUTH_TOKEN ?? inputs.githubToken; const gitAuthToken = process.env.BUILDX_BAKE_GIT_AUTH_TOKEN ?? inputs['github-token'];
await core.group(`GitHub Actions runtime token ACs`, async () => { await core.group(`GitHub Actions runtime token ACs`, async () => {
try { try {
@@ -76,13 +83,19 @@ actionsToolkit.run(
await toolkit.buildx.printVersion(); await toolkit.buildx.printVersion();
}); });
await core.group(`Builder info`, async () => {
const builder = await toolkit.builder.inspect(inputs.builder);
core.info(JSON.stringify(builder, null, 2));
stateHelper.setBuilder(builder);
});
let definition: BakeDefinition | undefined; let definition: BakeDefinition | undefined;
await core.group(`Parsing raw definition`, async () => { await core.group(`Parsing raw definition`, async () => {
definition = await toolkit.bake.getDefinition( definition = await toolkit.buildxBake.getDefinition(
{ {
files: inputs.files, files: inputs.files,
load: inputs.load, load: inputs.load,
noCache: inputs.noCache, noCache: inputs['no-cache'],
overrides: inputs.set, overrides: inputs.set,
provenance: inputs.provenance, provenance: inputs.provenance,
push: inputs.push, push: inputs.push,
@@ -99,6 +112,7 @@ actionsToolkit.run(
if (!definition) { if (!definition) {
throw new Error('Bake definition not set'); throw new Error('Bake definition not set');
} }
stateHelper.setBakeDefinition(definition);
const args: string[] = await context.getArgs(inputs, definition, toolkit); const args: string[] = await context.getArgs(inputs, definition, toolkit);
const buildCmd = await toolkit.buildx.getCommand(args); const buildCmd = await toolkit.buildx.getCommand(args);
@@ -115,17 +129,18 @@ actionsToolkit.run(
}); });
}); });
let err: Error | undefined;
await Exec.getExecOutput(buildCmd.command, buildCmd.args, { await Exec.getExecOutput(buildCmd.command, buildCmd.args, {
cwd: inputs.workdir, cwd: inputs.workdir,
env: buildEnv, env: buildEnv,
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 bake failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`); err = Error(`buildx bake failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
} }
}); });
const metadata = Bake.resolveMetadata(); const metadata = toolkit.buildxBake.resolveMetadata();
if (metadata) { if (metadata) {
await core.group(`Metadata`, async () => { await core.group(`Metadata`, async () => {
const metadatadt = JSON.stringify(metadata, null, 2); const metadatadt = JSON.stringify(metadata, null, 2);
@@ -133,9 +148,55 @@ actionsToolkit.run(
core.setOutput('metadata', metadatadt); core.setOutput('metadata', metadatadt);
}); });
} }
await core.group(`Build references`, async () => {
const refs = await buildRefs(toolkit, startedTime, inputs.builder);
if (refs) {
for (const ref of refs) {
core.info(ref);
}
stateHelper.setBuildRefs(refs);
} else {
core.warning('No build refs found');
}
});
if (err) {
throw err;
}
}, },
// post // post
async () => { async () => {
if (stateHelper.buildRefs.length > 0) {
await core.group(`Generating build summary`, async () => {
if (process.env.DOCKER_BUILD_NO_SUMMARY && Util.parseBool(process.env.DOCKER_BUILD_NO_SUMMARY)) {
core.info('Summary disabled');
return;
}
if (stateHelper.builder && stateHelper.builder.driver === 'cloud') {
core.info('Summary is not yet supported with Docker Build Cloud');
return;
}
try {
const buildxHistory = new BuildxHistory();
const exportRes = await buildxHistory.export({
refs: stateHelper.buildRefs
});
core.info(`Build records exported to ${exportRes.dockerbuildFilename} (${Util.formatFileSize(exportRes.dockerbuildSize)})`);
const uploadRes = await GitHub.uploadArtifact({
filename: exportRes.dockerbuildFilename,
mimeType: 'application/gzip',
retentionDays: 90
});
await GitHub.writeBuildSummary({
exportRes: exportRes,
uploadRes: uploadRes,
inputs: stateHelper.inputs,
bakeDefinition: stateHelper.bakeDefinition
});
} 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});
@@ -143,3 +204,28 @@ actionsToolkit.run(
} }
} }
); );
async function buildRefs(toolkit: Toolkit, since: Date, builder?: string): Promise<Array<string>> {
// get refs from metadata file
const metaRefs = toolkit.buildxBake.resolveRefs();
if (metaRefs) {
return metaRefs;
}
// 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 res = Buildx.refs({
dir: Buildx.refsDir,
builderName: builder,
since: since
});
const refs: Array<string> = [];
for (const ref in res) {
if (Object.prototype.hasOwnProperty.call(res, ref)) {
refs.push(ref);
}
}
return refs;
}
+25
View File
@@ -1,7 +1,32 @@
import * as core from '@actions/core'; import * as core from '@actions/core';
import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake';
import {BuilderInfo} from '@docker/actions-toolkit/lib/types/buildx/builder';
import {Inputs, sanitizeInputs} from './context';
export const tmpDir = process.env['STATE_tmpDir'] || ''; export const tmpDir = process.env['STATE_tmpDir'] || '';
export const inputs = process.env['STATE_inputs'] ? JSON.parse(process.env['STATE_inputs']) : undefined;
export const builder = process.env['STATE_builder'] ? <BuilderInfo>JSON.parse(process.env['STATE_builder']) : undefined;
export const bakeDefinition = process.env['STATE_bakeDefinition'] ? <BakeDefinition>JSON.parse(process.env['STATE_bakeDefinition']) : undefined;
export const buildRefs = process.env['STATE_buildRefs'] ? process.env['STATE_buildRefs'].split(',') : [];
export function setTmpDir(tmpDir: string) { export function setTmpDir(tmpDir: string) {
core.saveState('tmpDir', tmpDir); core.saveState('tmpDir', tmpDir);
} }
export function setInputs(inputs: Inputs) {
core.saveState('inputs', JSON.stringify(sanitizeInputs(inputs)));
}
export function setBuilder(builder: BuilderInfo) {
core.saveState('builder', JSON.stringify(builder));
}
export function setBakeDefinition(bakeDefinition: BakeDefinition) {
core.saveState('bakeDefinition', JSON.stringify(bakeDefinition));
}
export function setBuildRefs(buildRefs: Array<string>) {
core.saveState('buildRefs', buildRefs.join(','));
}
+6779 -4819
View File
File diff suppressed because it is too large Load Diff