binary.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package upgrader
  2. import (
  3. "os"
  4. "github.com/0xJacky/Nginx-UI/settings"
  5. "github.com/gorilla/websocket"
  6. "github.com/uozi-tech/cosy/logger"
  7. )
  8. type Control struct {
  9. DryRun bool `json:"dry_run"`
  10. TestCommitAndRestart bool `json:"test_commit_and_restart"`
  11. Channel string `json:"channel"`
  12. }
  13. // BinaryUpgrade Upgrade the binary
  14. func BinaryUpgrade(ws *websocket.Conn, control *Control) {
  15. _ = ws.WriteJSON(CoreUpgradeResp{
  16. Status: UpgradeStatusInfo,
  17. Message: "Initialing core upgrader",
  18. })
  19. u, err := NewUpgrader(control.Channel)
  20. if err != nil {
  21. _ = ws.WriteJSON(CoreUpgradeResp{
  22. Status: UpgradeStatusError,
  23. Message: "Initial core upgrader error",
  24. })
  25. _ = ws.WriteJSON(CoreUpgradeResp{
  26. Status: UpgradeStatusError,
  27. Message: err.Error(),
  28. })
  29. logger.Error(err)
  30. return
  31. }
  32. _ = ws.WriteJSON(CoreUpgradeResp{
  33. Status: UpgradeStatusInfo,
  34. Message: "Downloading latest release",
  35. })
  36. progressChan := make(chan float64)
  37. defer close(progressChan)
  38. go func() {
  39. for progress := range progressChan {
  40. _ = ws.WriteJSON(CoreUpgradeResp{
  41. Status: UpgradeStatusProgress,
  42. Progress: progress,
  43. })
  44. }
  45. }()
  46. if control.TestCommitAndRestart {
  47. err = u.TestCommitAndRestart()
  48. if err != nil {
  49. _ = ws.WriteJSON(CoreUpgradeResp{
  50. Status: UpgradeStatusError,
  51. Message: "Test commit and restart error",
  52. })
  53. }
  54. }
  55. tarName, err := u.DownloadLatestRelease(progressChan)
  56. if err != nil {
  57. _ = ws.WriteJSON(CoreUpgradeResp{
  58. Status: UpgradeStatusError,
  59. Message: "Download latest release error",
  60. })
  61. _ = ws.WriteJSON(CoreUpgradeResp{
  62. Status: UpgradeStatusError,
  63. Message: err.Error(),
  64. })
  65. logger.Error(err)
  66. return
  67. }
  68. defer func() {
  69. _ = os.Remove(tarName)
  70. _ = os.Remove(tarName + ".digest")
  71. }()
  72. _ = ws.WriteJSON(CoreUpgradeResp{
  73. Status: UpgradeStatusInfo,
  74. Message: "Performing core upgrade",
  75. })
  76. if control.DryRun || settings.NodeSettings.Demo {
  77. return
  78. }
  79. // bye, will restart nginx-ui in performCoreUpgrade
  80. err = u.PerformCoreUpgrade(tarName)
  81. if err != nil {
  82. _ = ws.WriteJSON(CoreUpgradeResp{
  83. Status: UpgradeStatusError,
  84. Message: "Perform core upgrade error",
  85. })
  86. _ = ws.WriteJSON(CoreUpgradeResp{
  87. Status: UpgradeStatusError,
  88. Message: err.Error(),
  89. })
  90. logger.Error(err)
  91. return
  92. }
  93. }