From cb039680df127e6c85bd7a2626d2bfa5b9587112 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 25 Oct 2020 15:32:14 +0100 Subject: [PATCH] Allow to disable edge branch tagging (#2) Co-authored-by: CrazyMax --- README.md | 3 ++- __tests__/meta.test.ts | 30 ++++++++++++++++++++++++++++-- action.yml | 4 ++++ dist/index.js | 13 +++++++------ src/context.ts | 8 +++++--- src/meta.ts | 8 ++++---- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index e600345..0df9c92 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,8 @@ Following inputs can be used as `step.with` keys |---------------------|----------|------------------------------------| | `images` | List/CSV | List of Docker images to use as base name for tags | | `tag-sha` | Bool | Add git short SHA as Docker tag (default `false`) | -| `tag-edge` | String | Branch that will be tagged as edge (default `repo.default_branch`) | +| `tag-edge` | Bool | Enable edge branch tagging (default `false`) | +| `tag-edge-branch` | String | Branch that will be tagged as edge (default `repo.default_branch`) | | `tag-schedule` | String | [Handlebars template](https://handlebarsjs.com/guide/) to apply to schedule tag (default `nightly`) | | `sep-tags` | String | Separator to use for tags output (default `\n`) | | `sep-labels` | String | Separator to use for labels output (default `\n`) | diff --git a/__tests__/meta.test.ts b/__tests__/meta.test.ts index a8ccf27..6411922 100644 --- a/__tests__/meta.test.ts +++ b/__tests__/meta.test.ts @@ -119,6 +119,7 @@ describe('tags and labels', () => { 'event_push_defbranch.env', { images: ['user/app'], + tagEdge: true, } as Inputs, 'edge', [ @@ -135,6 +136,26 @@ describe('tags and labels', () => { "org.opencontainers.image.licenses=MIT" ] ], + [ + 'event_push_defbranch.env', + { + images: ['user/app'], + } as Inputs, + 'master', + [ + 'user/app:master' + ], + [ + "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.git", + "org.opencontainers.image.version=master", + "org.opencontainers.image.created=2020-01-10T00:30:00.000Z", + "org.opencontainers.image.revision=90dd6032fac8bda1b6c4436a2e65de27961ed071", + "org.opencontainers.image.licenses=MIT" + ] + ], [ 'event_release.env', { @@ -263,6 +284,7 @@ describe('tags and labels', () => { 'event_workflow_dispatch.env', { images: ['user/app'], + tagEdge: true, } as Inputs, 'edge', [ @@ -325,6 +347,7 @@ describe('tags and labels', () => { 'event_push_defbranch.env', { images: ['org/app', 'ghcr.io/user/app'], + tagEdge: true, } as Inputs, 'edge', [ @@ -439,6 +462,7 @@ describe('tags and labels', () => { { images: ['org/app', 'ghcr.io/user/app'], tagSha: true, + tagEdge: true, } as Inputs, 'edge', [ @@ -513,7 +537,8 @@ describe('tags and labels', () => { { images: ['org/app', 'ghcr.io/user/app'], tagSha: true, - tagEdge: 'dev' + tagEdge: true, + tagEdgeBranch: 'dev' } as Inputs, 'edge', [ @@ -538,7 +563,8 @@ describe('tags and labels', () => { { images: ['org/app', 'ghcr.io/user/app'], tagSha: true, - tagEdge: 'dev' + tagEdge: true, + tagEdgeBranch: 'dev' } as Inputs, 'master', [ diff --git a/action.yml b/action.yml index 97185b0..1b3d523 100644 --- a/action.yml +++ b/action.yml @@ -15,6 +15,10 @@ inputs: default: 'false' required: false tag-edge: + description: 'Enable edge branch tagging' + default: 'false' + required: false + tag-edge-branch: description: 'Branch that will be tagged as edge (default repo.default_branch)' required: false tag-schedule: diff --git a/dist/index.js b/dist/index.js index 3926453..de6f95d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -22,8 +22,9 @@ const core = __webpack_require__(2186); function getInputs() { return { images: getInputList('images'), - tagSha: /true/i.test(core.getInput('tag-sha')), - tagEdge: core.getInput('tag-edge'), + tagSha: /true/i.test(core.getInput('tag-sha') || 'false'), + tagEdge: /true/i.test(core.getInput('tag-edge') || 'false'), + tagEdgeBranch: core.getInput('tag-edge-branch'), tagSchedule: core.getInput('tag-schedule') || 'nightly', sepTags: core.getInput('sep-tags') || `\n`, sepLabels: core.getInput('sep-labels') || `\n`, @@ -170,8 +171,8 @@ const core = __webpack_require__(2186); class Meta { constructor(inputs, context, repo) { this.inputs = inputs; - if (!this.inputs.tagEdge) { - this.inputs.tagEdge = repo.default_branch; + if (!this.inputs.tagEdgeBranch) { + this.inputs.tagEdgeBranch = repo.default_branch; } this.context = context; this.repo = repo; @@ -188,7 +189,7 @@ class Meta { } else if (/^refs\/heads\//.test(this.context.ref)) { const branch = this.context.ref.replace(/^refs\/heads\//g, '').replace(/\//g, '-'); - return this.inputs.tagEdge === branch ? 'edge' : branch; + return this.inputs.tagEdge && this.inputs.tagEdgeBranch === branch ? 'edge' : branch; } else if (/^refs\/pull\//.test(this.context.ref)) { const pr = this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''); @@ -246,7 +247,7 @@ class Meta { } eventBranch(image) { const branch = this.context.ref.replace(/^refs\/heads\//g, '').replace(/\//g, '-'); - if (this.inputs.tagEdge === branch) { + if (this.inputs.tagEdge && this.inputs.tagEdgeBranch === branch) { return [`${image}:edge`]; } return [`${image}:${branch}`]; diff --git a/src/context.ts b/src/context.ts index 977b905..805e840 100644 --- a/src/context.ts +++ b/src/context.ts @@ -3,7 +3,8 @@ import * as core from '@actions/core'; export interface Inputs { images: string[]; tagSha: boolean; - tagEdge: string; + tagEdge: boolean; + tagEdgeBranch: string; tagSchedule: string; sepTags: string; sepLabels: string; @@ -13,8 +14,9 @@ export interface Inputs { export function getInputs(): Inputs { return { images: getInputList('images'), - tagSha: /true/i.test(core.getInput('tag-sha')), - tagEdge: core.getInput('tag-edge'), + tagSha: /true/i.test(core.getInput('tag-sha') || 'false'), + tagEdge: /true/i.test(core.getInput('tag-edge') || 'false'), + tagEdgeBranch: core.getInput('tag-edge-branch'), tagSchedule: core.getInput('tag-schedule') || 'nightly', sepTags: core.getInput('sep-tags') || `\n`, sepLabels: core.getInput('sep-labels') || `\n`, diff --git a/src/meta.ts b/src/meta.ts index 966aeb1..4904394 100644 --- a/src/meta.ts +++ b/src/meta.ts @@ -14,8 +14,8 @@ export class Meta { constructor(inputs: Inputs, context: Context, repo: ReposGetResponseData) { this.inputs = inputs; - if (!this.inputs.tagEdge) { - this.inputs.tagEdge = repo.default_branch; + if (!this.inputs.tagEdgeBranch) { + this.inputs.tagEdgeBranch = repo.default_branch; } this.context = context; this.repo = repo; @@ -31,7 +31,7 @@ export class Meta { return sver ? sver : tag; } else if (/^refs\/heads\//.test(this.context.ref)) { const branch = this.context.ref.replace(/^refs\/heads\//g, '').replace(/\//g, '-'); - return this.inputs.tagEdge === branch ? 'edge' : branch; + return this.inputs.tagEdge && this.inputs.tagEdgeBranch === branch ? 'edge' : branch; } else if (/^refs\/pull\//.test(this.context.ref)) { const pr = this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''); return `pr-${pr}`; @@ -88,7 +88,7 @@ export class Meta { private eventBranch(image: string): Array { const branch = this.context.ref.replace(/^refs\/heads\//g, '').replace(/\//g, '-'); - if (this.inputs.tagEdge === branch) { + if (this.inputs.tagEdge && this.inputs.tagEdgeBranch === branch) { return [`${image}:edge`]; } return [`${image}:${branch}`];