sync-cli-metadata.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env node
  2. // Copyright 2019-2024 Tauri Programme within The Commons Conservancy
  3. // SPDX-License-Identifier: Apache-2.0
  4. // SPDX-License-Identifier: MIT
  5. /*
  6. This script is solely intended to be run as part of the `covector version` step to
  7. keep the `../tooling/cli/metadata.json` up to date with other version bumps. Long term
  8. we should look to find a more "rusty way" to import / "pin" a version value in our tauri-cli
  9. rust binaries.
  10. */
  11. const { readFileSync, writeFileSync } = require('fs')
  12. const { resolve } = require('path')
  13. const packageNickname = process.argv[2]
  14. const filePath =
  15. packageNickname === '@tauri-apps/cli'
  16. ? `../../../tooling/cli/metadata-v2.json`
  17. : `../../tooling/cli/metadata-v2.json`
  18. const bump = process.argv[3]
  19. let index = null
  20. switch (bump) {
  21. case 'major':
  22. case 'premajor':
  23. index = 0
  24. break
  25. case 'minor':
  26. index = 1
  27. break
  28. case 'patch':
  29. index = 2
  30. break
  31. case 'prerelease':
  32. case 'prepatch':
  33. index = 3
  34. break
  35. default:
  36. throw new Error('unexpected bump ' + bump)
  37. }
  38. const inc = (version) => {
  39. const v = version.split('.')
  40. for (let i = 0; i < v.length; i++) {
  41. if (i === index) {
  42. v[i] = String(Number(v[i]) + 1)
  43. } else if (i > index) {
  44. v[i] = 0
  45. }
  46. }
  47. if (bump === 'premajor') {
  48. const pre = JSON.parse(
  49. readFileSync(resolve(filePath, '../../../.changes/pre.json'), 'utf-8')
  50. )
  51. return `${v.join('.')}-${pre.tag}.0`
  52. }
  53. return v.join('.')
  54. }
  55. // read file into js object
  56. const metadata = JSON.parse(readFileSync(filePath, 'utf-8'))
  57. // set field version
  58. let version
  59. if (packageNickname === '@tauri-apps/cli') {
  60. version = inc(metadata['cli.js'].version)
  61. metadata['cli.js'].version = version
  62. } else {
  63. version = inc(metadata[packageNickname])
  64. metadata[packageNickname] = version
  65. }
  66. writeFileSync(filePath, JSON.stringify(metadata, null, 2) + '\n')
  67. console.log(`wrote ${version} for ${packageNickname} into metadata-v2.json`)
  68. console.dir(metadata)