binary.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package upgrader
  2. import (
  3. "os"
  4. "code.pfad.fr/risefront"
  5. "github.com/0xJacky/Nginx-UI/settings"
  6. "github.com/gorilla/websocket"
  7. "github.com/uozi-tech/cosy/logger"
  8. )
  9. type Control struct {
  10. DryRun bool `json:"dry_run"`
  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. tarName, err := u.DownloadLatestRelease(progressChan)
  47. if err != nil {
  48. _ = ws.WriteJSON(CoreUpgradeResp{
  49. Status: UpgradeStatusError,
  50. Message: "Download latest release error",
  51. })
  52. _ = ws.WriteJSON(CoreUpgradeResp{
  53. Status: UpgradeStatusError,
  54. Message: err.Error(),
  55. })
  56. logger.Error(err)
  57. return
  58. }
  59. defer func() {
  60. _ = os.Remove(tarName)
  61. _ = os.Remove(tarName + ".digest")
  62. }()
  63. _ = ws.WriteJSON(CoreUpgradeResp{
  64. Status: UpgradeStatusInfo,
  65. Message: "Performing core upgrade",
  66. })
  67. // dry run
  68. if control.DryRun || settings.NodeSettings.Demo {
  69. risefront.Restart()
  70. return
  71. }
  72. // bye, will restart nginx-ui in performCoreUpgrade
  73. err = u.PerformCoreUpgrade(tarName)
  74. if err != nil {
  75. _ = ws.WriteJSON(CoreUpgradeResp{
  76. Status: UpgradeStatusError,
  77. Message: "Perform core upgrade error",
  78. })
  79. _ = ws.WriteJSON(CoreUpgradeResp{
  80. Status: UpgradeStatusError,
  81. Message: err.Error(),
  82. })
  83. logger.Error(err)
  84. return
  85. }
  86. }