From 1e3ecad709691256d5dabcab448e946aa543bb85 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Mon, 8 May 2017 11:12:00 +0200 Subject: [PATCH] feat release: Add simple release script Adds a simple script that will build stripped binaries for various platforms and GPG-sign them. --- .gitignore | 1 + README.md | 3 ++- build-release.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100755 build-release.sh diff --git a/.gitignore b/.gitignore index 9f11b75..53a04aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea/ +release/ diff --git a/README.md b/README.md index 0227de8..0fc78e8 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,8 @@ to only update the `api` resource sets and the `frontend/user-page` resource set Assuming you have Go configured correctly, you can simply `go get github.com/tazjin/kontemplate/...`. -There are signed binary releases available on the [releases page][] for Linux, OS X and Windows. +There are signed binary releases available on the [releases page][] for Linux, OS X, +FreeBSD and Windows. ## Usage diff --git a/build-release.sh b/build-release.sh new file mode 100755 index 0000000..d70bd3e --- /dev/null +++ b/build-release.sh @@ -0,0 +1,57 @@ +#!/bin/bash +set -ueo pipefail + +readonly GIT_HASH="$(git rev-parse --short HEAD)" +readonly LDFLAGS="-X main.gitHash=${GIT_HASH} -w -s" +readonly VERSION="1.0-${GIT_HASH}" + +function build-for() { + local os="${1}" + local arch="${2}" + local target="release/${os}/${arch}" + + echo "Building kontemplate for ${os}-${arch} in ${target}" + + mkdir -p "${target}" + + env GOOS="${os}" GOARCH="${arch}" go build \ + -ldflags "${LDFLAGS}" \ + -o "${target}/kontemplate" \ + -tags netgo + + +} + +function sign-for() { + local os="${1}" + local arch="${2}" + local target="release/${os}/${arch}" + local bin="${target}/kontemplate" + local hash="$(sha256sum ${bin})" + local tar="release/kontemplate-${VERSION}-${os}-${arch}.tar.gz" + + echo "Signing kontemplate binary for ${os}-${arch} with SHA256 ${hash}" + gpg --sign "${bin}" + + echo "Packing release into ${tar}" + tar czvf "${tar}" -C "${target}" kontemplate kontemplate.gpg +} + +case "${1}" in + "build") + # Build releases for various operating systems: + build-for "linux" "amd64" + build-for "darwin" "amd64" + build-for "windows" "amd64" + build-for "freebsd" "amd64" + exit 0 + ;; + "sign") + # Sign releases: + sign-for "linux" "amd64" + sign-for "darwin" "amd64" + sign-for "windows" "amd64" + sign-for "freebsd" "amd64" + exit 0 + ;; +esac