Fixes #26 Update dependencies and fix octokit types

Fixes #27 Add inputs for specifying owner and repo
This commit is contained in:
Nick Cipollo
2021-02-09 20:46:38 -05:00
parent 970fd8405b
commit 09eb035337
15 changed files with 525 additions and 482 deletions

View File

@@ -1,8 +1,7 @@
import { Inputs } from "./Inputs";
import { Releases } from "./Releases";
import { ReposCreateReleaseResponseData } from "@octokit/types";
import { ArtifactUploader } from "./ArtifactUploader";
import { ErrorMessage } from "./ErrorMessage";
import {Inputs} from "./Inputs";
import {CreateReleaseResponse, Releases, UpdateReleaseResponse} from "./Releases";
import {ArtifactUploader} from "./ArtifactUploader";
import {ErrorMessage} from "./ErrorMessage";
export class Action {
private inputs: Inputs
@@ -17,8 +16,8 @@ export class Action {
async perform() {
const releaseResponse = await this.createOrUpdateRelease();
const releaseId = releaseResponse.id
const uploadUrl = releaseResponse.upload_url
const releaseId = releaseResponse.data.id
const uploadUrl = releaseResponse.data.upload_url
const artifacts = this.inputs.artifacts
if (artifacts.length > 0) {
@@ -26,7 +25,7 @@ export class Action {
}
}
private async createOrUpdateRelease(): Promise<ReposCreateReleaseResponseData> {
private async createOrUpdateRelease(): Promise<CreateReleaseResponse | UpdateReleaseResponse> {
if (this.inputs.allowUpdates) {
try {
const getResponse = await this.releases.getByTag(this.inputs.tag)
@@ -43,8 +42,8 @@ export class Action {
}
}
private async updateRelease(id: number): Promise<ReposCreateReleaseResponseData> {
const response = await this.releases.update(
private async updateRelease(id: number): Promise<UpdateReleaseResponse> {
return await this.releases.update(
id,
this.inputs.tag,
this.inputs.updatedReleaseBody,
@@ -53,8 +52,6 @@ export class Action {
this.inputs.updatedReleaseName,
this.inputs.prerelease
)
return response.data
}
private static noPublishedRelease(error: any): boolean {
@@ -62,7 +59,7 @@ export class Action {
return errorMessage.status == 404
}
private async updateDraftOrCreateRelease(): Promise<ReposCreateReleaseResponseData> {
private async updateDraftOrCreateRelease(): Promise<CreateReleaseResponse | UpdateReleaseResponse> {
const draftReleaseId = await this.findMatchingDraftReleaseId()
if (draftReleaseId) {
return await this.updateRelease(draftReleaseId)
@@ -80,7 +77,7 @@ export class Action {
return draftRelease?.id
}
private async createRelease(): Promise<ReposCreateReleaseResponseData> {
private async createRelease(): Promise<CreateReleaseResponse> {
const response = await this.releases.create(
this.inputs.tag,
this.inputs.createdReleaseBody,
@@ -90,6 +87,6 @@ export class Action {
this.inputs.prerelease
)
return response.data
return response
}
}

View File

@@ -11,8 +11,10 @@ export interface Inputs {
readonly createdReleaseBody?: string
readonly createdReleaseName?: string
readonly draft: boolean
readonly owner: string
readonly prerelease: boolean
readonly replacesArtifacts: boolean
readonly repo: string
readonly tag: string
readonly token: string
readonly updatedReleaseBody?: string
@@ -99,6 +101,14 @@ export class CoreInputs implements Inputs {
return draft == 'true'
}
get owner(): string {
let owner = core.getInput('owner')
if (owner) {
return owner
}
return this.context.repo.owner
}
get prerelease(): boolean {
const preRelease = core.getInput('prerelease')
return preRelease == 'true'
@@ -109,6 +119,14 @@ export class CoreInputs implements Inputs {
return replaces == 'true'
}
get repo(): string {
let repo = core.getInput('repo')
if (repo) {
return repo
}
return this.context.repo.repo
}
get tag(): string {
const tag = core.getInput('tag')
if (tag) {

View File

@@ -24,7 +24,7 @@ function createAction(): Action {
const globber = new FileArtifactGlobber()
const inputs = new CoreInputs(globber, context)
const releases = new GithubReleases(context, git)
const releases = new GithubReleases(inputs, git)
const uploader = new GithubArtifactUploader(releases, inputs.replacesArtifacts)
return new Action(inputs, releases, uploader)
}

View File

@@ -1,13 +1,14 @@
import {Context} from "@actions/github/lib/context";
import { GitHub } from '@actions/github/lib/utils'
import {
OctokitResponse,
ReposListReleaseAssetsResponseData,
ReposCreateReleaseResponseData,
ReposGetReleaseByTagResponseData,
ReposListReleasesResponseData,
ReposUploadReleaseAssetResponseData
} from "@octokit/types";
import {GitHub} from '@actions/github/lib/utils'
import {OctokitResponse} from "@octokit/types";
import {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods";
import {Inputs} from "./Inputs";
export type CreateReleaseResponse = RestEndpointMethodTypes["repos"]["createRelease"]["response"]
export type ReleaseByTagResponse = RestEndpointMethodTypes["repos"]["getReleaseByTag"]["response"]
export type ListReleasesResponse = RestEndpointMethodTypes["repos"]["listReleases"]["response"]
export type ListReleaseAssetsResponse = RestEndpointMethodTypes["repos"]["listReleaseAssets"]["response"]
export type UpdateReleaseResponse = RestEndpointMethodTypes["repos"]["updateRelease"]["response"]
export type UploadArtifactResponse = RestEndpointMethodTypes["repos"]["uploadReleaseAsset"]["response"]
export interface Releases {
create(
@@ -17,15 +18,15 @@ export interface Releases {
draft?: boolean,
name?: string,
prerelease?: boolean
): Promise<OctokitResponse<ReposCreateReleaseResponseData>>
): Promise<CreateReleaseResponse>
deleteArtifact(assetId: number): Promise<OctokitResponse<any>>
getByTag(tag: string): Promise<OctokitResponse<ReposGetReleaseByTagResponseData>>
getByTag(tag: string): Promise<ReleaseByTagResponse>
listArtifactsForRelease(releaseId: number): Promise<OctokitResponse<ReposListReleaseAssetsResponseData>>
listArtifactsForRelease(releaseId: number): Promise<ListReleaseAssetsResponse>
listReleases(): Promise<OctokitResponse<ReposListReleasesResponseData>>
listReleases(): Promise<ListReleasesResponse>
update(
id: number,
@@ -35,7 +36,7 @@ export interface Releases {
draft?: boolean,
name?: string,
prerelease?: boolean
): Promise<OctokitResponse<ReposCreateReleaseResponseData>>
): Promise<UpdateReleaseResponse>
uploadArtifact(
assetUrl: string,
@@ -44,15 +45,15 @@ export interface Releases {
file: string | object,
name: string,
releaseId: number,
): Promise<OctokitResponse<ReposUploadReleaseAssetResponseData>>
): Promise<UploadArtifactResponse>
}
export class GithubReleases implements Releases {
context: Context
git: InstanceType<typeof GitHub>
inputs: Inputs
constructor(context: Context, git: InstanceType<typeof GitHub>) {
this.context = context
constructor(inputs: Inputs, git: InstanceType<typeof GitHub>) {
this.inputs = inputs
this.git = git
}
@@ -63,15 +64,15 @@ export class GithubReleases implements Releases {
draft?: boolean,
name?: string,
prerelease?: boolean
): Promise<OctokitResponse<ReposCreateReleaseResponseData>> {
): Promise<CreateReleaseResponse> {
// noinspection TypeScriptValidateJSTypes
return this.git.repos.createRelease({
body: body,
name: name,
draft: draft,
owner: this.context.repo.owner,
owner: this.inputs.owner,
prerelease: prerelease,
repo: this.context.repo.repo,
repo: this.inputs.repo,
target_commitish: commitHash,
tag_name: tag
})
@@ -82,33 +83,33 @@ export class GithubReleases implements Releases {
): Promise<OctokitResponse<any>> {
return this.git.repos.deleteReleaseAsset({
asset_id: assetId,
owner: this.context.repo.owner,
repo: this.context.repo.repo
owner: this.inputs.owner,
repo: this.inputs.repo
})
}
async getByTag(tag: string): Promise<ReleaseByTagResponse> {
return this.git.repos.getReleaseByTag({
owner: this.inputs.owner,
repo: this.inputs.repo,
tag: tag
})
}
async listArtifactsForRelease(
releaseId: number
): Promise<OctokitResponse<ReposListReleaseAssetsResponseData>> {
): Promise<ListReleaseAssetsResponse> {
return this.git.repos.listReleaseAssets({
owner: this.context.repo.owner,
owner: this.inputs.owner,
release_id: releaseId,
repo: this.context.repo.repo
repo: this.inputs.repo
})
}
async listReleases(): Promise<OctokitResponse<ReposListReleasesResponseData>> {
async listReleases(): Promise<ListReleasesResponse> {
return this.git.repos.listReleases({
owner: this.context.repo.owner,
repo: this.context.repo.repo
})
}
async getByTag(tag: string): Promise<OctokitResponse<ReposGetReleaseByTagResponseData>> {
return this.git.repos.getReleaseByTag({
owner: this.context.repo.owner,
repo: this.context.repo.repo,
tag: tag
owner: this.inputs.owner,
repo: this.inputs.repo
})
}
@@ -120,16 +121,16 @@ export class GithubReleases implements Releases {
draft?: boolean,
name?: string,
prerelease?: boolean
): Promise<OctokitResponse<ReposCreateReleaseResponseData>> {
): Promise<UpdateReleaseResponse> {
// noinspection TypeScriptValidateJSTypes
return this.git.repos.updateRelease({
release_id: id,
body: body,
name: name,
draft: draft,
owner: this.context.repo.owner,
owner: this.inputs.owner,
prerelease: prerelease,
repo: this.context.repo.repo,
repo: this.inputs.repo,
target_commitish: commitHash,
tag_name: tag
})
@@ -142,7 +143,7 @@ export class GithubReleases implements Releases {
file: string | object,
name: string,
releaseId: number,
): Promise<OctokitResponse<ReposUploadReleaseAssetResponseData>> {
): Promise<UploadArtifactResponse> {
return this.git.repos.uploadReleaseAsset({
url: assetUrl,
headers: {
@@ -151,9 +152,9 @@ export class GithubReleases implements Releases {
},
data: file as any,
name: name,
owner: this.context.repo.owner,
owner: this.inputs.owner,
release_id: releaseId,
repo: this.context.repo.repo
repo: this.inputs.repo
})
}
}