12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // 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
- }
|