| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { readdir, readFile } from 'fs/promises';
- import { join } from 'path';
- import github from '@actions/github';
- const { VERSION, ASSETS_DIR, GITHUB_TOKEN } = process.env;
- const tag = `v${VERSION}`;
- let octokit;
- function getOctokit() {
- octokit ||= github.getOctokit(GITHUB_TOKEN);
- return octokit;
- }
- export async function getRelease() {
- try {
- const result = await getOctokit().rest.repos.getReleaseByTag({
- ...github.context.repo,
- tag,
- });
- console.info('Found release:', tag);
- return result.data;
- } catch (err) {
- if (err.status !== 404) throw err;
- }
- }
- export async function createRelease() {
- console.info('Create release:', tag);
- const result = await getOctokit().rest.repos.createRelease({
- ...github.context.repo,
- tag_name: tag,
- name: process.env.RELEASE_NAME,
- body: process.env.RELEASE_NOTE,
- prerelease: process.env.PRERELEASE == 'true',
- });
- return result.data;
- }
- export async function ensureRelease() {
- const release = await getRelease() || await createRelease();
- return release;
- }
- export async function hasAsset(fileName) {
- const release = await getRelease();
- return release?.assets.some(asset => asset.name === fileName);
- }
- export async function uploadAssets() {
- const release = await ensureRelease();
- let assets = await readdir(ASSETS_DIR);
- assets = assets.filter(asset => release.assets.every(({ name }) => name !== asset));
- for (const asset of assets) {
- console.info(`> Upload asset: ${asset}`);
- await getOctokit().rest.repos.uploadReleaseAsset({
- ...github.context.repo,
- release_id: release.id,
- name: asset,
- data: await readFile(join(ASSETS_DIR, asset)),
- });
- }
- if (assets.length) console.info('Done');
- else console.info('No asset to upload');
- }
- export async function notifyReleaseStatus({ title, description, success = true }) {
- const { DISCORD_WEBHOOK_RELEASE } = process.env;
- if (!DISCORD_WEBHOOK_RELEASE) {
- console.warn('DISCORD_WEBHOOK_RELEASE is not available!');
- return;
- }
- const res = await fetch(DISCORD_WEBHOOK_RELEASE, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- embeds: [
- {
- title,
- description,
- color: success ? 0x00ff00 : 0xff0000,
- },
- ],
- }),
- });
- if (!res.ok) console.error(res);
- }
|