github.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  4. return new (P || (P = Promise))(function (resolve, reject) {
  5. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  6. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  7. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  8. step((generator = generator.apply(thisArg, _arguments || [])).next());
  9. });
  10. };
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. const fs_1 = require("fs");
  13. const mime_1 = require("mime");
  14. const path_1 = require("path");
  15. exports.asset = (path) => {
  16. return {
  17. name: path_1.basename(path),
  18. mime: exports.mimeOrDefault(path),
  19. size: fs_1.lstatSync(path).size,
  20. file: fs_1.readFileSync(path)
  21. };
  22. };
  23. exports.mimeOrDefault = (path) => {
  24. return mime_1.getType(path) || "application/octet-stream";
  25. };
  26. exports.upload = (gh, url, path) => __awaiter(void 0, void 0, void 0, function* () {
  27. let { name, size, mime, file } = exports.asset(path);
  28. console.log(`⬆️ Uploading ${name}...`);
  29. return yield gh.repos.uploadReleaseAsset({
  30. url,
  31. headers: {
  32. "content-length": size,
  33. "content-type": mime
  34. },
  35. name,
  36. file
  37. });
  38. });
  39. exports.release = (config, gh) => __awaiter(void 0, void 0, void 0, function* () {
  40. const [owner, repo] = config.github_repository.split("/");
  41. const tag = config.github_ref.replace("refs/tags/", "");
  42. try {
  43. let release = yield gh.repos.getReleaseByTag({
  44. owner,
  45. repo,
  46. tag
  47. });
  48. return release.data;
  49. }
  50. catch (error) {
  51. if (error.status === 404) {
  52. try {
  53. const tag_name = tag;
  54. const name = config.input_name || tag;
  55. const body = config.input_body;
  56. const draft = config.input_draft;
  57. console.log(`👩‍🏭 Creating new GitHub release for tag ${tag_name}...`);
  58. let release = yield gh.repos.createRelease({
  59. owner,
  60. repo,
  61. tag_name,
  62. name,
  63. body,
  64. draft
  65. });
  66. return release.data;
  67. }
  68. catch (error) {
  69. // presume a race with competing metrix runs
  70. console.log(`⚠️ GitHub release failed with status: ${error.status}, retrying...`);
  71. return exports.release(config, gh);
  72. }
  73. }
  74. else {
  75. console.log(`⚠️ Unexpected error fetching GitHub release for tag ${config.github_ref}: ${error}`);
  76. throw error;
  77. }
  78. }
  79. });