#!/usr/bin/env bash # Een getagde versie van Tectum (de configurator) naar de server brengen (eerst eenmalig server/tectum-setup.sh). # # tools/tectum-release.sh crm@tectum.voorbeeld.nl nieuwste tag # tools/tectum-release.sh crm@tectum.voorbeeld.nl v0.7.6 een bepaalde versie (ook om terug te rollen) # # De bestanden komen uit `git archive ` van $CONFIGURATOR (standaard ../configurator), dus niet-gecommit # werk gaat niet mee. rsync met hardlinks naar de vorige versie, zodat alleen wijzigingen over de lijn gaan; # daarna wijst `current` naar de nieuwe versie. De laatste 5 versies blijven staan. set -euo pipefail REPO="$(cd "$(dirname "$0")/.." && pwd)" HOST="${1:-}" CONFIGURATOR="${CONFIGURATOR:-$REPO/../configurator}" ROOT=/srv/www/tectum say() { printf '\033[38;2;185;89;19m▸\033[0m %s\n' "$*"; } fail() { printf 'Fout: %s\n' "$*" >&2; exit 1; } [ -n "$HOST" ] || fail "gebruik: tools/tectum-release.sh crm@server [vX.Y.Z]" [ -f "$CONFIGURATOR/index.html" ] || fail "geen configurator in $CONFIGURATOR (zet CONFIGURATOR=pad)" TAG="${2:-$(git -C "$CONFIGURATOR" tag --list 'v*' --sort=-v:refname | head -n1)}" [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || fail "onbekende versie '$TAG' (verwacht vX.Y.Z)" git -C "$CONFIGURATOR" rev-parse -q --verify "refs/tags/$TAG" >/dev/null || fail "tag $TAG bestaat niet" [ -z "$(git -C "$CONFIGURATOR" status --porcelain)" ] || say "let op: niet-gecommitte wijzigingen in de configurator zitten niet in $TAG" tmp="$(mktemp -d)" trap 'rm -rf "$tmp"' EXIT chmod 755 "$tmp" # mktemp maakt hem 700, en rsync -a neemt dat mee (nginx moet erin kunnen) git -C "$CONFIGURATOR" archive "$TAG" | tar -x -C "$tmp" rm -f "$tmp/README.md" "$tmp/start.sh" "$tmp/.gitignore" say "Tectum $TAG uploaden naar $HOST" ssh "$HOST" "mkdir -p $ROOT/releases/$TAG" rsync -az --delete --link-dest="$ROOT/current/" "$tmp/" "$HOST:$ROOT/releases/$TAG/" say "$TAG actief maken" ssh "$HOST" "set -e; cd $ROOT; ln -sfn releases/$TAG current.new; mv -T current.new current ls -1 releases | sort -V | head -n -5 | grep -vxF '$TAG' | sed 's|^|releases/|' | xargs -r rm -rf" say "klaar: Tectum $TAG staat live"