| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | set -euo pipefail |
| 11 | |
| 12 | cd "$(dirname "$0")" |
| 13 | REMOTE=${DEPLOY_HOST:-rybbit} |
| 14 | TAG=$(git rev-parse --short HEAD) |
| 15 | if ! git diff --quiet HEAD; then |
| 16 | TAG="$TAG-dirty-$(date +%Y%m%d%H%M%S)" |
| 17 | fi |
| 18 | IG_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' cli/Cargo.toml | head -1) |
| 19 | |
| 20 | echo "==> building irongit:$TAG (ig $IG_VERSION)" |
| 21 | docker build -t "irongit:$TAG" . |
| 22 | |
| 23 | echo "==> shipping to $REMOTE" |
| 24 | docker save "irongit:$TAG" | gzip -1 | ssh "$REMOTE" 'gunzip | docker load' |
| 25 | |
| 26 | echo "==> rolling" |
| 27 | ssh "$REMOTE" bash -s -- "$TAG" "$IG_VERSION" <<'REMOTE_SCRIPT' |
| 28 | set -euo pipefail |
| 29 | cd /opt/hygo |
| 30 | tag=$1 |
| 31 | ig_version=$2 |
| 32 | |
| 33 | [ -f .irongit.tag ] && cp .irongit.tag .irongit.prev |
| 34 | docker tag "irongit:$tag" irongit:latest |
| 35 | echo "$tag" > .irongit.tag |
| 36 | docker compose up -d --no-deps irongit |
| 37 | |
| 38 | ok=0 |
| 39 | for _ in $(seq 1 45); do |
| 40 | status=$(docker inspect irongit --format '{{.State.Health.Status}}' 2>/dev/null || echo none) |
| 41 | if [ "$status" = healthy ]; then ok=1; break; fi |
| 42 | sleep 2 |
| 43 | done |
| 44 | if [ "$ok" != 1 ]; then |
| 45 | echo "irongit did not become healthy; last logs:" >&2 |
| 46 | docker logs --tail 60 irongit >&2 |
| 47 | exit 1 |
| 48 | fi |
| 49 | echo "irongit:$tag healthy" |
| 50 | |
| 51 | published=$(docker exec irongit wget -qO- http://127.0.0.1:7878/api/v1/cli/latest 2>/dev/null | sed -n 's/.*"version":"\([^"]*\)".*/\1/p' || true) |
| 52 | if [ "$published" != "$ig_version" ]; then |
| 53 | echo "publishing ig $ig_version (was ${published:-none})" |
| 54 | docker exec irongit irongit admin publish-cli /usr/local/share/irongit/ig --version "$ig_version" |
| 55 | fi |
| 56 | |
| 57 | # Keep the three newest irongit images. |
| 58 | docker images irongit --format '{{.Tag}} {{.CreatedAt}}' | grep -v '^latest ' | sort -k2 -r | tail -n +4 | cut -d' ' -f1 \ |
| 59 | | while read -r old; do [ "$old" = "$tag" ] || docker rmi "irongit:$old" >/dev/null 2>&1 || true; done |
| 60 | REMOTE_SCRIPT |
| 61 | |
| 62 | echo "==> done: https://git.hygo.ai" |