Files
action-gh-release/src/main.ts
T

114 lines
3.2 KiB
TypeScript
Raw Normal View History

2021-08-08 00:28:01 -04:00
import {
paths,
parseConfig,
isTag,
unmatchedPatterns,
uploadUrl,
2021-08-08 00:28:01 -04:00
} from "./util";
2019-09-17 19:27:32 +09:00
import { release, upload, GitHubReleaser } from "./github";
2021-08-08 00:28:01 -04:00
import { getOctokit } from "@actions/github";
2019-10-17 11:08:28 -04:00
import { setFailed, setOutput } from "@actions/core";
2021-08-08 00:28:01 -04:00
2019-09-09 21:20:59 +09:00
import { env } from "process";
2019-09-09 17:10:07 +09:00
async function run() {
try {
2019-09-09 20:16:58 +09:00
const config = parseConfig(env);
if (
!config.input_tag_name &&
!isTag(config.github_ref) &&
!config.input_draft
) {
2019-09-09 17:10:07 +09:00
throw new Error(`⚠️ GitHub Releases requires a tag`);
}
2020-06-24 23:11:41 -07:00
if (config.input_files) {
const patterns = unmatchedPatterns(config.input_files);
2024-03-08 16:13:09 -05:00
patterns.forEach((pattern) => {
2024-03-10 00:56:17 -05:00
if (config.input_fail_on_unmatched_files) {
throw new Error(`⚠️ Pattern '${pattern}' does not match any files.`);
} else {
console.warn(`🤔 Pattern '${pattern}' does not match any files.`);
}
2024-03-08 16:13:09 -05:00
});
2020-06-24 23:11:41 -07:00
if (patterns.length > 0 && config.input_fail_on_unmatched_files) {
throw new Error(`⚠️ There were unmatched files`);
}
}
2021-08-08 00:28:01 -04:00
// const oktokit = GitHub.plugin(
// require("@octokit/plugin-throttling"),
// require("@octokit/plugin-retry")
// );
const gh = getOctokit(config.github_token, {
//new oktokit(
throttle: {
onRateLimit: (retryAfter, options) => {
console.warn(
`Request quota exhausted for request ${options.method} ${options.url}`,
);
if (options.request.retryCount === 0) {
// only retries once
console.log(`Retrying after ${retryAfter} seconds!`);
return true;
}
},
onAbuseLimit: (retryAfter, options) => {
// does not retry, only logs a warning
console.warn(
`Abuse detected for request ${options.method} ${options.url}`,
);
},
},
2019-10-02 20:51:12 -04:00
});
2021-08-08 00:28:01 -04:00
//);
const rel = await release(config, new GitHubReleaser(gh));
2024-03-08 17:47:54 -03:00
if (config.input_files && config.input_files.length > 0) {
const files = paths(config.input_files);
2019-12-29 06:07:38 +08:00
if (files.length == 0) {
2024-03-12 12:22:52 -04:00
if (config.input_fail_on_unmatched_files) {
2025-01-07 13:50:06 -05:00
throw new Error(
`⚠️ ${config.input_files} does not include a valid file.`,
);
2024-03-12 12:22:52 -04:00
} else {
2025-01-07 13:50:06 -05:00
console.warn(
`🤔 ${config.input_files} does not include a valid file.`,
);
2024-03-12 12:22:52 -04:00
}
2019-12-29 06:07:38 +08:00
}
2021-11-26 00:02:50 +01:00
const currentAssets = rel.assets;
2024-11-11 21:14:02 +01:00
const uploadFile = async (path) => {
const json = await upload(
config,
gh,
uploadUrl(rel.upload_url),
path,
currentAssets,
);
delete json.uploader;
return json;
};
let assets;
if (!config.input_preserve_order) {
assets = await Promise.all(files.map(uploadFile));
} else {
assets = [];
for (const path of files) {
assets.push(await uploadFile(path));
}
}
2021-11-26 00:02:50 +01:00
setOutput("assets", assets);
2019-09-09 17:10:07 +09:00
}
2019-09-09 21:20:59 +09:00
console.log(`🎉 Release ready at ${rel.html_url}`);
2019-10-20 18:04:32 -04:00
setOutput("url", rel.html_url);
2021-05-02 00:56:49 +02:00
setOutput("id", rel.id.toString());
2021-03-21 06:59:32 +01:00
setOutput("upload_url", rel.upload_url);
2019-09-09 17:10:07 +09:00
} catch (error) {
2019-09-09 18:14:17 +09:00
setFailed(error.message);
2019-09-09 17:10:07 +09:00
}
}
2019-09-09 21:20:59 +09:00
run();