# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
# vim: set ts=2 sw=2 tw=0 fo=jcroql
version: 1

env:
  - GO111MODULE=on

before:
  hooks:
    - go mod tidy
    - ./scripts/completions.sh
    - ./scripts/manpages.sh

snapshot:
  name_template: "{{ incpatch .Version }}-next"

gomod:
  proxy: true

report_sizes: true

git:
  ignore_tags:
    - "{{ if not .IsNightly }}nightly{{ end }}"

metadata:
  mod_timestamp: "{{ .CommitTimestamp }}"

builds:
  - env:
      - CGO_ENABLED=0
    goos:
      - linux
      - darwin
      - windows
    goarch:
      - "386"
      - amd64
      - arm
      - arm64
      - ppc64
    goarm:
      - "7"
    ignore:
      - goos: windows
        goarch: arm
    mod_timestamp: "{{ .CommitTimestamp }}"
    flags:
      - -trimpath
    ldflags:
      - -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{ .CommitDate }} -X main.builtBy=goreleaser -X main.treeState={{ .IsGitDirty }}

universal_binaries:
  - replace: false

# temporarely disables until we add better filters for platforms et al, and test more.
# upx:
#   - enabled: true

checksum:
  name_template: "checksums.txt"

changelog:
  sort: asc
  use: github
  filters:
    exclude:
      - "^test:"
      - "^chore"
      - "merge conflict"
      - Merge pull request
      - Merge remote-tracking branch
      - Merge branch
      - go mod tidy
  groups:
    - title: Dependency updates
      regexp: '^.*?(feat|fix)\(deps\)!?:.+$'
      order: 300
    - title: "New Features"
      regexp: '^.*?feat(\([[:word:]]+\))??!?:.+$'
      order: 100
    - title: "Security updates"
      regexp: '^.*?sec(\([[:word:]]+\))??!?:.+$'
      order: 150
    - title: "Bug fixes"
      regexp: '^.*?fix(\([[:word:]]+\))??!?:.+$'
      order: 200
    - title: "Documentation updates"
      regexp: ^.*?doc(\([[:word:]]+\))??!?:.+$
      order: 400
    - title: "Build process updates"
      regexp: ^.*?build(\([[:word:]]+\))??!?:.+$
      order: 400
    - title: Other work
      order: 9999

dockers:
  - image_templates:
      - "goreleaser/goreleaser:v{{ .Version }}-amd64"
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-amd64"
    dockerfile: Dockerfile
    use: buildx
    build_flag_templates:
      - "--pull"
      - "--label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/goreleaser/goreleaser/main/README.md"
      - "--label=io.artifacthub.package.logo-url=https://goreleaser.com/static/avatar.png"
      - '--label=io.artifacthub.package.maintainers=[{"name":"Carlos Alexandro Becker","email":"carlos@carlosbecker.dev"}]'
      - "--label=io.artifacthub.package.license=MIT"
      - "--label=org.opencontainers.image.description=Deliver Go binaries as fast and easily as possible"
      - "--label=org.opencontainers.image.created={{.Date}}"
      - "--label=org.opencontainers.image.name={{.ProjectName}}"
      - "--label=org.opencontainers.image.revision={{.FullCommit}}"
      - "--label=org.opencontainers.image.version={{.Version}}"
      - "--label=org.opencontainers.image.source={{.GitURL}}"
      - "--platform=linux/amd64"
    extra_files:
      - scripts/entrypoint.sh
  - image_templates:
      - "goreleaser/goreleaser:v{{ .Version }}-arm64"
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-arm64"
    dockerfile: Dockerfile
    use: buildx
    build_flag_templates:
      - "--pull"
      - "--label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/goreleaser/goreleaser/main/README.md"
      - "--label=io.artifacthub.package.logo-url=https://goreleaser.com/static/avatar.png"
      - '--label=io.artifacthub.package.maintainers=[{"name":"Carlos Alexandro Becker","email":"carlos@carlosbecker.dev"}]'
      - "--label=io.artifacthub.package.license=MIT"
      - "--label=org.opencontainers.image.description=Deliver Go binaries as fast and easily as possible"
      - "--label=org.opencontainers.image.created={{.Date}}"
      - "--label=org.opencontainers.image.name={{.ProjectName}}"
      - "--label=org.opencontainers.image.revision={{.FullCommit}}"
      - "--label=org.opencontainers.image.version={{.Version}}"
      - "--label=org.opencontainers.image.source={{.GitURL}}"
      - "--platform=linux/arm64"
    goarch: arm64
    extra_files:
      - scripts/entrypoint.sh

