77 lines
2.3 KiB
Bash
Executable File
77 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
APP=sshkeeper
|
|
VERSION=${VERSION:-${1:-$(git describe --tags --always --dirty 2>/dev/null || echo "dev")}}
|
|
LDFLAGS="-s -w -X main.version=${VERSION}"
|
|
DIST_DIR="dist"
|
|
SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:-$(git log -1 --format=%ct 2>/dev/null || date +%s)}
|
|
|
|
echo "==> Building release ${APP} ${VERSION}..."
|
|
echo "==> SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}"
|
|
|
|
rm -rf "${DIST_DIR}"
|
|
mkdir -p "${DIST_DIR}"
|
|
|
|
package_docs() {
|
|
local package_dir="$1"
|
|
|
|
cp README.md LICENSE "${package_dir}/"
|
|
if [[ -f docs/guide.md ]]; then
|
|
mkdir -p "${package_dir}/docs"
|
|
cp docs/guide.md "${package_dir}/docs/"
|
|
fi
|
|
}
|
|
|
|
normalize_package() {
|
|
local package_dir="$1"
|
|
find "${package_dir}" -exec touch -h -d "@${SOURCE_DATE_EPOCH}" {} +
|
|
}
|
|
|
|
build_tarball() {
|
|
local goos="$1"
|
|
local goarch="$2"
|
|
local package_dir="${DIST_DIR}/${APP}_${VERSION}_${goos}_${goarch}"
|
|
local archive="${DIST_DIR}/${APP}_${VERSION}_${goos}_${goarch}.tar.gz"
|
|
|
|
echo "==> ${goos}/${goarch}..."
|
|
rm -rf "${package_dir}"
|
|
mkdir -p "${package_dir}"
|
|
|
|
GOOS="${goos}" GOARCH="${goarch}" CGO_ENABLED=0 go build -trimpath -ldflags "${LDFLAGS}" -o "${package_dir}/${APP}" .
|
|
package_docs "${package_dir}"
|
|
normalize_package "${package_dir}"
|
|
tar --sort=name --owner=0 --group=0 --numeric-owner --mtime="@${SOURCE_DATE_EPOCH}" -cf - -C "${DIST_DIR}" "$(basename "${package_dir}")" | gzip -n > "${archive}"
|
|
rm -rf "${package_dir}"
|
|
}
|
|
|
|
build_zip() {
|
|
local goos="$1"
|
|
local goarch="$2"
|
|
local package_dir="${DIST_DIR}/${APP}_${VERSION}_${goos}_${goarch}"
|
|
local archive="${DIST_DIR}/${APP}_${VERSION}_${goos}_${goarch}.zip"
|
|
|
|
echo "==> ${goos}/${goarch}..."
|
|
rm -rf "${package_dir}"
|
|
mkdir -p "${package_dir}"
|
|
|
|
GOOS="${goos}" GOARCH="${goarch}" CGO_ENABLED=0 go build -trimpath -ldflags "${LDFLAGS}" -o "${package_dir}/${APP}.exe" .
|
|
package_docs "${package_dir}"
|
|
normalize_package "${package_dir}"
|
|
(cd "${DIST_DIR}" && find "$(basename "${package_dir}")" -print | sort | zip -X -q "$(basename "${archive}")" -@)
|
|
rm -rf "${package_dir}"
|
|
}
|
|
|
|
build_tarball linux amd64
|
|
build_tarball linux arm64
|
|
build_tarball darwin amd64
|
|
build_tarball darwin arm64
|
|
build_zip windows amd64
|
|
|
|
(cd "${DIST_DIR}" && sha256sum *.tar.gz *.zip > checksums.txt)
|
|
|
|
echo "==> Done."
|
|
ls -lh "${DIST_DIR}/"*.tar.gz "${DIST_DIR}/"*.zip "${DIST_DIR}/checksums.txt"
|