# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
project_name: dnscontrol
version: 2
builds:
  -
    id: build
    env:
      - CGO_ENABLED=0
      - GO111MODULE=on
    goos:
      - linux
      - windows
      - darwin
      - freebsd
# List of combinations of GOOS + GOARCH + GOARM to ignore.
    ignore:
      - goos: linux
        goarch: "386"
      - goos: windows
        goarch: "386"
      - goos: freebsd
        goarch: "386"
    ldflags:
      - -linkmode=internal -s -w
      - -X main.version={{ .Version }}
before:
  hooks:
    - go fmt ./...
    - go mod tidy
    - go generate ./...
changelog:
  sort: asc
  use: github
  groups:
    - title: 'Breaking changes:'
      regexp: "(?i)^.*breaking[(\\w)]*:+.*$"
      order: 0
    - title: 'Major features:'
      regexp: "(?i)^.*(major|new provider|feature)[(\\w)]*:+.*$"
      order: 1
    - title: 'Provider-specific changes:'
      regexp: "(?i)((akamaiedge|autodns|axfrd|azure|azure_private_dns|bind|bunnydns|cloudflare|cloudflareapi_old|cloudns|cscglobal|desec|digitalocean|dnsimple|dnsmadeeasy|doh|domainnameshop|dynadot|easyname|exoscale|gandi|gcloud|gcore|hedns|hetzner|hexonet|hostingde|huaweicloud|inwx|linode|loopia|luadns|msdns|mythicbeasts|namecheap|namedotcom|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|softlayer|transip|vultr).*:)+.*"
      order: 2
    - title: 'Documentation:'
      regexp: "(?i)^.*(docs)[(\\w)]*:+.*$"
      order: 3
    - title: 'CI/CD:'
      regexp: "(?i)^.*(build|ci|cicd)[(\\w)]*:+.*$"
      order: 4
    - title: 'Dependencies:'
      regexp: "(?i)^.*Build\\(deps\\)*:+.*$|(?i)^.*update deps+.*$"
      order: 5
    - title: 'Other changes and improvements:'
      order: 9
    - title: 'Deprecation warnings:'
      regexp: "(?i)^.*Deprecate[(\\w)]*:+.*$"
      order: 10
  filters:
    exclude:
    - '^test:'
    - Merge pull request
    - Merge branch
archives:
  - format_overrides:
    - goos: windows
      format: zip
universal_binaries:
  -
    replace: true
    id: build

nfpms:
  - id: packages_rpm
    file_name_template: >-
      {{ .ProjectName }}-
      {{- .Version }}.
      {{- if eq .Arch "386" }}i386
      {{- else if eq .Arch "amd64" }}x86_64
      {{- else }}{{ .Arch }}{{ end }}
    homepage:  https://docs.dnscontrol.org/
    description: "DNSControl: Infrastructure as Code for DNS Zones"
    maintainer: 'Tom Limoncelli <tlimoncelli@stackoverflow.com>'
    license: MIT
    formats:
    - rpm
  - id: packages_deb
    file_name_template: >-
      {{ .ProjectName }}-
      {{- .Version }}.
      {{- if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
    homepage:  https://docs.dnscontrol.org/
    description: "DNSControl: Infrastructure as Code for DNS Zones"
    maintainer: 'Tom Limoncelli <tlimoncelli@stackoverflow.com>'
    license: MIT
    formats:
    - deb
dockers:
  - image_templates:
    - &amd_image "stackexchange/{{.ProjectName}}:{{ .Version }}-amd64"
    - &amd_image_ghcr "ghcr.io/stackexchange/{{.ProjectName}}:{{ .Version }}-amd64"
    goos: linux
    goarch: amd64
    use: buildx
    ids:
    - build
    build_flag_templates:
    - "--pull"
    - "--platform=linux/amd64"
    - "--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 }}"
  - image_templates:
    - &arm_image "stackexchange/{{.ProjectName}}:{{ .Version }}-arm64"
    - &arm_image_ghcr "ghcr.io/stackexchange/{{.ProjectName}}:{{ .Version }}-arm64"
    goos: linux
    goarch: arm64
    use: buildx
    ids:
    - build
    build_flag_templates:
    - "--pull"
    - "--platform=linux/arm64"
    - "--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 }}"
docker_manifests:
  - name_template: "stackexchange/{{.ProjectName}}:{{ .Version }}"
    image_templates:
      - *amd_image
      - *arm_image
  - name_template: "ghcr.io/stackexchange/{{.ProjectName}}:{{ .Version }}"
    image_templates:
      - *amd_image_ghcr
      - *arm_image_ghcr
  - name_template: "stackexchange/{{.ProjectName}}:latest"
    skip_push: auto
    image_templates:
      - *amd_image
      - *arm_image
  - name_template: "ghcr.io/stackexchange/{{.ProjectName}}:latest"
    skip_push: auto
    image_templates:
      - *amd_image_ghcr
      - *arm_image_ghcr
checksum:
  name_template: 'checksums.txt'
snapshot:
  name_template: "{{ incpatch .Version }}-next"

release:
  draft: true
  prerelease: auto
  mode: append
  footer: |
    ## Deprecation warnings

    > [!WARNING]
    > - **REV() will switch from RFC2317 to RFC4183 in v5.0.**  This is a breaking change. Warnings are output if your configuration is affected. No date has been announced for v5.0. See https://docs.dnscontrol.org/language-reference/top-level-functions/revcompat
    > - **MSDNS maintainer needed!** Without a new volunteer, this DNS provider will lose support after April 2025. See https://github.com/StackExchange/dnscontrol/issues/2878
    > - **NAMEDOTCOM and SOFTLAYER need maintainers!** These providers have no maintainer. Maintainers respond to PRs and fix bugs in a timely manner, and try to stay on top of protocol changes.
    > - **get-certs/ACME support is frozen and will be removed without notice between now and July 2025.** It has been unsupported since December 2022.  If you don't use this feature, do not start. If you do use this feature, migrate ASAP.  See discussion in [issues/1400](https://github.com/StackExchange/dnscontrol/issues/1400)

    ## Install

    #### macOS and Linux

    ##### Install with [Homebrew](https://brew.sh) (recommended)

    ```shell
    brew install dnscontrol
    ```

    ##### Install with [MacPorts](https://www.macports.org)

    ```shell
    sudo port install dnscontrol
    ```

    ##### Using with [Docker](https://www.docker.com)

    You can use the Docker image from [Docker hub](https://hub.docker.com/r/stackexchange/dnscontrol/) or [GitHub Container Registry](https://github.com/stackexchange/dnscontrol/pkgs/container/dnscontrol).

    ```shell
    docker run --rm -it -v "$(pwd):/dns" ghcr.io/stackexchange/dnscontrol preview
    ```

    #### Anywhere else

    Alternatively, you can install the latest binary (or the apt/rpm/deb/archlinux package) from this page.

    Or, if you have Go installed, you can install the latest version of DNSControl with the following command:

    ```shell
    go install github.com/StackExchange/dnscontrol/v4@main
    ```

    ## Update

    Update to the latest version depends on how you choose to install `dnscontrol` on your machine.

    #### Update with [Homebrew](https://brew.sh)

    ```shell
    brew upgrade dnscontrol
    ```

    ##### Install with [MacPorts](https://www.macports.org)

    ```shell
    sudo port upgrade dnscontrol
    ```

    Alternatively, you can grab the latest binary (or the apt/rpm/deb package) from this page.
