binary.go 1.9 KB

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