Menu
AkurAI-Build
publicLatest change 541111ecfea246e9a25a814e4bb1a230e52387f3 - AKURAI-BUILD-12 synchronize release identities by Ólafur Búi Ólafsson
#!/bin/sh
set -eu
root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
cd "$root"
[ "${HOSTNAME:-}" != akurai-build-worker ] || {
echo 'compose-release must run outside the worker container' >&2
exit 1
}
version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | sed -n '1p')
latest=$(sed -n 's/^## \([0-9][0-9.]*\) .*/\1/p' CHANGELOG.md | sed -n '1p')
commit=$(git rev-parse --verify HEAD)
[ -n "$version" ]
[ "$version" = "$latest" ] || {
echo "Cargo version $version does not match changelog $latest" >&2
exit 1
}
test -x target/release/akurai
[ "$(target/release/akurai --version)" = "akurai $version" ] || {
echo "host binary version does not match Cargo version $version" >&2
exit 1
}
# Both images come from one immutable revision and share one release tag.
docker build --target service-prebuilt \
--build-arg "AKURAI_BUILD_VERSION=$version" \
--build-arg "AKURAI_BUILD_COMMIT=$commit" \
--tag "akurai-build-service:$version" \
--tag "akurai-build-service:$commit" \
--file deploy/Dockerfile .
docker build --target worker \
--build-arg "AKURAI_BUILD_VERSION=$version" \
--build-arg "AKURAI_BUILD_COMMIT=$commit" \
--tag "akurai-build-worker:$version" \
--tag "akurai-build-worker:$commit" \
--file deploy/Dockerfile .
for image in "akurai-build-service:$version" "akurai-build-worker:$version"; do
image_version=$(docker image inspect --format '{{ index .Config.Labels "org.opencontainers.image.version" }}' "$image")
image_commit=$(docker image inspect --format '{{ index .Config.Labels "org.opencontainers.image.revision" }}' "$image")
[ "$image_version" = "$version" ] && [ "$image_commit" = "$commit" ] || {
echo "$image identifies version=$image_version commit=$image_commit, expected version=$version commit=$commit" >&2
exit 1
}
done
install_dir="$HOME/.local/lib/akurai-build"
install -d -m 700 "$install_dir"
install -m 755 target/release/akurai "$install_dir/akurai.next"
mv -f "$install_dir/akurai.next" "$install_dir/akurai"
printf '%s\n' "$commit" >"$install_dir/revision.next"
mv -f "$install_dir/revision.next" "$install_dir/revision"
installed_version=$("$install_dir/akurai" --version)
[ "$installed_version" = "akurai $version" ] && [ "$(cat "$install_dir/revision")" = "$commit" ] || {
echo "installed host MCP identity does not match version=$version commit=$commit" >&2
exit 1
}
export AKURAI_BUILD_VERSION="$version"
docker compose --project-name akurai-build --file deploy/docker-compose.yml up -d
for endpoint in http://127.0.0.1:3210/api/health http://127.0.0.1:3211/api/health; do
attempt=0
until curl -fsS "$endpoint" >/dev/null; do
attempt=$((attempt + 1))
[ "$attempt" -lt 60 ] || {
docker compose --project-name akurai-build --file deploy/docker-compose.yml ps >&2
exit 1
}
sleep 2
done
done
for container in akurai-build-service akurai-build-worker; do
runtime_version=$(docker inspect --format '{{ index .Config.Labels "org.opencontainers.image.version" }}' "$container")
runtime_commit=$(docker inspect --format '{{ index .Config.Labels "org.opencontainers.image.revision" }}' "$container")
[ "$runtime_version" = "$version" ] && [ "$runtime_commit" = "$commit" ] || {
echo "$container identifies version=$runtime_version commit=$runtime_commit, expected version=$version commit=$commit" >&2
exit 1
}
done
docker compose --project-name akurai-build --file deploy/docker-compose.yml ps
printf 'release=%s commit=%s service=healthy worker=healthy\n' "$version" "$commit"