diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9b7946d1e..377043a38 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,6 @@ jobs: # Ensure no changes, but ignore node_modules dir since dev/fresh ci deps installed. run: | git diff --exit-code --stat -- . ':!node_modules' \ - || (echo "##[error] found changed files after build. please 'npm run build && npm run format'" \ + || (echo "##[error] found changed files after build. please 'npm run build && npm run fmt'" \ "and check in all changes" \ && exit 1) \ No newline at end of file diff --git a/lib/github.js b/lib/github.js index b63dd017c..bdd0350ab 100644 --- a/lib/github.js +++ b/lib/github.js @@ -30,6 +30,9 @@ class GitHubReleaser { createRelease(params) { return this.github.repos.createRelease(params); } + updateRelease(params) { + return this.github.repos.updateRelease(params); + } allReleases(params) { const updatedParams = Object.assign({ per_page: 100 }, params); return this.github.paginate.iterator(this.github.repos.listReleases.endpoint.merge(updatedParams)); @@ -88,11 +91,29 @@ exports.release = (config, releaser) => __awaiter(void 0, void 0, void 0, functi finally { if (e_1) throw e_1.error; } } } - let release = yield releaser.getReleaseByTag({ + let existingRelease = yield releaser.getReleaseByTag({ owner, repo, tag }); + const release_id = existingRelease.data.id; + const target_commitish = existingRelease.data.target_commitish; + const tag_name = tag; + const name = config.input_name || tag; + const body = `${existingRelease.data.body}\n${util_1.releaseBody(config)}`; + const draft = config.input_draft; + const prerelease = config.input_prerelease; + const release = yield releaser.updateRelease({ + owner, + repo, + release_id, + tag_name, + target_commitish, + name, + body, + draft, + prerelease + }); return release.data; } catch (error) { diff --git a/src/github.ts b/src/github.ts index c7d43d073..e76032c45 100644 --- a/src/github.ts +++ b/src/github.ts @@ -12,9 +12,12 @@ export interface ReleaseAsset { } export interface Release { + id: number; upload_url: string; html_url: string; tag_name: string; + body: string; + target_commitish: string; } export interface Releaser { @@ -34,6 +37,18 @@ export interface Releaser { prerelease: boolean | undefined; }): Promise<{ data: Release }>; + updateRelease(params: { + owner: string; + repo: string; + release_id: number; + tag_name: string; + target_commitish: string; + name: string; + body: string | undefined; + draft: boolean | undefined; + prerelease: boolean | undefined; + }): Promise<{ data: Release }>; + allReleases(params: { owner: string; repo: string; @@ -66,6 +81,20 @@ export class GitHubReleaser implements Releaser { return this.github.repos.createRelease(params); } + updateRelease(params: { + owner: string; + repo: string; + release_id: number; + tag_name: string; + target_commitish: string; + name: string; + body: string | undefined; + draft: boolean | undefined; + prerelease: boolean | undefined; + }): Promise<{ data: Release }> { + return this.github.repos.updateRelease(params); + } + allReleases(params: { owner: string; repo: string; @@ -128,11 +157,31 @@ export const release = async ( } } } - let release = await releaser.getReleaseByTag({ + let existingRelease = await releaser.getReleaseByTag({ owner, repo, tag }); + + const release_id = existingRelease.data.id; + const target_commitish = existingRelease.data.target_commitish; + const tag_name = tag; + const name = config.input_name || tag; + const body = `${existingRelease.data.body}\n${releaseBody(config)}`; + const draft = config.input_draft; + const prerelease = config.input_prerelease; + + const release = await releaser.updateRelease({ + owner, + repo, + release_id, + tag_name, + target_commitish, + name, + body, + draft, + prerelease + }); return release.data; } catch (error) { if (error.status === 404) { diff --git a/src/main.ts b/src/main.ts index 8541a4c37..3985ea11b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -31,9 +31,9 @@ async function run() { }); let rel = await release(config, new GitHubReleaser(gh)); if (config.input_files) { - const files = paths(config.input_files) + const files = paths(config.input_files); if (files.length == 0) { - console.warn(`🤔 ${config.input_files} not include valid file.`) + console.warn(`🤔 ${config.input_files} not include valid file.`); } files.forEach(async path => { await upload(gh, rel.upload_url, path);