Compare commits

...

10 Commits

Author SHA1 Message Date
Tõnis Tiigi
030e881283 Merge pull request #607 from crazy-max/allow-comments
preserve comments in list input values with commentNoInfix
2026-03-05 08:21:07 -08:00
CrazyMax
4b529ac4e5 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 17:02:53 +01:00
CrazyMax
b0082b33bc preserve comments in list input values with commentNoInfix
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 17:02:53 +01:00
CrazyMax
7b19fec715 Merge pull request #604 from docker/dependabot/npm_and_yarn/docker/actions-toolkit-0.77.0
chore(deps): Bump @docker/actions-toolkit from 0.68.0 to 0.79.0
2026-03-05 17:00:40 +01:00
CrazyMax
281c9b0599 chore: update generated content
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 09:24:56 +01:00
CrazyMax
5f43b3b4f4 test: stabilize github mock setup since ESM
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 09:23:56 +01:00
CrazyMax
9d53276575 github class moved since actions-toolkit v0.77.0
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 09:23:56 +01:00
dependabot[bot]
eaa3d3973e chore(deps): Bump @docker/actions-toolkit from 0.68.0 to 0.77.0
Dependabot couldn't find the original pull request head commit, cdad825a9dc17122e84ab473271a55d7b8b3da06.
2026-03-05 08:21:31 +00:00
Tõnis Tiigi
6b695f7a8a Merge pull request #605 from crazy-max/node24
node 24 as default runtime
2026-03-04 17:36:23 -08:00
CrazyMax
a1afadcb28 node 24 as default runtime
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-04 12:40:47 +01:00
11 changed files with 712 additions and 1260 deletions

View File

@@ -79,6 +79,67 @@ describe('getInputs', () => {
tags: [], tags: [],
} }
], ],
[
3,
new Map<string, string>([
['labels', 'mylabel=foo#bar\n#comment\nanother=bar'],
]),
{
context: context.ContextSource.workflow,
bakeTarget: 'docker-metadata-action',
flavor: [],
githubToken: '',
images: [],
labels: ['mylabel=foo#bar', 'another=bar'],
annotations: [],
sepLabels: '\n',
sepTags: '\n',
sepAnnotations: '\n',
tags: [],
}
],
[
4,
new Map<string, string>([
['annotations', 'org.opencontainers.image.url=https://example.com/path#readme\n#comment\norg.opencontainers.image.source=https://github.com/docker/metadata-action'],
]),
{
context: context.ContextSource.workflow,
bakeTarget: 'docker-metadata-action',
flavor: [],
githubToken: '',
images: [],
labels: [],
annotations: [
'org.opencontainers.image.url=https://example.com/path#readme',
'org.opencontainers.image.source=https://github.com/docker/metadata-action'
],
sepLabels: '\n',
sepTags: '\n',
sepAnnotations: '\n',
tags: [],
}
],
[
5,
new Map<string, string>([
['tags', 'type=raw,value=foo#bar\n#comment'],
['flavor', 'prefix=v#1\n#comment'],
]),
{
context: context.ContextSource.workflow,
bakeTarget: 'docker-metadata-action',
flavor: ['prefix=v#1'],
githubToken: '',
images: [],
labels: [],
annotations: [],
sepLabels: '\n',
sepTags: '\n',
sepAnnotations: '\n',
tags: ['type=raw,value=foo#bar'],
}
],
]; ];
test.each(cases)('[%d] given %o as inputs, returns %o', async (num: number, inputs: Map<string, string>, expected: context.Inputs) => { test.each(cases)('[%d] given %o as inputs, returns %o', async (num: number, inputs: Map<string, string>, expected: context.Inputs) => {
inputs.forEach((value: string, name: string) => { inputs.forEach((value: string, name: string) => {

View File

@@ -3,9 +3,9 @@ import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import * as dotenv from 'dotenv'; import * as dotenv from 'dotenv';
import {GitHub} from '@docker/actions-toolkit/lib/github.js'; import {GitHub} from '@docker/actions-toolkit/lib/github/github.js';
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit.js'; import {Toolkit} from '@docker/actions-toolkit/lib/toolkit.js';
import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github.js'; import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github/github.js';
import {ContextSource, getContext, getInputs, Inputs} from '../src/context.js'; import {ContextSource, getContext, getInputs, Inputs} from '../src/context.js';
import type {Context as MetadataContext} from '../src/context.js'; import type {Context as MetadataContext} from '../src/context.js';

View File

@@ -1,32 +1,11 @@
import fs from 'node:fs'; import fs from 'node:fs';
import {createRequire} from 'node:module';
import os from 'node:os'; import os from 'node:os';
import path from 'node:path'; import path from 'node:path';
import {vi} from 'vitest'; import {vi} from 'vitest';
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-metadata-action-')); const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-metadata-action-'));
process.env = Object.assign({}, process.env, { const githubPayload = {
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/metadata-action',
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});
const require = createRequire(import.meta.url);
type RequireCacheEntry = NonNullable<(typeof require.cache)[string]>;
const githubMock = {
context: {
repo: {
owner: 'docker',
repo: 'actions-toolkit'
},
ref: 'refs/heads/dev',
sha: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
runId: 2188748038,
runNumber: 15,
payload: {
after: '860c1904a1ce19322e91ac35af1ab07466440c37', after: '860c1904a1ce19322e91ac35af1ab07466440c37',
base_ref: null, base_ref: null,
before: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a', before: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
@@ -43,11 +22,11 @@ const githubMock = {
username: 'crazy-max' username: 'crazy-max'
}, },
distinct: true, distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37', id: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
message: 'hello dev', message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00', timestamp: '2024-11-13T13:42:28Z',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820', tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37' url: 'https://github.com/docker/test-docker-action/commit/5f3331d7f7044c18ca9f12c77d961c4d7cf3276a'
} }
], ],
compare: 'https://github.com/docker/test-docker-action/compare/5f3331d7f704...860c1904a1ce', compare: 'https://github.com/docker/test-docker-action/compare/5f3331d7f704...860c1904a1ce',
@@ -66,11 +45,11 @@ const githubMock = {
username: 'crazy-max' username: 'crazy-max'
}, },
distinct: true, distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37', id: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
message: 'hello dev', message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00', timestamp: '2024-11-13T13:42:28Z',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820', tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37' url: 'https://github.com/docker/test-docker-action/commit/5f3331d7f7044c18ca9f12c77d961c4d7cf3276a'
}, },
organization: { organization: {
avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4', avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4',
@@ -220,12 +199,26 @@ const githubMock = {
type: 'User', type: 'User',
url: 'https://api.github.com/users/crazy-max' url: 'https://api.github.com/users/crazy-max'
} }
} };
},
getOctokit: () => ({ const githubEventPath = path.join(tmpDir, 'github-event.json');
rest: { fs.writeFileSync(githubEventPath, JSON.stringify(githubPayload));
repos: {
getCommit: async () => ({ process.env = Object.assign({}, process.env, {
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/metadata-action',
GITHUB_REF: 'refs/heads/dev',
GITHUB_RUN_ID: '2188748038',
GITHUB_RUN_ATTEMPT: '1',
GITHUB_RUN_NUMBER: '15',
GITHUB_SHA: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
GITHUB_EVENT_PATH: githubEventPath,
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});
const getCommitMock = vi.hoisted(() =>
vi.fn(async () => ({
data: { data: {
commit: { commit: {
committer: { committer: {
@@ -233,27 +226,27 @@ const githubMock = {
} }
} }
} }
}) }))
} );
}
})
};
vi.mock('@actions/github', () => githubMock); const getOctokitMock = vi.hoisted(() =>
vi.fn(() => ({
for (const mod of ['@actions/github', '@docker/actions-toolkit/node_modules/@actions/github']) { rest: {
try { repos: {
const resolved = require.resolve(mod); getCommit: getCommitMock
vi.doMock(resolved, () => githubMock);
require.cache[resolved] = {
id: resolved,
filename: resolved,
loaded: true,
exports: githubMock,
children: [],
paths: []
} as RequireCacheEntry;
} catch {
// Ignore unresolved optional paths; vi.mock handles module-level mocking.
} }
} }
}))
);
vi.mock('@actions/github', async importOriginal => {
const actual = await importOriginal<typeof import('@actions/github')>();
return {
...actual,
context: {
...actual.context,
payload: githubPayload
},
getOctokit: getOctokitMock
};
});

View File

@@ -66,5 +66,5 @@ outputs:
description: 'Bake definition file with tags and labels' description: 'Bake definition file with tags and labels'
runs: runs:
using: 'node20' using: 'node24'
main: 'dist/index.js' main: 'dist/index.js'

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
ARG NODE_VERSION=20 ARG NODE_VERSION=24
FROM node:${NODE_VERSION}-alpine AS base FROM node:${NODE_VERSION}-alpine AS base
RUN apk add --no-cache cpio findutils git rsync RUN apk add --no-cache cpio findutils git rsync

