MCPcopy Index your code
hub / github.com/coder/coder / promoteVersionToStable

Method promoteVersionToStable

scripts/release/main.go:169–259  ·  view source on GitHub ↗

nolint:revive // Allow dryRun control flag.

(ctx context.Context, inv *serpent.Invocation, version string)

Source from the content-addressed store, hash-verified

167
168//nolint:revive // Allow dryRun control flag.
169func (r *releaseCommand) promoteVersionToStable(ctx context.Context, inv *serpent.Invocation, version string) error {
170 client := github.NewClient(nil)
171 if r.ghToken != "" {
172 client = client.WithAuthToken(r.ghToken)
173 }
174
175 logger := r.logger.With(slog.F("version", version))
176
177 logger.Info(ctx, "checking current stable release")
178
179 // Check if the version is already the latest stable release.
180 currentStable, _, err := client.Repositories.GetLatestRelease(ctx, "coder", "coder")
181 if err != nil {
182 return xerrors.Errorf("get latest release failed: %w", err)
183 }
184
185 logger = logger.With(slog.F("stable_version", currentStable.GetTagName()))
186 logger.Info(ctx, "found current stable release")
187
188 if currentStable.GetTagName() == version {
189 return xerrors.Errorf("version %q is already the latest stable release", version)
190 }
191
192 // Ensure the version is a valid release.
193 perPage := 20
194 latestReleases, _, err := client.Repositories.ListReleases(ctx, owner, repo, &github.ListOptions{
195 Page: 0,
196 PerPage: perPage,
197 })
198 if err != nil {
199 return xerrors.Errorf("list releases failed: %w", err)
200 }
201
202 var releaseVersions []string
203 var newStable *github.RepositoryRelease
204 for _, r := range latestReleases {
205 releaseVersions = append(releaseVersions, r.GetTagName())
206 if r.GetTagName() == version {
207 newStable = r
208 }
209 }
210 semver.Sort(releaseVersions)
211 slices.Reverse(releaseVersions)
212
213 switch {
214 case len(releaseVersions) == 0:
215 return xerrors.Errorf("no releases found")
216 case newStable == nil:
217 return xerrors.Errorf("version %q is not found in the last %d releases", version, perPage)
218 }
219
220 logger = logger.With(slog.F("mainline_version", releaseVersions[0]))
221
222 if version != releaseVersions[0] {
223 logger.Warn(ctx, "selected version is not the latest mainline release")
224 }
225
226 if reply, err := cliui.Prompt(inv, cliui.PromptOptions{

Callers 1

mainFunction · 0.95

Calls 7

PromptFunction · 0.92
cloneReleaseFunction · 0.85
removeMainlineBlurbFunction · 0.85
addStableSinceFunction · 0.85
InfoMethod · 0.45
ErrorfMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected