From cb3417d207a2decdd2af297c5202988093c714ac Mon Sep 17 00:00:00 2001 From: Nick Cipollo Date: Fri, 13 Dec 2019 16:05:44 -0500 Subject: [PATCH] Add prerelease --- README.md | 1 + __tests__/Action.test.ts | 18 ++++++++++-------- __tests__/Inputs.test.ts | 11 +++++++++++ action.yml | 3 +++ lib/Action.js | 4 ++-- lib/Inputs.js | 4 ++++ lib/Releases.js | 6 ++++-- src/Action.ts | 10 ++++++---- src/Inputs.ts | 6 ++++++ src/Releases.ts | 14 ++++++++++---- 10 files changed, 57 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ceac696..f6b849b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ This action will create a github release and optionally upload an artifact to it - **commit**: An optional commit reference. This will be used to create the tag if it does not exist. - **draft**: Optionally marks this release as a draft release. Set to `true` to enable. - **name**: An optional name for the release. If this is omitted the tag will be used. +- **prerelease**: Optionally marks this release as prerelease. Set to true to enable. - **tag**: An optional tag for the release. If this is omitted the git ref will be used (if it is a tag). - **token**: (**Required**) The Github token. Typically this will be `${{ secrets.GITHUB_TOKEN }}`. diff --git a/__tests__/Action.test.ts b/__tests__/Action.test.ts index 985ae1e..d3fee12 100644 --- a/__tests__/Action.test.ts +++ b/__tests__/Action.test.ts @@ -19,6 +19,7 @@ const commit = 'commit' const draft = true const id = 100 const name = 'name' +const prerelease = true const tag = 'tag' const token = 'token' const url = 'http://api.example.com' @@ -36,7 +37,7 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, body, commit, draft, name) + expect(createMock).toBeCalledWith(tag, body, commit, draft, name, prerelease) expect(uploadMock).not.toBeCalled() }) @@ -49,7 +50,7 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, body, commit, draft, name) + expect(createMock).toBeCalledWith(tag, body, commit, draft, name, prerelease) expect(uploadMock).toBeCalledWith(artifacts, url) }) @@ -58,7 +59,7 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, body, commit, draft, name) + expect(createMock).toBeCalledWith(tag, body, commit, draft, name, prerelease) expect(uploadMock).toBeCalledWith(artifacts, url) }) @@ -73,7 +74,7 @@ describe("Action", () => { expect(error).toEqual("error") } - expect(createMock).toBeCalledWith(tag, body, commit, draft, name) + expect(createMock).toBeCalledWith(tag, body, commit, draft, name, prerelease) expect(uploadMock).not.toBeCalled() }) @@ -114,7 +115,7 @@ describe("Action", () => { expect(error).toEqual("error") } - expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name) + expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name, prerelease) expect(uploadMock).not.toBeCalled() }) @@ -129,7 +130,7 @@ describe("Action", () => { expect(error).toEqual("error") } - expect(createMock).toBeCalledWith(tag, body, commit, draft, name) + expect(createMock).toBeCalledWith(tag, body, commit, draft, name, prerelease) expect(uploadMock).toBeCalledWith(artifacts, url) }) @@ -138,7 +139,7 @@ describe("Action", () => { await action.perform() - expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name) + expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name, prerelease) expect(uploadMock).not.toBeCalled() }) @@ -148,7 +149,7 @@ describe("Action", () => { await action.perform() - expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name) + expect(updateMock).toBeCalledWith(id, tag, body, commit, draft, name, prerelease) expect(uploadMock).toBeCalledWith(artifacts, url) }) @@ -194,6 +195,7 @@ describe("Action", () => { commit: commit, draft: draft, name: name, + prerelease: prerelease, tag: tag, token: token, readArtifact: () => artifactData diff --git a/__tests__/Inputs.test.ts b/__tests__/Inputs.test.ts index a8d49e1..8c762aa 100644 --- a/__tests__/Inputs.test.ts +++ b/__tests__/Inputs.test.ts @@ -133,6 +133,17 @@ describe('Inputs', () => { }) }) + describe('prerelase', () => { + it('returns false', () => { + expect(inputs.prerelease).toBe(false) + }) + + it('returns true', () => { + mockGetInput.mockReturnValue('true') + expect(inputs.prerelease).toBe(true) + }) + }) + describe('tag', () => { it('returns input tag', () => { mockGetInput.mockReturnValue('tag') diff --git a/action.yml b/action.yml index 34bc480..7a63b9f 100644 --- a/action.yml +++ b/action.yml @@ -29,6 +29,9 @@ inputs: name: description: 'An optional name for the release. If this is omitted the tag will be used.' default: '' + prerelease: + description: "Optionally marks this release as prerelease. Set to true to enable." + default: '' tag: description: 'An optional tag for the release. If this is omitted the git ref will be used (if it is a tag).' default: '' diff --git a/lib/Action.js b/lib/Action.js index 0e375c4..de1aa8e 100644 --- a/lib/Action.js +++ b/lib/Action.js @@ -48,7 +48,7 @@ class Action { } createRelease() { return __awaiter(this, void 0, void 0, function* () { - const response = yield this.releases.create(this.inputs.tag, this.inputs.body, this.inputs.commit, this.inputs.draft, this.inputs.name); + const response = yield this.releases.create(this.inputs.tag, this.inputs.body, this.inputs.commit, this.inputs.draft, this.inputs.name, this.inputs.prerelease); return response.data.upload_url; }); } @@ -58,7 +58,7 @@ class Action { } updateRelease(id) { return __awaiter(this, void 0, void 0, function* () { - const response = yield this.releases.update(id, this.inputs.tag, this.inputs.body, this.inputs.commit, this.inputs.draft, this.inputs.name); + const response = yield this.releases.update(id, this.inputs.tag, this.inputs.body, this.inputs.commit, this.inputs.draft, this.inputs.name, this.inputs.prerelease); return response.data.upload_url; }); } diff --git a/lib/Inputs.js b/lib/Inputs.js index d995e36..9b5066e 100644 --- a/lib/Inputs.js +++ b/lib/Inputs.js @@ -58,6 +58,10 @@ class CoreInputs { } return this.tag; } + get prerelease() { + const draft = core.getInput('prerelease'); + return draft == 'true'; + } get tag() { const tag = core.getInput('tag'); if (tag) { diff --git a/lib/Releases.js b/lib/Releases.js index d6499b4..3502723 100644 --- a/lib/Releases.js +++ b/lib/Releases.js @@ -14,13 +14,14 @@ class GithubReleases { this.context = context; this.git = git; } - create(tag, body, commitHash, draft, name) { + create(tag, body, commitHash, draft, name, prerelease) { return __awaiter(this, void 0, void 0, function* () { return this.git.repos.createRelease({ body: body, name: name, draft: draft, owner: this.context.repo.owner, + prerelease: prerelease, repo: this.context.repo.repo, target_commitish: commitHash, tag_name: tag @@ -36,7 +37,7 @@ class GithubReleases { }); }); } - update(id, tag, body, commitHash, draft, name) { + update(id, tag, body, commitHash, draft, name, prerelease) { return __awaiter(this, void 0, void 0, function* () { return this.git.repos.updateRelease({ release_id: id, @@ -44,6 +45,7 @@ class GithubReleases { name: name, draft: draft, owner: this.context.repo.owner, + prerelease: prerelease, repo: this.context.repo.repo, target_commitish: commitHash, tag_name: tag diff --git a/src/Action.ts b/src/Action.ts index cd2fd46..3877587 100644 --- a/src/Action.ts +++ b/src/Action.ts @@ -24,7 +24,7 @@ export class Action { } private async createOrUpdateRelease(): Promise { - if(this.inputs.allowUpdates) { + if (this.inputs.allowUpdates) { try { const getResponse = await this.releases.getByTag(this.inputs.tag) return await this.updateRelease(getResponse.data.id) @@ -46,13 +46,14 @@ export class Action { this.inputs.body, this.inputs.commit, this.inputs.draft, - this.inputs.name + this.inputs.name, + this.inputs.prerelease ) return response.data.upload_url } - private noRelease(error:any): boolean { + private noRelease(error: any): boolean { const errorMessage = new ErrorMessage(error) return errorMessage.status == 404 } @@ -64,7 +65,8 @@ export class Action { this.inputs.body, this.inputs.commit, this.inputs.draft, - this.inputs.name + this.inputs.name, + this.inputs.prerelease ) return response.data.upload_url diff --git a/src/Inputs.ts b/src/Inputs.ts index 21c53d3..d11d2b8 100644 --- a/src/Inputs.ts +++ b/src/Inputs.ts @@ -11,6 +11,7 @@ export interface Inputs { readonly commit: string readonly draft: boolean readonly name: string + readonly prerelease: boolean readonly tag: string readonly token: string } @@ -77,6 +78,11 @@ export class CoreInputs implements Inputs { return this.tag } + get prerelease(): boolean { + const draft = core.getInput('prerelease') + return draft == 'true' + } + get tag(): string { const tag = core.getInput('tag') if (tag) { diff --git a/src/Releases.ts b/src/Releases.ts index 2ce99dc..f2bfe11 100644 --- a/src/Releases.ts +++ b/src/Releases.ts @@ -8,7 +8,8 @@ export interface Releases { body?: string, commitHash?: string, draft?: boolean, - name?: string + name?: string, + prerelease?: boolean ): Promise> getByTag(tag: string): Promise> @@ -19,7 +20,8 @@ export interface Releases { body?: string, commitHash?: string, draft?: boolean, - name?: string + name?: string, + prerelease?: boolean ): Promise> uploadArtifact( @@ -45,13 +47,15 @@ export class GithubReleases implements Releases { body?: string, commitHash?: string, draft?: boolean, - name?: string + name?: string, + prerelease?: boolean ): Promise> { return this.git.repos.createRelease({ body: body, name: name, draft: draft, owner: this.context.repo.owner, + prerelease: prerelease, repo: this.context.repo.repo, target_commitish: commitHash, tag_name: tag @@ -72,7 +76,8 @@ export class GithubReleases implements Releases { body?: string, commitHash?: string, draft?: boolean, - name?: string + name?: string, + prerelease?: boolean ): Promise> { return this.git.repos.updateRelease({ release_id: id, @@ -80,6 +85,7 @@ export class GithubReleases implements Releases { name: name, draft: draft, owner: this.context.repo.owner, + prerelease: prerelease, repo: this.context.repo.repo, target_commitish: commitHash, tag_name: tag