Skip to content

Commit fbf653e

Browse files
committed
feat: add release + latest options now that multiple quarto streams
1 parent 02a467b commit fbf653e

2 files changed

Lines changed: 32 additions & 5 deletions

File tree

cmd/install.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func newInstall(installOpts installOpts, release string) error {
3232
}
3333
if release == "" {
3434
client := gh.NewClient(os.Getenv("GITHUB_PAT"))
35-
releases, err := gh.GetReleases(client, false)
35+
releases, err := gh.GetReleases(client, 100)
3636
if err != nil {
3737
return err
3838
}
@@ -55,14 +55,27 @@ func newInstall(installOpts installOpts, release string) error {
5555
return err
5656
}
5757
}
58-
if release == "latest" {
58+
59+
// github's latest release is literally their latest release,
60+
// not the latest tagged version
61+
if release == "release" {
5962
client := gh.NewClient(os.Getenv("GITHUB_PAT"))
6063
latestRelease, err := gh.GetLatestRelease(client)
6164
if err != nil {
6265
return err
6366
}
6467
release = latestRelease.GetTagName()
6568
}
69+
70+
if release == "latest" {
71+
client := gh.NewClient(os.Getenv("GITHUB_PAT"))
72+
releases, err := gh.GetReleases(client, 1)
73+
if err != nil {
74+
return err
75+
}
76+
release = releases[0].GetTagName()
77+
}
78+
6679
_, ok := iv[release]
6780
if ok {
6881
log.Infof("quarto version %s is already installed\n", release)

internal/gh/releases.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,19 @@ func GetLatestRelease(client *github.Client) (*github.RepositoryRelease, error)
3232
return rel, err
3333
}
3434

35-
func GetReleases(client *github.Client, paginate bool) ([]*github.RepositoryRelease, error) {
36-
opts := &github.ListOptions{PerPage: 50}
35+
func GetReleases(client *github.Client, n int) ([]*github.RepositoryRelease, error) {
36+
// max of 50 per page
37+
perPage := 50
38+
remaining := n - perPage
39+
if n < 50 {
40+
remaining = 0
41+
perPage = n
42+
}
3743
var releases []*github.RepositoryRelease
44+
opts := &github.ListOptions{PerPage: perPage}
3845
for {
3946
start := time.Now()
47+
log.Tracef("perpage: %d, remaining: %d", opts.PerPage, remaining)
4048
rel, resp, err := client.Repositories.ListReleases(
4149
context.Background(),
4250
"quarto-dev",
@@ -48,9 +56,15 @@ func GetReleases(client *github.Client, paginate bool) ([]*github.RepositoryRele
4856
}
4957
releases = append(releases, rel...)
5058
log.Tracef("repository release paginator: %s, page: %d", time.Since(start), resp.NextPage)
51-
if !paginate || resp.NextPage == 0 {
59+
if remaining <= 0 || resp.NextPage == 0 {
5260
break
5361
}
62+
if remaining <= perPage {
63+
opts.PerPage = remaining
64+
remaining = 0
65+
} else {
66+
remaining -= perPage
67+
}
5468
opts.Page = resp.NextPage
5569
}
5670
return releases, nil

0 commit comments

Comments
 (0)