version: 2
before:
  hooks:
    - go mod download
    - go mod tidy
builds:
  - id: ntfy_linux_amd64
    binary: ntfy
    env:
      - CGO_ENABLED=1 # required for go-sqlite3
    tags: [ sqlite_omit_load_extension,osusergo,netgo ]
    ldflags:
      - "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ linux ]
    goarch: [ amd64 ]
  - id: ntfy_linux_armv6
    binary: ntfy
    env:
      - CGO_ENABLED=1 # required for go-sqlite3
      - CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
    tags: [ sqlite_omit_load_extension,osusergo,netgo ]
    ldflags:
      - "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ linux ]
    goarch: [ arm ]
    goarm: [ 6 ]
  - id: ntfy_linux_armv7
    binary: ntfy
    env:
      - CGO_ENABLED=1 # required for go-sqlite3
      - CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
    tags: [ sqlite_omit_load_extension,osusergo,netgo ]
    ldflags:
      - "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ linux ]
    goarch: [ arm ]
    goarm: [ 7 ]
  - id: ntfy_linux_arm64
    binary: ntfy
    env:
      - CGO_ENABLED=1 # required for go-sqlite3
      - CC=aarch64-linux-gnu-gcc # apt install gcc-aarch64-linux-gnu
    tags: [ sqlite_omit_load_extension,osusergo,netgo ]
    ldflags:
      - "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ linux ]
    goarch: [ arm64 ]
  - id: ntfy_windows_amd64
    binary: ntfy
    env:
      - CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
    tags: [ noserver ] # don't include server files
    ldflags:
      - "-X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ windows ]
    goarch: [ amd64 ]
  - id: ntfy_darwin_all
    binary: ntfy
    env:
      - CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
    tags: [ noserver ] # don't include server files
    ldflags:
      - "-X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
    goos: [ darwin ]
    goarch: [ amd64, arm64 ] # will be combined to "universal binary" (see below)
nfpms:
  - package_name: ntfy
    homepage: https://heckel.io/ntfy
    maintainer: Philipp C. Heckel <philipp.heckel@gmail.com>
    description: Simple pub-sub notification service
    license: Apache 2.0
    formats:
      - deb
      - rpm
    bindir: /usr/bin
    contents:
      - src: server/server.yml
        dst: /etc/ntfy/server.yml
        type: "config|noreplace"
      - src: server/ntfy.service
        dst: /lib/systemd/system/ntfy.service
      - src: client/client.yml
        dst: /etc/ntfy/client.yml
        type: "config|noreplace"
      - src: client/ntfy-client.service
        dst: /lib/systemd/system/ntfy-client.service
      - src: client/user/ntfy-client.service
        dst: /lib/systemd/user/ntfy-client.service
      - dst: /var/cache/ntfy
        type: dir
      - dst: /var/cache/ntfy/attachments
        type: dir
      - dst: /var/lib/ntfy
        type: dir
      - dst: /usr/share/ntfy/logo.png
        src: web/public/static/images/ntfy.png
    scripts:
      preinstall: "scripts/preinst.sh"
      postinstall: "scripts/postinst.sh"
      preremove: "scripts/prerm.sh"
      postremove: "scripts/postrm.sh"
archives:
  - id: ntfy_linux
    ids:
      - ntfy_linux_amd64
      - ntfy_linux_armv6
      - ntfy_linux_armv7
      - ntfy_linux_arm64
    wrap_in_directory: true
    files:
      - LICENSE
      - README.md
      - server/server.yml
      - server/ntfy.service
      - client/client.yml
      - client/ntfy-client.service
      - client/user/ntfy-client.service
  - id: ntfy_windows
    ids:
      - ntfy_windows_amd64
    formats: [ zip ]
    wrap_in_directory: true
    files:
      - LICENSE
      - README.md
      - client/client.yml
  - id: ntfy_darwin
    ids:
      - ntfy_darwin_all
    wrap_in_directory: true
    files:
      - LICENSE
      - README.md
      - client/client.yml
universal_binaries:
  - id: ntfy_darwin_all
    replace: true
    name_template: ntfy
checksum:
  name_template: 'checksums.txt'
snapshot:
  version_template: "{{ .Tag }}-next"
changelog:
  sort: asc
  filters:
    exclude:
      - '^docs:'
      - '^test:'
dockers:
  - image_templates:
      - &amd64_image "binwiederhier/ntfy:{{ .Tag }}-amd64"
    use: buildx
    dockerfile: Dockerfile
    goarch: amd64
    build_flag_templates:
      - "--platform=linux/amd64"
  - image_templates:
      - &arm64v8_image "binwiederhier/ntfy:{{ .Tag }}-arm64v8"
    use: buildx
    dockerfile: Dockerfile-arm
    goarch: arm64
    build_flag_templates:
      - "--platform=linux/arm64/v8"
  - image_templates:
      - &armv7_image "binwiederhier/ntfy:{{ .Tag }}-armv7"
    use: buildx
    dockerfile: Dockerfile-arm
    goarch: arm
    goarm: 7
    build_flag_templates:
      - "--platform=linux/arm/v7"
  - image_templates:
      - &armv6_image "binwiederhier/ntfy:{{ .Tag }}-armv6"
    use: buildx
    dockerfile: Dockerfile-arm
    goarch: arm
    goarm: 6
    build_flag_templates:
      - "--platform=linux/arm/v6"
docker_manifests:
  - name_template: "binwiederhier/ntfy:latest"
    image_templates:
      - *amd64_image
      - *arm64v8_image
      - *armv7_image
      - *armv6_image
  - name_template: "binwiederhier/ntfy:{{ .Tag }}"
    image_templates:
      - *amd64_image
      - *arm64v8_image
      - *armv7_image
      - *armv6_image
  - name_template: "binwiederhier/ntfy:v{{ .Major }}"
    image_templates:
      - *amd64_image
      - *arm64v8_image
      - *armv7_image
      - *armv6_image
  - name_template: "binwiederhier/ntfy:v{{ .Major }}.{{ .Minor }}"
    image_templates:
      - *amd64_image
      - *arm64v8_image
      - *armv7_image
      - *armv6_image