diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b5a8193c9..c0e6546d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,9 +72,9 @@ jobs: fail-fast: false matrix: include: - - tag-match: '\d{1,3}.\d{1,3}.\d{1,3}' + - tag-match: '\d.\d.\d' tag-match-group: '0' - - tag-match: '\d{1,3}.\d{1,3}' + - tag-match: '\d.\d' tag-match-group: '0' - tag-match: 'v(.*)' tag-match-group: '1' diff --git a/README.md b/README.md index 9a164ff27..f045b1efc 100644 --- a/README.md +++ b/README.md @@ -420,9 +420,7 @@ tags: | ```yaml tags: | # minimal - type=match,pattern=\d{8} - # double quotes if comma in pattern - type=match,"pattern=\d{1,3}.\d{1,3}.\d{1,3}" + type=match,pattern=\d.\d.\d # define match group type=match,pattern=v(.*),group=1 # use custom value instead of git tag @@ -435,7 +433,7 @@ a custom value through `value` attribute. | Git tag | Pattern | Group | Output | |-------------------------|-------------------------------|---------|------------------------| -| `v1.2.3` | `\d{1,3}.\d{1,3}.\d{1,3}` | `0` | `1.2.3` | +| `v1.2.3` | `\d.\d.\d` | `0` | `1.2.3` | | `v2.0.8-beta.67` | `v(.*)` | `1` | `2.0.8-beta.67` | | `v2.0.8-beta.67` | `v(\d.\d)` | `1` | `2.0` | | `20200110-RC2` | `\d+` | `0` | `20200110` | diff --git a/__tests__/meta.test.ts b/__tests__/meta.test.ts index 1d65fde35..2513ae4c1 100644 --- a/__tests__/meta.test.ts +++ b/__tests__/meta.test.ts @@ -713,7 +713,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d.\\d"` ] } as Inputs, { @@ -744,7 +744,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=^v(\\d{1,3}.\\d{1,3}.\\d{1,3})$",group=1` + `type=match,"pattern=^v(\\d.\\d.\\d)$",group=1` ] } as Inputs, { @@ -775,7 +775,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}.\\d{1,3}-(alpha|beta).\\d{1,3}"` + `type=match,"pattern=\\d.\\d.\\d-(alpha|beta).\\d"` ] } as Inputs, { @@ -806,7 +806,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d"` ] } as Inputs, { @@ -837,7 +837,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=/^v(\\d{1,3}.\\d{1,3}.\\d{1,3})$/ig",group=1`, + `type=match,"pattern=/^v(\\d.\\d.\\d)$/ig",group=1`, ] } as Inputs, { @@ -866,7 +866,7 @@ describe('tag', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d"` ] } as Inputs, { @@ -1030,7 +1030,7 @@ describe('tag', () => { tags: [ `type=raw,priority=2000,foo`, `type=semver,pattern={{version}}`, - `type=match,"pattern=\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d"` ] } as Inputs, { @@ -1189,7 +1189,7 @@ describe('latest', () => { { images: ['user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d.\\d"` ] } as Inputs, { @@ -1246,7 +1246,7 @@ describe('latest', () => { { images: ['org/app', 'ghcr.io/user/app'], tags: [ - `type=match,"pattern=\\d{1,3}.\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d.\\d"` ] } as Inputs, { diff --git a/__tests__/tag.test.ts b/__tests__/tag.test.ts index 826eb0f0c..8032af870 100644 --- a/__tests__/tag.test.ts +++ b/__tests__/tag.test.ts @@ -13,7 +13,7 @@ describe('transform', () => { `type=raw,foo`, `type=edge`, `type=semver,pattern={{version}}`, - `type=match,"pattern=\\d{1,3}.\\d{1,3}.\\d{1,3}"` + `type=match,"pattern=\\d.\\d.\\d",group=0` ], [ { @@ -44,7 +44,7 @@ describe('transform', () => { "enable": "true", "prefix": "", "suffix": "", - "pattern": "\\d{1,3}.\\d{1,3}.\\d{1,3}", + "pattern": "\\d.\\d.\\d", "group": "0", "value": "" } @@ -204,7 +204,7 @@ describe('parse', () => { false ], [ - `type=match,enable=true,"pattern=^v(\\d{1,3}.\\d{1,3}.\\d{1,3})$",group=1`, + `type=match,enable=true,"pattern=^v(\\d.\\d.\\d)$",group=1`, { type: Type.Match, attrs: { @@ -212,7 +212,7 @@ describe('parse', () => { "enable": "true", "prefix": "", "suffix": "", - "pattern": "^v(\\d{1,3}.\\d{1,3}.\\d{1,3})$", + "pattern": "^v(\\d.\\d.\\d)$", "group": "1", "value": "" } diff --git a/dist/index.js b/dist/index.js index b21ab7b51..e6f99e7ad 100644 --- a/dist/index.js +++ b/dist/index.js @@ -99,12 +99,32 @@ exports.asyncForEach = (array, callback) => __awaiter(void 0, void 0, void 0, fu /***/ }), /***/ 3716: -/***/ ((__unused_webpack_module, exports) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Transform = void 0; +const core = __importStar(__webpack_require__(2186)); function Transform(inputs) { const flavor = { latest: 'auto', @@ -137,6 +157,11 @@ function Transform(inputs) { } } } + core.startGroup(`Processing flavor input`); + core.info(`latest=${flavor.latest}`); + core.info(`prefix=${flavor.prefix}`); + core.info(`suffix=${flavor.suffix}`); + core.endGroup(); return flavor; } exports.Transform = Transform; @@ -690,12 +715,32 @@ exports.Meta = Meta; "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Parse = exports.Transform = exports.DefaultPriorities = exports.RefEvent = exports.Type = void 0; +exports.Parse = exports.Transform = exports.DefaultPriorities = exports.Tag = exports.RefEvent = exports.Type = void 0; const sync_1 = __importDefault(__webpack_require__(8750)); +const core = __importStar(__webpack_require__(2186)); var Type; (function (Type) { Type["Schedule"] = "schedule"; @@ -712,6 +757,19 @@ var RefEvent; RefEvent["Tag"] = "tag"; RefEvent["PR"] = "pr"; })(RefEvent = exports.RefEvent || (exports.RefEvent = {})); +class Tag { + constructor() { + this.attrs = {}; + } + toString() { + const out = [`type=${this.type}`]; + for (let attr in this.attrs) { + out.push(`${attr}=${this.attrs[attr]}`); + } + return out.join(','); + } +} +exports.Tag = Tag; exports.DefaultPriorities = { [Type.Schedule]: '1000', [Type.Semver]: '900', @@ -735,7 +793,7 @@ function Transform(inputs) { for (const input of inputs) { tags.push(Parse(input)); } - return tags.sort((tag1, tag2) => { + const sorted = tags.sort((tag1, tag2) => { if (Number(tag1.attrs['priority']) < Number(tag2.attrs['priority'])) { return 1; } @@ -744,6 +802,12 @@ function Transform(inputs) { } return 0; }); + core.startGroup(`Processing tags input`); + for (const tag of sorted) { + core.info(tag.toString()); + } + core.endGroup(); + return sorted; } exports.Transform = Transform; function Parse(s) { @@ -751,9 +815,7 @@ function Parse(s) { relaxColumnCount: true, skipLinesWithEmptyValues: true })[0]; - const tag = { - attrs: {} - }; + const tag = new Tag(); for (const field of fields) { const parts = field.toString().split('=', 2); if (parts.length == 1) { diff --git a/src/flavor.ts b/src/flavor.ts index 3ae13b736..40b02d3de 100644 --- a/src/flavor.ts +++ b/src/flavor.ts @@ -1,3 +1,5 @@ +import * as core from '@actions/core'; + export interface Flavor { latest: string; prefix: string; @@ -38,5 +40,11 @@ export function Transform(inputs: string[]): Flavor { } } + core.startGroup(`Processing flavor input`); + core.info(`latest=${flavor.latest}`); + core.info(`prefix=${flavor.prefix}`); + core.info(`suffix=${flavor.suffix}`); + core.endGroup(); + return flavor; } diff --git a/src/tag.ts b/src/tag.ts index 0a935d11f..b27e7269b 100644 --- a/src/tag.ts +++ b/src/tag.ts @@ -1,4 +1,5 @@ import csvparse from 'csv-parse/lib/sync'; +import * as core from '@actions/core'; export enum Type { Schedule = 'schedule', @@ -16,9 +17,21 @@ export enum RefEvent { PR = 'pr' } -export interface Tag { - type: Type; - attrs: Record; +export class Tag { + public type?: Type; + public attrs: Record; + + constructor() { + this.attrs = {}; + } + + public toString(): string { + const out: string[] = [`type=${this.type}`]; + for (let attr in this.attrs) { + out.push(`${attr}=${this.attrs[attr]}`); + } + return out.join(','); + } } export const DefaultPriorities: Record = { @@ -42,10 +55,11 @@ export function Transform(inputs: string[]): Tag[] { `type=ref,event=${RefEvent.PR}` ]; } + for (const input of inputs) { tags.push(Parse(input)); } - return tags.sort((tag1, tag2) => { + const sorted = tags.sort((tag1, tag2) => { if (Number(tag1.attrs['priority']) < Number(tag2.attrs['priority'])) { return 1; } @@ -54,6 +68,14 @@ export function Transform(inputs: string[]): Tag[] { } return 0; }); + + core.startGroup(`Processing tags input`); + for (const tag of sorted) { + core.info(tag.toString()); + } + core.endGroup(); + + return sorted; } export function Parse(s: string): Tag { @@ -62,10 +84,7 @@ export function Parse(s: string): Tag { skipLinesWithEmptyValues: true })[0]; - const tag = { - attrs: {} - } as Tag; - + const tag = new Tag(); for (const field of fields) { const parts = field.toString().split('=', 2); if (parts.length == 1) {