Skip to content

Commit 05d0a1d

Browse files
committed
updates
1 parent 3e2f1f3 commit 05d0a1d

2 files changed

Lines changed: 330 additions & 12 deletions

File tree

src/datasmith/docker/aws_batch_executor.py

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ class AwsBatchConfig:
5959
max_cache_age_days: int = 30 # Clean up cache layers older than this
6060
max_cache_size_gb: int = 400 # Maximum total cache size
6161

62+
# Buildx configuration
63+
use_buildx: bool = True # Use docker buildx for advanced caching and multi-platform builds
64+
buildx_builder_name: str = "aws-builder" # Name for the buildx builder instance
65+
6266

6367
@dataclass
6468
class BatchTask:
@@ -442,21 +446,63 @@ def _generate_user_data(self, batch_data_key: str) -> str:
442446
BUILD_START=$(date +%s.%N)
443447
BUILD_LOG_FILE="build.log"
444448
445-
# Build Docker command with S3 cache support
446-
DOCKER_BUILD_CMD="timeout $BATCH_TIMEOUT docker build -t $IMAGE_NAME . --build-arg REPO_URL=$REPO_URL --build-arg COMMIT_SHA=$SHA --build-arg ENV_PAYLOAD=\"$ENV_PAYLOAD\" --target $TAG"
449+
# Check if we should use buildx
450+
USE_BUILDX="{use_buildx}"
451+
BUILDER_NAME="{buildx_builder_name}"
452+
453+
if [ "$USE_BUILDX" = "true" ]; then
454+
echo "Setting up docker buildx builder: $BUILDER_NAME"
455+
456+
# Create buildx builder if it doesn't exist
457+
if ! docker buildx ls | grep -q "$BUILDER_NAME"; then
458+
echo "Creating buildx builder: $BUILDER_NAME"
459+
docker buildx create --name "$BUILDER_NAME" --use --driver docker-container || {
460+
echo "Failed to create buildx builder, falling back to default"
461+
docker buildx use default
462+
}
463+
else
464+
echo "Using existing buildx builder: $BUILDER_NAME"
465+
docker buildx use "$BUILDER_NAME"
466+
fi
467+
468+
# Build Docker command with buildx and S3 cache support
469+
DOCKER_BUILD_CMD="timeout $BATCH_TIMEOUT docker buildx build --load --progress=plain -t $IMAGE_NAME . --build-arg REPO_URL=$REPO_URL --build-arg COMMIT_SHA=$SHA --build-arg ENV_PAYLOAD=\"$ENV_PAYLOAD\" --target $TAG"
470+
471+
# Add S3 cache arguments if cache is enabled
472+
if [ "{enable_s3_cache}" = "true" ]; then
473+
CACHE_BUCKET="{cache_bucket}"
474+
CACHE_PREFIX="{cache_prefix}"
475+
CACHE_REGION="{cache_region}"
447476
448-
# Add S3 cache arguments if cache is enabled
449-
if [ "{enable_s3_cache}" = "true" ]; then
450-
CACHE_BUCKET="{cache_bucket}"
451-
CACHE_PREFIX="{cache_prefix}"
452-
CACHE_REGION="{cache_region}"
477+
# Generate cache mount configuration for buildx
478+
CACHE_FROM="type=s3,bucket=$CACHE_BUCKET,region=$CACHE_REGION,prefix=$CACHE_PREFIX/layers/$OWNER-$REPO-$SHA"
479+
CACHE_TO="type=s3,bucket=$CACHE_BUCKET,region=$CACHE_REGION,prefix=$CACHE_PREFIX/layers/$OWNER-$REPO-$SHA,mode=max"
453480
454-
# Generate cache mount configuration
455-
CACHE_MOUNT="type=s3,bucket=$CACHE_BUCKET,region=$CACHE_REGION,prefix=$CACHE_PREFIX/layers/$OWNER-$REPO-$SHA"
481+
DOCKER_BUILD_CMD="$DOCKER_BUILD_CMD --cache-from $CACHE_FROM --cache-to $CACHE_TO"
456482
457-
DOCKER_BUILD_CMD="$DOCKER_BUILD_CMD --cache-from $CACHE_MOUNT --cache-to $CACHE_MOUNT,mode=max"
483+
echo "Using buildx with S3 cache: bucket=$CACHE_BUCKET, prefix=$CACHE_PREFIX"
484+
else
485+
echo "Using buildx without S3 cache"
486+
fi
487+
else
488+
echo "Using standard docker build"
489+
490+
# Build Docker command with S3 cache support (legacy)
491+
DOCKER_BUILD_CMD="timeout $BATCH_TIMEOUT docker build -t $IMAGE_NAME . --build-arg REPO_URL=$REPO_URL --build-arg COMMIT_SHA=$SHA --build-arg ENV_PAYLOAD=\"$ENV_PAYLOAD\" --target $TAG"
492+
493+
# Add S3 cache arguments if cache is enabled
494+
if [ "{enable_s3_cache}" = "true" ]; then
495+
CACHE_BUCKET="{cache_bucket}"
496+
CACHE_PREFIX="{cache_prefix}"
497+
CACHE_REGION="{cache_region}"
458498
459-
echo "Using S3 cache: bucket=$CACHE_BUCKET, prefix=$CACHE_PREFIX"
499+
# Generate cache mount configuration
500+
CACHE_MOUNT="type=s3,bucket=$CACHE_BUCKET,region=$CACHE_REGION,prefix=$CACHE_PREFIX/layers/$OWNER-$REPO-$SHA"
501+
502+
DOCKER_BUILD_CMD="$DOCKER_BUILD_CMD --cache-from $CACHE_MOUNT --cache-to $CACHE_MOUNT,mode=max"
503+
504+
echo "Using S3 cache: bucket=$CACHE_BUCKET, prefix=$CACHE_PREFIX"
505+
fi
460506
fi
461507
462508
if $DOCKER_BUILD_CMD > "$BUILD_LOG_FILE" 2>&1; then
@@ -619,6 +665,8 @@ def _generate_user_data(self, batch_data_key: str) -> str:
619665
.replace("{cache_bucket}", self.cfg.cache_bucket or "")
620666
.replace("{cache_prefix}", self.cfg.cache_prefix)
621667
.replace("{cache_region}", self.cfg.cache_region or self.cfg.region)
668+
.replace("{use_buildx}", str(self.cfg.use_buildx).lower())
669+
.replace("{buildx_builder_name}", self.cfg.buildx_builder_name)
622670
)
623671

624672
def _stream_user_data_logs(self, instance_id: str, batch_idx: int, run_id: str, last_position: int = 0) -> int:

0 commit comments

Comments
 (0)