aboutsummaryrefslogtreecommitdiff
path: root/package-release-tarballs.bash
diff options
context:
space:
mode:
Diffstat (limited to 'package-release-tarballs.bash')
-rwxr-xr-xpackage-release-tarballs.bash97
1 files changed, 97 insertions, 0 deletions
diff --git a/package-release-tarballs.bash b/package-release-tarballs.bash
new file mode 100755
index 0000000..ac651bf
--- /dev/null
+++ b/package-release-tarballs.bash
@@ -0,0 +1,97 @@
+#!/bin/bash
+
+set -eu
+
+cd "$(dirname "$0")"
+
+SIGNME=""
+
+# git_archive_extra PREFIX EXTRA1 [EXTRA2 ...]
+#
+# Call git-archive and add additional files to the tarball.
+# Output tarball is called "$PREFIX.tar.gz" and contains one folder
+# called "$PREFIX".
+git_archive_extra() {
+ local PREFIX=$1
+ shift
+ # Add files tracked in git
+ git archive --prefix "$PREFIX/" -o "$PREFIX.tar" HEAD
+ # Add "extra" files
+ tar --owner=root --group=root --transform "s!^!$PREFIX/!" --append -f "$PREFIX.tar" "$@"
+ # Compress
+ gzip -f "$PREFIX.tar"
+}
+
+package_source() {
+ local GITVERSION
+ GITVERSION=$(git describe --tags --dirty)
+ echo "$GITVERSION" > VERSION
+
+ # Render the manpages and include them in the tarball. This
+ # avoids a build-dependency to pandoc.
+ ./Documentation/MANPAGE-render.bash
+
+ # gocryptfs source tarball
+ local PREFIX_SRC_ONLY=gocryptfs_${GITVERSION}_src
+ git_archive_extra "$PREFIX_SRC_ONLY" VERSION Documentation/*.1
+
+ # gocryptfs source + dependencies tarball
+ go mod vendor
+ local PREFIX_SRC_DEPS=gocryptfs_${GITVERSION}_src-deps
+ git_archive_extra "$PREFIX_SRC_DEPS" VERSION Documentation/*.1 vendor
+
+ rm VERSION
+ rm -R vendor
+
+ echo "Tars created."
+ SIGNME+=" $PREFIX_SRC_ONLY.tar.gz $PREFIX_SRC_DEPS.tar.gz"
+}
+
+package_static_binary() {
+ # Compiles the gocryptfs binary and sets $GITVERSION
+ source build-without-openssl.bash
+
+ if ldd gocryptfs > /dev/null ; then
+ echo "error: compiled gocryptfs binary is not static"
+ exit 1
+ fi
+
+ # Build man pages gocryptfs.1 & gocryptfs-xray.1
+ ./Documentation/MANPAGE-render.bash > /dev/null
+
+ local ARCH
+ ARCH=$(go env GOARCH)
+ local OS
+ OS=$(go env GOOS)
+
+ local TARBALL
+ TARBALL=gocryptfs_${GITVERSION}_${OS}-static_${ARCH}.tar
+ local TARGZ
+ TARGZ=$TARBALL.gz
+
+ tar --owner=root --group=root --create -vf "$TARBALL" gocryptfs
+ tar --owner=root --group=root --append -vf "$TARBALL" -C gocryptfs-xray gocryptfs-xray
+ tar --owner=root --group=root --append -vf "$TARBALL" -C Documentation gocryptfs.1 gocryptfs-xray.1
+
+ gzip -f "$TARBALL"
+
+ echo "Tar created."
+ SIGNME+=" $TARGZ"
+}
+
+signing_hint() {
+ local GITVERSION
+ GITVERSION=$(git describe --tags --dirty)
+
+ echo "Hint for signing:"
+ echo " for i in gocryptfs_${GITVERSION}_*.tar.gz ; do gpg -u 23A02740 --armor --detach-sig \$i ; done"
+}
+
+if git describe --dirty | grep dirty ; then
+ echo "Tree is dirty - I will not package this!"
+ exit 1
+fi
+
+package_source
+package_static_binary
+signing_hint