Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option to ignore prerelease on update #96

Merged
merged 3 commits into from Aug 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Expand Up @@ -18,6 +18,8 @@ This action will create a GitHub release and optionally upload an artifact to it
- **omitBodyDuringUpdate**: Indicates if the release body should be omitted during updates. The body will still be applied for newly created releases. This will preserve the existing body during updates.
- **omitName**: Indicates if the release name should be omitted.
- **omitNameDuringUpdate**: Indicates if the release name should be omitted during updates. The name will still be applied for newly created releases. This will preserve the existing name during updates.
- **omitPrereleaseDuringUpdate**: Indicates if the prerelease flag should be omitted during updates. The prerelease flag will still be applied for newly created releases.
jashandeep-sohi marked this conversation as resolved.
Show resolved Hide resolved
This will preserve the existing prerelease state during updates.
- **owner**: Optionally specify the owner of the repo where the release should be generated. Defaults to current repo's owner.
- **prerelease**: Optionally marks this release as prerelease. Set to true to enable.
- **replacesArtifacts**: Indicates if existing release artifacts should be replaced. Defaults to `true`.
Expand Down
28 changes: 15 additions & 13 deletions __tests__/Action.test.ts
Expand Up @@ -25,7 +25,8 @@ const commit = 'commit'
const discussionCategory = 'discussionCategory'
const draft = true
const id = 100
const prerelease = true
const createPrerelease = true
const updatePrerelease = false
const releaseId = 101
const replacesArtifacts = true
const tag = 'tag'
Expand All @@ -48,7 +49,7 @@ describe("Action", () => {

await action.perform()

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).not.toBeCalled()
assertOutputApplied()
})
Expand All @@ -60,7 +61,7 @@ describe("Action", () => {

await action.perform()

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
assertOutputApplied()
})
Expand All @@ -77,7 +78,7 @@ describe("Action", () => {

await action.perform()

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
assertOutputApplied()

Expand All @@ -88,7 +89,7 @@ describe("Action", () => {

await action.perform()

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
assertOutputApplied()
})
Expand All @@ -104,7 +105,7 @@ describe("Action", () => {
expect(error).toEqual("error")
}

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).not.toBeCalled()
})

Expand Down Expand Up @@ -153,7 +154,7 @@ describe("Action", () => {
discussionCategory,
draft,
updateName,
prerelease
updatePrerelease
)
expect(uploadMock).not.toBeCalled()
})
Expand All @@ -170,7 +171,7 @@ describe("Action", () => {
expect(error).toEqual(expectedError)
}

expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, prerelease)
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
})

