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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax