From f35e51e4e5ae19e1d012eef5db608f1dcf5876cf Mon Sep 17 00:00:00 2001 From: Pete Davison Date: Mon, 13 May 2024 14:37:07 +0000 Subject: [PATCH] feat: better release task --- Taskfile.yml | 47 +++++++++++++++++++++++++++++++++++++++++++-- cmd/release/main.go | 20 ++++++++++++++++--- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 971f4c23..ad9d9c5d 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -123,10 +123,53 @@ tasks: cmds: - go install github.com/goreleaser/goreleaser@latest - release: + release:*: desc: Prepare the project for a new release + summary: | + This task will do the following: + + - Update the version and date in the CHANGELOG.md file + - Update the version in the package.json and package-lock.json files + - Copy the latest docs to the "current" version on the website + - Commit the changes + - Create a new tag + - Push the commit/tag to the repository + - Create a GitHub release + + To use the task, simply run "task release:" where "" is is one of: + + - "major" - Bumps the major number + - "minor" - Bumps the minor number + - "patch" - Bumps the patch number + - A semver compatible version number (e.g. "1.2.3") + vars: + VERSION: + sh: "go run ./cmd/release --version {{index .MATCH 0}}" + COMPLETE_MESSAGE: | + Creating release with GoReleaser: https://github.com/go-task/task/actions/workflows/release.yml + + Please wait for the CI to finish and then do the following: + + - Copy the changelog for v{{.VERSION}} to the GitHub release + - Publish the package to NPM with `task npm:publish` + - Update and push the snapcraft manifest in https://github.com/go-task/snap/blob/main/snap/snapcraft.yaml + preconditions: + - sh: test $(git rev-parse --abbrev-ref HEAD) = "main" + msg: "You must be on the main branch to release" + - sh: "[[ -z $(git diff --shortstat main) ]]" + msg: "You must have a clean working tree to release" + prompt: "Are you sure you want to release version {{.VERSION}}?" cmds: - - go run ./cmd/release {{.CLI_ARGS}} + - cmd: echo "Releasing v{{.VERSION}}" + silent: true + - "go run ./cmd/release {{.VERSION}}" + - "git add --all" + - "git commit -m v{{.VERSION}}" + - "git push" + - "git tag v{{.VERSION}}" + - "git push origin tag v{{.VERSION}}" + - cmd: printf "%s" '{{.COMPLETE_MESSAGE}}' + silent: true npm:publish: desc: Publish release to npm diff --git a/cmd/release/main.go b/cmd/release/main.go index d2f959ba..efccff9e 100644 --- a/cmd/release/main.go +++ b/cmd/release/main.go @@ -11,6 +11,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/otiai10/copy" + "github.com/spf13/pflag" ) const ( @@ -25,6 +26,16 @@ var ( versionRegex = regexp.MustCompile(`(?m)^ "version": "\d+\.\d+\.\d+",$`) ) +// Flags +var ( + versionFlag bool +) + +func init() { + pflag.BoolVarP(&versionFlag, "version", "v", false, "resolved version number") + pflag.Parse() +} + func main() { if err := release(); err != nil { fmt.Println(err) @@ -33,7 +44,7 @@ func main() { } func release() error { - if len(os.Args) != 2 { + if len(pflag.Args()) != 1 { return errors.New("error: expected version number") } @@ -42,11 +53,14 @@ func release() error { return err } - if err := bumpVersion(version, os.Args[1]); err != nil { + if err := bumpVersion(version, pflag.Arg(0)); err != nil { return err } - fmt.Println(version) + if versionFlag { + fmt.Println(version) + return nil + } if err := changelog(version); err != nil { return err