Menu
AkurAI-Build
publicLatest change a7c60e6c4413fa9cff6ed41223148b68f01f669c - Add self-host service promotion for UI wave (AKURAI-BUILD-2..9) by Ólafur Búi Ólafsson
#!/bin/sh
set -eu
current=akurai-build-service
next=akurai-build-service-next
previous=akurai-build-service-previous
commit=$(git rev-parse --verify HEAD)
version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | sed -n '1p')
image="akurai-build-service:${commit}"
[ -n "$version" ]
test -x target/release/akurai
docker build --target service-prebuilt \
--tag "$image" \
--tag "akurai-build-service:${version}" \
--file deploy/Dockerfile .
docker rm -f "$next" "$previous" >/dev/null 2>&1 || true
docker create \
--name "$next" \
--network host \
--restart unless-stopped \
--user 1000:1000 \
--memory 1g \
--memory-swap 1g \
--cpus 2 \
--env-file /home/olafurbui/.config/akurai-build/env \
--env HOME=/home/olafurbui \
--env RUST_LOG=akurai_build=info,tower_http=info \
--env AKURAI_WORKERS=0 \
--volume /home/olafurbui/.local/share/akurai-build:/home/olafurbui/.local/share/akurai-build \
--volume /home/olafurbui/.config/akurai-build:/home/olafurbui/.config/akurai-build:ro \
--health-cmd 'curl -fsS http://127.0.0.1:3210/api/health' \
--health-interval 10s \
--health-timeout 3s \
--health-retries 12 \
--health-start-period 10s \
"$image" \
--data /home/olafurbui/.local/share/akurai-build \
--key-file /home/olafurbui/.config/akurai-build/database.key \
serve \
--address 0.0.0.0:3210 \
--token-file /home/olafurbui/.config/akurai-build/api.token \
--webhook-secret-file /home/olafurbui/.config/akurai-build/webhook.token >/dev/null
old_renamed=0
new_renamed=0
rollback() {
status=$?
trap - EXIT HUP INT TERM
if [ "$new_renamed" -eq 1 ]; then
docker stop "$current" >/dev/null 2>&1 || true
docker rename "$current" "$next" >/dev/null 2>&1 || true
fi
if [ "$old_renamed" -eq 1 ]; then
docker rename "$previous" "$current" >/dev/null 2>&1 || true
docker start "$current" >/dev/null 2>&1 || true
fi
docker rm -f "$next" >/dev/null 2>&1 || true
exit "$status"
}
trap rollback EXIT HUP INT TERM
docker stop "$current" >/dev/null
docker rename "$current" "$previous"
old_renamed=1
docker rename "$next" "$current"
new_renamed=1
docker start "$current" >/dev/null
attempt=0
while [ "$attempt" -lt 30 ]; do
health=$(docker inspect --format '{{.State.Health.Status}}' "$current")
if [ "$health" = healthy ]; then
docker rm "$previous" >/dev/null
old_renamed=0
new_renamed=0
trap - EXIT HUP INT TERM
exit 0
fi
if [ "$health" = unhealthy ]; then
break
fi
attempt=$((attempt + 1))
sleep 2
done
printf '%s\n' "replacement service did not become healthy" >&2
exit 1