Fixes #8 Add support for draft release updating

This commit is contained in:
Nick Cipollo
2020-01-02 22:03:30 -05:00
parent c8e9e33d90
commit 04d64ce68e
5 changed files with 131 additions and 36 deletions

View File

@@ -29,8 +29,8 @@ export class Action {
const getResponse = await this.releases.getByTag(this.inputs.tag)
return await this.updateRelease(getResponse.data.id)
} catch (error) {
if (this.noRelease(error)) {
return await this.createRelease()
if (this.noPublishedRelease(error)) {
return await this.updateDraftOrCreateRelease()
} else {
throw error
}
@@ -40,24 +40,6 @@ export class Action {
}
}
private async createRelease(): Promise<string> {
const response = await 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
}
private noRelease(error: any): boolean {
const errorMessage = new ErrorMessage(error)
return errorMessage.status == 404
}
private async updateRelease(id: number): Promise<string> {
const response = await this.releases.update(
id,
@@ -71,4 +53,40 @@ export class Action {
return response.data.upload_url
}
private noPublishedRelease(error: any): boolean {
const errorMessage = new ErrorMessage(error)
return errorMessage.status == 404
}
private async updateDraftOrCreateRelease(): Promise<string> {
const draftReleaseId = await this.findMatchingDraftReleaseId()
if (draftReleaseId) {
return await this.updateRelease(draftReleaseId)
} else {
return await this.createRelease()
}
}
private async findMatchingDraftReleaseId(): Promise<number | undefined> {
const tag = this.inputs.tag
const response = await this.releases.listReleases()
const releases = response.data
const draftRelease = releases.find(release => release.draft && release.tag_name == tag)
return draftRelease?.id
}
private async createRelease(): Promise<string> {
const response = await 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
}
}