release.mjs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { createRequire } from "module";
  2. import { getOctokit, context } from "@actions/github";
  3. const require = createRequire(import.meta.url);
  4. /// generate update.json
  5. /// upload to update tag's release asset
  6. async function resolveRelease() {
  7. if (process.env.GITHUB_TOKEN === undefined) {
  8. throw new Error("GITHUB_TOKEN is required");
  9. }
  10. const packageJson = require("../package.json");
  11. const { version } = packageJson;
  12. const urlPrefix = "https://github.com/zzzgydi/clash-verge/releases/download";
  13. const updateData = {
  14. name: `v${version}`,
  15. notes: `Version ${version} is available now!!!`,
  16. pub_date: new Date().toISOString(),
  17. platforms: {
  18. win64: {
  19. signature: "",
  20. url: `${urlPrefix}/v${version}/clash-verge_${version}_x64.msi.zip`,
  21. },
  22. darwin: {
  23. signature: "",
  24. url: `${urlPrefix}/v${version}/clash-verge.app.tar.gz`,
  25. },
  26. },
  27. };
  28. console.log(`Generating Version "${version}" update.json`);
  29. const github = getOctokit(process.env.GITHUB_TOKEN);
  30. const release = await github.rest.repos.getReleaseByTag("update");
  31. const { data: assets } = await github.rest.repos.listReleaseAssets({
  32. owner: context.repo.owner,
  33. repo: context.repo.repo,
  34. release_id: release.id,
  35. });
  36. for (let asset of assets) {
  37. if (asset.name === "update.json") {
  38. await github.rest.repos.deleteReleaseAsset({
  39. owner: context.repo.owner,
  40. repo: context.repo.repo,
  41. asset_id: asset.id,
  42. });
  43. break;
  44. }
  45. }
  46. await github.rest.repos.uploadReleaseAsset({
  47. owner: context.repo.owner,
  48. repo: context.repo.repo,
  49. release_id: release.id,
  50. name: "update.json",
  51. data: JSON.stringify(updateData, null, 2),
  52. });
  53. }
  54. resolveRelease();