69 lines
2.2 KiB
TypeScript
Raw Normal View History

import { paths, parseConfig, isTag, unmatchedPatterns } from "./util";
2019-09-17 19:27:32 +09:00
import { release, upload, GitHubReleaser } from "./github";
import { setFailed, setOutput } from "@actions/core";
2019-09-09 21:20:59 +09:00
import { GitHub } from "@actions/github";
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)) {
2019-09-09 17:10:07 +09:00
throw new Error(`⚠️ GitHub Releases requires a tag`);
}
if (config.input_files) {
const patterns = unmatchedPatterns(config.input_files);
patterns.forEach(pattern =>
console.warn(`🤔 Pattern '${pattern}' does not match any files.`)
);
if (patterns.length > 0 && config.input_fail_on_unmatched_files) {
throw new Error(`⚠️ There were unmatched files`);
}
}
GitHub.plugin([
require("@octokit/plugin-throttling"),
require("@octokit/plugin-retry")
]);
2019-10-02 20:51:12 -04:00
const gh = new GitHub(config.github_token, {
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
}
}
});
2019-09-17 19:27:32 +09:00
let rel = await release(config, new GitHubReleaser(gh));
2019-09-09 17:10:07 +09:00
if (config.input_files) {
const files = paths(config.input_files);
if (files.length == 0) {
console.warn(`🤔 ${config.input_files} not include valid file.`);
}
await Promise.all(
files.map(async path => {
await upload(gh, rel.upload_url, path);
})
).catch(error => {
throw error;
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);
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();