flow/contrib/make_nightly_build

156 lines
3.8 KiB
Bash
Executable file

#!/bin/bash
set -e
for arg in "$@"; do
case "$arg" in
--no-github) NO_GITHUB=1 ;;
--no-codeberg) NO_CODEBERG=1 ;;
--no-flowcontrol) NO_FLOWCONTROL=1 ;;
esac
done
builddir="nightly-build"
DESTDIR="$(pwd)/$builddir"
BASEDIR="$(cd "$(dirname "$0")/.." && pwd)"
APPNAME="$(basename "$BASEDIR")"
title="$APPNAME nightly build"
repo="neurocyte/$APPNAME-nightly"
release_notes="$BASEDIR/$builddir-release-notes"
cd "$BASEDIR"
if [ -e "$DESTDIR" ]; then
echo directory \"$builddir\" already exists
exit 1
fi
if [ -e "$release_notes" ]; then
echo file \""$release_notes"\" already exists
exit 1
fi
DIFF="$(git diff --stat --patch HEAD)"
if [ -n "$DIFF" ]; then
echo there are outstanding changes:
echo "$DIFF"
exit 1
fi
UNPUSHED="$(git log --pretty=oneline '@{u}...')"
if [ -n "$UNPUSHED" ]; then
echo there are unpushed commits:
echo "$UNPUSHED"
exit 1
fi
# get latest version tag
last_nightly_version=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | jq -r .tag_name)
[ -z "$last_nightly_version" ] && {
echo "failed to fetch $title latest version"
exit 1
}
local_version="$(git --git-dir "$BASEDIR/.git" describe)"
if [ "$1" != "--no-github" ]; then
if [ "$local_version" == "$last_nightly_version" ]; then
echo "$title is already at version $last_nightly_version"
exit 1
fi
fi
echo
echo "building $title version $local_version... (previous $last_nightly_version)"
echo
git log "${last_nightly_version}..HEAD" --pretty="format:neurocyte/$APPNAME@%h %s"
echo
echo running tests...
./zig build test
echo building...
./zig build -Dpackage_release --prefix "$DESTDIR/build"
cd "$DESTDIR/build"
VERSION=$(/bin/cat version)
TARGETS=$(/bin/ls)
for target in $TARGETS; do
if [ -d "$target" ]; then
cd "$target"
if [ "${target:0:8}" == "windows-" ]; then
echo packing zip "$target"...
zip -r "../../${APPNAME}-${VERSION}-${target}.zip" ./*
cd ..
else
echo packing tar "$target"...
tar -czf "../../${APPNAME}-${VERSION}-${target}.tar.gz" -- *
cd ..
fi
fi
done
cd ..
rm -r build
TARFILES=$(/bin/ls)
for tarfile in $TARFILES; do
echo signing "$tarfile"...
gpg --local-user 4E6CF7234FFC4E14531074F98EB1E1BB660E3FB9 --detach-sig "$tarfile"
sha256sum -b "$tarfile" >"${tarfile}.sha256"
done
echo "done making $title $VERSION @ $DESTDIR"
echo
/bin/ls -lah
cd ..
{
echo "$title" "$VERSION"
echo
echo "commits:"
echo
git log "${last_nightly_version}..HEAD" --pretty="format:neurocyte/$APPNAME@%h %s"
echo
echo
echo "contributors to this release:"
git shortlog -s -n "${last_nightly_version}..HEAD" | cut -b 8-
echo
echo
echo "also available at:"
echo "[flow-control.dev](https://git.flow-control.dev/neurocyte/flow-nightly/releases/tag/$VERSION)"
echo "[github.com](https://github.com/neurocyte/flow-nightly/releases/tag/$VERSION)"
echo "[codeberg.org](https://codeberg.org/neurocyte/flow-nightly/releases/tag/$VERSION)"
} >"$release_notes"
cat "$release_notes"
if [ -z "$NO_GITHUB" ]; then
echo uploading to github.com
gh release create "$VERSION" --repo "$repo" --notes-file "$release_notes" $DESTDIR/*
fi
if [ -z "$NO_CODEBERG" ]; then
ASSETS=""
for a in $DESTDIR/*; do
ASSETS="$ASSETS --asset $a"
done
echo uploading to codeberg.org
tea releases create --login codeberg --repo "$repo" --tag "$VERSION" --title "$title $VERSION" --note-file "$release_notes" --prerelease $ASSETS
fi
if [ -z "$NO_FLOWCONTROL" ]; then
echo uploading to git.flow-control.dev
tea releases create --login flow-control --repo "$repo" --tag "$VERSION" --title "$title $VERSION" --note-file "$release_notes" --prerelease
fi