1
0

main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. "path/filepath"
  6. "runtime"
  7. "strconv"
  8. "strings"
  9. "github.com/sagernet/sing-box/cmd/internal/build_shared"
  10. "github.com/sagernet/sing-box/log"
  11. "github.com/sagernet/sing/common"
  12. )
  13. var (
  14. flagRunInCI bool
  15. flagRunNightly bool
  16. )
  17. func init() {
  18. flag.BoolVar(&flagRunInCI, "ci", false, "Run in CI")
  19. flag.BoolVar(&flagRunNightly, "nightly", false, "Run nightly")
  20. }
  21. func main() {
  22. flag.Parse()
  23. newVersion := common.Must1(build_shared.ReadTag())
  24. var androidPath string
  25. if flagRunInCI {
  26. androidPath = "clients/android"
  27. } else {
  28. androidPath = "../sing-box-for-android"
  29. }
  30. androidPath, err := filepath.Abs(androidPath)
  31. if err != nil {
  32. log.Fatal(err)
  33. }
  34. common.Must(os.Chdir(androidPath))
  35. localProps := common.Must1(os.ReadFile("version.properties"))
  36. var propsList [][]string
  37. for _, propLine := range strings.Split(string(localProps), "\n") {
  38. propsList = append(propsList, strings.Split(propLine, "="))
  39. }
  40. var (
  41. versionUpdated bool
  42. goVersionUpdated bool
  43. )
  44. for _, propPair := range propsList {
  45. switch propPair[0] {
  46. case "VERSION_NAME":
  47. if propPair[1] != newVersion {
  48. log.Info("updated version from ", propPair[1], " to ", newVersion)
  49. versionUpdated = true
  50. propPair[1] = newVersion
  51. }
  52. case "GO_VERSION":
  53. if propPair[1] != runtime.Version() {
  54. log.Info("updated Go version from ", propPair[1], " to ", runtime.Version())
  55. goVersionUpdated = true
  56. propPair[1] = runtime.Version()
  57. }
  58. }
  59. }
  60. if !(versionUpdated || goVersionUpdated) {
  61. log.Info("version not changed")
  62. return
  63. } else if flagRunInCI && !flagRunNightly {
  64. log.Fatal("version changed, commit changes first.")
  65. }
  66. for _, propPair := range propsList {
  67. switch propPair[0] {
  68. case "VERSION_CODE":
  69. versionCode := common.Must1(strconv.ParseInt(propPair[1], 10, 64))
  70. propPair[1] = strconv.Itoa(int(versionCode + 1))
  71. log.Info("updated version code to ", propPair[1])
  72. }
  73. }
  74. var newProps []string
  75. for _, propPair := range propsList {
  76. newProps = append(newProps, strings.Join(propPair, "="))
  77. }
  78. common.Must(os.WriteFile("version.properties", []byte(strings.Join(newProps, "\n")), 0o644))
  79. }