From 23ff41dd97f6922e5ad4e6e43a86a36bdfd17fe8 Mon Sep 17 00:00:00 2001 From: Runchao Han Date: Fri, 11 Oct 2024 18:02:43 +1100 Subject: [PATCH] ci: add goreleaser setup and move out changelog reminder (#170) This PR - sets up Go releaser for Babylon. Currently it only supports linux amd64. Other targets will be supported in the future. To test locally, run `make release-snapshot` - moves changelog reminder out from the CI flow --- .github/workflows/changelog-reminder.yml | 11 +++++ .github/workflows/ci.yml | 4 -- .gitignore | 3 +- .goreleaser.yml | 62 ++++++++++++++++++++++++ CHANGELOG.md | 1 + Makefile | 54 +++++++++++++++++++++ RELEASE_PROCESS.md | 4 ++ 7 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/changelog-reminder.yml create mode 100644 .goreleaser.yml diff --git a/.github/workflows/changelog-reminder.yml b/.github/workflows/changelog-reminder.yml new file mode 100644 index 000000000..ebe2a5538 --- /dev/null +++ b/.github/workflows/changelog-reminder.yml @@ -0,0 +1,11 @@ +name: Changelog Reminder +on: + pull_request: + types: [assigned, opened, synchronize, reopened, labeled, unlabeled] + branches: + - main + +jobs: + changelog_reminder: + uses: babylonlabs-io/.github/.github/workflows/reusable_changelog_reminder.yml@v0.7.0 + secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20e7e5c14..2416f140f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,10 +18,6 @@ jobs: run-integration-tests: false run-lint: true - changelog_reminder: - uses: babylonlabs-io/.github/.github/workflows/reusable_changelog_reminder.yml@v0.7.0 - secrets: inherit - docker_pipeline: uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.7.0 secrets: inherit diff --git a/.gitignore b/.gitignore index 1919b38b7..ad778be8e 100644 --- a/.gitignore +++ b/.gitignore @@ -214,4 +214,5 @@ docs/diagrams/plantuml.jar .testnets/ .testnet/ mytestnet/ -output/ \ No newline at end of file +output/ +dist/ diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 000000000..b03e3ffd8 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,62 @@ +project_name: babylon + +builds: + - id: babylond-linux-amd64 + main: ./cmd/babylond/main.go + binary: babylond + hooks: + pre: + - wget https://github.com/CosmWasm/wasmvm/releases/download/{{ .Env.COSMWASM_VERSION }}/libwasmvm.x86_64.so -O /lib/libwasmvm_muslc.x86_64.so + goos: + - linux + goarch: + - amd64 + env: + - GO111MODULE=on + flags: + - -mod=readonly + - -trimpath + ldflags: + - -X github.com/cosmos/cosmos-sdk/version.Name=babylon + - -X github.com/cosmos/cosmos-sdk/version.AppName=babylond + - -X github.com/cosmos/cosmos-sdk/version.Version={{ .Version }} + - -X github.com/cosmos/cosmos-sdk/version.Commit={{ .Commit }} + - -X github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger,muslc,osusergo + - -w -s + - -linkmode=external + tags: + - netgo + - ledger + - muslc + - osusergo + +archives: + - id: zipped + builds: + - babylond-linux-amd64 + name_template: "{{.ProjectName}}-{{ .Version }}-{{ .Os }}-{{ .Arch }}" + format: tar.gz + files: + - none* + - id: binaries + builds: + - babylond-linux-amd64 + name_template: "{{.ProjectName}}-{{ .Version }}-{{ .Os }}-{{ .Arch }}" + format: binary + files: + - none* + +checksum: + name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" + algorithm: sha256 + +release: + github: + owner: babylonlabs-io + name: babylon + +# Docs: https://goreleaser.com/customization/changelog/ +changelog: + disable: true + +dist: dist diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ba629a33..2d9603be6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Misc Improvements +* [#170](https://github.com/babylonlabs-io/babylon/pull/170) Go releaser setup * [#168](https://github.com/babylonlabs-io/babylon/pull/168) Remove devdoc from Makefile and remove unnecessary gin replace. diff --git a/Makefile b/Makefile index a82addd1c..43c3d780a 100644 --- a/Makefile +++ b/Makefile @@ -491,3 +491,57 @@ diagrams: ## Generate diagrams for documentation update-changelog: ## Update the project changelog @echo ./scripts/update_changelog.sh $(since_tag) $(upcoming_tag) ./scripts/update_changelog.sh $(since_tag) $(upcoming_tag) + +############################################################################### +### Release ### +############################################################################### + +# The below is adapted from https://github.com/osmosis-labs/osmosis/blob/main/Makefile +GO_VERSION := $(shell grep -E '^go [0-9]+\.[0-9]+' go.mod | awk '{print $$2}') +GORELEASER_IMAGE := ghcr.io/goreleaser/goreleaser-cross:v$(GO_VERSION) +COSMWASM_VERSION := $(shell go list -m github.com/CosmWasm/wasmvm/v2 | sed 's/.* //') + +.PHONY: release-dry-run release-snapshot release +release-dry-run: + docker run \ + --rm \ + -e COSMWASM_VERSION=$(COSMWASM_VERSION) \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v `pwd`:/go/src/babylon \ + -w /go/src/babylon \ + $(GORELEASER_IMAGE) \ + release \ + --clean \ + --skip=publish + +release-snapshot: + docker run \ + --rm \ + -e COSMWASM_VERSION=$(COSMWASM_VERSION) \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v `pwd`:/go/src/babylon \ + -w /go/src/babylon \ + $(GORELEASER_IMAGE) \ + release \ + --clean \ + --snapshot \ + --skip=publish,validate + +# NOTE: By default, the CI will handle the release process. +# this is for manually releasing. +ifdef GITHUB_TOKEN +release: + docker run \ + --rm \ + -e GITHUB_TOKEN=$(GITHUB_TOKEN) \ + -e COSMWASM_VERSION=$(COSMWASM_VERSION) \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v `pwd`:/go/src/babylon \ + -w /go/src/babylon \ + $(GORELEASER_IMAGE) \ + release \ + --clean +else +release: + @echo "Error: GITHUB_TOKEN is not defined. Please define it before running 'make release'." +endif \ No newline at end of file diff --git a/RELEASE_PROCESS.md b/RELEASE_PROCESS.md index a1a846d09..d5c61b57c 100644 --- a/RELEASE_PROCESS.md +++ b/RELEASE_PROCESS.md @@ -110,6 +110,10 @@ git pull --tags git tag -s -a v0.10.0-rc.0 -m "Version v0.10.0-rc.0" ``` + +With every tag, the Github action will use the `goreleaser` tool to create a +release, including artifacts and their checksums. + ## Patch Release Procedure A _patch release_ is an increment of the patch number (eg: `v10.0.0` → `v10.0.1`).