index.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. const axios = require('axios');
  2. const fs = require('fs/promises');
  3. const { env } = require('process');
  4. async function GetNightlyRelease() {
  5. const config = {
  6. method: 'get',
  7. headers: { 'X-GitHub-Api-Version': '2022-11-28', 'Authorization': `token ${env.token}`},
  8. url: 'https://api.github.com/repos/sabrogden/Ditto/releases'
  9. }
  10. let res = await axios(config)
  11. for (const r of res.data) {
  12. if(r.tag_name == 'nightly')
  13. {
  14. return r;
  15. }
  16. }
  17. return undefined;
  18. }
  19. async function DeleteOldAssets(nightlyRelease) {
  20. let oldAssetIds = [];
  21. for(const asset of nightlyRelease.assets) {
  22. const config = {
  23. method: 'DELETE',
  24. headers: { 'X-GitHub-Api-Version': '2022-11-28', 'Authorization': `token ${env.token}`},
  25. url: `https://api.github.com/repos/sabrogden/Ditto/releases/assets/${asset.id}`
  26. }
  27. console.log(`Deleting file ${asset.name}, id: ${asset.id}`);
  28. let res = await axios(config);
  29. }
  30. }
  31. async function UploadFiles(nightlyRelease) {
  32. let files = await fs.readdir(env.uploadPath);
  33. for(const file of files) {
  34. if(file.startsWith('Ditto')) {
  35. let fullPath = `${env.uploadPath}${file}`;
  36. let fileBytes = await fs.readFile(fullPath);
  37. const config = {
  38. method: 'POST',
  39. headers: {
  40. 'X-GitHub-Api-Version': '2022-11-28',
  41. 'Authorization': `token ${env.token}`,
  42. 'Content-Type': 'application/octet-stream',
  43. 'Content-Length': fileBytes.length
  44. },
  45. url: `https://uploads.github.com/repos/sabrogden/Ditto/releases/${nightlyRelease.id}/assets?name=${file}`,
  46. data: fileBytes
  47. }
  48. console.log(`Uploading file ${fullPath}`);
  49. let res = await axios(config);
  50. }
  51. }
  52. }
  53. async function UpdateReleaseNotes(nightlyRelease) {
  54. let releaseNotes = '';
  55. {
  56. const config = {
  57. method: 'POST',
  58. headers: {
  59. 'X-GitHub-Api-Version': '2022-11-28',
  60. 'Authorization': `token ${env.token}`
  61. },
  62. url: `https://api.github.com/repos/sabrogden/Ditto/releases/generate-notes`,
  63. data: {
  64. "tag_name": env.tag,
  65. "previous_tag_name": env.previous_tag
  66. }
  67. }
  68. console.log(`Generating release notes`);
  69. let res = await axios(config);
  70. releaseNotes = res.data.body;
  71. }
  72. {
  73. const config = {
  74. method: 'PATCH',
  75. headers: {
  76. 'X-GitHub-Api-Version': '2022-11-28',
  77. 'Authorization': `token ${env.token}`
  78. },
  79. url: `https://api.github.com/repos/sabrogden/Ditto/releases/${nightlyRelease.id}`,
  80. data: {
  81. "body": releaseNotes
  82. }
  83. }
  84. console.log(`Uplaoding release notes: ${releaseNotes}`);
  85. let res = await axios(config);
  86. }
  87. }
  88. async function Run() {
  89. let nightlyRelease = await GetNightlyRelease();
  90. await DeleteOldAssets(nightlyRelease);
  91. await UploadFiles(nightlyRelease);
  92. await UpdateReleaseNotes(nightlyRelease);
  93. }
  94. Run();