|
|
@@ -0,0 +1,57 @@
|
|
|
+// Copyright (C) 2019 The Syncthing Authors.
|
|
|
+//
|
|
|
+// This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
+// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
+// You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
+
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "flag"
|
|
|
+ "os"
|
|
|
+ "sort"
|
|
|
+
|
|
|
+ "github.com/syncthing/syncthing/lib/upgrade"
|
|
|
+)
|
|
|
+
|
|
|
+const defaultURL = "https://api.github.com/repos/syncthing/syncthing/releases?per_page=25"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ url := flag.String("u", defaultURL, "GitHub releases url")
|
|
|
+ flag.Parse()
|
|
|
+
|
|
|
+ rels := upgrade.FetchLatestReleases(*url, "")
|
|
|
+ if rels == nil {
|
|
|
+ // An error was already logged
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+
|
|
|
+ sort.Sort(upgrade.SortByRelease(rels))
|
|
|
+ rels = filterForLatest(rels)
|
|
|
+
|
|
|
+ if err := json.NewEncoder(os.Stdout).Encode(rels); err != nil {
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// filterForLatest returns the latest stable and prerelease only. If the
|
|
|
+// stable version is newer (comes first in the list) there is no need to go
|
|
|
+// looking for a prerelease at all.
|
|
|
+func filterForLatest(rels []upgrade.Release) []upgrade.Release {
|
|
|
+ var filtered []upgrade.Release
|
|
|
+ var havePre bool
|
|
|
+ for _, rel := range rels {
|
|
|
+ if !rel.Prerelease {
|
|
|
+ // We found a stable version, we're good now.
|
|
|
+ filtered = append(filtered, rel)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if rel.Prerelease && !havePre {
|
|
|
+ // We remember the first prerelease we find.
|
|
|
+ filtered = append(filtered, rel)
|
|
|
+ havePre = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return filtered
|
|
|
+}
|