mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-18 00:02:48 +00:00
Avoid redundant Docker test image rebuilds
This commit is contained in:
parent
abf9b1858f
commit
6cfe29f3f9
1 changed files with 46 additions and 0 deletions
|
|
@ -4,6 +4,17 @@ set -euo pipefail
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
IMAGE_TAG="${SANDBOX_AGENT_TEST_IMAGE:-sandbox-agent-test:dev}"
|
IMAGE_TAG="${SANDBOX_AGENT_TEST_IMAGE:-sandbox-agent-test:dev}"
|
||||||
LOCK_DIR="$ROOT_DIR/.context/docker-test-image.lock"
|
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() {
|
release_lock() {
|
||||||
if [[ -d "$LOCK_DIR" ]]; then
|
if [[ -d "$LOCK_DIR" ]]; then
|
||||||
|
|
@ -11,16 +22,51 @@ release_lock() {
|
||||||
fi
|
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
|
while ! mkdir "$LOCK_DIR" 2>/dev/null; do
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
trap release_lock EXIT
|
trap release_lock EXIT
|
||||||
|
|
||||||
|
if image_is_ready; then
|
||||||
|
printf '%s\n' "$IMAGE_TAG"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
docker build \
|
docker build \
|
||||||
--tag "$IMAGE_TAG" \
|
--tag "$IMAGE_TAG" \
|
||||||
--file "$ROOT_DIR/docker/test-agent/Dockerfile" \
|
--file "$ROOT_DIR/docker/test-agent/Dockerfile" \
|
||||||
"$ROOT_DIR" \
|
"$ROOT_DIR" \
|
||||||
>/dev/null
|
>/dev/null
|
||||||
|
|
||||||
|
touch "$STAMP_FILE"
|
||||||
|
|
||||||
printf '%s\n' "$IMAGE_TAG"
|
printf '%s\n' "$IMAGE_TAG"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue