--- 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: - # make sure everything is statically linked by disabling cgo altogether env: - CGO_ENABLED=0 # set the package for the main binary main: ./cmd/rest-server flags: # don't include any paths to source files in the resulting binary - -trimpath mod_timestamp: '{{ .CommitTimestamp }}' 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 - windows - freebsd - netbsd - openbsd - dragonfly - solaris goarch: - amd64 - 386 - arm - arm64 - mips - mips64 - mips64le - ppc64 - ppc64le goarm: - 6 - 7 # configure the resulting archives to create archives: - # 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: - src: LICENSE dst: . info: *archive_file_info - src: README.md dst: . info: *archive_file_info - src: CHANGELOG.md dst: . info: *archive_file_info # 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"