From 9a425032056026ffcba55b70c9edf60eeb5d2883 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 6 Dec 2021 15:42:26 +0100 Subject: [PATCH 1/2] chore: cleanup tests Signed-off-by: CrazyMax --- __tests__/context.test.ts | 13 ------------- __tests__/flavor.test.ts | 1 - __tests__/github.test.ts | 1 - __tests__/meta.test.ts | 8 -------- __tests__/tag.test.ts | 2 -- 5 files changed, 25 deletions(-) diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 2320f7d..89fca48 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -16,63 +16,54 @@ describe('getInputList', () => { it('single line correctly', async () => { await setInput('foo', 'bar'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar']); }); it('multiline correctly', async () => { setInput('foo', 'bar\nbaz'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz']); }); it('empty lines correctly', async () => { setInput('foo', 'bar\n\nbaz'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz']); }); it('comma correctly', async () => { setInput('foo', 'bar,baz'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz']); }); it('empty result correctly', async () => { setInput('foo', 'bar,baz,'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz']); }); it('different new lines correctly', async () => { setInput('foo', 'bar\r\nbaz'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz']); }); it('different new lines and comma correctly', async () => { setInput('foo', 'bar\r\nbaz,bat'); const res = await context.getInputList('foo'); - console.log(res); expect(res).toEqual(['bar', 'baz', 'bat']); }); it('multiline and ignoring comma correctly', async () => { setInput('cache-from', 'user/app:cache\ntype=local,src=path/to/dir'); const res = await context.getInputList('cache-from', true); - console.log(res); expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']); }); it('different new lines and ignoring comma correctly', async () => { setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir'); const res = await context.getInputList('cache-from', true); - console.log(res); expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']); }); @@ -86,7 +77,6 @@ ccccccccc" FOO=bar` ); const res = await context.getInputList('secrets', true); - console.log(res); expect(res).toEqual([ 'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', `MYSECRET=aaaaaaaa @@ -110,7 +100,6 @@ bbbb ccc"` ); const res = await context.getInputList('secrets', true); - console.log(res); expect(res).toEqual([ 'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', `MYSECRET=aaaaaaaa @@ -134,7 +123,6 @@ ccccccccc FOO=bar` ); const res = await context.getInputList('secrets', true); - console.log(res); expect(res).toEqual(['GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', 'MYSECRET=aaaaaaaa', 'bbbbbbb', 'ccccccccc', 'FOO=bar']); }); @@ -148,7 +136,6 @@ ccccccccc" FOO=bar` ); const res = await context.getInputList('secrets', true); - console.log(res); expect(res).toEqual([ 'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', `MYSECRET=aaaaaaaa diff --git a/__tests__/flavor.test.ts b/__tests__/flavor.test.ts index 5aa19b2..25bb8a5 100644 --- a/__tests__/flavor.test.ts +++ b/__tests__/flavor.test.ts @@ -168,7 +168,6 @@ describe('transform', () => { ])('given %p attributes ', async (inputs: string[], expected: Flavor, invalid: boolean) => { try { const flavor = Transform(inputs); - console.log(flavor); expect(flavor).toEqual(expected); } catch (err) { if (!invalid) { diff --git a/__tests__/github.test.ts b/__tests__/github.test.ts index 0453582..f65a948 100644 --- a/__tests__/github.test.ts +++ b/__tests__/github.test.ts @@ -8,7 +8,6 @@ jest.spyOn(github, 'repo').mockImplementation((): Promise { it('returns GitHub repository', async () => { const repo = await github.repo(process.env.GITHUB_TOKEN || ''); - console.log(repo); expect(repo.name).not.toBeNull(); }); }); diff --git a/__tests__/meta.test.ts b/__tests__/meta.test.ts index ecc0dfb..034f2de 100644 --- a/__tests__/meta.test.ts +++ b/__tests__/meta.test.ts @@ -34,21 +34,17 @@ beforeEach(() => { const tagsLabelsTest = async (name: string, envFile: string, inputs: Inputs, exVersion: Version, exTags: Array, exLabels: Array) => { process.env = dotenv.parse(fs.readFileSync(path.join(__dirname, 'fixtures', envFile))); const context = github.context(); - console.log(process.env, context); const repo = await github.repo(process.env.GITHUB_TOKEN || ''); const meta = new Meta({...getInputs(), ...inputs}, context, repo); const version = meta.version; - console.log('version', version); expect(version).toEqual(exVersion); const tags = meta.getTags(); - console.log('tags', tags); expect(tags).toEqual(exTags); const labels = meta.getLabels(); - console.log('labels', labels); expect(labels).toEqual(exLabels); }; @@ -3152,13 +3148,11 @@ describe('json', () => { ])('given %p with %p event', async (name: string, envFile: string, inputs: Inputs, exJSON: {}) => { process.env = dotenv.parse(fs.readFileSync(path.join(__dirname, 'fixtures', envFile))); const context = github.context(); - console.log(process.env, context); const repo = await github.repo(process.env.GITHUB_TOKEN || ''); const meta = new Meta({...getInputs(), ...inputs}, context, repo); const jsonOutput = meta.getJSON(); - console.log('json', jsonOutput); expect(jsonOutput).toEqual(exJSON); }); }); @@ -3459,13 +3453,11 @@ describe('bake', () => { ])('given %p with %p event', async (name: string, envFile: string, inputs: Inputs, exBakeDefinition: {}) => { process.env = dotenv.parse(fs.readFileSync(path.join(__dirname, 'fixtures', envFile))); const context = github.context(); - console.log(process.env, context); const repo = await github.repo(process.env.GITHUB_TOKEN || ''); const meta = new Meta({...getInputs(), ...inputs}, context, repo); const bakeFile = meta.getBakeFile(); - console.log('bakeFile', bakeFile, fs.readFileSync(bakeFile, 'utf8')); expect(JSON.parse(fs.readFileSync(bakeFile, 'utf8'))).toEqual(exBakeDefinition); }); }); diff --git a/__tests__/tag.test.ts b/__tests__/tag.test.ts index 467b9a3..b09911f 100644 --- a/__tests__/tag.test.ts +++ b/__tests__/tag.test.ts @@ -99,7 +99,6 @@ describe('transform', () => { ])('given %p', async (l: string[], expected: Tag[], invalid: boolean) => { try { const tags = Transform(l); - console.log(tags); expect(tags).toEqual(expected); } catch (err) { if (!invalid) { @@ -429,7 +428,6 @@ describe('parse', () => { ])('given %p event ', async (s: string, expected: Tag, invalid: boolean) => { try { const tag = Parse(s); - console.log(tag); expect(tag).toEqual(expected); } catch (err) { if (!invalid) { From 52100c89dd056e1a9161c46cf06829d22ce8cd44 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 6 Dec 2021 15:40:44 +0100 Subject: [PATCH 2/2] fix: handle raw statement for semver pre-release Signed-off-by: CrazyMax --- __tests__/meta.test.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ dist/index.js | 19 ++++++++++++++++++- src/meta.ts | 18 +++++++++++++++++- 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/__tests__/meta.test.ts b/__tests__/meta.test.ts index 034f2de..58cdd54 100644 --- a/__tests__/meta.test.ts +++ b/__tests__/meta.test.ts @@ -31,6 +31,19 @@ beforeEach(() => { }); }); +describe('isRawStatement', () => { + // prettier-ignore + test.each([ + ['{{ raw }}.{{ version }}', false], + ['{{ version }},{{raw }.', false], + ['{{ raw }}', true], + ['{{ raw}}', true], + ['{{raw}}', true], + ])('given %p pattern ', async (pattern: string, expected: boolean) => { + expect(Meta.isRawStatement(pattern)).toEqual(expected); + }); +}); + const tagsLabelsTest = async (name: string, envFile: string, inputs: Inputs, exVersion: Version, exTags: Array, exLabels: Array) => { process.env = dotenv.parse(fs.readFileSync(path.join(__dirname, 'fixtures', envFile))); const context = github.context(); @@ -1658,6 +1671,35 @@ describe('tag', () => { "org.opencontainers.image.licenses=MIT" ] ], + [ + 'tag31', + 'event_tag_v2.0.8-beta.67.env', + { + images: ['org/app', 'ghcr.io/user/app'], + tags: [ + `type=semver,pattern={{raw}}` + ] + } as Inputs, + { + main: 'v2.0.8-beta.67', + partial: [], + latest: false + } as Version, + [ + 'org/app:v2.0.8-beta.67', + 'ghcr.io/user/app:v2.0.8-beta.67' + ], + [ + "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=v2.0.8-beta.67", + "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); }); diff --git a/dist/index.js b/dist/index.js index 625c27e..e21525c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -526,7 +526,12 @@ class Meta { includePrerelease: true }); if (semver.prerelease(vraw)) { - vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag); + if (Meta.isRawStatement(tag.attrs['pattern'])) { + vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag); + } + else { + vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag); + } } else { vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag); @@ -671,6 +676,18 @@ class Meta { } return version; } + static isRawStatement(pattern) { + try { + const hp = handlebars.parseWithoutProcessing(pattern); + if (hp.body.length == 1 && hp.body[0].type == 'MustacheStatement') { + return hp.body[0]['path']['parts'].length == 1 && hp.body[0]['path']['parts'][0] == 'raw'; + } + } + catch (err) { + return false; + } + return false; + } setValue(val, tag) { if (tag.attrs.hasOwnProperty('prefix')) { val = `${this.setGlobalExp(tag.attrs['prefix'])}${val}`; diff --git a/src/meta.ts b/src/meta.ts index 7a86c20..b04e95f 100644 --- a/src/meta.ts +++ b/src/meta.ts @@ -143,7 +143,11 @@ export class Meta { includePrerelease: true }); if (semver.prerelease(vraw)) { - vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag); + if (Meta.isRawStatement(tag.attrs['pattern'])) { + vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag); + } else { + vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag); + } } else { vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag); latest = true; @@ -307,6 +311,18 @@ export class Meta { return version; } + public static isRawStatement(pattern: string): boolean { + try { + const hp = handlebars.parseWithoutProcessing(pattern); + if (hp.body.length == 1 && hp.body[0].type == 'MustacheStatement') { + return hp.body[0]['path']['parts'].length == 1 && hp.body[0]['path']['parts'][0] == 'raw'; + } + } catch (err) { + return false; + } + return false; + } + private setValue(val: string, tag: tcl.Tag): string { if (tag.attrs.hasOwnProperty('prefix')) { val = `${this.setGlobalExp(tag.attrs['prefix'])}${val}`;