mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-17 02:48:57 -07:00
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
|
// 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
|
||
|
}
|