mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
## Summary Removes the GitHub Actions-driven releaser **v2** pipeline so the interactive release wizard is the only release path, and drops the `v1` naming now that it is the sole implementation. ## Changes - Delete `.github/workflows/tag-and-release.yaml` (the v2 workflow). - Delete `scripts/releaser/v2/`. - Move `scripts/releaser/v1/` into `scripts/releaser/` as `package main`. - Rewrite `scripts/releaser/main.go` to a single wizard command: drop the `--legacy` flag and the v2 `rc`/`branch`/`release` subcommands and hidden CI compat commands. `--dry-run` is preserved. - Update `scripts/release.sh` to run `go run ./scripts/releaser "$@"` (no `--legacy`). The legacy `release.yaml` workflow (triggered by `scripts/release.sh`) is unchanged and remains the release pipeline. ## Validation - `go build ./scripts/releaser/...` - `go test ./scripts/releaser/...` - `go vet` + `golangci-lint run ./scripts/releaser/...` - `gofmt -l` clean > [!NOTE] > The GPG signing key check removal is handled in a stacked follow-up PR based on this branch. <details> <summary>Implementation plan</summary> - v2 flow = `scripts/releaser/v2/` + `.github/workflows/tag-and-release.yaml` (uses `go run ./scripts/releaser prepare-release|generate-notes`). `v2` was imported only by `main.go`; the workflow was referenced nowhere else. - v1 flow = interactive wizard in `scripts/releaser/v1/`, reached via `--legacy`, driving `release.yaml` (triggered by `scripts/release.sh`). - No `docs/` referenced the releaser tool or these workflows. - Steps: delete the v2 workflow and package; move `v1/*` up to `scripts/releaser/` (`package main`, including test files); rewrite `main.go` to a single wizard command; update `release.sh`. </details> --- Generated by Coder Agents on behalf of @f0ssel.
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/coder/serpent"
|
|
)
|
|
|
|
const (
|
|
owner = "coder"
|
|
repo = "coder"
|
|
)
|
|
|
|
// Run executes the interactive release wizard.
|
|
//
|
|
// It verifies dependencies, warns when the gh CLI is not configured, wires
|
|
// up a live or dry-run executor, and then walks the operator through
|
|
// tagging, pushing, and triggering the release workflow.
|
|
//
|
|
//nolint:revive // dryRun selects the dry-run executor for the wizard.
|
|
func Run(inv *serpent.Invocation, dryRun bool) error {
|
|
ctx := inv.Context()
|
|
w := inv.Stderr
|
|
|
|
// --- Check dependencies ---
|
|
if _, err := exec.LookPath("git"); err != nil {
|
|
return xerrors.New("git is required but not found in PATH")
|
|
}
|
|
|
|
// --- Check gh CLI auth ---
|
|
ghAvailable := checkGHAuth()
|
|
if !ghAvailable {
|
|
warnf(w, "gh CLI is not available or not authenticated.")
|
|
infof(w, "Continuing without GitHub features (PR checks, label lookups, workflow trigger).")
|
|
_, _ = fmt.Fprintln(w)
|
|
}
|
|
|
|
// --- Wire up executor ---
|
|
var executor ReleaseExecutor
|
|
if dryRun {
|
|
outputPrefix = "[DRYRUN] "
|
|
executor = &dryRunExecutor{w: w}
|
|
} else {
|
|
executor = &liveExecutor{}
|
|
}
|
|
|
|
return runRelease(ctx, inv, executor, ghAvailable, dryRun)
|
|
}
|