| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
|
| 10 |
|
| 11 |
|
| 12 |
|
| 13 |
|
| 14 |
|
| 15 |
|
| 16 |
|
| 17 |
|
| 18 |
|
| 19 |
|
| 20 |
set -euo pipefail |
| 21 |
|
| 22 |
SHA="${1:-}" |
| 23 |
if [[ ! "$SHA" =~ ^[0-9a-f]{7,40}$ ]]; then |
| 24 |
echo "sando-self-update: refusing non-hex sha: '$SHA'" >&2 |
| 25 |
exit 2 |
| 26 |
fi |
| 27 |
|
| 28 |
SELF_DIR="${SANDO_SELF_UPDATE_DIR:-/srv/sando/self-update}" |
| 29 |
UPSTREAM_URL="${SANDO_UPSTREAM_URL:-git@ssh.makenot.work:max/makenotwork.git}" |
| 30 |
BUILD_USER="${SANDO_BUILD_USER:-sando}" |
| 31 |
BIN="${SANDO_BIN:-/usr/local/bin/sandod}" |
| 32 |
REPO_DIR="$SELF_DIR/MNW" |
| 33 |
BUILD_HOME="$(getent passwd "$BUILD_USER" | cut -d: -f6)" |
| 34 |
|
| 35 |
echo "sando-self-update: building sandod @ $SHA as $BUILD_USER" |
| 36 |
|
| 37 |
|
| 38 |
|
| 39 |
|
| 40 |
install -d -o "$BUILD_USER" -g "$BUILD_USER" "$SELF_DIR" |
| 41 |
runuser -u "$BUILD_USER" -- env \ |
| 42 |
HOME="$BUILD_HOME" \ |
| 43 |
PATH="$BUILD_HOME/.cargo/bin:/usr/local/bin:/usr/bin:/bin" \ |
| 44 |
bash -euo pipefail -c " |
| 45 |
if [[ ! -d '$REPO_DIR/.git' ]]; then |
| 46 |
git clone '$UPSTREAM_URL' '$REPO_DIR' |
| 47 |
fi |
| 48 |
cd '$REPO_DIR' |
| 49 |
git fetch --prune origin |
| 50 |
git checkout --detach '$SHA' |
| 51 |
cd sando/daemon |
| 52 |
cargo build --release --locked |
| 53 |
" |
| 54 |
|
| 55 |
NEW_BIN="$REPO_DIR/sando/daemon/target/release/sandod" |
| 56 |
[[ -x "$NEW_BIN" ]] || { echo "sando-self-update: build produced no binary at $NEW_BIN" >&2; exit 3; } |
| 57 |
|
| 58 |
|
| 59 |
|
| 60 |
echo "sando-self-update: installing $NEW_BIN -> $BIN and restarting sandod" |
| 61 |
install -m 0755 "$NEW_BIN" "$BIN" |
| 62 |
systemctl restart sandod |
| 63 |
echo "sando-self-update: done ($SHA live)" |
| 64 |
|