version: 2

# Project metadata
project_name: gohoarder

# Pre-release hooks
before:
  hooks:
    - go mod tidy

# Build configuration
# Binary builds for direct downloads (darwin/arm64, linux/amd64)
# Binaries use split mode to avoid CGO cross-compilation
builds:
  - id: gohoarder
    main: ./cmd/gohoarder
    binary: gohoarder
    env:
      - CGO_ENABLED=1
    tags:
      - fts5
    flags:
      - -trimpath
    ldflags:
      - -s -w
      - -X github.com/lukaszraczylo/gohoarder/internal/version.Version={{.Version}}
      - -X github.com/lukaszraczylo/gohoarder/internal/version.GitCommit={{.ShortCommit}}
      - -X github.com/lukaszraczylo/gohoarder/internal/version.BuildTime={{.Date}}
    goos:
      - linux
      - darwin
    goarch:
      - amd64
      - arm64
    ignore:
      - goos: darwin
        goarch: amd64
      - goos: linux
        goarch: arm64  # Skip linux/arm64 binaries (Docker handles multi-arch)

  - id: migrate
    main: ./cmd/migrate
    binary: migrate
    env:
      - CGO_ENABLED=1
    tags:
      - fts5
    flags:
      - -trimpath
    ldflags:
      - -s -w
      - -X main.Version={{.Version}}
      - -X main.GitCommit={{.ShortCommit}}
      - -X main.BuildTime={{.Date}}
    goos:
      - linux
      - darwin
    goarch:
      - amd64
      - arm64
    ignore:
      - goos: darwin
        goarch: amd64
      - goos: linux
        goarch: arm64  # Skip linux/arm64 binaries (Docker handles multi-arch)

# Archives for releases
archives:
  - id: default
    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 }}
    formats:
      - tar.gz
      - zip
    format_overrides:
      - goos: windows
        formats:
          - zip
    files:
      - README.md
      - LICENSE
      - config.yaml.example

# Checksum
checksum:
  name_template: 'checksums.txt'
  algorithm: sha256

# Snapshot configuration
snapshot:
  version_template: "{{ incpatch .Version }}-next"

# Changelog
changelog:
  sort: asc
  filters:
    exclude:
      - '^docs:'
      - '^test:'
      - '^ci:'
      - '^chore:'
      - '^Merge'
      - '^WIP'
      - '^Update go.mod'
      - 'README'

# GitHub release configuration
release:
  github:
    owner: lukaszraczylo
    name: gohoarder
  name_template: "version {{.Version}}"
  draft: false
  prerelease: auto

# Docker images (v2 - modern syntax)
# All Dockerfiles are self-contained multi-stage builds
# GoReleaser orchestrates buildx and passes build args
dockers_v2:
  # 1. Application Engine - Main GoHoarder server
  - id: gohoarder-server
    images:
      - ghcr.io/lukaszraczylo/gohoarder-server
    tags:
      - "{{ .Version }}"
      - latest
    platforms:
      - linux/amd64
      - linux/arm64
    dockerfile: Dockerfile.server
    build_args:
      VERSION: "{{ .Version }}"
      GIT_COMMIT: "{{ .ShortCommit }}"
      BUILD_TIME: "{{ .Date }}"
    flags:
      - "--pull"
      - "--label=org.opencontainers.image.title=GoHoarder Server"
      - "--label=org.opencontainers.image.description=Universal package cache proxy server"
      - "--label=org.opencontainers.image.url=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.source=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.version={{ .Version }}"
      - "--label=org.opencontainers.image.created={{ .Date }}"
      - "--label=org.opencontainers.image.revision={{ .FullCommit }}"

  # 2. Website - Frontend Dashboard
  - id: gohoarder-frontend
    images:
      - ghcr.io/lukaszraczylo/gohoarder-frontend
    tags:
      - "{{ .Version }}"
      - latest
    platforms:
      - linux/amd64
      - linux/arm64
    dockerfile: Dockerfile.frontend
    flags:
      - "--pull"
      - "--label=org.opencontainers.image.title=GoHoarder Frontend"
      - "--label=org.opencontainers.image.description=GoHoarder web dashboard"
      - "--label=org.opencontainers.image.url=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.source=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.version={{ .Version }}"
      - "--label=org.opencontainers.image.created={{ .Date }}"
      - "--label=org.opencontainers.image.revision={{ .FullCommit }}"

  # 3. Scanning Engine - Background scanner worker
  - id: gohoarder-scanner
    images:
      - ghcr.io/lukaszraczylo/gohoarder-scanner
    tags:
      - "{{ .Version }}"
      - latest
    platforms:
      - linux/amd64
      - linux/arm64
    dockerfile: Dockerfile.scanner
    build_args:
      VERSION: "{{ .Version }}"
      GIT_COMMIT: "{{ .ShortCommit }}"
      BUILD_TIME: "{{ .Date }}"
    flags:
      - "--pull"
      - "--label=org.opencontainers.image.title=GoHoarder Scanner"
      - "--label=org.opencontainers.image.description=GoHoarder vulnerability scanning engine"
      - "--label=org.opencontainers.image.url=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.source=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.version={{ .Version }}"
      - "--label=org.opencontainers.image.created={{ .Date }}"
      - "--label=org.opencontainers.image.revision={{ .FullCommit }}"

  # 4. Gateway - Nginx reverse proxy for unified deployment
  - id: gohoarder-gateway
    images:
      - ghcr.io/lukaszraczylo/gohoarder-gateway
    tags:
      - "{{ .Version }}"
      - latest
    platforms:
      - linux/amd64
      - linux/arm64
    dockerfile: Dockerfile.gateway
    flags:
      - "--pull"
      - "--label=org.opencontainers.image.title=GoHoarder Gateway"
      - "--label=org.opencontainers.image.description=Nginx reverse proxy for unified GoHoarder deployment"
      - "--label=org.opencontainers.image.url=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.source=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.version={{ .Version }}"
      - "--label=org.opencontainers.image.created={{ .Date }}"
      - "--label=org.opencontainers.image.revision={{ .FullCommit }}"

  # 5. Migration Engine - Database migration tool
  - id: gohoarder-migrate
    images:
      - ghcr.io/lukaszraczylo/gohoarder-migrate
    tags:
      - "{{ .Version }}"
      - latest
    platforms:
      - linux/amd64
      - linux/arm64
    dockerfile: Dockerfile.migrate
    build_args:
      VERSION: "{{ .Version }}"
      GIT_COMMIT: "{{ .ShortCommit }}"
      BUILD_TIME: "{{ .Date }}"
    flags:
      - "--pull"
      - "--label=org.opencontainers.image.title=GoHoarder Migrate"
      - "--label=org.opencontainers.image.description=Database migration tool for GoHoarder V2 schema"
      - "--label=org.opencontainers.image.url=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.source=https://github.com/lukaszraczylo/gohoarder"
      - "--label=org.opencontainers.image.version={{ .Version }}"
      - "--label=org.opencontainers.image.created={{ .Date }}"
      - "--label=org.opencontainers.image.revision={{ .FullCommit }}"

# Artifact signing with cosign
signs:
  - cmd: cosign
    signature: "${artifact}.sigstore.json"
    args:
      - sign-blob
      - "--bundle=${signature}"
      - "${artifact}"
      - "--yes"
    artifacts: checksum
    output: true

# Docker image signing with cosign
docker_signs:
  - cmd: cosign
    artifacts: manifests
    output: true
    args:
      - sign
      - "${artifact}@${digest}"
      - "--yes"
