mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
support specific version of weed
This commit is contained in:
parent
1dbb925d29
commit
4bc8792643
|
@ -60,18 +60,20 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
type UpdateOptions struct {
|
type UpdateOptions struct {
|
||||||
Output *string
|
Output *string
|
||||||
|
Version *string
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
updateOpt.Output = cmdUpdate.Flag.String("output", "weed", "Save the latest weed as `filename`")
|
updateOpt.Output = cmdUpdate.Flag.String("output", "weed", "Save the weed as `filename` or /path/to/dir/filename.")
|
||||||
|
updateOpt.Version = cmdUpdate.Flag.String("version", "0", "The version of weed you want to download. If not specified, get the latest version.")
|
||||||
cmdUpdate.Run = runUpdate
|
cmdUpdate.Run = runUpdate
|
||||||
}
|
}
|
||||||
|
|
||||||
var cmdUpdate = &Command{
|
var cmdUpdate = &Command{
|
||||||
UsageLine: "update [-output=weed]",
|
UsageLine: "update [-output=weed]",
|
||||||
Short: "get latest version from https://github.com/chrislusf/seaweedfs",
|
Short: "get latest or specific version from https://github.com/chrislusf/seaweedfs",
|
||||||
Long: `get latest version from https://github.com/chrislusf/seaweedfs`,
|
Long: `get latest or specific version from https://github.com/chrislusf/seaweedfs`,
|
||||||
}
|
}
|
||||||
|
|
||||||
func runUpdate(cmd *Command, args []string) bool {
|
func runUpdate(cmd *Command, args []string) bool {
|
||||||
|
@ -80,41 +82,45 @@ func runUpdate(cmd *Command, args []string) bool {
|
||||||
dirname := filepath.Dir(*updateOpt.Output)
|
dirname := filepath.Dir(*updateOpt.Output)
|
||||||
di, err := os.Lstat(dirname)
|
di, err := os.Lstat(dirname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("unable to find directory:%s", dirname)
|
glog.Errorf("unable to find directory:%s", dirname)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if !di.Mode().IsDir() {
|
if !di.Mode().IsDir() {
|
||||||
glog.Fatalf("output parent path %v is not a directory, use --output to specify a different file path", dirname)
|
glog.Errorf("output parent path %v is not a directory, use --output to specify a different file path", dirname)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !fi.Mode().IsRegular() {
|
if !fi.Mode().IsRegular() {
|
||||||
glog.Fatalf("output path %v is not a normal file, use --output to specify a different file path", *updateOpt.Output)
|
glog.Errorf("output path %v is not a normal file, use --output to specify a different file path", *updateOpt.Output)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
v, err := downloadLatestStableRelease(context.Background(), *updateOpt.Output)
|
_, err = downloadRelease(context.Background(), *updateOpt.Output, *updateOpt.Version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("unable to update weed to version %s: %v", err, v)
|
glog.Errorf("unable to download weed: %v", err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func downloadLatestStableRelease(ctx context.Context, target string) (version string, err error) {
|
func downloadRelease(ctx context.Context, target string, ver string) (version string, err error) {
|
||||||
currentVersion := util.VERSION_NUMBER
|
currentVersion := util.VERSION_NUMBER
|
||||||
rel, err := GitHubLatestRelease(ctx, "chrislusf", "seaweedfs")
|
rel, err := GitHubLatestRelease(ctx, ver, "chrislusf", "seaweedfs")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if rel.Version == currentVersion {
|
if rel.Version == currentVersion {
|
||||||
glog.V(0).Infof("weed is up to date\n")
|
if ver == "0" {
|
||||||
|
glog.V(0).Infof("weed is up to date")
|
||||||
|
} else {
|
||||||
|
glog.V(0).Infof("no need to download the same version of weed ")
|
||||||
|
}
|
||||||
return currentVersion, nil
|
return currentVersion, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("latest version is %v\n", rel.Version)
|
glog.V(0).Infof("download version: %s", rel.Version)
|
||||||
|
|
||||||
largeDiskSuffix := ""
|
largeDiskSuffix := ""
|
||||||
if util.VolumeSizeLimitGB == 8000 {
|
if util.VolumeSizeLimitGB == 8000 {
|
||||||
|
@ -162,13 +168,13 @@ func downloadLatestStableRelease(ctx context.Context, target string) (version st
|
||||||
return rel.Version, nil
|
return rel.Version, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GitHubLatestRelease uses the GitHub API to get information about the latest
|
// GitHubLatestRelease uses the GitHub API to get information about the specific
|
||||||
// release of a repository.
|
// release of a repository.
|
||||||
func GitHubLatestRelease(ctx context.Context, owner, repo string) (Release, error) {
|
func GitHubLatestRelease(ctx context.Context, ver string, owner, repo string) (Release, error) {
|
||||||
ctx, cancel := context.WithTimeout(ctx, githubAPITimeout)
|
ctx, cancel := context.WithTimeout(ctx, githubAPITimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
url := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", owner, repo)
|
url := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases", owner, repo)
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Release{}, err
|
return Release{}, err
|
||||||
|
@ -209,17 +215,28 @@ func GitHubLatestRelease(ctx context.Context, owner, repo string) (Release, erro
|
||||||
}
|
}
|
||||||
|
|
||||||
var release Release
|
var release Release
|
||||||
err = json.Unmarshal(buf, &release)
|
var releaseList []Release
|
||||||
|
err = json.Unmarshal(buf, &releaseList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Release{}, err
|
return Release{}, err
|
||||||
}
|
}
|
||||||
|
if ver == "0" {
|
||||||
|
release = releaseList[0]
|
||||||
|
glog.V(0).Infof("latest version is %v\n", release.TagName)
|
||||||
|
} else {
|
||||||
|
for _, r := range releaseList {
|
||||||
|
if r.TagName == ver {
|
||||||
|
release = r
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if release.TagName == "" {
|
if release.TagName == "" {
|
||||||
return Release{}, fmt.Errorf("tag name for latest release is empty")
|
return Release{}, fmt.Errorf("can not find the specific version")
|
||||||
}
|
}
|
||||||
|
|
||||||
release.Version = release.TagName
|
release.Version = release.TagName
|
||||||
|
|
||||||
return release, nil
|
return release, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue