Skip to content

Commit a4fac9b

Browse files
committed
fix coderversion logic
1 parent 8732966 commit a4fac9b

File tree

3 files changed

+69
-45
lines changed

3 files changed

+69
-45
lines changed

go.mod

-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ toolchain go1.22.3
66

77
require (
88
github.com/docker/docker v26.1.4+incompatible
9-
github.com/google/go-github v17.0.0+incompatible
109
github.com/google/uuid v1.6.0
1110
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
1211
github.com/hashicorp/terraform-plugin-sdk/v2 v2.20.0
@@ -36,7 +35,6 @@ require (
3635
github.com/gogo/protobuf v1.3.2 // indirect
3736
github.com/golang/protobuf v1.5.4 // indirect
3837
github.com/google/go-cmp v0.6.0 // indirect
39-
github.com/google/go-querystring v1.1.0 // indirect
4038
github.com/hashicorp/errwrap v1.1.0 // indirect
4139
github.com/hashicorp/go-checkpoint v0.5.0 // indirect
4240
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect

go.sum

-5
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,10 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
7272
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
7373
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
7474
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
75-
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7675
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7776
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
7877
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
7978
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
80-
github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
81-
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
82-
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
83-
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
8479
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
8580
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
8681
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=

scripts/coderversion/main.go

+69-38
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,102 @@
11
package main
22

33
import (
4-
"context"
4+
"encoding/json"
55
"fmt"
6+
"net/http"
67
"os"
78

8-
"github.com/google/go-github/github"
99
"github.com/masterminds/semver"
1010
)
1111

1212
func main() {
13-
client := github.NewClient(nil)
14-
// We consider the latest release as 'mainline'
15-
ctx, cancel := context.WithCancel(context.Background())
16-
defer cancel()
17-
latest, _, err := client.Repositories.GetLatestRelease(ctx, "coder", "coder")
18-
if err != nil {
19-
fatal("get mainline release: %w\n", err)
20-
}
13+
releases := fetchReleases()
2114

22-
if latest.TagName == nil {
23-
fatal("latest release is not tagged", err)
24-
}
15+
mainlineVer := semver.MustParse("v0.0.0")
16+
for _, rel := range releases {
17+
if rel == "" {
18+
debug("ignoring untagged version %s\n", rel)
19+
continue
20+
}
2521

26-
mainlineVer, err := semver.NewVersion(*latest.TagName)
27-
if err != nil {
28-
fatal("invalid mainline tag name: %w\n", err)
22+
ver, err := semver.NewVersion(rel)
23+
if err != nil {
24+
debug("skipping invalid version %s\n", rel)
25+
}
26+
27+
if ver.Compare(mainlineVer) > 0 {
28+
mainlineVer = ver
29+
continue
30+
}
2931
}
32+
3033
mainline := fmt.Sprintf("v%d.%d.%d", mainlineVer.Major(), mainlineVer.Minor(), mainlineVer.Patch())
34+
_, _ = fmt.Fprintf(os.Stdout, "CODER_MAINLINE_VERSION=%q\n", mainline)
3135

3236
expectedStableMinor := mainlineVer.Minor() - 1
3337
if expectedStableMinor < 0 {
34-
fatal("unexpected minor version 0")
38+
expectedStableMinor = 0
3539
}
36-
37-
previousReleases, _, err := client.Repositories.ListReleases(ctx, "coder", "coder", &github.ListOptions{
38-
Page: 0,
39-
PerPage: 100,
40-
})
41-
if err != nil {
42-
fatal("list previous releases: %w\n", err)
43-
}
44-
45-
var stable string
46-
for _, rel := range previousReleases {
47-
if rel.TagName == nil {
48-
debug("ignoring untagged version %s\n", rel.String())
40+
debug("expected stable minor: %d\n", expectedStableMinor)
41+
stableVer := semver.MustParse("v0.0.0")
42+
for _, rel := range releases {
43+
debug("check version %s\n", rel)
44+
if rel == "" {
45+
debug("ignoring untagged version %s\n", rel)
4946
continue
5047
}
5148

52-
ver, err := semver.NewVersion(*rel.TagName)
49+
ver, err := semver.NewVersion(rel)
5350
if err != nil {
54-
debug("skipping invalid version %s\n", *rel.TagName)
51+
debug("skipping invalid version %s\n", rel)
5552
}
5653

57-
// Assuming that the first one we find with minor-1 is what we want
58-
if ver.Minor() == expectedStableMinor {
59-
debug("found stable version %s\n", *rel.TagName)
60-
stable = fmt.Sprintf("v%d.%d.%d", ver.Major(), ver.Minor(), ver.Patch())
61-
break
54+
if ver.Minor() != expectedStableMinor {
55+
debug("skipping version %s\n", rel)
56+
continue
6257
}
6358

59+
if ver.Compare(stableVer) > 0 {
60+
stableVer = ver
61+
continue
62+
}
6463
}
65-
_, _ = fmt.Fprintf(os.Stdout, "CODER_MAINLINE_VERSION=%q\n", mainline)
64+
65+
stable := fmt.Sprintf("v%d.%d.%d", stableVer.Major(), stableVer.Minor(), stableVer.Patch())
6666
_, _ = fmt.Fprintf(os.Stdout, "CODER_STABLE_VERSION=%q\n", stable)
6767
}
6868

69+
type release struct {
70+
TagName string `json:"tag_name"`
71+
}
72+
73+
const releasesURL = "https://api.github.com/repos/coder/coder/releases"
74+
75+
// fetchReleases fetches the releases of coder/coder
76+
// this is done directly via JSON API to avoid pulling in the entire
77+
// github client
78+
func fetchReleases() []string {
79+
resp, err := http.Get(releasesURL)
80+
if err != nil {
81+
fatal("get releases: %w", err)
82+
}
83+
defer resp.Body.Close()
84+
85+
var releases []release
86+
if err := json.NewDecoder(resp.Body).Decode(&releases); err != nil {
87+
fatal("parse releases: %w", err)
88+
}
89+
90+
var ss []string
91+
for _, rel := range releases {
92+
if rel.TagName != "" {
93+
ss = append(ss, rel.TagName)
94+
95+
}
96+
}
97+
return ss
98+
}
99+
69100
func debug(format string, args ...any) {
70101
if _, ok := os.LookupEnv("VERBOSE"); ok {
71102
_, _ = fmt.Fprintf(os.Stderr, format, args...)

0 commit comments

Comments
 (0)