Expand All @@ -195,7 +196,7 @@ describe("Action", () => {
discussionCategory,
draft,
updateName,
prerelease
updatePrerelease
)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
assertOutputApplied()
Expand All @@ -214,7 +215,7 @@ describe("Action", () => {
discussionCategory,
draft,
updateName,
prerelease
updatePrerelease
)
expect(uploadMock).not.toBeCalled()
assertOutputApplied()
Expand All @@ -233,7 +234,7 @@ describe("Action", () => {
discussionCategory,
draft,
updateName,
prerelease
updatePrerelease
)
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
assertOutputApplied()
Expand Down Expand Up @@ -295,13 +296,14 @@ describe("Action", () => {
discussionCategory: discussionCategory,
draft: draft,
owner: "owner",
prerelease: prerelease,
createdPrerelease: createPrerelease,
replacesArtifacts: replacesArtifacts,
repo: "repo",
tag: tag,
token: token,
updatedReleaseBody: updateBody,
updatedReleaseName: updateName
updatedReleaseName: updateName,
updatedPrerelease: updatePrerelease
}
})
const MockOutputs = jest.fn<Outputs, any>(() => {
Expand Down
29 changes: 26 additions & 3 deletions __tests__/Inputs.test.ts
Expand Up @@ -214,14 +214,14 @@ describe('Inputs', () => {
});
})

describe('prerelase', () => {
describe('createdPrerelase', () => {
it('returns false', () => {
expect(inputs.prerelease).toBe(false)
expect(inputs.createdPrerelease).toBe(false)
})

it('returns true', () => {
mockGetInput.mockReturnValue('true')
expect(inputs.prerelease).toBe(true)
expect(inputs.createdPrerelease).toBe(true)
})
})

Expand Down Expand Up @@ -349,6 +349,29 @@ describe('Inputs', () => {
})
})

describe('updatedPrerelease', () => {
it('returns false', () => {
mockGetInput
.mockReturnValueOnce('false')
.mockReturnValueOnce('false')
expect(inputs.updatedPrerelease).toBe(false)
})

it('returns true', () => {
mockGetInput
.mockReturnValueOnce('false')
.mockReturnValueOnce('true')
expect(inputs.updatedPrerelease).toBe(true)
})

it('returns undefined when omitted for update', () => {
mockGetInput
.mockReturnValueOnce('true')
.mockReturnValueOnce('false')
expect(inputs.updatedPrerelease).toBeUndefined()
})
})

function createGlobber(): ArtifactGlobber {
const MockGlobber = jest.fn<ArtifactGlobber, any>(() => {
return {
Expand Down
5 changes: 3 additions & 2 deletions __tests__/Integration.test.ts
Expand Up @@ -44,13 +44,14 @@ describe.skip('Integration Test', () => {
discussionCategory: 'Release',
draft: false,
owner: "ncipollo",
prerelease: false,
createdPrerelease: false,
replacesArtifacts: true,
repo: "actions-playground",
tag: "release-action-test",
token: getToken(),
updatedReleaseBody: "This release was generated by release-action's integration test",
updatedReleaseName: "Releases Action Integration Test"
updatedReleaseName: "Releases Action Integration Test",
updatedPrerelease: false
}
})
return new MockInputs();
Expand Down
4 changes: 4 additions & 0 deletions action.yml
Expand Up @@ -63,6 +63,10 @@ inputs:
description: 'Indicates if the release name should be omitted during updates. The name will still be applied for newly created releases. This will preserve the existing name during updates.'
required: false
default: 'false'
omitPrereleaseDuringUpdate:
description: 'Indicates if the prerelease flag should be omitted during updates. The prerelease flag will still be applied for newly created releases. This will preserve the existing prerelease state during updates.'
required: false
default: 'false'
owner:
description: "Optionally specify the owner of the repo where the release should be generated. Defaults to current repo's owner."
required: false
Expand Down
4 changes: 2 additions & 2 deletions lib/Action.js
Expand Up @@ -60,7 +60,7 @@ class Action {
}
updateRelease(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.releases.update(id, this.inputs.tag, this.inputs.updatedReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.updatedReleaseName, this.inputs.prerelease);
return yield this.releases.update(id, this.inputs.tag, this.inputs.updatedReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.updatedReleaseName, this.inputs.updatedPrerelease);
});
}
static noPublishedRelease(error) {
Expand Down Expand Up @@ -89,7 +89,7 @@ class Action {
}
createRelease() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.releases.create(this.inputs.tag, this.inputs.createdReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.createdReleaseName, this.inputs.prerelease);
return yield this.releases.create(this.inputs.tag, this.inputs.createdReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.createdReleaseName, this.inputs.createdPrerelease);
});
}
}
Expand Down
10 changes: 9 additions & 1 deletion lib/Inputs.js
Expand Up @@ -105,10 +105,18 @@ class CoreInputs {
}
return this.context.repo.owner;
}
get prerelease() {
get createdPrerelease() {
const preRelease = core.getInput('prerelease');
return preRelease == 'true';
}
static get omitPrereleaseDuringUpdate() {
return core.getInput('omitPrereleaseDuringUpdate') == 'true';
}
get updatedPrerelease() {
if (CoreInputs.omitPrereleaseDuringUpdate)
return undefined;
return this.createdPrerelease;
}
get replacesArtifacts() {
const replaces = core.getInput('replacesArtifacts');
return replaces == 'true';
Expand Down
4 changes: 2 additions & 2 deletions src/Action.ts
Expand Up @@ -69,7 +69,7 @@ export class Action {
this.inputs.discussionCategory,
this.inputs.draft,
this.inputs.updatedReleaseName,
this.inputs.prerelease
this.inputs.updatedPrerelease
)
}

Expand Down Expand Up @@ -104,7 +104,7 @@ export class Action {
this.inputs.discussionCategory,
this.inputs.draft,
this.inputs.createdReleaseName,
this.inputs.prerelease
this.inputs.createdPrerelease
)
}
}
13 changes: 11 additions & 2 deletions src/Inputs.ts
Expand Up @@ -14,13 +14,14 @@ export interface Inputs {
readonly discussionCategory?: string
readonly draft: boolean
readonly owner: string
readonly prerelease: boolean
readonly createdPrerelease: boolean
readonly replacesArtifacts: boolean
readonly repo: string
readonly tag: string
readonly token: string
readonly updatedReleaseBody?: string
readonly updatedReleaseName?: string
readonly updatedPrerelease?: boolean
}

export class CoreInputs implements Inputs {
Expand Down Expand Up @@ -124,11 +125,19 @@ export class CoreInputs implements Inputs {
return this.context.repo.owner
}

get prerelease(): boolean {
get createdPrerelease(): boolean {
const preRelease = core.getInput('prerelease')
return preRelease == 'true'
}

private static get omitPrereleaseDuringUpdate(): boolean {
return core.getInput('omitPrereleaseDuringUpdate') == 'true'
}

get updatedPrerelease(): boolean | undefined {
if (CoreInputs.omitPrereleaseDuringUpdate) return undefined
return this.createdPrerelease
}
jashandeep-sohi marked this conversation as resolved.
Show resolved Hide resolved
get replacesArtifacts(): boolean {
const replaces = core.getInput('replacesArtifacts')
return replaces == 'true'
Expand Down