assetsUpdater.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import actions from "@actions/core";
  2. import chalk from "chalk";
  3. import { getDiff } from "../util.js";
  4. import AssetsManager from "../classes/AssetsManager.js";
  5. if (!getDiff().length && !getDiff("removed").length) {
  6. actions.info(chalk.green("No Presences changed, exiting..."));
  7. process.exit();
  8. }
  9. const changedPresenceFolders = getDiff(),
  10. deletedPresenceFolders = getDiff("removed");
  11. if (changedPresenceFolders.length) {
  12. for (const folder of changedPresenceFolders) {
  13. const start = Date.now(),
  14. assetsManager = new AssetsManager(folder),
  15. { toBeUploaded, toBeMoved, toBeDeleted } =
  16. await assetsManager.getAssetsChanges();
  17. if (!toBeUploaded.size && !toBeMoved.size && !toBeDeleted.size) {
  18. actions.info(
  19. chalk.green(
  20. `No assets changes for ${folder}, skipping... (took ${
  21. Date.now() - start
  22. }ms)`
  23. )
  24. );
  25. continue;
  26. }
  27. if (toBeDeleted.size) {
  28. actions.info(
  29. chalk.green(`Deleting ${toBeDeleted.size} asset(s) for ${folder}...`)
  30. );
  31. const errors = await assetsManager.deleteAssets(toBeDeleted);
  32. for (const error of errors) actions.error(error);
  33. if (errors.length) actions.setFailed("Failed to delete assets");
  34. }
  35. if (toBeMoved.size) {
  36. actions.info(
  37. chalk.green(`Moving ${toBeMoved.size} asset(s) for ${folder}...`)
  38. );
  39. const errors: string[] = [];
  40. errors.push(
  41. ...(await assetsManager.uploadAssets(toBeMoved)),
  42. ...(await assetsManager.deleteAssets([...toBeMoved.keys()]))
  43. );
  44. for (const error of errors) actions.error(error);
  45. if (errors.length) actions.setFailed("Failed to move assets");
  46. assetsManager.replaceInFiles(toBeMoved);
  47. }
  48. if (toBeUploaded.size) {
  49. actions.info(
  50. chalk.green(`Uploading ${toBeUploaded.size} asset(s) for ${folder}...`)
  51. );
  52. const errors = await assetsManager.uploadAssets(toBeUploaded);
  53. for (const error of errors) actions.error(error);
  54. if (errors.length) actions.setFailed("Failed to upload assets");
  55. assetsManager.replaceInFiles(toBeUploaded);
  56. }
  57. actions.info(
  58. chalk.green(`Done for ${folder}! (took ${Date.now() - start}ms)`)
  59. );
  60. }
  61. }
  62. if (deletedPresenceFolders.length) {
  63. for (const folder of deletedPresenceFolders) {
  64. const start = Date.now(),
  65. assetsManager = new AssetsManager(folder),
  66. allAssets = await assetsManager.getCdnAssets(),
  67. assets = [
  68. allAssets.logo,
  69. allAssets.thumbnail,
  70. allAssets.assets ? [...allAssets.assets.values()] : [],
  71. ]
  72. .flat()
  73. .filter(
  74. (asset): asset is string =>
  75. !!asset && asset.startsWith(assetsManager.assetBaseUrl)
  76. );
  77. if (!assets.length) {
  78. actions.info(
  79. chalk.green(
  80. `No assets to delete for ${folder}, skipping... (took ${
  81. Date.now() - start
  82. }ms)`
  83. )
  84. );
  85. continue;
  86. }
  87. actions.info(
  88. chalk.green(`Deleting ${assets.length} asset(s) for ${folder}...`)
  89. );
  90. const errors = await assetsManager.deleteAssets(assets);
  91. for (const error of errors) actions.error(error);
  92. if (errors.length) actions.setFailed("Failed to delete assets");
  93. actions.info(
  94. chalk.green(`Done for ${folder}! (took ${Date.now() - start}ms)`)
  95. );
  96. }
  97. }
  98. actions.info(chalk.green("Done!"));