fix: fetch correct asset URL after finalization; test; some refactoring (#738)

This commit is contained in:
Mozi
2026-03-14 19:49:25 -04:00
committed by GitHub
parent d015dc32db
commit 3074e62a34
5 changed files with 239 additions and 62 deletions

View File

@@ -1,6 +1,6 @@
import { setFailed, setOutput } from '@actions/core';
import { getOctokit } from '@actions/github';
import { GitHubReleaser, release, finalizeRelease, upload } from './github';
import { GitHubReleaser, release, finalizeRelease, upload, listReleaseAssets } from './github';
import { isTag, parseConfig, paths, unmatchedPatterns, uploadUrl } from './util';
import { env } from 'process';
@@ -50,6 +50,7 @@ async function run() {
//);
const releaser = new GitHubReleaser(gh);
let rel = await release(config, releaser);
let uploadedAssetIds: Set<number> = new Set();
if (config.input_files && config.input_files.length > 0) {
const files = paths(config.input_files, config.input_working_directory);
if (files.length == 0) {
@@ -61,15 +62,12 @@ async function run() {
}
const currentAssets = rel.assets;
const uploadFile = async (path) => {
const json = await upload(config, gh, uploadUrl(rel.upload_url), path, currentAssets);
if (json) {
delete json.uploader;
}
return json;
const uploadFile = async (path: string) => {
const json = await upload(config, releaser, uploadUrl(rel.upload_url), path, currentAssets);
return json ? (json.id as number) : undefined;
};
let results: (any | null)[];
let results: (number | undefined)[];
if (!config.input_preserve_order) {
results = await Promise.all(files.map(uploadFile));
} else {
@@ -79,13 +77,29 @@ async function run() {
}
}
const assets = results.filter(Boolean);
setOutput('assets', assets);
uploadedAssetIds = new Set(results.filter((id): id is number => id !== undefined));
}
console.log('Finalizing release...');
rel = await finalizeRelease(config, releaser, rel);
// Draft releases use temporary "untagged-..." URLs for assets.
// URLs will be changed to correct ones once the release is published.
console.log('Getting assets list...');
{
let assets: any[] = [];
if (uploadedAssetIds.size > 0) {
const updatedAssets = await listReleaseAssets(config, releaser, rel);
assets = updatedAssets
.filter((a) => uploadedAssetIds.has(a.id))
.map((a) => {
const { uploader, ...rest } = a;
return rest;
});
}
setOutput('assets', assets);
}
console.log(`🎉 Release ready at ${rel.html_url}`);
setOutput('url', rel.html_url);
setOutput('id', rel.id.toString());