fix: updating release draft status

This commit is contained in:
Piotr Galar 2023-02-01 21:34:58 +01:00 committed by galargh
parent d4e8205d7e
commit 25b3878b4c
2 changed files with 85 additions and 101 deletions

4
dist/index.js vendored

File diff suppressed because one or more lines are too long

View file

@ -199,79 +199,72 @@ export const release = async (
const discussion_category_name = config.input_discussion_category_name; const discussion_category_name = config.input_discussion_category_name;
const generate_release_notes = config.input_generate_release_notes; const generate_release_notes = config.input_generate_release_notes;
try { try {
// you can't get a an existing draft by tag let existingRelease: Release | undefined;
// so we must find one in the list of all releases for await (const response of releaser.allReleases({
if (config.input_draft) { owner,
for await (const response of releaser.allReleases({ repo,
owner, })) {
repo, existingRelease = response.data.find(
})) { (release) => release.tag_name === tag
let release = response.data.find((release) => release.tag_name === tag); );
if (release) { if (existingRelease !== undefined) {
return release; break;
}
} }
} }
let existingRelease = await releaser.getReleaseByTag({ if (existingRelease !== undefined) {
owner, const release_id = existingRelease.id;
repo, let target_commitish: string;
tag, if (
}); config.input_target_commitish &&
config.input_target_commitish !== existingRelease.target_commitish
) {
console.log(
`Updating commit from "${existingRelease.target_commitish}" to "${config.input_target_commitish}"`
);
target_commitish = config.input_target_commitish;
} else {
target_commitish = existingRelease.target_commitish;
}
const release_id = existingRelease.data.id; const tag_name = tag;
let target_commitish: string; const name = config.input_name || existingRelease.name || tag;
if ( // revisit: support a new body-concat-strategy input for accumulating
config.input_target_commitish && // body parts as a release gets updated. some users will likely want this while
config.input_target_commitish !== existingRelease.data.target_commitish // others won't previously this was duplicating content for most which
) { // no one wants
console.log( const workflowBody = releaseBody(config) || "";
`Updating commit from "${existingRelease.data.target_commitish}" to "${config.input_target_commitish}"` const existingReleaseBody = existingRelease.body || "";
); let body: string;
target_commitish = config.input_target_commitish; if (config.input_append_body && workflowBody && existingReleaseBody) {
body = existingReleaseBody + "\n" + workflowBody;
} else {
body = workflowBody || existingReleaseBody;
}
const draft =
config.input_draft !== undefined
? config.input_draft
: existingRelease.draft;
const prerelease =
config.input_prerelease !== undefined
? config.input_prerelease
: existingRelease.prerelease;
const release = await releaser.updateRelease({
owner,
repo,
release_id,
tag_name,
target_commitish,
name,
body,
draft,
prerelease,
discussion_category_name,
generate_release_notes,
});
return release.data;
} else { } else {
target_commitish = existingRelease.data.target_commitish;
}
const tag_name = tag;
const name = config.input_name || existingRelease.data.name || tag;
// revisit: support a new body-concat-strategy input for accumulating
// body parts as a release gets updated. some users will likely want this while
// others won't previously this was duplicating content for most which
// no one wants
const workflowBody = releaseBody(config) || "";
const existingReleaseBody = existingRelease.data.body || "";
let body: string;
if (config.input_append_body && workflowBody && existingReleaseBody) {
body = existingReleaseBody + "\n" + workflowBody;
} else {
body = workflowBody || existingReleaseBody;
}
const draft =
config.input_draft !== undefined
? config.input_draft
: existingRelease.data.draft;
const prerelease =
config.input_prerelease !== undefined
? config.input_prerelease
: existingRelease.data.prerelease;
const release = await releaser.updateRelease({
owner,
repo,
release_id,
tag_name,
target_commitish,
name,
body,
draft,
prerelease,
discussion_category_name,
generate_release_notes,
});
return release.data;
} catch (error) {
if (error.status === 404) {
const tag_name = tag; const tag_name = tag;
const name = config.input_name || tag; const name = config.input_name || tag;
const body = releaseBody(config); const body = releaseBody(config);
@ -285,36 +278,27 @@ export const release = async (
console.log( console.log(
`👩‍🏭 Creating new GitHub release for tag ${tag_name}${commitMessage}...` `👩‍🏭 Creating new GitHub release for tag ${tag_name}${commitMessage}...`
); );
try { let release = await releaser.createRelease({
let release = await releaser.createRelease({ owner,
owner, repo,
repo, tag_name,
tag_name, name,
name, body,
body, draft,
draft, prerelease,
prerelease, target_commitish,
target_commitish, discussion_category_name,
discussion_category_name, generate_release_notes,
generate_release_notes, });
}); return release.data;
return release.data;
} catch (error) {
// presume a race with competing metrix runs
console.log(
`⚠️ GitHub release failed with status: ${
error.status
}\n${JSON.stringify(error.response.data.errors)}\nretrying... (${
maxRetries - 1
} retries remaining)`
);
return release(config, releaser, maxRetries - 1);
}
} else {
console.log(
`⚠️ Unexpected error fetching GitHub release for tag ${config.github_ref}: ${error}`
);
throw error;
} }
} catch (error) {
// presume a race with competing metrix runs
console.log(
`⚠️ GitHub release failed with status: ${error.status}\n${JSON.stringify(
error.response.data.errors
)}\nretrying... (${maxRetries - 1} retries remaining)`
);
return release(config, releaser, maxRetries - 1);
} }
}; };