Merge pull request #193 from crazy-max/images-opts

attribute to enable/disable images
This commit is contained in:
CrazyMax authored and GitHub committed 2022-04-28 13:19:16 +02:00
commit b2391d37b4
9 files changed
+302 -33

No files matched your search

+17 -1
View File
@@ -146,6 +146,21 @@ jobs:
prefix=foo-
suffix=-bar
images:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Docker meta
uses: ./
with:
images: |
name=${{ env.DOCKER_IMAGE }}
name=ghcr.io/name/app,enable=${{ github.event_name == 'pull_request' }}
name=ghcr.io/name/release,enable=${{ startsWith(github.ref, 'refs/tags/') }}
labels:
runs-on: ubuntu-latest
steps:
@@ -226,7 +241,8 @@ jobs:
id: docker_meta
uses: ./
with:
images: ${{ env.DOCKER_IMAGE }}
images: |
${{ env.DOCKER_IMAGE }}
tags: |
type=schedule
type=ref,event=branch
+43 -22
View File
@@ -19,6 +19,7 @@ ___
* [Customizing](#customizing)
* [inputs](#inputs)
* [outputs](#outputs)
* [`images` input](#images-input)
* [`flavor` input](#flavor-input)
* [`tags` input](#tags-input)
* [`type=schedule`](#typeschedule)
@@ -125,7 +126,8 @@ jobs:
id: meta
uses: docker/metadata-action@v3
with:
images: name/app
images: |
name/app
tags: |
type=ref,event=branch
type=ref,event=pr
@@ -202,7 +204,8 @@ jobs:
id: meta
uses: docker/metadata-action@v3
with:
images: name/app
images: |
name/app
tags: |
type=ref,event=branch
type=ref,event=pr
@@ -264,33 +267,51 @@ Following inputs can be used as `step.with` keys
> org.opencontainers.image.vendor=MyCompany
> ```
> `CSV` type is a comma-delimited string
> ```yaml
> images: name/app,ghcr.io/name/app
> ```
| Name | Type | Description |
|---------------------|----------|------------------------------------|
| `images` | List/CSV | List of Docker images to use as base name for tags |
| `tags` | List | List of [tags](#tags-input) as key-value pair attributes |
| `flavor` | List | [Flavor](#flavor-input) to apply |
| `labels` | List | List of custom labels |
| `sep-tags` | String | Separator to use for tags output (default `\n`) |
| `sep-labels` | String | Separator to use for labels output (default `\n`) |
| `bake-target` | String | Bake target name (default `docker-metadata-action`) |
| Name | Type | Description |
|---------------------|--------|----------------------------------------------------------|
| `images` | List | List of Docker images to use as base name for tags |
| `tags` | List | List of [tags](#tags-input) as key-value pair attributes |
| `flavor` | List | [Flavor](#flavor-input) to apply |
| `labels` | List | List of custom labels |
| `sep-tags` | String | Separator to use for tags output (default `\n`) |
| `sep-labels` | String | Separator to use for labels output (default `\n`) |
| `bake-target` | String | Bake target name (default `docker-metadata-action`) |
### outputs
Following outputs are available
| Name | Type | Description |
|---------------|---------|---------------------------------------|
| `version` | String | Docker image version |
| `tags` | String | Docker tags |
| `labels` | String | Docker labels |
| `json` | String | JSON output of tags and labels |
| Name | Type | Description |
|---------------|---------|-------------------------------------------------------------------------------|
| `version` | String | Docker image version |
| `tags` | String | Docker tags |
| `labels` | String | Docker labels |
| `json` | String | JSON output of tags and labels |
| `bake-file` | File | [Bake definition file](https://github.com/docker/buildx#file-definition) path |
## `images` input
`images` defines a list of Docker images to use as base name for [`tags`](#tags-input):
```yaml
images: |
name/foo
ghcr.io/name/bar
# or
name=name/foo
name=ghcr.io/name/bar
```
Extended attributes and default values:
```yaml
images: |
name=,enable=true
```
* `name=<string>` image base name
* `enable=<true|false>` enable this entry (default `true`)
## `flavor` input
`flavor` defines a global behavior for [`tags`](#tags-input):
+101
View File
@@ -0,0 +1,101 @@
import {describe, expect, test} from '@jest/globals';
import {Transform, Image} from '../src/image';
describe('transform', () => {
// prettier-ignore
test.each([
[
[
`name/foo`
],
[
{
name: `name/foo`,
enable: true,
}
] as Image[],
false
],
[
[
`name/foo,name/bar`
],
[
{
name: `name/foo`,
enable: true,
},
{
name: `name/bar`,
enable: true,
}
] as Image[],
false
],
[
[
`name/foo`,
`name/bar`
],
[
{
name: `name/foo`,
enable: true,
},
{
name: `name/bar`,
enable: true,
}
] as Image[],
false
],
[
[
`name=name/bar`,
`name/foo,enable=false`,
`name=ghcr.io/name/foo,enable=true`
],
[
{
name: `name/bar`,
enable: true,
},
{
name: `name/foo`,
enable: false,
},
{
name: `ghcr.io/name/foo`,
enable: true,
},
] as Image[],
false
],
[
[`value=name/foo`], undefined, true
],
[
[`name/foo,enable=bar`], undefined, true
],
[
[`name/foo,bar=baz`], undefined, true
],
[
[`name=,enable=true`], undefined, true
],
[
[`name/foo,name=name/bar,enable=true`], undefined, true
]
])('given %p', async (l: string[], expected: Image[], invalid: boolean) => {
try {
const images = Transform(l);
expect(images).toEqual(expected);
} catch (err) {
if (!invalid) {
console.error(err);
}
// eslint-disable-next-line jest/no-conditional-expect
expect(true).toBe(invalid);
}
});
});
+33
View File
@@ -693,6 +693,39 @@ describe('push', () => {
"org.opencontainers.image.revision=860c1904a1ce19322e91ac35af1ab07466440c37",
"org.opencontainers.image.licenses=MIT"
]
],
[
'push20',
'event_push_dev.env',
{
images: [
'org/app',
'ghcr.io/user/app,enable=false'
],
tags: [
`type=edge,branch=master`,
`type=ref,event=branch,enable=false`,
`type=sha,format=long`
],
} as Inputs,
{
main: 'sha-860c1904a1ce19322e91ac35af1ab07466440c37',
partial: [],
latest: false
} as Version,
[
'org/app:sha-860c1904a1ce19322e91ac35af1ab07466440c37'
],
[
"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=sha-860c1904a1ce19322e91ac35af1ab07466440c37",
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
"org.opencontainers.image.revision=860c1904a1ce19322e91ac35af1ab07466440c37",
"org.opencontainers.image.licenses=MIT"
]
]
])('given %p with %p event', tagsLabelsTest);
});
Generated Vendored
+1 -1
View File
@@ -56,5 +56,5 @@ hooks.version="2.29.3";setHookCallback(createLocal);hooks.fn=We;hooks.min=min;ho
* XRegExp 4.4.1
* <xregexp.com>
* Steven Levithan (c) 2007-present MIT License
*/var T="xregexp";var k={astral:false,namespacing:false};var O={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split};var P={};var x={};var A={};var D=[];var N="default";var C="class";var I={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/};var R=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g;var L=O.exec.call(/()??/,"")[1]===undefined;var M=(0,E["default"])(/x/)!==undefined;var G={},V=G.toString;function hasNativeFlag(t){var a=true;try{new RegExp("",t);if(t==="y"){var r=function(){return"gy"}();var d=".a".replace(new RegExp("a",r),".")==="..";if(d){a=false}}}catch(t){a=false}return a}var U=hasNativeFlag("u");var j=hasNativeFlag("y");var B={g:true,i:true,m:true,u:U,y:j};function augment(t,a,r,d,i){var o;t[T]={captureNames:a};if(i){return t}if(t.__proto__){t.__proto__=XRegExp.prototype}else{for(var p in XRegExp.prototype){t[p]=XRegExp.prototype[p]}}t[T].source=r;t[T].flags=d?(0,S["default"])(o=d.split("")).call(o).join(""):d;return t}function clipDuplicates(t){return O.replace.call(t,/([\s\S])(?=[\s\S]*\1)/g,"")}function copyRegex(t,a){var r;if(!XRegExp.isRegExp(t)){throw new TypeError("Type RegExp expected")}var d=t[T]||{};var i=getNativeFlags(t);var o="";var p="";var u=null;var l=null;a=a||{};if(a.removeG){p+="g"}if(a.removeY){p+="y"}if(p){i=O.replace.call(i,new RegExp("[".concat(p,"]+"),"g"),"")}if(a.addG){o+="g"}if(a.addY){o+="y"}if(o){i=clipDuplicates(i+o)}if(!a.isInternalOnly){if(d.source!==undefined){u=d.source}if((0,E["default"])(d)!=null){l=o?clipDuplicates((0,E["default"])(d)+o):(0,E["default"])(d)}}t=augment(new RegExp(a.source||t.source,i),hasNamedCapture(t)?(0,y["default"])(r=d.captureNames).call(r,0):null,u,l,a.isInternalOnly);return t}function dec(t){return(0,w["default"])(t,16)}function getContextualTokenSeparator(t,a,r){if(t.input[t.index-1]==="("||t.input[t.index+t[0].length]===")"||t.input[t.index-1]==="|"||t.input[t.index+t[0].length]==="|"||t.index<1||t.index+t[0].length>=t.input.length||O.test.call(/^\(\?[:=!]/,t.input.substr(t.index-3,3))||isQuantifierNext(t.input,t.index+t[0].length,r)){return""}return"(?:)"}function getNativeFlags(t){return M?(0,E["default"])(t):O.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(t))[1]}function hasNamedCapture(t){return!!(t[T]&&t[T].captureNames)}function hex(t){return(0,w["default"])(t,10).toString(16)}function isQuantifierNext(t,a,r){var d="\\(\\?#[^)]*\\)";var i="#[^#\\n]*";var o="[?*+]|{\\d+(?:,\\d*)?}";return O.test.call((0,b["default"])(r).call(r,"x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,(0,y["default"])(t).call(t,a))}function isType(t,a){return V.call(t)==="[object ".concat(a,"]")}function pad4(t){while(t.length<4){t="0".concat(t)}return t}function prepareFlags(t,a){if(clipDuplicates(a)!==a){throw new SyntaxError("Invalid duplicate regex flag ".concat(a))}t=O.replace.call(t,/^\(\?([\w$]+)\)/,(function(t,r){if(O.test.call(/[gy]/,r)){throw new SyntaxError("Cannot use flag g or y in mode modifier ".concat(t))}a=clipDuplicates(a+r);return""}));var r=_createForOfIteratorHelper(a),d;try{for(r.s();!(d=r.n()).done;){var i=d.value;if(!B[i]){throw new SyntaxError("Unknown regex flag ".concat(i))}}}catch(t){r.e(t)}finally{r.f()}return{pattern:t,flags:a}}function prepareOptions(t){var a={};if(isType(t,"String")){(0,_["default"])(XRegExp).call(XRegExp,t,/[^\s,]+/,(function(t){a[t]=true}));return a}return t}function registerFlag(t){if(!/^[\w$]$/.test(t)){throw new Error("Flag must be a single character A-Za-z0-9_$")}B[t]=true}function runTokens(t,a,r,d,i){var o=D.length;var p=t[r];var u=null;var l;var c;while(o--){c=D[o];if(c.leadChar&&c.leadChar!==p||c.scope!==d&&c.scope!=="all"||c.flag&&!(0,b["default"])(a).call(a,c.flag)){continue}l=XRegExp.exec(t,c.regex,r,"sticky");if(l){u={matchLength:l[0].length,output:c.handler.call(i,l,d,a),reparse:c.reparse};break}}return u}function setAstral(t){k.astral=t}function setNamespacing(t){k.namespacing=t}function toObject(t){if(t==null){throw new TypeError("Cannot convert null or undefined to object")}return t}function XRegExp(t,a){if(XRegExp.isRegExp(t)){if(a!==undefined){throw new TypeError("Cannot supply flags when copying a RegExp")}return copyRegex(t)}t=t===undefined?"":String(t);a=a===undefined?"":String(a);if(XRegExp.isInstalled("astral")&&!(0,b["default"])(a).call(a,"A")){a+="A"}if(!A[t]){A[t]={}}if(!A[t][a]){var r={hasNamedCapture:false,captureNames:[]};var d=N;var i="";var o=0;var p;var u=prepareFlags(t,a);var l=u.pattern;var c=(0,E["default"])(u);while(o<l.length){do{p=runTokens(l,c,o,d,r);if(p&&p.reparse){l=(0,y["default"])(l).call(l,0,o)+p.output+(0,y["default"])(l).call(l,o+p.matchLength)}}while(p&&p.reparsLine truncated
*/var T="xregexp";var k={astral:false,namespacing:false};var O={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split};var P={};var x={};var A={};var D=[];var N="default";var C="class";var I={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/};var R=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g;var L=O.exec.call(/()??/,"")[1]===undefined;var M=(0,E["default"])(/x/)!==undefined;var G={},V=G.toString;function hasNativeFlag(t){var a=true;try{new RegExp("",t);if(t==="y"){var r=function(){return"gy"}();var d=".a".replace(new RegExp("a",r),".")==="..";if(d){a=false}}}catch(t){a=false}return a}var U=hasNativeFlag("u");var j=hasNativeFlag("y");var B={g:true,i:true,m:true,u:U,y:j};function augment(t,a,r,d,i){var o;t[T]={captureNames:a};if(i){return t}if(t.__proto__){t.__proto__=XRegExp.prototype}else{for(var p in XRegExp.prototype){t[p]=XRegExp.prototype[p]}}t[T].source=r;t[T].flags=d?(0,S["default"])(o=d.split("")).call(o).join(""):d;return t}function clipDuplicates(t){return O.replace.call(t,/([\s\S])(?=[\s\S]*\1)/g,"")}function copyRegex(t,a){var r;if(!XRegExp.isRegExp(t)){throw new TypeError("Type RegExp expected")}var d=t[T]||{};var i=getNativeFlags(t);var o="";var p="";var u=null;var l=null;a=a||{};if(a.removeG){p+="g"}if(a.removeY){p+="y"}if(p){i=O.replace.call(i,new RegExp("[".concat(p,"]+"),"g"),"")}if(a.addG){o+="g"}if(a.addY){o+="y"}if(o){i=clipDuplicates(i+o)}if(!a.isInternalOnly){if(d.source!==undefined){u=d.source}if((0,E["default"])(d)!=null){l=o?clipDuplicates((0,E["default"])(d)+o):(0,E["default"])(d)}}t=augment(new RegExp(a.source||t.source,i),hasNamedCapture(t)?(0,y["default"])(r=d.captureNames).call(r,0):null,u,l,a.isInternalOnly);return t}function dec(t){return(0,w["default"])(t,16)}function getContextualTokenSeparator(t,a,r){if(t.input[t.index-1]==="("||t.input[t.index+t[0].length]===")"||t.input[t.index-1]==="|"||t.input[t.index+t[0].length]==="|"||t.index<1||t.index+t[0].length>=t.input.length||O.test.call(/^\(\?[:=!]/,t.input.substr(t.index-3,3))||isQuantifierNext(t.input,t.index+t[0].length,r)){return""}return"(?:)"}function getNativeFlags(t){return M?(0,E["default"])(t):O.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(t))[1]}function hasNamedCapture(t){return!!(t[T]&&t[T].captureNames)}function hex(t){return(0,w["default"])(t,10).toString(16)}function isQuantifierNext(t,a,r){var d="\\(\\?#[^)]*\\)";var i="#[^#\\n]*";var o="[?*+]|{\\d+(?:,\\d*)?}";return O.test.call((0,b["default"])(r).call(r,"x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,(0,y["default"])(t).call(t,a))}function isType(t,a){return V.call(t)==="[object ".concat(a,"]")}function pad4(t){while(t.length<4){t="0".concat(t)}return t}function prepareFlags(t,a){if(clipDuplicates(a)!==a){throw new SyntaxError("Invalid duplicate regex flag ".concat(a))}t=O.replace.call(t,/^\(\?([\w$]+)\)/,(function(t,r){if(O.test.call(/[gy]/,r)){throw new SyntaxError("Cannot use flag g or y in mode modifier ".concat(t))}a=clipDuplicates(a+r);return""}));var r=_createForOfIteratorHelper(a),d;try{for(r.s();!(d=r.n()).done;){var i=d.value;if(!B[i]){throw new SyntaxError("Unknown regex flag ".concat(i))}}}catch(t){r.e(t)}finally{r.f()}return{pattern:t,flags:a}}function prepareOptions(t){var a={};if(isType(t,"String")){(0,_["default"])(XRegExp).call(XRegExp,t,/[^\s,]+/,(function(t){a[t]=true}));return a}return t}function registerFlag(t){if(!/^[\w$]$/.test(t)){throw new Error("Flag must be a single character A-Za-z0-9_$")}B[t]=true}function runTokens(t,a,r,d,i){var o=D.length;var p=t[r];var u=null;var l;var c;while(o--){c=D[o];if(c.leadChar&&c.leadChar!==p||c.scope!==d&&c.scope!=="all"||c.flag&&!(0,b["default"])(a).call(a,c.flag)){continue}l=XRegExp.exec(t,c.regex,r,"sticky");if(l){u={matchLength:l[0].length,output:c.handler.call(i,l,d,a),reparse:c.reparse};break}}return u}function setAstral(t){k.astral=t}function setNamespacing(t){k.namespacing=t}function toObject(t){if(t==null){throw new TypeError("Cannot convert null or undefined to object")}return t}function XRegExp(t,a){if(XRegExp.isRegExp(t)){if(a!==undefined){throw new TypeError("Cannot supply flags when copying a RegExp")}return copyRegex(t)}t=t===undefined?"":String(t);a=a===undefined?"":String(a);if(XRegExp.isInstalled("astral")&&!(0,b["default"])(a).call(a,"A")){a+="A"}if(!A[t]){A[t]={}}if(!A[t][a]){var r={hasNamedCapture:false,captureNames:[]};var d=N;var i="";var o=0;var p;var u=prepareFlags(t,a);var l=u.pattern;var c=(0,E["default"])(u);while(o<l.length){do{p=runTokens(l,c,o,d,r);if(p&&p.reparse){l=(0,y["default"])(l).call(l,0,o)+p.output+(0,y["default"])(l).call(l,o+p.matchLength)}}while(p&&p.reparsLine truncated
//# sourceMappingURL=index.js.map
Generated Vendored
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sources":["../webpack:/docker-metadata-action/node_modules/@actions/core/lib/command.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/core.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/file-command.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/oidc-utils.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/context.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/github.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/internal/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/auth.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/index.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/proxy.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/flags.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/array/from.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/array/is-array.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/get-iterator.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/instance/slice.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/symbol.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/arrayLikeToArray.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/arrayWithHoles.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/iterableToArrayLimit.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/nonIterableRest.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/slicedToArray.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/unsupportedIterableToArray.js","../webpack:/docker-metadata-action/node_modules/@octokit/auth-token/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/core/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/endpoint/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/node_modules/@octokit/request-error/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/node_modules/@octokit/request/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/request/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/request/node_modules/@octokit/request-error/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@renovate/pep440/index.js","../webpack:/docker-metadata-action/node_modLine truncated
{"version":3,"sources":["../webpack:/docker-metadata-action/node_modules/@actions/core/lib/command.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/core.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/file-command.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/oidc-utils.js","../webpack:/docker-metadata-action/node_modules/@actions/core/lib/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/context.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/github.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/internal/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/github/lib/utils.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/auth.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/index.js","../webpack:/docker-metadata-action/node_modules/@actions/http-client/proxy.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/flags.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/array/from.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/array/is-array.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/get-iterator.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/instance/slice.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/core-js/symbol.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/arrayLikeToArray.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/arrayWithHoles.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/iterableToArrayLimit.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/nonIterableRest.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/slicedToArray.js","../webpack:/docker-metadata-action/node_modules/@babel/runtime-corejs3/helpers/unsupportedIterableToArray.js","../webpack:/docker-metadata-action/node_modules/@octokit/auth-token/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/core/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/endpoint/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/node_modules/@octokit/request-error/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/graphql/node_modules/@octokit/request/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/request/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@octokit/request/node_modules/@octokit/request-error/dist-node/index.js","../webpack:/docker-metadata-action/node_modules/@renovate/pep440/index.js","../webpack:/docker-metadata-action/node_modLine truncated
+1 -1
View File
@@ -27,7 +27,7 @@ export function tmpDir(): string {
export function getInputs(): Inputs {
return {
images: getInputList('images'),
images: getInputList('images', true),
tags: getInputList('tags', true),
flavor: getInputList('flavor', true),
labels: getInputList('labels', true),
+86
View File
@@ -0,0 +1,86 @@
import {parse} from 'csv-parse/sync';
import * as core from '@actions/core';
export interface Image {
name: string;
enable: boolean;
}
export function Transform(inputs: string[]): Image[] {
let images: Image[] = [];
// backward compatibility with old format
if (inputs.length == 1) {
let newformat = false;
const fields = parse(inputs[0], {
relaxColumnCount: true,
skipEmptyLines: true
})[0];
for (const field of fields) {
const parts = field
.toString()
.split('=')
.map(item => item.trim());
if (parts.length == 1) {
images.push({name: parts[0].toLowerCase(), enable: true});
} else {
newformat = true;
break;
}
}
if (!newformat) {
return output(images);
}
}
images = [];
for (const input of inputs) {
const image: Image = {name: '', enable: true};
const fields = parse(input, {
relaxColumnCount: true,
skipEmptyLines: true
})[0];
for (const field of fields) {
const parts = field
.toString()
.split('=')
.map(item => item.trim());
if (parts.length == 1) {
image.name = parts[0].toLowerCase();
} else {
const key = parts[0].toLowerCase();
const value = parts[1];
switch (key) {
case 'name': {
image.name = value.toLowerCase();
break;
}
case 'enable': {
if (!['true', 'false'].includes(value)) {
throw new Error(`Invalid enable attribute value: ${input}`);
}
image.enable = /true/i.test(value);
break;
}
default: {
throw new Error(`Unknown image attribute: ${input}`);
}
}
}
}
if (image.name.length == 0) {
throw new Error(`Image name attribute empty: ${input}`);
}
images.push(image);
}
return output(images);
}
function output(images: Image[]): Image[] {
core.startGroup(`Processing images input`);
for (const image of images) {
core.info(`name=${image.name},enable=${image.enable}`);
}
core.endGroup();
return images;
}
+19 -7
View File
@@ -6,6 +6,7 @@ import * as pep440 from '@renovate/pep440';
import * as semver from 'semver';
import {Inputs, tmpDir} from './context';
import {ReposGetResponseData} from './github';
import * as icl from './image';
import * as tcl from './tag';
import * as fcl from './flavor';
import * as core from '@actions/core';
@@ -23,6 +24,7 @@ export class Meta {
private readonly inputs: Inputs;
private readonly context: Context;
private readonly repo: ReposGetResponseData;
private readonly images: icl.Image[];
private readonly tags: tcl.Tag[];
private readonly flavor: fcl.Flavor;
private readonly date: Date;
@@ -38,6 +40,7 @@ export class Meta {
this.inputs = inputs;
this.context = context;
this.repo = repo;
this.images = icl.Transform(inputs.images);
this.tags = tcl.Transform(inputs.tags);
this.flavor = fcl.Transform(inputs.flavor);
this.date = new Date();
@@ -404,20 +407,29 @@ export class Meta {
});
}
private getImageNames(): Array<string> {
const images: Array<string> = [];
for (const image of this.images) {
if (!image.enable) {
continue;
}
images.push(image.name);
}
return images;
}
public getTags(): Array<string> {
if (!this.version.main) {
return [];
}
const tags: Array<string> = [];
for (const image of this.inputs.images) {
const imageLc = image.toLowerCase();
tags.push(`${imageLc}:${this.version.main}`);
for (const imageName of this.getImageNames()) {
tags.push(`${imageName}:${this.version.main}`);
for (const partial of this.version.partial) {
tags.push(`${imageLc}:${partial}`);
tags.push(`${imageName}:${partial}`);
}
if (this.version.latest) {
tags.push(`${imageLc}:${this.flavor.prefixLatest ? this.flavor.prefix : ''}latest${this.flavor.suffixLatest ? this.flavor.suffix : ''}`);
tags.push(`${imageName}:${this.flavor.prefixLatest ? this.flavor.prefix : ''}latest${this.flavor.suffixLatest ? this.flavor.suffix : ''}`);
}
}
return tags;
@@ -470,7 +482,7 @@ export class Meta {
return res;
}, {}),
args: {
DOCKER_META_IMAGES: this.inputs.images.join(','),
DOCKER_META_IMAGES: this.getImageNames().join(','),
DOCKER_META_VERSION: this.version.main
}
}