mirror of
https://github.com/docker/metadata-action.git
synced 2025-12-17 23:09:01 +08:00
Added on_latest flavor to apply flavor to latest tags
This commit is contained in:
parent
94c9b333c5
commit
cffbfa0b4d
@ -32,7 +32,8 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "true",
|
latest: "true",
|
||||||
prefix: "",
|
prefix: "",
|
||||||
suffix: ""
|
suffix: "",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
@ -43,7 +44,8 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "false",
|
latest: "false",
|
||||||
prefix: "",
|
prefix: "",
|
||||||
suffix: ""
|
suffix: "",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
@ -54,7 +56,8 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "auto",
|
latest: "auto",
|
||||||
prefix: "",
|
prefix: "",
|
||||||
suffix: ""
|
suffix: "",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
@ -72,7 +75,8 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "auto",
|
latest: "auto",
|
||||||
prefix: "sha-",
|
prefix: "sha-",
|
||||||
suffix: ""
|
suffix: "",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
@ -83,7 +87,8 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "auto",
|
latest: "auto",
|
||||||
prefix: "",
|
prefix: "",
|
||||||
suffix: "-alpine"
|
suffix: "-alpine",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
@ -96,10 +101,36 @@ describe('transform', () => {
|
|||||||
{
|
{
|
||||||
latest: "false",
|
latest: "false",
|
||||||
prefix: "dev-",
|
prefix: "dev-",
|
||||||
suffix: "-alpine"
|
suffix: "-alpine",
|
||||||
|
on_latest: "false"
|
||||||
} as Flavor,
|
} as Flavor,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
`latest=auto`,
|
||||||
|
`prefix=`,
|
||||||
|
`suffix=-alpine`,
|
||||||
|
`on_latest=true`
|
||||||
|
],
|
||||||
|
{
|
||||||
|
latest: "auto",
|
||||||
|
prefix: "",
|
||||||
|
suffix: "-alpine",
|
||||||
|
on_latest: "true"
|
||||||
|
} as Flavor,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
`latest=true`,
|
||||||
|
`prefix=`,
|
||||||
|
`suffix=-alpine`,
|
||||||
|
`on_latest=fail`
|
||||||
|
],
|
||||||
|
{} as Flavor,
|
||||||
|
true
|
||||||
|
]
|
||||||
])('given %p attributes ', async (inputs: string[], expected: Flavor, invalid: boolean) => {
|
])('given %p attributes ', async (inputs: string[], expected: Flavor, invalid: boolean) => {
|
||||||
try {
|
try {
|
||||||
const flavor = Transform(inputs);
|
const flavor = Transform(inputs);
|
||||||
|
|||||||
@ -1589,6 +1589,78 @@ describe('latest', () => {
|
|||||||
"org.opencontainers.image.vendor=MyCompany"
|
"org.opencontainers.image.vendor=MyCompany"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'latest10',
|
||||||
|
'event_tag_v1.1.1.env',
|
||||||
|
{
|
||||||
|
images: ['org/app', 'ghcr.io/user/app'],
|
||||||
|
tags: [
|
||||||
|
`type=ref,event=tag`
|
||||||
|
],
|
||||||
|
flavor: [
|
||||||
|
`latest=true`,
|
||||||
|
`on_latest=true`,
|
||||||
|
`suffix=-alpine`
|
||||||
|
],
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: 'v1.1.1-alpine',
|
||||||
|
partial: [],
|
||||||
|
latest: true
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'org/app:v1.1.1-alpine',
|
||||||
|
'org/app:latest-alpine',
|
||||||
|
'ghcr.io/user/app:v1.1.1-alpine',
|
||||||
|
'ghcr.io/user/app:latest-alpine'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"org.opencontainers.image.title=Hello-World",
|
||||||
|
"org.opencontainers.image.description=This your first repo!",
|
||||||
|
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.version=v1.1.1-alpine",
|
||||||
|
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
|
||||||
|
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
||||||
|
"org.opencontainers.image.licenses=MIT"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'latest12',
|
||||||
|
'event_tag_v1.1.1.env',
|
||||||
|
{
|
||||||
|
images: ['org/app', 'ghcr.io/user/app'],
|
||||||
|
tags: [
|
||||||
|
`type=ref,event=tag`
|
||||||
|
],
|
||||||
|
flavor: [
|
||||||
|
`latest=true`,
|
||||||
|
`on_latest=true`,
|
||||||
|
`prefix=dev-`
|
||||||
|
],
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: 'dev-v1.1.1',
|
||||||
|
partial: [],
|
||||||
|
latest: true
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'org/app:dev-v1.1.1',
|
||||||
|
'org/app:dev-latest',
|
||||||
|
'ghcr.io/user/app:dev-v1.1.1',
|
||||||
|
'ghcr.io/user/app:dev-latest'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"org.opencontainers.image.title=Hello-World",
|
||||||
|
"org.opencontainers.image.description=This your first repo!",
|
||||||
|
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.version=dev-v1.1.1",
|
||||||
|
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
|
||||||
|
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
||||||
|
"org.opencontainers.image.licenses=MIT"
|
||||||
|
]
|
||||||
|
]
|
||||||
])('given %p with %p event', tagsLabelsTest);
|
])('given %p with %p event', tagsLabelsTest);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
16
dist/index.js
generated
vendored
16
dist/index.js
generated
vendored
@ -136,7 +136,8 @@ function Transform(inputs) {
|
|||||||
const flavor = {
|
const flavor = {
|
||||||
latest: 'auto',
|
latest: 'auto',
|
||||||
prefix: '',
|
prefix: '',
|
||||||
suffix: ''
|
suffix: '',
|
||||||
|
on_latest: 'false'
|
||||||
};
|
};
|
||||||
for (const input of inputs) {
|
for (const input of inputs) {
|
||||||
const parts = input.split('=', 2);
|
const parts = input.split('=', 2);
|
||||||
@ -159,6 +160,13 @@ function Transform(inputs) {
|
|||||||
flavor.suffix = parts[1];
|
flavor.suffix = parts[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'on_latest': {
|
||||||
|
flavor.on_latest = parts[1];
|
||||||
|
if (!['true', 'false'].includes(flavor.on_latest)) {
|
||||||
|
throw new Error(`Invalid on_latest flavor entry: ${input}`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Unknown entry: ${input}`);
|
throw new Error(`Unknown entry: ${input}`);
|
||||||
}
|
}
|
||||||
@ -168,6 +176,7 @@ function Transform(inputs) {
|
|||||||
core.info(`latest=${flavor.latest}`);
|
core.info(`latest=${flavor.latest}`);
|
||||||
core.info(`prefix=${flavor.prefix}`);
|
core.info(`prefix=${flavor.prefix}`);
|
||||||
core.info(`suffix=${flavor.suffix}`);
|
core.info(`suffix=${flavor.suffix}`);
|
||||||
|
core.info(`on_latest=${flavor.on_latest}`);
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
return flavor;
|
return flavor;
|
||||||
}
|
}
|
||||||
@ -633,9 +642,14 @@ class Meta {
|
|||||||
tags.push(`${imageLc}:${partial}`);
|
tags.push(`${imageLc}:${partial}`);
|
||||||
}
|
}
|
||||||
if (this.version.latest) {
|
if (this.version.latest) {
|
||||||
|
if (this.flavor.on_latest === "true") {
|
||||||
|
tags.push(`${imageLc}:${this.flavor.prefix}latest${this.flavor.suffix}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
tags.push(`${imageLc}:latest`);
|
tags.push(`${imageLc}:latest`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
getLabels() {
|
getLabels() {
|
||||||
|
|||||||
@ -4,13 +4,15 @@ export interface Flavor {
|
|||||||
latest: string;
|
latest: string;
|
||||||
prefix: string;
|
prefix: string;
|
||||||
suffix: string;
|
suffix: string;
|
||||||
|
on_latest: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Transform(inputs: string[]): Flavor {
|
export function Transform(inputs: string[]): Flavor {
|
||||||
const flavor: Flavor = {
|
const flavor: Flavor = {
|
||||||
latest: 'auto',
|
latest: 'auto',
|
||||||
prefix: '',
|
prefix: '',
|
||||||
suffix: ''
|
suffix: '',
|
||||||
|
on_latest: 'false'
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const input of inputs) {
|
for (const input of inputs) {
|
||||||
@ -34,6 +36,13 @@ export function Transform(inputs: string[]): Flavor {
|
|||||||
flavor.suffix = parts[1];
|
flavor.suffix = parts[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'on_latest': {
|
||||||
|
flavor.on_latest = parts[1];
|
||||||
|
if (!['true', 'false'].includes(flavor.on_latest)) {
|
||||||
|
throw new Error(`Invalid on_latest flavor entry: ${input}`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Unknown entry: ${input}`);
|
throw new Error(`Unknown entry: ${input}`);
|
||||||
}
|
}
|
||||||
@ -44,6 +53,8 @@ export function Transform(inputs: string[]): Flavor {
|
|||||||
core.info(`latest=${flavor.latest}`);
|
core.info(`latest=${flavor.latest}`);
|
||||||
core.info(`prefix=${flavor.prefix}`);
|
core.info(`prefix=${flavor.prefix}`);
|
||||||
core.info(`suffix=${flavor.suffix}`);
|
core.info(`suffix=${flavor.suffix}`);
|
||||||
|
core.info(`on_latest=${flavor.on_latest}`);
|
||||||
|
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
|
|
||||||
return flavor;
|
return flavor;
|
||||||
|
|||||||
@ -304,9 +304,13 @@ export class Meta {
|
|||||||
tags.push(`${imageLc}:${partial}`);
|
tags.push(`${imageLc}:${partial}`);
|
||||||
}
|
}
|
||||||
if (this.version.latest) {
|
if (this.version.latest) {
|
||||||
|
if (this.flavor.on_latest === 'true') {
|
||||||
|
tags.push(`${imageLc}:${this.flavor.prefix}latest${this.flavor.suffix}`);
|
||||||
|
} else {
|
||||||
tags.push(`${imageLc}:latest`);
|
tags.push(`${imageLc}:latest`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user