145
dist/index.js generated vendored

File diff suppressed because one or more lines are too long

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@@ -26,7 +26,7 @@
"dependencies": { "dependencies": {
"@actions/core": "^3.0.0", "@actions/core": "^3.0.0",
"@actions/github": "^9.0.0", "@actions/github": "^9.0.0",
"@docker/actions-toolkit": "^0.68.0", "@docker/actions-toolkit": "^0.79.0",
"@renovate/pep440": "^1.0.0", "@renovate/pep440": "^1.0.0",
"csv-parse": "^6.1.0", "csv-parse": "^6.1.0",
"handlebars": "^4.7.8", "handlebars": "^4.7.8",
@@ -36,7 +36,7 @@
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.39.3", "@eslint/js": "^9.39.3",
"@types/node": "^20.19.35", "@types/node": "^24.11.0",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.1",
"@typescript-eslint/eslint-plugin": "^8.56.1", "@typescript-eslint/eslint-plugin": "^8.56.1",
"@typescript-eslint/parser": "^8.56.1", "@typescript-eslint/parser": "^8.56.1",

View File

@@ -2,7 +2,7 @@ import * as core from '@actions/core';
import {Util} from '@docker/actions-toolkit/lib/util.js'; import {Util} from '@docker/actions-toolkit/lib/util.js';
import {Git} from '@docker/actions-toolkit/lib/git.js'; import {Git} from '@docker/actions-toolkit/lib/git.js';
import {GitHub} from '@docker/actions-toolkit/lib/github.js'; import {GitHub} from '@docker/actions-toolkit/lib/github/github.js';
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit.js'; import {Toolkit} from '@docker/actions-toolkit/lib/toolkit.js';
type GithubContext = typeof GitHub.context; type GithubContext = typeof GitHub.context;
@@ -28,11 +28,11 @@ export interface Inputs {
export function getInputs(): Inputs { export function getInputs(): Inputs {
return { return {
context: (core.getInput('context') || ContextSource.workflow) as ContextSource, context: (core.getInput('context') || ContextSource.workflow) as ContextSource,
images: Util.getInputList('images', {ignoreComma: true, comment: '#'}), images: Util.getInputList('images', {ignoreComma: true, comment: '#', commentNoInfix: true}),
tags: Util.getInputList('tags', {ignoreComma: true, comment: '#'}), tags: Util.getInputList('tags', {ignoreComma: true, comment: '#', commentNoInfix: true}),
flavor: Util.getInputList('flavor', {ignoreComma: true, comment: '#'}), flavor: Util.getInputList('flavor', {ignoreComma: true, comment: '#', commentNoInfix: true}),
labels: Util.getInputList('labels', {ignoreComma: true, comment: '#'}), labels: Util.getInputList('labels', {ignoreComma: true, comment: '#', commentNoInfix: true}),
annotations: Util.getInputList('annotations', {ignoreComma: true, comment: '#'}), annotations: Util.getInputList('annotations', {ignoreComma: true, comment: '#', commentNoInfix: true}),
sepTags: core.getInput('sep-tags', {trimWhitespace: false}) || `\n`, sepTags: core.getInput('sep-tags', {trimWhitespace: false}) || `\n`,
sepLabels: core.getInput('sep-labels', {trimWhitespace: false}) || `\n`, sepLabels: core.getInput('sep-labels', {trimWhitespace: false}) || `\n`,
sepAnnotations: core.getInput('sep-annotations', {trimWhitespace: false}) || `\n`, sepAnnotations: core.getInput('sep-annotations', {trimWhitespace: false}) || `\n`,

View File

@@ -6,7 +6,7 @@ import * as pep440 from '@renovate/pep440';
import * as semver from 'semver'; import * as semver from 'semver';
import * as core from '@actions/core'; import * as core from '@actions/core';
import {Context as ToolkitContext} from '@docker/actions-toolkit/lib/context.js'; import {Context as ToolkitContext} from '@docker/actions-toolkit/lib/context.js';
import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github.js'; import {GitHubRepo} from '@docker/actions-toolkit/lib/types/github/github.js';
import {Inputs, Context} from './context.js'; import {Inputs, Context} from './context.js';
import * as icl from './image.js'; import * as icl from './image.js';

1271
yarn.lock

File diff suppressed because it is too large Load Diff