Files
Classroom_Desktop/update_canary.sh
T

76 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT"
current_version="$(cat VERSION)"
if [[ $# -eq 1 ]]; then
version="$1"
else
IFS='.' read -r major minor patch <<< "$current_version"
version="${major}.${minor}.$((patch + 1))"
fi
package_name="ekklesia-classroom_${version}_amd64.deb"
package_path="$ROOT/dist/$package_name"
echo "Current version: $current_version"
echo "New canary: $version"
echo
"$ROOT/tools/build-release.sh" "$version"
# Validate the exact artifact that will be published. If a previous canary is
# available locally, exercise the real upgrade path as well as a fresh install.
validation_args=("$package_path")
if [[ -f "$ROOT/repo/canary/manifest.json" ]]; then
previous_package_name="$(python3 -c \
'import json; print(json.load(open("repo/canary/manifest.json"))["package"].rsplit("/", 1)[-1])')"
previous_package="$ROOT/repo/packages/$previous_package_name"
if [[ -f "$previous_package" && "$previous_package" != "$package_path" ]]; then
validation_args+=("$previous_package")
fi
fi
"$ROOT/tools/validate-trixie-release.sh" "${validation_args[@]}"
hash="$(sha256sum "$package_path" | awk '{print $1}')"
mkdir -p "$ROOT/repo/packages" "$ROOT/repo/canary"
cp "$package_path" "$ROOT/repo/packages/$package_name"
cat > "$ROOT/repo/canary/manifest.json" <<EOF
{
"version": "$version",
"package": "/packages/$package_name",
"sha256": "$hash",
"requires_reboot": true
}
EOF
echo
echo "Publishing package..."
rsync -av \
-e ssh \
"$ROOT/repo/packages/$package_name" \
classroom-control:/srv/ekklesia/classroom-updates/packages/
echo
echo "Publishing canary manifest..."
# Manifest deliberately goes LAST.
rsync -av \
-e ssh \
"$ROOT/repo/canary/manifest.json" \
classroom-control:/srv/ekklesia/classroom-updates/canary/manifest.json
echo
echo "Published Ekklesia Classroom $version to CANARY"
echo "https://updates.riverofglorymn.org/canary/manifest.json"