Merge pull request #106 from regevbr/body_update

fix #42 - overwrite body and name as well
This commit is contained in:
Sven-Hendrik Haase 2023-05-23 03:49:38 +02:00 committed by GitHub
commit 42c63808d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 8 deletions

25
dist/index.js vendored
View File

@ -47,14 +47,16 @@ const glob = __importStar(__nccwpck_require__(7106));
const attempt_1 = __nccwpck_require__(6494); const attempt_1 = __nccwpck_require__(6494);
const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}'; const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}';
const createRelease = 'POST /repos/{owner}/{repo}/releases'; const createRelease = 'POST /repos/{owner}/{repo}/releases';
const updateRelease = 'PATCH /repos/{owner}/{repo}/releases/{release_id}';
const repoAssets = 'GET /repos/{owner}/{repo}/releases/{release_id}/assets'; const repoAssets = 'GET /repos/{owner}/{repo}/releases/{release_id}/assets';
const uploadAssets = 'POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}'; const uploadAssets = 'POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}';
const deleteAssets = 'DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}'; const deleteAssets = 'DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}';
function get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit) { function get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
let release;
try { try {
core.debug(`Getting release by tag ${tag}.`); core.debug(`Getting release by tag ${tag}.`);
return yield octokit.request(releaseByTag, Object.assign(Object.assign({}, repo()), { tag: tag })); release = yield octokit.request(releaseByTag, Object.assign(Object.assign({}, repo()), { tag: tag }));
} }
catch (error) { catch (error) {
// If this returns 404, we need to create the release first. // If this returns 404, we need to create the release first.
@ -66,6 +68,23 @@ function get_release_by_tag(tag, prerelease, make_latest, release_name, body, oc
throw error; throw error;
} }
} }
let updateObject;
if (overwrite) {
if (release.data.name !== release_name) {
core.debug(`The ${tag} release already exists with a different name ${release.data.name} so we'll overwrite it.`);
updateObject = updateObject || {};
updateObject.name = release_name;
}
if (release.data.body !== body) {
core.debug(`The ${tag} release already exists with a different body ${release.data.body} so we'll overwrite it.`);
updateObject = updateObject || {};
updateObject.body = body;
}
}
if (updateObject) {
return octokit.request(updateRelease, Object.assign(Object.assign(Object.assign({}, repo()), updateObject), { release_id: release.data.id }));
}
return release;
}); });
} }
function upload_to_release(release, file, asset_name, tag, overwrite, octokit) { function upload_to_release(release, file, asset_name, tag, overwrite, octokit) {
@ -148,7 +167,7 @@ function run() {
.replace(/%0D/gi, '\r') .replace(/%0D/gi, '\r')
.replace(/%25/g, '%'); .replace(/%25/g, '%');
const octokit = github.getOctokit(token); const octokit = github.getOctokit(token);
const release = yield get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit); const release = yield get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite);
if (file_glob) { if (file_glob) {
const files = glob.sync(file); const files = glob.sync(file);
if (files.length > 0) { if (files.length > 0) {

View File

@ -9,6 +9,8 @@ import {retry} from '@lifeomic/attempt'
const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}' as const const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}' as const
const createRelease = 'POST /repos/{owner}/{repo}/releases' as const const createRelease = 'POST /repos/{owner}/{repo}/releases' as const
const updateRelease =
'PATCH /repos/{owner}/{repo}/releases/{release_id}' as const
const repoAssets = const repoAssets =
'GET /repos/{owner}/{repo}/releases/{release_id}/assets' as const 'GET /repos/{owner}/{repo}/releases/{release_id}/assets' as const
const uploadAssets = const uploadAssets =
@ -20,6 +22,8 @@ type ReleaseByTagResp = Endpoints[typeof releaseByTag]['response']
type CreateReleaseResp = Endpoints[typeof createRelease]['response'] type CreateReleaseResp = Endpoints[typeof createRelease]['response']
type RepoAssetsResp = Endpoints[typeof repoAssets]['response']['data'] type RepoAssetsResp = Endpoints[typeof repoAssets]['response']['data']
type UploadAssetResp = Endpoints[typeof uploadAssets]['response'] type UploadAssetResp = Endpoints[typeof uploadAssets]['response']
type UpdateReleaseResp = Endpoints[typeof updateRelease]['response']
type UpdateReleaseParams = Endpoints[typeof updateRelease]['parameters']
async function get_release_by_tag( async function get_release_by_tag(
tag: string, tag: string,
@ -27,11 +31,13 @@ async function get_release_by_tag(
make_latest: boolean, make_latest: boolean,
release_name: string, release_name: string,
body: string, body: string,
octokit: Octokit octokit: Octokit,
): Promise<ReleaseByTagResp | CreateReleaseResp> { overwrite: boolean
): Promise<ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp> {
let release: ReleaseByTagResp
try { try {
core.debug(`Getting release by tag ${tag}.`) core.debug(`Getting release by tag ${tag}.`)
return await octokit.request(releaseByTag, { release = await octokit.request(releaseByTag, {
...repo(), ...repo(),
tag: tag tag: tag
}) })
@ -53,10 +59,35 @@ async function get_release_by_tag(
throw error throw error
} }
} }
let updateObject: Partial<UpdateReleaseParams> | undefined
if (overwrite) {
if (release.data.name !== release_name) {
core.debug(
`The ${tag} release already exists with a different name ${release.data.name} so we'll overwrite it.`
)
updateObject = updateObject || {}
updateObject.name = release_name
}
if (release.data.body !== body) {
core.debug(
`The ${tag} release already exists with a different body ${release.data.body} so we'll overwrite it.`
)
updateObject = updateObject || {}
updateObject.body = body
}
}
if (updateObject) {
return octokit.request(updateRelease, {
...repo(),
...updateObject,
release_id: release.data.id
})
}
return release
} }
async function upload_to_release( async function upload_to_release(
release: ReleaseByTagResp | CreateReleaseResp, release: ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp,
file: string, file: string,
asset_name: string, asset_name: string,
tag: string, tag: string,
@ -169,7 +200,8 @@ async function run(): Promise<void> {
make_latest, make_latest,
release_name, release_name,
body, body,
octokit octokit,
overwrite
) )
if (file_glob) { if (file_glob) {