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 }}" extra_files: - go.mod - go.sum - cmd - pkg - internal - config.yaml.example # 2. Website - Frontend Dashboard # Note: Frontend is pre-built on CI runner and injected via frontend/dist - 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 }}" extra_files: - frontend/dist # 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 }}" extra_files: - go.mod - go.sum - cmd - pkg - internal - config.yaml.example # 4. 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 }}" extra_files: - go.mod - go.sum - cmd - pkg - internal - migrations # 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"