mirror of
https://github.com/softprops/action-gh-release.git
synced 2026-03-21 06:38:52 +08:00
fix: clarify immutable prerelease uploads (#763)
* fix: draft prereleases before uploading assets Signed-off-by: Rui Chen <rui@chenrui.dev> * fix: clarify immutable prerelease uploads Signed-off-by: Rui Chen <rui@chenrui.dev> --------- Signed-off-by: Rui Chen <rui@chenrui.dev>
This commit is contained in:
@@ -283,6 +283,21 @@ const isReleaseAssetUpdateNotFound = (error: any): boolean => {
|
||||
);
|
||||
};
|
||||
|
||||
const isImmutableReleaseAssetUploadFailure = (error: any): boolean => {
|
||||
const errorStatus = error?.status ?? error?.response?.status;
|
||||
const errorMessage = error?.response?.data?.message ?? error?.message;
|
||||
|
||||
return errorStatus === 422 && /immutable release/i.test(String(errorMessage));
|
||||
};
|
||||
|
||||
const immutableReleaseAssetUploadMessage = (
|
||||
name: string,
|
||||
prerelease: boolean | undefined,
|
||||
): string =>
|
||||
prerelease
|
||||
? `Cannot upload asset ${name} to an immutable release. GitHub only allows asset uploads before a release is published, but draft prereleases publish with the release.published event instead of release.prereleased. If you need prereleases with assets on an immutable-release repository, keep the release as a draft with draft: true, then publish it later from that draft and subscribe downstream workflows to release.published.`
|
||||
: `Cannot upload asset ${name} to an immutable release. GitHub only allows asset uploads before a release is published, so upload assets to a draft release before you publish it.`;
|
||||
|
||||
export const upload = async (
|
||||
config: Config,
|
||||
releaser: Releaser,
|
||||
@@ -423,6 +438,10 @@ export const upload = async (
|
||||
const errorStatus = error?.status ?? error?.response?.status;
|
||||
const errorData = error?.response?.data;
|
||||
|
||||
if (isImmutableReleaseAssetUploadFailure(error)) {
|
||||
throw new Error(immutableReleaseAssetUploadMessage(name, config.input_prerelease));
|
||||
}
|
||||
|
||||
if (releaseId !== undefined && isReleaseAssetUpdateNotFound(error)) {
|
||||
try {
|
||||
const latestAsset = await findReleaseAsset((currentAsset) =>
|
||||
|
||||
Reference in New Issue
Block a user