release-helper.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { readdir, readFile } = require('fs/promises');
  2. const { join } = require('path');
  3. const github = require('@actions/github');
  4. const { VERSION, ASSETS_DIR, GITHUB_TOKEN } = process.env;
  5. const tag = `v${VERSION}`;
  6. const octokit = github.getOctokit(GITHUB_TOKEN);
  7. async function getRelease() {
  8. try {
  9. const result = await octokit.rest.repos.getReleaseByTag({
  10. ...github.context.repo,
  11. tag,
  12. });
  13. console.info('Found release:', tag);
  14. return result.data;
  15. } catch (err) {
  16. if (err.status !== 404) throw err;
  17. }
  18. }
  19. async function createRelease() {
  20. console.info('Create release:', tag);
  21. const result = await octokit.rest.repos.createRelease({
  22. ...github.context.repo,
  23. tag_name: tag,
  24. name: process.env.RELEASE_NAME,
  25. body: process.env.RELEASE_NOTE,
  26. prerelease: process.env.PRERELEASE == 'true',
  27. });
  28. return result.data;
  29. }
  30. async function ensureRelease() {
  31. const release = await getRelease() || await createRelease();
  32. return release;
  33. }
  34. async function hasAsset(fileName) {
  35. const release = await getRelease();
  36. return release?.assets.some(asset => asset.name === fileName);
  37. }
  38. async function uploadAssets() {
  39. const release = await ensureRelease();
  40. let assets = await readdir(ASSETS_DIR);
  41. assets = assets.filter(asset => release.assets.every(({ name }) => name !== asset));
  42. for (const asset of assets) {
  43. console.info(`> Upload asset: ${assets}`);
  44. await octokit.rest.repos.uploadReleaseAsset({
  45. ...github.context.repo,
  46. release_id: release.id,
  47. name: asset,
  48. data: await readFile(join(ASSETS_DIR, asset)),
  49. });
  50. }
  51. if (assets.length) console.info('Done');
  52. else console.info('No asset to upload');
  53. }
  54. exports.getRelease = getRelease;
  55. exports.createRelease = createRelease;
  56. exports.ensureRelease = ensureRelease;
  57. exports.uploadAssets = uploadAssets;
  58. exports.hasAsset = hasAsset;