version: 2

env:
  - GO111MODULE=on
  - CGO_ENABLED=0

before:
  hooks:
    - go mod tidy

builds:
  - binary: doggo
    id: cli
    ldflags:
      - -s -w -X "main.buildVersion={{ .Tag }} ({{ .ShortCommit }} {{ .Date }})"
    main: ./cmd/doggo/
    goos:
      - linux
      - darwin
      - windows
      - freebsd
      - openbsd
      - netbsd
    goarch:
      - amd64
      - arm64
      - "386"
      - arm
    goarm:
      - "7"
    ignore:
      - goos: windows
        goarch: arm64
      - goos: windows
        goarm: "7"

  - binary: doggo-web.bin
    id: web
    goos:
      - linux
    goarch:
      - amd64
    ldflags:
      - -s -w -X "main.buildVersion={{ .Tag }} ({{ .ShortCommit }} {{ .Date }})"
    main: ./web/
    hooks:
      pre: sh -c 'cd ./docs/ && yarn && yarn build'

archives:
  - id: cli
    ids:
      - cli
    format_overrides:
      - goos: windows
        formats:
          - zip
    name_template: >-
      {{ .ProjectName }}-
      {{- .Os }}-
      {{- if eq .Arch "amd64" }}x86_64
      {{- else if eq .Arch "arm64" }}aarch64
      {{- else if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
    wrap_in_directory: false
    builds_info:
      owner: root
      group: root
      mode: 0755
    files:
      - src: README.md
        info:
          owner: root
          group: root
          mode: 0644
      - src: LICENSE
        info:
          owner: root
          group: root
          mode: 0644

  - id: web
    ids:
      - web
    wrap_in_directory: true
    files:
      - README.md
      - LICENSE
      - config-api-sample.toml
      - src: "docs/dist/*"
        dst: "docs"
    name_template: "{{ .ProjectName }}_web_{{ .Version }}_{{ .Os }}_{{ .Arch }}"

changelog:
  sort: asc
  use: github
  filters:
    exclude:
      - "^docs:"
      - "^test:"
  groups:
    - title: "New Features"
      regexp: "^.*feat[(\\w)]*:+.*$"
      order: 0
    - title: "Bug fixes"
      regexp: "^.*fix[(\\w)]*:+.*$"
      order: 10
    - title: Others
      order: 999

dockers:
  - image_templates:
      - "ghcr.io/mr-karan/doggo:{{ .Tag }}"
      - "ghcr.io/mr-karan/doggo:latest"
    goarch: amd64
    ids:
      - cli
    dockerfile: cli.Dockerfile
    use: buildx
    build_flag_templates:
      - "--build-arg"
      - "ARCH=amd64"
      - --platform=linux/amd64
      - --label=org.opencontainers.image.title={{ .ProjectName }}
      - --label=org.opencontainers.image.source={{ .GitURL }}
      - --label=org.opencontainers.image.version=v{{ .Version }}
      - --label=org.opencontainers.image.created={{ .Date }}
      - --label=org.opencontainers.image.revision={{ .FullCommit }}

  - image_templates:
      - "ghcr.io/mr-karan/doggo:{{ .Tag }}-arm64v8"
      - "ghcr.io/mr-karan/doggo:latest-arm64v8"
    ids:
      - cli
    goarch: arm64
    dockerfile: cli.Dockerfile
    build_flag_templates:
      - "--build-arg"
      - "ARCH=arm64v8"
      - --platform=linux/arm64
      - --label=org.opencontainers.image.title={{ .ProjectName }}
      - --label=org.opencontainers.image.source={{ .GitURL }}
      - --label=org.opencontainers.image.version=v{{ .Version }}
      - --label=org.opencontainers.image.created={{ .Date }}
      - --label=org.opencontainers.image.revision={{ .FullCommit }}

  - image_templates:
      - "ghcr.io/mr-karan/doggo-web:{{ .Tag }}"
      - "ghcr.io/mr-karan/doggo-web:latest"
    ids:
      - web
    goarch: amd64
    dockerfile: web.Dockerfile
    use: buildx
    extra_files:
      - config-api-sample.toml
      - docs/dist/
