1
1
package upgrade
2
2
3
3
import (
4
+ "io"
5
+ "net/http"
4
6
"os"
5
7
"path/filepath"
6
8
"runtime"
@@ -9,18 +11,17 @@ import (
9
11
"github.com/Masterminds/semver"
10
12
11
13
"github.com/devstream-io/devstream/internal/pkg/version"
14
+ "github.com/devstream-io/devstream/pkg/util/downloader"
12
15
"github.com/devstream-io/devstream/pkg/util/interact"
13
16
"github.com/devstream-io/devstream/pkg/util/log"
14
- "github.com/devstream-io/devstream/pkg/util/scm/git"
15
- "github.com/devstream-io/devstream/pkg/util/scm/github"
16
17
)
17
18
18
19
const (
19
20
assetName = "dtm-" + runtime .GOOS + "-" + runtime .GOARCH
20
21
dtmTmpFileName = "dtm-tmp"
21
22
dtmBakFileName = "dtm-bak"
22
- dtmOrg = "devstream-io "
23
- dtmRepo = "devstream"
23
+ dtmDownloadUrl = "https://download. devstream.io/ "
24
+ latestVersion = "https://download. devstream.io/latest_version "
24
25
)
25
26
26
27
// since dtm file name can be changeable by user,so it should be a variable to get current dtm file name
@@ -50,33 +51,26 @@ func Upgrade(continueDirectly bool) error {
50
51
log .Debugf ("Dtm upgrade: work path is : %v" , workDir )
51
52
52
53
// 1. Get the latest release version
53
- ghOptions := & git.RepoInfo {
54
- Org : dtmOrg ,
55
- Repo : dtmRepo ,
56
- NeedAuth : false ,
57
- WorkPath : workDir ,
58
- }
59
-
60
- ghClient , err := github .NewClient (ghOptions )
54
+ request , err := http .Get (latestVersion )
61
55
if err != nil {
62
56
return err
63
57
}
64
58
65
- ltstReleaseTagName , err := ghClient .GetLatestReleaseTagName ()
59
+ body , err := io .ReadAll (request .Body )
60
+ latestReleaseTagName := string (body [0 : len (body )- 1 ])
66
61
if err != nil {
67
62
return err
68
63
}
69
- log .Debugf ("Dtm upgrade: got latest release version: %v" , ltstReleaseTagName )
64
+ log .Debugf ("Dtm upgrade: got latest release version: %v" , latestReleaseTagName )
70
65
71
66
// 2. Check whether Upgrade is needed
72
- // Use Semantic Version to judge. "https://semver.org/"
73
- shouldUpgrade , err := checkUpgrade (version .Version , ltstReleaseTagName )
67
+ // To Use Semantic Version to judge. "https://semver.org/"
68
+ shouldUpgrade , err := checkUpgrade (version .Version , latestReleaseTagName )
74
69
if err != nil {
75
70
return err
76
71
}
77
-
78
72
if shouldUpgrade {
79
- log .Infof ("Dtm upgrade: new dtm version: %v is available." , ltstReleaseTagName )
73
+ log .Infof ("Dtm upgrade: new dtm version: %v is available." , latestReleaseTagName )
80
74
if ! continueDirectly {
81
75
continued := interact .AskUserIfContinue ("Would you like to Upgrade? [y/n]" )
82
76
if ! continued {
@@ -86,10 +80,16 @@ func Upgrade(continueDirectly bool) error {
86
80
87
81
// 3. Download the latest release version of dtm
88
82
log .Info ("Dtm upgrade: downloading the latest release version of dtm, please wait for a while." )
89
- if err = ghClient .DownloadAsset (ltstReleaseTagName , assetName , dtmTmpFileName ); err != nil {
90
- log .Debugf ("Failed to download dtm: %v-%v." , ltstReleaseTagName , assetName )
91
- return err
83
+ var downloadURL strings.Builder
84
+ downloadURL .WriteString (dtmDownloadUrl )
85
+ downloadURL .WriteString (latestReleaseTagName + "/" )
86
+ downloadURL .WriteString (assetName )
87
+ downloadSize , downloadError := downloader .New ().WithProgressBar ().Download (downloadURL .String (), dtmTmpFileName , workDir )
88
+ if downloadError != nil {
89
+ log .Debugf ("Failed to download dtm: %v-%v." , latestReleaseTagName , assetName )
90
+ return downloadError
92
91
}
92
+ log .Debugf ("Downloaded <%d> bytes." , downloadSize )
93
93
94
94
// 4. Replace old dtm with the latest one
95
95
if err = applyUpgrade (workDir ); err != nil {
0 commit comments