tests++
[Seppo.git] / release.sh
blob41f4fe6f10f8315486982318392bbc39d9cf1508
1 #!/usr/bin/env dash
2 set -u
3 set -e
4 cd "$(dirname "$0")"
6 [ "$1" = "" ] && {
7 cat << EOF
8 Give me a git sha or source tar to mint a release from.
9 EOF
11 exit 0
14 pk_pem="$(ls /media/msdosfs/*/seppo.priv.pem 2>/dev/null)" ; readonly pk_pem
15 wd="/var/spool/build/src/seppo" ; readonly wd
16 emul_path="$(sysctl compat.linux.emul_path | cut -d : -f 2 | tr -d ' ')" ; readonly emul_path
17 ls -d "$emul_path$(dirname "$wd")" > /dev/null
19 src="$emul_path$(dirname "$wd")/source.tar.gz" ; readonly src
20 GIT_SHA="-"
21 set +e
22 if tar tzf "$1" > /dev/null 2>&1
23 then
24 cp -p "$1" "$src"
25 else
26 GIT_SHA="$1"
27 curl \
28 --output "$src" \
29 --location "https://codeberg.org/seppo/seppo/archive/$GIT_SHA.tar.gz"
31 set -e
32 readonly GIT_SHA
33 export GIT_SHA
34 tar tzf "$src" > /dev/null
35 echo "a tar $(ls "$src")"
37 echo "one source for two builds"
38 rm -rf "${emul_path:?}${wd:?}/"
39 tar xzf "$src" -C "$emul_path/$(dirname "$wd")"
41 uname -sm | figlet
42 gmake -C "$emul_path$wd" clean test final
43 cat <<EOF > "$emul_path$wd/chroot.make.sh"
44 uname -sm | figlet
46 rsync -qaP --delete --exclude _build "$wd" .
47 echo inside $GIT_SHA
48 make -C seppo "\$@"
49 EOF
50 doas chroot "$emul_path" su - "$USER" -c "GIT_SHA="$GIT_SHA" sh $wd/chroot.make.sh clean test final"
52 echo "collect results"
53 cd "$emul_path/$wd/_build"
54 rsync -aP "$src" "$emul_path/$HOME/seppo/_build/"*.cgi .
55 ver="$(grep -hoE "^\(version [^\)]+" ../dune-project | cut -d ' ' -f2)"
56 date="$(date)"
57 readonly ver date
58 export ver date GIT_SHA
59 envsubst < ../README.txt.tpl > README.txt
61 echo "sign binaries"
62 for f in README.txt *.cgi source.tar.gz
64 # https://stackoverflow.com/a/18359743
65 openssl dgst -sha256 -sign "$pk_pem" -out "$f.signature" "$f"
66 done
68 dst="seppo-${ver}_$(date +%Y%m%d).tar.gz"
69 readonly dst
70 tar czf "$dst" -- README.txt* *.cgi* source.tar.gz*
71 tar tzf "$dst"
72 ls -l "$(pwd)/$dst"