.goreleaser.yml

  1# This is the configuration file for GoReleaser.
  2# It defines how your project should be built, packaged, and released.
  3# For more information, see: https://goreleaser.com/customization/
  4version: 1
  5
  6# The 'before' hook runs commands before the build process starts.
  7before:
  8  hooks:
  9    # Tidy up the go.mod file to ensure all dependencies are clean.
 10    - go mod tidy
 11
 12# 'builds' defines the matrix of binaries to create.
 13builds:
 14  - # The main build configuration for your CLI.
 15    # The binary name will be 'email-cli'.
 16    id: "email-cli"
 17    # The main entrypoint of your application.
 18    main: .
 19    # The Go compiler to use.
 20    goos:
 21      - linux
 22      - darwin # macOS
 23    goarch:
 24      - amd64 # Intel
 25      - arm64 # Apple Silicon
 26    # Environment variables to pass to the Go compiler.
 27    env:
 28      - CGO_ENABLED=0
 29    # Linker flags to strip debug information and reduce binary size.
 30    ldflags:
 31      - -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}
 32
 33# 'archives' defines how to package the built binaries.
 34archives:
 35  - # The archive configuration.
 36    # This will create .tar.gz files.
 37    format: tar.gz
 38    # A template for the archive file names.
 39    # e.g., email-cli_1.2.3_darwin_amd64.tar.gz
 40    name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
 41    # Files to include in the archive.
 42    files:
 43      - LICENSE
 44      - README.md
 45
 46# 'checksum' creates a file with SHA256 checksums for all artifacts.
 47checksum:
 48  name_template: "checksums.txt"
 49
 50# 'snapshot' configures how test releases are named when running on non-tagged commits.
 51snapshot:
 52  name_template: "{{ .Tag }}-next"
 53
 54# 'changelog' configures the automatic generation of release notes.
 55changelog:
 56  sort: asc
 57  filters:
 58    # Exclude commit messages that match these patterns from the changelog.
 59    exclude:
 60      - "^docs:"
 61      - "^test:"
 62      - "Merge branch"
 63
 64# 'release' configures the GitHub Release creation.
 65release:
 66  # If set to true, GoReleaser will automatically draft a new release.
 67  # Set to false to automatically publish the release.
 68  draft: false
 69  # If set to true, will mark the release as a pre-release.
 70  prerelease: auto
 71
 72# 'brews' configures the Homebrew tap integration.
 73brews:
 74  - # The configuration for your Homebrew tap.
 75    # The name of your formula file will be 'email-cli.rb'.
 76    name: email-cli
 77    # The GitHub repository for your Homebrew tap.
 78    tap:
 79      owner: andrinoff
 80      name: homebrew-email-cli
 81      # The token to use for pushing to the tap repository.
 82      # It uses the secret you'll create in your repository settings.
 83      token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}"
 84
 85    # The commit author for the tap update.
 86    commit_author:
 87      name: goreleaserbot
 88      email: bot@goreleaser.com
 89
 90    # A description for your formula.
 91    description: "A beautiful and functional email client for your terminal."
 92    # The homepage URL for your formula.
 93    homepage: "https://github.com/andrinoff/email-cli"
 94
 95    # The dependencies for your formula.
 96    # Since it's a pre-compiled binary, there are no runtime dependencies.
 97    dependencies: []
 98
 99    # The test block for your formula.
100    # This command will be run by `brew test email-cli`.
101    test: |
102      system "#{bin}/email-cli --version"
103
104    # The installation instructions for your formula.
105    # This tells Homebrew to just install the binary.
106    install: |
107      bin.install "email-cli"