docker_manifests:
  - name_template: "goreleaser/goreleaser:v{{ .Version }}"
    image_templates:
      - "goreleaser/goreleaser:v{{ .Version }}-amd64"
      - "goreleaser/goreleaser:v{{ .Version }}-arm64"
  - name_template: "ghcr.io/goreleaser/goreleaser:v{{ .Version }}"
    image_templates:
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-amd64"
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-arm64"
  - name_template: "{{ if not .IsNightly }}goreleaser/goreleaser:latest{{ end }}"
    image_templates:
      - "goreleaser/goreleaser:v{{ .Version }}-amd64"
      - "goreleaser/goreleaser:v{{ .Version }}-arm64"
  - name_template: "{{ if not .IsNightly }}ghcr.io/goreleaser/goreleaser:latest{{ end }}"
    image_templates:
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-amd64"
      - "ghcr.io/goreleaser/goreleaser:v{{ .Version }}-arm64"

archives:
  - name_template: >-
      {{- .ProjectName }}_
      {{- title .Os }}_
      {{- if eq .Arch "amd64" }}x86_64
      {{- else if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
      {{- if .Arm }}v{{ .Arm }}{{ end -}}
    format_overrides:
      - goos: windows
        format: zip
    builds_info:
      group: root
      owner: root
    files:
      - README.md
      - LICENSE.md
      - completions/*
      - manpages/*

brews:
  - repository:
      owner: goreleaser
      name: homebrew-tap
    folder: Formula
    goarm: "7"
    homepage: https://goreleaser.com
    description: Deliver Go binaries as fast and easily as possible
    license: MIT
    test: |
      system "#{bin}/goreleaser -v"
    dependencies:
      - name: go
        type: optional
      - name: git
    conflicts:
      - goreleaser-pro
    extra_install: |-
      bash_completion.install "completions/goreleaser.bash" => "goreleaser"
      zsh_completion.install "completions/goreleaser.zsh" => "_goreleaser"
      fish_completion.install "completions/goreleaser.fish"
      man1.install "manpages/goreleaser.1.gz"

nix:
  - name: goreleaser
    repository:
      owner: goreleaser
      name: nur
    homepage: https://goreleaser.com
    description: Deliver Go binaries as fast and easily as possible
    path: pkgs/goreleaser/default.nix
    license: mit
    extra_install: |-
      installManPage ./manpages/goreleaser.1.gz
      installShellCompletion ./completions/*

winget:
  - name: goreleaser
    publisher: goreleaser
    license: MIT
    homepage: https://goreleaser.com
    short_description: Deliver Go binaries as fast and easily as possible
    repository:
      owner: goreleaser
      name: winget-pkgs
      branch: "goreleaser-{{.Version}}"
      pull_request:
        enabled: true
        draft: true
        base:
          owner: microsoft
          name: winget-pkgs
          branch: master

aurs:
  - homepage: https://goreleaser.com
    description: Deliver Go binaries as fast and easily as possible
    maintainers:
      - "Fernandez Ludovic <lfernandez dot dev at gmail dot com>"
      - "Carlos Alexandro Becker <carlos at becker dot software>"
    license: MIT
    private_key: "{{ .Env.AUR_KEY }}"
    git_url: "ssh://aur@aur.archlinux.org/goreleaser-bin.git"
    package: |-
      # bin
      install -Dm755 "./goreleaser" "${pkgdir}/usr/bin/goreleaser"

      # license
      install -Dm644 "./LICENSE.md" "${pkgdir}/usr/share/licenses/goreleaser/LICENSE"

      # completions
      mkdir -p "${pkgdir}/usr/share/bash-completion/completions/"
      mkdir -p "${pkgdir}/usr/share/zsh/site-functions/"
      mkdir -p "${pkgdir}/usr/share/fish/vendor_completions.d/"
      install -Dm644 "./completions/goreleaser.bash" "${pkgdir}/usr/share/bash-completion/completions/goreleaser"
      install -Dm644 "./completions/goreleaser.zsh" "${pkgdir}/usr/share/zsh/site-functions/_goreleaser"
      install -Dm644 "./completions/goreleaser.fish" "${pkgdir}/usr/share/fish/vendor_completions.d/goreleaser.fish"

      # man pages
      install -Dm644 "./manpages/goreleaser.1.gz" "${pkgdir}/usr/share/man/man1/goreleaser.1.gz"

scoops:
  - repository:
      owner: goreleaser
      name: scoop-bucket
    folder: bucket
    homepage: https://goreleaser.com
    description: Deliver Go binaries as fast and easily as possible
    license: MIT

nfpms:
  - file_name_template: "{{ .ConventionalFileName }}"
    id: packages
    homepage: https://goreleaser.com
    description: |-
      Deliver Go binaries as fast and easily as possible.
      GoReleaser allows you to release easily build, package, publish and
      announce to several places at one go.
    maintainer: Carlos Alexandro Becker <carlos@becker.software>
    license: MIT
    vendor: GoReleaser
    bindir: /usr/bin
    section: utils
    contents:
      - src: ./completions/goreleaser.bash
        dst: /usr/share/bash-completion/completions/goreleaser
        file_info:
          mode: 0644
      - src: ./completions/goreleaser.fish
        dst: /usr/share/fish/vendor_completions.d/goreleaser.fish
        file_info:
          mode: 0644
      - src: ./completions/goreleaser.zsh
        dst: /usr/share/zsh/vendor-completions/_goreleaser
        file_info:
          mode: 0644
      - src: ./manpages/goreleaser.1.gz
        dst: /usr/share/man/man1/goreleaser.1.gz
        file_info:
          mode: 0644
      - src: ./LICENSE.md
        dst: /usr/share/doc/goreleaser/copyright
        file_info:
          mode: 0644
    formats:
      - apk
      - deb
      - rpm
      - archlinux
    dependencies:
      - git
    recommends:
      - golang
    deb:
      lintian_overrides:
        - statically-linked-binary
        - changelog-file-missing-in-native-package

snapcrafts:
  - name_template: "{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
    summary: Deliver Go binaries as fast and easily as possible
    description: |
      GoReleaser builds Go binaries for several platforms, creates a GitHub
      release and then pushes a Homebrew formula to a repository. All that
      wrapped in your favorite CI.
    grade: stable
    confinement: classic
    publish: true
    disable: "{{ if .IsNightly }}true{{ end }}"

sboms:
  - artifacts: archive

signs:
  - cmd: cosign
    certificate: "${artifact}.pem"
    output: true
    artifacts: checksum
    args:
      - sign-blob
      - "--output-certificate=${certificate}"
      - "--output-signature=${signature}"
      - "${artifact}"
      - --yes

docker_signs:
  - cmd: cosign
    artifacts: manifests
    output: true
    args:
      - "sign"
      - "${artifact}@${digest}"
      - --yes

publishers:
  - name: fury.io
    ids:
      - packages
    env:
      - "FURY_TOKEN={{ .Env.FURY_TOKEN }}"
    cmd: ./scripts/fury-upload.sh {{ .ArtifactName }}
    disable: "{{ if .IsNightly }}true{{ end }}"

milestones:
  - close: true

release:
  name_template: "v{{ .Version }}"
  footer: |
    **Full Changelog**: https://github.com/goreleaser/goreleaser/compare/{{ .PreviousTag }}...{{ .Tag }}

    ## Helping out

    This release is only possible thanks to **all** the support of some **awesome people**!

    Want to be one of them?
    You can [sponsor](https://goreleaser.com/sponsors/), get a [Pro License](https://goreleaser.com/pro) or [contribute with code](https://goreleaser.com/contributing).

    ## Where to go next?

    * Find examples and commented usage of all options in our [website](https://goreleaser.com/intro/).
    * Reach out on [Discord](https://discord.gg/RGEBtg8vQ6) and [Twitter](https://twitter.com/goreleaser)!

    <a href="https://goreleaser.com"><img src="https://raw.githubusercontent.com/goreleaser/artwork/master/opencollective-header.png" with="100%" alt="GoReleaser logo"></a>

announce:
  twitter:
    enabled: false
    message_template: "GoReleaser {{ .Tag }} is out! Check it out: https://github.com/goreleaser/goreleaser/releases/tag/{{ .Tag }}"

  mastodon:
    enabled: true
    message_template: "#GoReleaser {{ .Tag }} is out! Check it out: https://github.com/goreleaser/goreleaser/releases/tag/{{ .Tag }}"
    server: https://fosstodon.org

  discord:
    enabled: true
    message_template: "GoReleaser {{ .Tag }} is out! Check it out: https://github.com/goreleaser/goreleaser/releases/tag/{{ .Tag }}"
