codePush.mjs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env node
  2. import CodePush from 'code-push'
  3. import { build } from 'vite'
  4. import { MobileProject } from '@trapezedev/project'
  5. import fs from 'fs'
  6. import path from 'path'
  7. import inquirer from 'inquirer'
  8. import { sync } from '@capacitor/cli/dist/tasks/sync.js'
  9. import { loadConfig } from '@capacitor/cli/dist/config.js'
  10. import ProgressBar from 'progress'
  11. const token = '064853a8cdbfb94ed9b62ce30da17f162a1444a0'
  12. const androidName = 'ASNFTNGFHP-Android'
  13. const iosName = 'ASNFTNGFHP-iOS'
  14. inquirer
  15. .prompt([
  16. {
  17. name: 'platform',
  18. type: 'checkbox',
  19. message: 'Platform',
  20. choices: ['Android', 'iOS'],
  21. default: ['Android']
  22. },
  23. { name: 'build', type: 'list', message: 'build', choices: ['YES', 'NO'], default: 'YES' }
  24. ])
  25. .then(async answers => {
  26. console.log(answers)
  27. const capacitorConfig = await loadConfig()
  28. const codePush = new CodePush(token)
  29. const projectConfig = {
  30. ios: {
  31. path: 'ios/App'
  32. },
  33. android: {
  34. path: 'android'
  35. }
  36. }
  37. const project = new MobileProject(process.cwd(), projectConfig)
  38. await project.load()
  39. await project.android.incrementVersionCode()
  40. await project.ios.incrementBuild('App')
  41. project.commit()
  42. let version = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), 'src', 'version.json')))
  43. version.android.version = await project.android.getVersionName()
  44. version.android.build = await project.android.getVersionCode()
  45. version.ios.version = await project.ios.getVersion('App')
  46. version.ios.build = await project.ios.getBuild('App')
  47. if (answers.build === 'YES') {
  48. version.www++
  49. fs.writeFileSync(path.resolve(process.cwd(), 'src', 'version.json'), JSON.stringify(version, null, 4))
  50. await build({
  51. configFile: 'vite.config.js',
  52. mode: 'app'
  53. })
  54. }
  55. if (answers.platform.includes('Android')) {
  56. var bar1 = new ProgressBar('Upload Android Bundle [:bar] :percent', { total: 100 })
  57. await sync(capacitorConfig, 'android', null, false)
  58. await codePush
  59. .release(androidName, 'Release', 'android/app/src/main/assets/public/', '~1.0.0', {}, percent => {
  60. bar1.tick(percent)
  61. })
  62. .then(res => {
  63. console.log('Upload Android Bundle Success', res)
  64. })
  65. }
  66. if (answers.platform.includes('iOS')) {
  67. var bar2 = new ProgressBar('Upload iOS Bundle [:bar] :percent', { total: 100 })
  68. await sync(capacitorConfig, 'ios', null, false)
  69. await codePush
  70. .release(androidName, 'Release', 'ios/App/App/public/', '~1.0.0', {}, percent => {
  71. bar2.tick(percent)
  72. })
  73. .then(res => {
  74. console.log('Upload iOS Bundle Success', res)
  75. })
  76. }
  77. fs.readdirSync(process.cwd()).forEach(file => {
  78. if (/^\w+\.zip$/.test(file)) {
  79. fs.unlinkSync(path.resolve(process.cwd(), file))
  80. }
  81. })
  82. })
  83. .catch(error => {
  84. console.log(error)
  85. if (error.isTtyError) {
  86. // Prompt couldn't be rendered in the current environment
  87. } else {
  88. // Something else went wrong
  89. }
  90. })