--- 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"