mirror of
https://code.forgejo.org/docker/metadata-action.git
synced 2025-08-12 09:00:53 +00:00
Merge pull request #536 from crazy-max/semver-match
allow to match part of the git tag or value for semver type
This commit is contained in:
commit
e0542a6360
7 changed files with 135 additions and 33 deletions
58
README.md
58
README.md
|
@ -495,6 +495,8 @@ tags: |
|
||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
# use custom value instead of git tag
|
# use custom value instead of git tag
|
||||||
type=semver,pattern={{version}},value=v1.0.0
|
type=semver,pattern={{version}},value=v1.0.0
|
||||||
|
# use custom value and match part of it
|
||||||
|
type=semver,pattern={{version}},value=p1/v1.0.0,match=v(\d.\d.\d)$
|
||||||
```
|
```
|
||||||
|
|
||||||
Will be used on a [push tag event](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push)
|
Will be used on a [push tag event](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push)
|
||||||
|
@ -510,18 +512,19 @@ with the following expressions:
|
||||||
* `minor` ; minor version identifier
|
* `minor` ; minor version identifier
|
||||||
* `patch` ; patch version identifier
|
* `patch` ; patch version identifier
|
||||||
|
|
||||||
| Git tag | Pattern | Output |
|
| Git tag | Pattern | Match | Output |
|
||||||
|--------------------|-----------------------|----------------------|
|
|------------------|-----------------------|----------------|------------------|
|
||||||
| `v1.2.3` | `{{raw}}` | `v1.2.3` |
|
| `v1.2.3` | `{{raw}}` | | `v1.2.3` |
|
||||||
| `v1.2.3` | `{{version}}` | `1.2.3` |
|
| `v1.2.3` | `{{version}}` | | `1.2.3` |
|
||||||
| `v1.2.3` | `{{major}}.{{minor}}` | `1.2` |
|
| `v1.2.3` | `{{major}}.{{minor}}` | | `1.2` |
|
||||||
| `v1.2.3` | `v{{major}}` | `v1` |
|
| `v1.2.3` | `v{{major}}` | | `v1` |
|
||||||
| `v1.2.3` | `{{minor}}` | `2` |
|
| `v1.2.3` | `{{minor}}` | | `2` |
|
||||||
| `v1.2.3` | `{{patch}}` | `3` |
|
| `v1.2.3` | `{{patch}}` | | `3` |
|
||||||
| `v2.0.8-beta.67` | `{{raw}}` | `v2.0.8-beta.67` |
|
| `p1/v1.2.3` | `{{version}}` | `v(\d.\d.\d)$` | `1.2.3` |
|
||||||
| `v2.0.8-beta.67` | `{{version}}` | `2.0.8-beta.67` |
|
| `v2.0.8-beta.67` | `{{raw}}` | | `v2.0.8-beta.67` |
|
||||||
| `v2.0.8-beta.67` | `{{major}}` | `2.0.8-beta.67`* |
|
| `v2.0.8-beta.67` | `{{version}}` | | `2.0.8-beta.67` |
|
||||||
| `v2.0.8-beta.67` | `{{major}}.{{minor}}` | `2.0.8-beta.67`* |
|
| `v2.0.8-beta.67` | `{{major}}` | | `2.0.8-beta.67`* |
|
||||||
|
| `v2.0.8-beta.67` | `{{major}}.{{minor}}` | | `2.0.8-beta.67`* |
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> *Pre-release (rc, beta, alpha) will only extend `{{version}}` (or `{{raw}}`
|
> *Pre-release (rc, beta, alpha) will only extend `{{version}}` (or `{{raw}}`
|
||||||
|
@ -533,7 +536,7 @@ Extended attributes and default values:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
tags: |
|
tags: |
|
||||||
type=semver,enable=true,priority=900,prefix=,suffix=,pattern=,value=
|
type=semver,enable=true,priority=900,prefix=,suffix=,pattern=,value=,match=
|
||||||
```
|
```
|
||||||
|
|
||||||
### `type=pep440`
|
### `type=pep440`
|
||||||
|
@ -544,6 +547,8 @@ tags: |
|
||||||
type=pep440,pattern={{version}}
|
type=pep440,pattern={{version}}
|
||||||
# use custom value instead of git tag
|
# use custom value instead of git tag
|
||||||
type=pep440,pattern={{version}},value=1.0.0
|
type=pep440,pattern={{version}},value=1.0.0
|
||||||
|
# use custom value and match part of it
|
||||||
|
type=pep440,pattern={{version}},value=p1/v1.0.0,match=v(\d.\d.\d)$
|
||||||
```
|
```
|
||||||
|
|
||||||
Will be used on a [push tag event](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push)
|
Will be used on a [push tag event](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push)
|
||||||
|
@ -559,19 +564,20 @@ with the following expressions:
|
||||||
* `minor` ; minor version identifier
|
* `minor` ; minor version identifier
|
||||||
* `patch` ; patch version identifier
|
* `patch` ; patch version identifier
|
||||||
|
|
||||||
| Git tag | Pattern | Output |
|
| Git tag | Pattern | Match | Output |
|
||||||
|--------------------|----------------------------------------------------------|----------------------|
|
|--------------|-----------------------|----------------|----------------|
|
||||||
| `1.2.3` | `{{raw}}` | `1.2.3` |
|
| `1.2.3` | `{{raw}}` | | `1.2.3` |
|
||||||
| `1.2.3` | `{{version}}` | `1.2.3` |
|
| `1.2.3` | `{{version}}` | | `1.2.3` |
|
||||||
| `v1.2.3` | `{{version}}` | `1.2.3` |
|
| `v1.2.3` | `{{version}}` | | `1.2.3` |
|
||||||
| `1.2.3` | `{{major}}.{{minor}}` | `1.2` |
|
| `1.2.3` | `{{major}}.{{minor}}` | | `1.2` |
|
||||||
| `1.2.3` | `v{{major}}` | `v1` |
|
| `1.2.3` | `v{{major}}` | | `v1` |
|
||||||
| `v1.2.3rc2` | `{{raw}}` | `v1.2.3rc2` |
|
| `v1.2.3rc2` | `{{raw}}` | | `v1.2.3rc2` |
|
||||||
| `1.2.3rc2` | `{{version}}` | `1.2.3rc2` |
|
| `1.2.3rc2` | `{{version}}` | | `1.2.3rc2` |
|
||||||
| `1.2.3rc2` | `{{major}}.{{minor}}` | `1.2.3rc2`* |
|
| `p1/v1.2.3` | `{{version}}` | `v(\d.\d.\d)$` | `1.2.3` |
|
||||||
| `1.2.3post1` | `{{major}}.{{minor}}` | `1.2.3.post1`* |
|
| `1.2.3rc2` | `{{major}}.{{minor}}` | | `1.2.3rc2`* |
|
||||||
| `1.2.3beta2` | `{{major}}.{{minor}}` | `1.2.3b2`* |
|
| `1.2.3post1` | `{{major}}.{{minor}}` | | `1.2.3.post1`* |
|
||||||
| `1.0dev4` | `{{major}}.{{minor}}` | `1.0.dev4`* |
|
| `1.2.3beta2` | `{{major}}.{{minor}}` | | `1.2.3b2`* |
|
||||||
|
| `1.0dev4` | `{{major}}.{{minor}}` | | `1.0.dev4`* |
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> *dev/pre/post release will only extend `{{version}}` (or `{{raw}}` if
|
> *dev/pre/post release will only extend `{{version}}` (or `{{raw}}` if
|
||||||
|
|
|
@ -1971,6 +1971,69 @@ describe('tag', () => {
|
||||||
"org.opencontainers.image.version=1.1.1"
|
"org.opencontainers.image.version=1.1.1"
|
||||||
],
|
],
|
||||||
undefined
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tag34',
|
||||||
|
'event_tag_p1-v1.0.0.env',
|
||||||
|
{
|
||||||
|
images: ['org/app'],
|
||||||
|
tags: [
|
||||||
|
`type=semver,pattern={{version}},"match=v(\\d.\\d.\\d)$"`,
|
||||||
|
]
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: '1.0.0',
|
||||||
|
partial: [],
|
||||||
|
latest: true
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'org/app:1.0.0',
|
||||||
|
'org/app:latest'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
|
||||||
|
"org.opencontainers.image.description=This your first repo!",
|
||||||
|
"org.opencontainers.image.licenses=MIT",
|
||||||
|
"org.opencontainers.image.revision=860c1904a1ce19322e91ac35af1ab07466440c37",
|
||||||
|
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.title=Hello-World",
|
||||||
|
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.version=1.0.0"
|
||||||
|
],
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'push35',
|
||||||
|
'event_push_master.env',
|
||||||
|
{
|
||||||
|
images: ['user/app'],
|
||||||
|
tags: [
|
||||||
|
`type=semver,pattern={{version}},value=p1/v1.2.3,"match=v(\\d.\\d.\\d)$"`,
|
||||||
|
`type=pep440,pattern={{version}},value=p1/v1.2.3,"match=v(\\d.\\d.\\d)$"`,
|
||||||
|
`type=edge`
|
||||||
|
],
|
||||||
|
} as Inputs,
|
||||||
|
{
|
||||||
|
main: '1.2.3',
|
||||||
|
partial: ['edge'],
|
||||||
|
latest: true
|
||||||
|
} as Version,
|
||||||
|
[
|
||||||
|
'user/app:1.2.3',
|
||||||
|
'user/app:edge',
|
||||||
|
'user/app:latest'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
|
||||||
|
"org.opencontainers.image.description=This your first repo!",
|
||||||
|
"org.opencontainers.image.licenses=MIT",
|
||||||
|
"org.opencontainers.image.revision=266574110acf203503badf966df2ea24b5d732d7",
|
||||||
|
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.title=Hello-World",
|
||||||
|
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
|
||||||
|
"org.opencontainers.image.version=1.2.3"
|
||||||
|
],
|
||||||
|
undefined
|
||||||
]
|
]
|
||||||
])('given %p with %p event', tagsLabelsTest);
|
])('given %p with %p event', tagsLabelsTest);
|
||||||
});
|
});
|
||||||
|
|
|
@ -32,7 +32,8 @@ describe('transform', () => {
|
||||||
"priority": DefaultPriorities[Type.Semver],
|
"priority": DefaultPriorities[Type.Semver],
|
||||||
"enable": "true",
|
"enable": "true",
|
||||||
"pattern": "{{version}}",
|
"pattern": "{{version}}",
|
||||||
"value": ""
|
"value": "",
|
||||||
|
"match": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -147,7 +148,8 @@ describe('parse', () => {
|
||||||
"priority": DefaultPriorities[Type.Semver],
|
"priority": DefaultPriorities[Type.Semver],
|
||||||
"enable": "true",
|
"enable": "true",
|
||||||
"pattern": "{{version}}",
|
"pattern": "{{version}}",
|
||||||
"value": ""
|
"value": "",
|
||||||
|
"match": ""
|
||||||
}
|
}
|
||||||
} as Tag,
|
} as Tag,
|
||||||
false
|
false
|
||||||
|
@ -160,7 +162,8 @@ describe('parse', () => {
|
||||||
"priority": "1",
|
"priority": "1",
|
||||||
"enable": "true",
|
"enable": "true",
|
||||||
"pattern": "{{version}}",
|
"pattern": "{{version}}",
|
||||||
"value": ""
|
"value": "",
|
||||||
|
"match": ""
|
||||||
}
|
}
|
||||||
} as Tag,
|
} as Tag,
|
||||||
false
|
false
|
||||||
|
@ -173,7 +176,22 @@ describe('parse', () => {
|
||||||
"priority": "1",
|
"priority": "1",
|
||||||
"enable": "true",
|
"enable": "true",
|
||||||
"pattern": "{{version}}",
|
"pattern": "{{version}}",
|
||||||
"value": "v1.0.0"
|
"value": "v1.0.0",
|
||||||
|
"match": ""
|
||||||
|
}
|
||||||
|
} as Tag,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
`type=semver,priority=1,enable=true,pattern={{version}},value=p1/v1.0.0,"match=v(\\d.\\d.\\d)$"`,
|
||||||
|
{
|
||||||
|
type: Type.Semver,
|
||||||
|
attrs: {
|
||||||
|
"priority": "1",
|
||||||
|
"enable": "true",
|
||||||
|
"pattern": "{{version}}",
|
||||||
|
"value": "p1/v1.0.0",
|
||||||
|
"match": "v(\\d.\\d.\\d)$"
|
||||||
}
|
}
|
||||||
} as Tag,
|
} as Tag,
|
||||||
false
|
false
|
||||||
|
|
2
dist/index.js
generated
vendored
2
dist/index.js
generated
vendored
File diff suppressed because one or more lines are too long
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
14
src/meta.ts
14
src/meta.ts
|
@ -161,8 +161,20 @@ export class Meta {
|
||||||
if (tag.attrs['value'].length > 0) {
|
if (tag.attrs['value'].length > 0) {
|
||||||
vraw = this.setGlobalExp(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, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tag.attrs['match'].length > 0) {
|
||||||
|
const tmatch = vraw.match(tag.attrs['match']);
|
||||||
|
if (!tmatch) {
|
||||||
|
core.warning(`${tag.attrs['match']} does not match ${vraw}.`);
|
||||||
|
} else {
|
||||||
|
vraw = this.setValue(tmatch[1], tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vraw = vraw.replace(/\//g, '-');
|
||||||
|
|
||||||
if (!semver.valid(vraw)) {
|
if (!semver.valid(vraw)) {
|
||||||
core.warning(`${vraw} is not a valid semver. More info: https://semver.org/`);
|
core.warning(`${vraw} is not a valid semver. More info: https://semver.org/`);
|
||||||
return version;
|
return version;
|
||||||
|
|
|
@ -137,6 +137,9 @@ export function Parse(s: string): Tag {
|
||||||
if (!Object.prototype.hasOwnProperty.call(tag.attrs, 'value')) {
|
if (!Object.prototype.hasOwnProperty.call(tag.attrs, 'value')) {
|
||||||
tag.attrs['value'] = '';
|
tag.attrs['value'] = '';
|
||||||
}
|
}
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(tag.attrs, 'match')) {
|
||||||
|
tag.attrs['match'] = '';
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Type.Match: {
|
case Type.Match: {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue