diff --git a/.github/dependabot.yml b/.github/dependabot.yaml similarity index 100% rename from .github/dependabot.yml rename to .github/dependabot.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yaml similarity index 100% rename from .github/workflows/ci.yml rename to .github/workflows/ci.yaml diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yaml similarity index 100% rename from .github/workflows/e2e.yml rename to .github/workflows/e2e.yaml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yaml similarity index 100% rename from .github/workflows/lint.yml rename to .github/workflows/lint.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..b8bfa84 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,36 @@ +name: goreleaser + +on: + push: + tags: + - '*' + +permissions: + contents: write + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - run: git fetch --force --tags + - uses: actions/setup-go@v4 + with: + go-version: stable + # More assembly might be required: Docker logins, GPG, etc. It all depends + # on your needs. + # ${{ github.ref_name }} or $GITHUB_REF_NAME or ${{env.GITHUB_REF_NAME}} currently. + - run: ./scripts/release-notes.sh ${{github.ref_name}} > ./release_notes.txt + - uses: goreleaser/goreleaser-action@v4 + with: + # either 'goreleaser' (default) or 'goreleaser-pro': + distribution: goreleaser + version: latest + args: release --clean --release-notes=./release_notes.txt + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' + # distribution: + # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} diff --git a/.gitignore b/.gitignore index 69d484b..3690cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ # Local testing .envrc *.FAIL + +dist/ +release_notes.txt diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..09e3b94 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,34 @@ +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +# +# See https://goreleaser.com/customization/ for more information. +project_name: goose + +before: + hooks: + # You may remove this if you don't use go modules. + - go mod tidy +builds: + - env: + - CGO_ENABLED=0 + binary: goose + main: ./cmd/goose + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - arm64 + ldflags: + - -s -w + +archives: + - format: binary + name_template: >- + {{ .ProjectName }}_{{- tolower .Os }}_{{- if eq .Arch "amd64" }}x86_64{{- else }}{{ .Arch }}{{ end }} +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ incpatch .Version }}-next" +changelog: + use: github-native diff --git a/.goreleaser.yml b/.goreleaser.yml deleted file mode 100644 index 0f2efdc..0000000 --- a/.goreleaser.yml +++ /dev/null @@ -1,51 +0,0 @@ -# Documentation at https://goreleaser.com -project_name: goose - -gomod: - proxy: true - -builds: - - env: - - CGO_ENABLED=0 - main: ./cmd/goose - binary: goose - goos: - - linux - - windows - - darwin - goarch: - - amd64 - - arm64 - # Custom ldflags templates. - # Default is `-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} -X main.builtBy=goreleaser`. - ldflags: - - -s -w - -# You can disable this pipe in order to not upload any artifacts. -# Defaults to false. -release: - disable: false - -archives: - - replacements: - 386: i386 - amd64: x86_64 - name_template: "{{ tolower .Binary }}_{{ tolower .Os }}_{{ tolower .Arch }}" - format: binary - -checksum: - name_template: "checksums.txt" - -snapshot: - name_template: "{{ incpatch .Version }}-next" - -changelog: - use: github - sort: asc - # Commit messages matching the regexp listed here will be removed from - # the changelog. - filters: - exclude: - - "^docs:" - - "^test:" -# TODO(mf): add docker support? diff --git a/CHANGELOG.md b/CHANGELOG.md index e37f387..c0542b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## [Unreleased] -- No changes yet. +- Add pre-built binaries with GoReleaser. ## [v3.13.0] - 2023-06-29 diff --git a/README.md b/README.md index ea1538d..9445077 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# goose [](https://github.com/pressly/goose/actions/workflows/ci.yml) [](https://pkg.go.dev/github.com/pressly/goose/v3) +# goose [](https://github.com/pressly/goose/actions/workflows/ci.yaml) [](https://pkg.go.dev/github.com/pressly/goose/v3)
diff --git a/cmd/goose/main.go b/cmd/goose/main.go
index 359299f..af29bca 100644
--- a/cmd/goose/main.go
+++ b/cmd/goose/main.go
@@ -8,7 +8,6 @@ import (
"log"
"os"
"path/filepath"
- "runtime/debug"
"sort"
"strconv"
"strings"
@@ -27,7 +26,7 @@ var (
table = flags.String("table", "goose_db_version", "migrations table name")
verbose = flags.Bool("v", false, "enable verbose mode")
help = flags.Bool("h", false, "print help")
- version = flags.Bool("version", false, "print version")
+ versionFlag = flags.Bool("version", false, "print version")
certfile = flags.String("certfile", "", "file path to root CA's certificates in pem format (only support on mysql)")
sequential = flags.Bool("s", false, "use sequential numbering for new migrations")
allowMissing = flags.Bool("allow-missing", false, "applies missing (out-of-order) migrations")
@@ -37,7 +36,11 @@ var (
noColor = flags.Bool("no-color", false, "disable color output (NO_COLOR env variable supported)")
)
var (
- gooseVersion = "v3.14.0-dev"
+ // These variables are populated via GoReleaser ldflags.
+ // See https://goreleaser.com/cookbooks/using-main.version/
+ version = "(devel)"
+ // commit = "none"
+ // date = "unknown"
)
func main() {
@@ -47,12 +50,8 @@ func main() {
return
}
- if *version {
- buildInfo, ok := debug.ReadBuildInfo()
- if ok && buildInfo != nil && buildInfo.Main.Version != "(devel)" {
- gooseVersion = buildInfo.Main.Version
- }
- fmt.Printf("goose version: %s\n", gooseVersion)
+ if *versionFlag {
+ fmt.Printf("goose version: %s\n", version)
return
}
if *verbose {
diff --git a/scripts/release-notes.sh b/scripts/release-notes.sh
new file mode 100755
index 0000000..ec7fed6
--- /dev/null
+++ b/scripts/release-notes.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+set -euo pipefail
+
+# Check if the required argument is provided
+if [ $# -lt 1 ]; then
+ echo "Usage: $0