rest-server/.goreleaser.yml
2025-05-15 20:58:23 +02:00

244 lines
7.9 KiB
YAML

---
version: 2
before:
# Run a few commands to check the state of things. When anything is changed
# in files commited to the repo, goreleaser will abort before building
# anything because the git checkout is dirty.
hooks:
# make sure all modules are available
- go mod download
# make sure all generated code is up to date
- go generate ./...
# check that $VERSION is set
- test -n "{{ .Env.VERSION }}"
# make sure the file VERSION contains the latest version (used for build.go)
- bash -c 'echo "{{ .Env.VERSION }}" > VERSION'
# make sure that main.go contains the latest version
- echo sed -i 's/var version = "[^"]*"/var version = "{{ .Env.VERSION }}"/' cmd/rest-server/main.go
# make sure the file CHANGELOG.md is up to date
- calens --output CHANGELOG.md
# build a single binary
builds:
- id: default
# make sure everything is statically linked by disabling cgo altogether
env: &build_env
- CGO_ENABLED=0
# set the package for the main binary
main: ./cmd/rest-server
flags:
&build_flags # don't include any paths to source files in the resulting binary
- -trimpath
mod_timestamp: "{{ .CommitTimestamp }}"
ldflags: &build_ldflags # set the version variable in the main package
- "-s -w -X main.version={{ .Version }}"
# list all operating systems and architectures we build binaries for
goos:
- linux
- darwin
- freebsd
- netbsd
- openbsd
- dragonfly
- solaris
goarch:
- amd64
- "386"
- arm
- arm64
- mips
- mips64
- mips64le
- ppc64
- ppc64le
goarm:
- "6"
- "7"
- id: windows-only
env: *build_env
main: ./cmd/rest-server
flags: *build_flags
mod_timestamp: "{{ .CommitTimestamp }}"
ldflags: *build_ldflags
goos:
- windows
goarch:
- amd64
- "386"
- arm
- arm64
# configure the resulting archives to create
archives:
- id: default
builds: [default, windows-only]
format: tar.gz
# package a directory which contains the source file
wrap_in_directory: true
builds_info: &archive_file_info
owner: root
group: root
mtime: "{{ .CommitDate }}"
mode: 0644
# add these files to all archives
files: &archive_files
- src: LICENSE
dst: LICENSE
info: *archive_file_info
- src: README.md
dst: README.md
info: *archive_file_info
- src: CHANGELOG.md
dst: CHANGELOG.md
info: *archive_file_info
- id: windows-only
builds: [windows-only]
formats: [zip]
wrap_in_directory: true
builds_info: *archive_file_info
files: *archive_files
# also build an archive of the source code
source:
enabled: true
# build a file containing the SHA256 hashes
checksum:
name_template: "SHA256SUMS"
# sign the checksum file
signs:
- artifacts: checksum
signature: "${artifact}.asc"
args:
- "--armor"
- "--output"
- "${signature}"
- "--detach-sign"
- "${artifact}"
# configure building the rest-server docker image
dockers:
- image_templates:
- restic/rest-server:{{ .Version }}-amd64
build_flag_templates:
- "--platform=linux/amd64"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: &extra_files
- docker/create_user
- docker/delete_user
- docker/entrypoint.sh
- image_templates:
- restic/rest-server:{{ .Version }}-i386
goarch: "386"
build_flag_templates:
- "--platform=linux/386"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: *extra_files
- image_templates:
- restic/rest-server:{{ .Version }}-arm32v6
goarch: arm
goarm: 6
build_flag_templates:
- "--platform=linux/arm/v6"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: *extra_files
- image_templates:
- restic/rest-server:{{ .Version }}-arm32v7
goarch: arm
goarm: 7
build_flag_templates:
- "--platform=linux/arm/v7"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: *extra_files
- image_templates:
- restic/rest-server:{{ .Version }}-arm64v8
goarch: arm64
build_flag_templates:
- "--platform=linux/arm64/v8"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: *extra_files
- image_templates:
- restic/rest-server:{{ .Version }}-ppc64le
goarch: ppc64le
build_flag_templates:
- "--platform=linux/ppc64le"
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.source=https://github.com/restic/{{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.licenses=BSD-2-Clause"
use: buildx
dockerfile: "Dockerfile.goreleaser"
extra_files: *extra_files
docker_manifests:
- name_template: "restic/rest-server:{{ .Version }}"
image_templates:
- "restic/rest-server:{{ .Version }}-amd64"
- "restic/rest-server:{{ .Version }}-i386"
- "restic/rest-server:{{ .Version }}-arm32v6"
- "restic/rest-server:{{ .Version }}-arm32v7"
- "restic/rest-server:{{ .Version }}-arm64v8"
- "restic/rest-server:{{ .Version }}-ppc64le"
- name_template: "restic/rest-server:latest"
image_templates:
- "restic/rest-server:{{ .Version }}-amd64"
- "restic/rest-server:{{ .Version }}-i386"
- "restic/rest-server:{{ .Version }}-arm32v6"
- "restic/rest-server:{{ .Version }}-arm32v7"
- "restic/rest-server:{{ .Version }}-arm64v8"
- "restic/rest-server:{{ .Version }}-ppc64le"