76 lines
2.0 KiB
Bash
Executable File
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"
|