mirror of
https://github.com/docker/metadata-action.git
synced 2024-11-22 20:15:41 +01:00
Handle global expressions (#71)
Co-authored-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
e09df4df3c
commit
5e6d5157fb
20
README.md
20
README.md
@ -38,6 +38,7 @@ ___
|
|||||||
* [`type=sha`](#typesha)
|
* [`type=sha`](#typesha)
|
||||||
* [Notes](#notes)
|
* [Notes](#notes)
|
||||||
* [Latest tag](#latest-tag)
|
* [Latest tag](#latest-tag)
|
||||||
|
* [Global expressions](#global-expressions)
|
||||||
* [Overwrite labels](#overwrite-labels)
|
* [Overwrite labels](#overwrite-labels)
|
||||||
* [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)
|
||||||
* [Contributing](#contributing)
|
* [Contributing](#contributing)
|
||||||
@ -554,6 +555,25 @@ tags: |
|
|||||||
* [`type=semver,pattern=...`](#typesemver)
|
* [`type=semver,pattern=...`](#typesemver)
|
||||||
* [`type=match,pattern=...`](#typematch)
|
* [`type=match,pattern=...`](#typematch)
|
||||||
|
|
||||||
|
### Global expressions
|
||||||
|
|
||||||
|
The following [Handlebars template](https://handlebarsjs.com/guide/) expressions for `prefix`, `suffix` and `value`
|
||||||
|
attributes are available:
|
||||||
|
|
||||||
|
| Expression | Output |
|
||||||
|
|--------------------------|----------------------|
|
||||||
|
| `{{branch}}` | `master` |
|
||||||
|
| `{{tag}}` | `v1.2.3` |
|
||||||
|
| `{{sha}}` | `90dd603` |
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
tags: |
|
||||||
|
# dynamically set the branch name as a prefix
|
||||||
|
type=sha,prefix={{branch}}-
|
||||||
|
# dynamically set the branch name and sha as a custom tag
|
||||||
|
type=raw,value=mytag-{{branch}}-{{sha}}
|
||||||
|
```
|
||||||
|
|
||||||
### Overwrite labels
|
### Overwrite labels
|
||||||
|
|
||||||
If some of the [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/annotations.md)
|
If some of the [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/annotations.md)
|
||||||
|
@ -89,7 +89,8 @@ describe('null', () => {
|
|||||||
{
|
{
|
||||||
images: ['user/app'],
|
images: ['user/app'],
|
||||||
tags: [
|
tags: [
|
||||||
`type=sha`
|
`type=sha`,
|
||||||
|
`type=raw,{{branch}}`,
|
||||||
]
|
]
|
||||||
} as Inputs,
|
} as Inputs,
|
||||||
{
|
{
|
||||||
@ -586,6 +587,36 @@ describe('push', () => {
|
|||||||
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
||||||
"org.opencontainers.image.licenses=MIT"
|
"org.opencontainers.image.licenses=MIT"
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'push17',
|
||||||
|
'event_push_defbranch.env',
|
||||||
|
{
|
||||||
|
images: ['user/app'],
|
||||||
|
tags: [
|
||||||
|
`type=raw,value=mytag-{{branch}}`,
|
||||||
|
`type=raw,value=mytag-{{tag}}`
|
||||||
|
],
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: 'mytag-master',
|
||||||
|
partial: ['mytag-'],
|
||||||
|
latest: false
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'user/app:mytag-master',
|
||||||
|
'user/app:mytag-'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"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=mytag-master",
|
||||||
|
"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);
|
||||||
});
|
});
|
||||||
@ -1210,6 +1241,35 @@ describe('tag', () => {
|
|||||||
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
"org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071",
|
||||||
"org.opencontainers.image.licenses=MIT"
|
"org.opencontainers.image.licenses=MIT"
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tag20',
|
||||||
|
'event_tag_v1.1.1.env',
|
||||||
|
{
|
||||||
|
images: ['org/app', 'ghcr.io/user/app'],
|
||||||
|
tags: [
|
||||||
|
`type=raw,{{tag}}-{{sha}}-foo`
|
||||||
|
]
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: 'v1.1.1-90dd603-foo',
|
||||||
|
partial: [],
|
||||||
|
latest: false
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'org/app:v1.1.1-90dd603-foo',
|
||||||
|
'ghcr.io/user/app:v1.1.1-90dd603-foo'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"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-90dd603-foo",
|
||||||
|
"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);
|
||||||
});
|
});
|
||||||
|
161
dist/index.js
generated
vendored
161
dist/index.js
generated
vendored
@ -393,7 +393,7 @@ class Meta {
|
|||||||
latest: undefined
|
latest: undefined
|
||||||
};
|
};
|
||||||
for (const tag of this.tags) {
|
for (const tag of this.tags) {
|
||||||
if (tag.attrs['enable'] == 'false') {
|
if (!/true/i.test(tag.attrs['enable'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (tag.type) {
|
switch (tag.type) {
|
||||||
@ -446,21 +446,12 @@ class Meta {
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
const currentDate = this.date;
|
const currentDate = this.date;
|
||||||
const vraw = this.setFlavor(handlebars.compile(tag.attrs['pattern'])({
|
const vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])({
|
||||||
date: function (format) {
|
date: function (format) {
|
||||||
return moment_1.default(currentDate).utc().format(format);
|
return moment_1.default(currentDate).utc().format(format);
|
||||||
}
|
}
|
||||||
}), tag);
|
}), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procSemver(version, tag) {
|
procSemver(version, tag) {
|
||||||
if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
|
if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
|
||||||
@ -468,7 +459,7 @@ class Meta {
|
|||||||
}
|
}
|
||||||
let vraw;
|
let vraw;
|
||||||
if (tag.attrs['value'].length > 0) {
|
if (tag.attrs['value'].length > 0) {
|
||||||
vraw = tag.attrs['value'];
|
vraw = this.setGlobalExp(tag.attrs['value']);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
@ -482,22 +473,13 @@ class Meta {
|
|||||||
includePrerelease: true
|
includePrerelease: true
|
||||||
});
|
});
|
||||||
if (semver.prerelease(vraw)) {
|
if (semver.prerelease(vraw)) {
|
||||||
vraw = this.setFlavor(handlebars.compile('{{version}}')(sver), tag);
|
vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
vraw = this.setFlavor(handlebars.compile(tag.attrs['pattern'])(sver), tag);
|
vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag);
|
||||||
latest = true;
|
latest = true;
|
||||||
}
|
}
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procMatch(version, tag) {
|
procMatch(version, tag) {
|
||||||
if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
|
if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
|
||||||
@ -505,7 +487,7 @@ class Meta {
|
|||||||
}
|
}
|
||||||
let vraw;
|
let vraw;
|
||||||
if (tag.attrs['value'].length > 0) {
|
if (tag.attrs['value'].length > 0) {
|
||||||
vraw = tag.attrs['value'];
|
vraw = this.setGlobalExp(tag.attrs['value']);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
@ -527,66 +509,29 @@ class Meta {
|
|||||||
core.warning(`Group ${tag.attrs['group']} does not exist for ${tag.attrs['pattern']} pattern.`);
|
core.warning(`Group ${tag.attrs['group']} does not exist for ${tag.attrs['pattern']} pattern.`);
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
vraw = this.setFlavor(tmatch[tag.attrs['group']], tag);
|
vraw = this.setValue(tmatch[tag.attrs['group']], tag);
|
||||||
latest = true;
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procRefBranch(version, tag) {
|
procRefBranch(version, tag) {
|
||||||
if (!/^refs\/heads\//.test(this.context.ref)) {
|
if (!/^refs\/heads\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-'), tag);
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-'), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procRefTag(version, tag) {
|
procRefTag(version, tag) {
|
||||||
if (!/^refs\/tags\//.test(this.context.ref)) {
|
if (!/^refs\/tags\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-'), tag);
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-'), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procRefPr(version, tag) {
|
procRefPr(version, tag) {
|
||||||
if (!/^refs\/pull\//.test(this.context.ref)) {
|
if (!/^refs\/pull\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''), tag);
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procEdge(version, tag) {
|
procEdge(version, tag) {
|
||||||
if (!/^refs\/heads\//.test(this.context.ref)) {
|
if (!/^refs\/heads\//.test(this.context.ref)) {
|
||||||
@ -599,62 +544,70 @@ class Meta {
|
|||||||
if (tag.attrs['branch'] === val) {
|
if (tag.attrs['branch'] === val) {
|
||||||
val = 'edge';
|
val = 'edge';
|
||||||
}
|
}
|
||||||
const vraw = this.setFlavor(val, tag);
|
const vraw = this.setValue(val, tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procRaw(version, tag) {
|
procRaw(version, tag) {
|
||||||
const vraw = this.setFlavor(tag.attrs['value'], tag);
|
const vraw = this.setValue(this.setGlobalExp(tag.attrs['value']), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
}
|
|
||||||
else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
procSha(version, tag) {
|
procSha(version, tag) {
|
||||||
if (!this.context.sha) {
|
if (!this.context.sha) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
const vraw = this.setFlavor(this.context.sha.substr(0, 7), tag);
|
const vraw = this.setValue(this.context.sha.substr(0, 7), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
}
|
||||||
|
static setVersion(version, val, latest) {
|
||||||
|
if (val.length == 0) {
|
||||||
|
return version;
|
||||||
}
|
}
|
||||||
else if (vraw !== version.main) {
|
if (version.main == undefined) {
|
||||||
version.partial.push(vraw);
|
version.main = val;
|
||||||
|
}
|
||||||
|
else if (val !== version.main) {
|
||||||
|
version.partial.push(val);
|
||||||
}
|
}
|
||||||
if (version.latest == undefined) {
|
if (version.latest == undefined) {
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
version.latest = latest;
|
||||||
}
|
}
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
setFlavor(val, tag) {
|
setValue(val, tag) {
|
||||||
if (tag.attrs.hasOwnProperty('prefix')) {
|
if (tag.attrs.hasOwnProperty('prefix')) {
|
||||||
val = `${tag.attrs['prefix']}${val}`;
|
val = `${this.setGlobalExp(tag.attrs['prefix'])}${val}`;
|
||||||
}
|
}
|
||||||
else if (this.flavor.prefix.length > 0) {
|
else if (this.flavor.prefix.length > 0) {
|
||||||
val = `${this.flavor.prefix}${val}`;
|
val = `${this.setGlobalExp(this.flavor.prefix)}${val}`;
|
||||||
}
|
}
|
||||||
if (tag.attrs.hasOwnProperty('suffix')) {
|
if (tag.attrs.hasOwnProperty('suffix')) {
|
||||||
val = `${val}${tag.attrs['suffix']}`;
|
val = `${val}${this.setGlobalExp(tag.attrs['suffix'])}`;
|
||||||
}
|
}
|
||||||
else if (this.flavor.suffix.length > 0) {
|
else if (this.flavor.suffix.length > 0) {
|
||||||
val = `${val}${this.flavor.suffix}`;
|
val = `${val}${this.setGlobalExp(this.flavor.suffix)}`;
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
setGlobalExp(val) {
|
||||||
|
const ctx = this.context;
|
||||||
|
return handlebars.compile(val)({
|
||||||
|
branch: function () {
|
||||||
|
if (!/^refs\/heads\//.test(ctx.ref)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return ctx.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-');
|
||||||
|
},
|
||||||
|
tag: function () {
|
||||||
|
if (!/^refs\/tags\//.test(ctx.ref)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return ctx.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
|
},
|
||||||
|
sha: function () {
|
||||||
|
return ctx.sha.substr(0, 7);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
getTags() {
|
getTags() {
|
||||||
if (!this.version.main) {
|
if (!this.version.main) {
|
||||||
return [];
|
return [];
|
||||||
|
164
src/meta.ts
164
src/meta.ts
@ -44,7 +44,7 @@ export class Meta {
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (const tag of this.tags) {
|
for (const tag of this.tags) {
|
||||||
if (tag.attrs['enable'] == 'false') {
|
if (!/true/i.test(tag.attrs['enable'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (tag.type) {
|
switch (tag.type) {
|
||||||
@ -99,7 +99,7 @@ export class Meta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const currentDate = this.date;
|
const currentDate = this.date;
|
||||||
const vraw = this.setFlavor(
|
const vraw = this.setValue(
|
||||||
handlebars.compile(tag.attrs['pattern'])({
|
handlebars.compile(tag.attrs['pattern'])({
|
||||||
date: function (format) {
|
date: function (format) {
|
||||||
return moment(currentDate).utc().format(format);
|
return moment(currentDate).utc().format(format);
|
||||||
@ -108,16 +108,7 @@ export class Meta {
|
|||||||
tag
|
tag
|
||||||
);
|
);
|
||||||
|
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procSemver(version: Version, tag: tcl.Tag): Version {
|
private procSemver(version: Version, tag: tcl.Tag): Version {
|
||||||
@ -127,7 +118,7 @@ export class Meta {
|
|||||||
|
|
||||||
let vraw: string;
|
let vraw: string;
|
||||||
if (tag.attrs['value'].length > 0) {
|
if (tag.attrs['value'].length > 0) {
|
||||||
vraw = tag.attrs['value'];
|
vraw = this.setGlobalExp(tag.attrs['value']);
|
||||||
} else {
|
} else {
|
||||||
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
}
|
}
|
||||||
@ -141,21 +132,13 @@ export class Meta {
|
|||||||
includePrerelease: true
|
includePrerelease: true
|
||||||
});
|
});
|
||||||
if (semver.prerelease(vraw)) {
|
if (semver.prerelease(vraw)) {
|
||||||
vraw = this.setFlavor(handlebars.compile('{{version}}')(sver), tag);
|
vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag);
|
||||||
} else {
|
} else {
|
||||||
vraw = this.setFlavor(handlebars.compile(tag.attrs['pattern'])(sver), tag);
|
vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag);
|
||||||
latest = true;
|
latest = true;
|
||||||
}
|
}
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true');
|
||||||
}
|
}
|
||||||
|
|
||||||
private procMatch(version: Version, tag: tcl.Tag): Version {
|
private procMatch(version: Version, tag: tcl.Tag): Version {
|
||||||
@ -165,7 +148,7 @@ export class Meta {
|
|||||||
|
|
||||||
let vraw: string;
|
let vraw: string;
|
||||||
if (tag.attrs['value'].length > 0) {
|
if (tag.attrs['value'].length > 0) {
|
||||||
vraw = tag.attrs['value'];
|
vraw = this.setGlobalExp(tag.attrs['value']);
|
||||||
} else {
|
} else {
|
||||||
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
}
|
}
|
||||||
@ -187,73 +170,32 @@ export class Meta {
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
vraw = this.setFlavor(tmatch[tag.attrs['group']], tag);
|
vraw = this.setValue(tmatch[tag.attrs['group']], tag);
|
||||||
latest = true;
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
|
||||||
|
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procRefBranch(version: Version, tag: tcl.Tag): Version {
|
private procRefBranch(version: Version, tag: tcl.Tag): Version {
|
||||||
if (!/^refs\/heads\//.test(this.context.ref)) {
|
if (!/^refs\/heads\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-'), tag);
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-'), tag);
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procRefTag(version: Version, tag: tcl.Tag): Version {
|
private procRefTag(version: Version, tag: tcl.Tag): Version {
|
||||||
if (!/^refs\/tags\//.test(this.context.ref)) {
|
if (!/^refs\/tags\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-'), tag);
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-'), tag);
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procRefPr(version: Version, tag: tcl.Tag): Version {
|
private procRefPr(version: Version, tag: tcl.Tag): Version {
|
||||||
if (!/^refs\/pull\//.test(this.context.ref)) {
|
if (!/^refs\/pull\//.test(this.context.ref)) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
const vraw = this.setValue(this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''), tag);
|
||||||
const vraw = this.setFlavor(this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''), tag);
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
if (version.main == undefined) {
|
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procEdge(version: Version, tag: tcl.Tag): Version {
|
private procEdge(version: Version, tag: tcl.Tag): Version {
|
||||||
@ -269,65 +211,73 @@ export class Meta {
|
|||||||
val = 'edge';
|
val = 'edge';
|
||||||
}
|
}
|
||||||
|
|
||||||
const vraw = this.setFlavor(val, tag);
|
const vraw = this.setValue(val, tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procRaw(version: Version, tag: tcl.Tag): Version {
|
private procRaw(version: Version, tag: tcl.Tag): Version {
|
||||||
const vraw = this.setFlavor(tag.attrs['value'], tag);
|
const vraw = this.setValue(this.setGlobalExp(tag.attrs['value']), tag);
|
||||||
if (version.main == undefined) {
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
version.main = vraw;
|
|
||||||
} else if (vraw !== version.main) {
|
|
||||||
version.partial.push(vraw);
|
|
||||||
}
|
|
||||||
if (version.latest == undefined) {
|
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private procSha(version: Version, tag: tcl.Tag): Version {
|
private procSha(version: Version, tag: tcl.Tag): Version {
|
||||||
if (!this.context.sha) {
|
if (!this.context.sha) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
const vraw = this.setValue(this.context.sha.substr(0, 7), tag);
|
||||||
|
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
|
||||||
|
}
|
||||||
|
|
||||||
const vraw = this.setFlavor(this.context.sha.substr(0, 7), tag);
|
private static setVersion(version: Version, val: string, latest: boolean): Version {
|
||||||
|
if (val.length == 0) {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
if (version.main == undefined) {
|
if (version.main == undefined) {
|
||||||
version.main = vraw;
|
version.main = val;
|
||||||
} else if (vraw !== version.main) {
|
} else if (val !== version.main) {
|
||||||
version.partial.push(vraw);
|
version.partial.push(val);
|
||||||
}
|
}
|
||||||
if (version.latest == undefined) {
|
if (version.latest == undefined) {
|
||||||
version.latest = this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true';
|
version.latest = latest;
|
||||||
}
|
}
|
||||||
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
private setFlavor(val: string, tag: tcl.Tag): string {
|
private setValue(val: string, tag: tcl.Tag): string {
|
||||||
if (tag.attrs.hasOwnProperty('prefix')) {
|
if (tag.attrs.hasOwnProperty('prefix')) {
|
||||||
val = `${tag.attrs['prefix']}${val}`;
|
val = `${this.setGlobalExp(tag.attrs['prefix'])}${val}`;
|
||||||
} else if (this.flavor.prefix.length > 0) {
|
} else if (this.flavor.prefix.length > 0) {
|
||||||
val = `${this.flavor.prefix}${val}`;
|
val = `${this.setGlobalExp(this.flavor.prefix)}${val}`;
|
||||||
}
|
}
|
||||||
if (tag.attrs.hasOwnProperty('suffix')) {
|
if (tag.attrs.hasOwnProperty('suffix')) {
|
||||||
val = `${val}${tag.attrs['suffix']}`;
|
val = `${val}${this.setGlobalExp(tag.attrs['suffix'])}`;
|
||||||
} else if (this.flavor.suffix.length > 0) {
|
} else if (this.flavor.suffix.length > 0) {
|
||||||
val = `${val}${this.flavor.suffix}`;
|
val = `${val}${this.setGlobalExp(this.flavor.suffix)}`;
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setGlobalExp(val): string {
|
||||||
|
const ctx = this.context;
|
||||||
|
return handlebars.compile(val)({
|
||||||
|
branch: function () {
|
||||||
|
if (!/^refs\/heads\//.test(ctx.ref)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return ctx.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-');
|
||||||
|
},
|
||||||
|
tag: function () {
|
||||||
|
if (!/^refs\/tags\//.test(ctx.ref)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return ctx.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
|
||||||
|
},
|
||||||
|
sha: function () {
|
||||||
|
return ctx.sha.substr(0, 7);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public getTags(): Array<string> {
|
public getTags(): Array<string> {
|
||||||
if (!this.version.main) {
|
if (!this.version.main) {
|
||||||
return [];
|
return [];
|
||||||
|
Loading…
Reference in New Issue
Block a user