1
0

binary.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. Channel string `json:"channel"`
  11. }
  12. // BinaryUpgrade Upgrade the binary
  13. func BinaryUpgrade(ws *websocket.Conn, control *Control) {
  14. _ = ws.WriteJSON(CoreUpgradeResp{
  15. Status: UpgradeStatusInfo,
  16. Message: "Initialing core upgrader",
  17. })
  18. u, err := NewUpgrader(control.Channel)
  19. if err != nil {
  20. _ = ws.WriteJSON(CoreUpgradeResp{
  21. Status: UpgradeStatusError,
  22. Message: "Initial core upgrader error",
  23. })
  24. _ = ws.WriteJSON(CoreUpgradeResp{
  25. Status: UpgradeStatusError,
  26. Message: err.Error(),
  27. })
  28. logger.Error(err)
  29. return
  30. }
  31. _ = ws.WriteJSON(CoreUpgradeResp{
  32. Status: UpgradeStatusInfo,
  33. Message: "Downloading latest release",
  34. })
  35. progressChan := make(chan float64)
  36. defer close(progressChan)
  37. go func() {
  38. for progress := range progressChan {
  39. _ = ws.WriteJSON(CoreUpgradeResp{
  40. Status: UpgradeStatusProgress,
  41. Progress: progress,
  42. })
  43. }
  44. }()
  45. tarName, err := u.DownloadLatestRelease(progressChan)
  46. if err != nil {
  47. _ = ws.WriteJSON(CoreUpgradeResp{
  48. Status: UpgradeStatusError,
  49. Message: "Download latest release error",
  50. })
  51. _ = ws.WriteJSON(CoreUpgradeResp{
  52. Status: UpgradeStatusError,
  53. Message: err.Error(),
  54. })
  55. logger.Error(err)
  56. return
  57. }
  58. defer func() {
  59. _ = os.Remove(tarName)
  60. _ = os.Remove(tarName + ".digest")
  61. }()
  62. _ = ws.WriteJSON(CoreUpgradeResp{
  63. Status: UpgradeStatusInfo,
  64. Message: "Performing core upgrade",
  65. })
  66. // dry run
  67. if control.DryRun || settings.NodeSettings.Demo {
  68. return
  69. }
  70. // bye, will restart nginx-ui in performCoreUpgrade
  71. err = u.PerformCoreUpgrade(tarName)
  72. if err != nil {
  73. _ = ws.WriteJSON(CoreUpgradeResp{
  74. Status: UpgradeStatusError,
  75. Message: "Perform core upgrade error",
  76. })
  77. _ = ws.WriteJSON(CoreUpgradeResp{
  78. Status: UpgradeStatusError,
  79. Message: err.Error(),
  80. })
  81. logger.Error(err)
  82. return
  83. }
  84. }