mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 08:03:46 +00:00
72 lines
1.4 KiB
Bash
Executable file
72 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
IMAGE_TAG="${SANDBOX_AGENT_TEST_IMAGE:-sandbox-agent-test:dev}"
|
|
LOCK_DIR="$ROOT_DIR/.context/docker-test-image.lock"
|
|
STAMP_FILE="$ROOT_DIR/.context/docker-test-image.stamp"
|
|
|
|
INPUTS=(
|
|
"$ROOT_DIR/Cargo.toml"
|
|
"$ROOT_DIR/Cargo.lock"
|
|
"$ROOT_DIR/server"
|
|
"$ROOT_DIR/gigacode"
|
|
"$ROOT_DIR/resources/agent-schemas/artifacts"
|
|
"$ROOT_DIR/scripts/agent-configs"
|
|
"$ROOT_DIR/docker/test-agent/Dockerfile"
|
|
)
|
|
|
|
release_lock() {
|
|
if [[ -d "$LOCK_DIR" ]]; then
|
|
rm -rf "$LOCK_DIR"
|
|
fi
|
|
}
|
|
|
|
latest_input_mtime() {
|
|
find "${INPUTS[@]}" -type f -exec stat -f '%m' {} + | sort -nr | head -n1
|
|
}
|
|
|
|
image_is_ready() {
|
|
if ! docker image inspect "$IMAGE_TAG" >/dev/null 2>&1; then
|
|
return 1
|
|
fi
|
|
|
|
if [[ ! -f "$STAMP_FILE" ]]; then
|
|
return 1
|
|
fi
|
|
|
|
local stamp_mtime
|
|
stamp_mtime="$(stat -f '%m' "$STAMP_FILE")"
|
|
local latest_mtime
|
|
latest_mtime="$(latest_input_mtime)"
|
|
|
|
[[ -n "$latest_mtime" && "$stamp_mtime" -ge "$latest_mtime" ]]
|
|
}
|
|
|
|
mkdir -p "$ROOT_DIR/.context"
|
|
|
|
if image_is_ready; then
|
|
printf '%s\n' "$IMAGE_TAG"
|
|
exit 0
|
|
fi
|
|
|
|
while ! mkdir "$LOCK_DIR" 2>/dev/null; do
|
|
sleep 1
|
|
done
|
|
|
|
trap release_lock EXIT
|
|
|
|
if image_is_ready; then
|
|
printf '%s\n' "$IMAGE_TAG"
|
|
exit 0
|
|
fi
|
|
|
|
docker build \
|
|
--tag "$IMAGE_TAG" \
|
|
--file "$ROOT_DIR/docker/test-agent/Dockerfile" \
|
|
"$ROOT_DIR" \
|
|
>/dev/null
|
|
|
|
touch "$STAMP_FILE"
|
|
|
|
printf '%s\n' "$IMAGE_TAG"
|