Skip to content

Commit 456fd29

Browse files
committed
ci(docker): support multiple image tags
1 parent cf9724f commit 456fd29

2 files changed

Lines changed: 25 additions & 29 deletions

File tree

.github/workflows/docker.yaml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,5 @@ jobs:
3535
3636
./scripts/build-docker.sh \
3737
--tag "$image:$version" \
38-
--push
39-
40-
docker buildx imagetools create \
4138
--tag "$image:latest" \
42-
"$image:$version"
39+
--push

scripts/build-docker.sh

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# OPTIONS
1818
# ==============================================================================
1919
#
20-
# --tag TAG Docker image tag (required)
20+
# --tag TAG Docker image tag (required, repeatable)
2121
# --platform PLAT Target platforms (default: linux/amd64,linux/arm64)
2222
# --os-name NAME Base OS name (default: ubuntu)
2323
# --os-version VER Base OS version (default: 22.04)
@@ -132,7 +132,7 @@ PLATFORMS="linux/amd64,linux/arm64"
132132
OS_NAME="ubuntu"
133133
OS_VERSION="22.04"
134134
CUDA_VERSION="12.4.1"
135-
TAG=""
135+
TAGS=()
136136
PUSH=false
137137
LOAD=false
138138
NO_CACHE=false
@@ -174,7 +174,7 @@ show_help() {
174174
while [[ $# -gt 0 ]]; do
175175
case $1 in
176176
--tag)
177-
TAG="$2"
177+
TAGS+=("$2")
178178
shift 2
179179
;;
180180
--platform)
@@ -220,10 +220,11 @@ while [[ $# -gt 0 ]]; do
220220
done
221221

222222
# Validate required arguments
223-
if [[ -z "$TAG" ]]; then
223+
if [[ ${#TAGS[@]} -eq 0 ]]; then
224224
log_error "Docker image tag is required. Use --tag to specify."
225225
exit 1
226226
fi
227+
TAG="${TAGS[0]}"
227228

228229
# Check for Dockerfile
229230
if [[ ! -f "$PROJECT_ROOT/Dockerfile" ]]; then
@@ -250,44 +251,42 @@ if [[ "$LOAD" == "true" && "$PLATFORMS" == *","* ]]; then
250251
fi
251252

252253
# Build the command
253-
BUILD_CMD="docker buildx build"
254-
255-
# Add platform
256-
BUILD_CMD="$BUILD_CMD --platform $PLATFORMS"
257-
258-
# Add build args
259-
BUILD_CMD="$BUILD_CMD --build-arg OS_NAME=$OS_NAME"
260-
BUILD_CMD="$BUILD_CMD --build-arg OS_VERSION=$OS_VERSION"
261-
BUILD_CMD="$BUILD_CMD --build-arg CUDA_VERSION=$CUDA_VERSION"
262-
263-
# Add tag
264-
BUILD_CMD="$BUILD_CMD -t $TAG"
254+
BUILD_CMD=(
255+
docker buildx build
256+
--platform "$PLATFORMS"
257+
--build-arg "OS_NAME=$OS_NAME"
258+
--build-arg "OS_VERSION=$OS_VERSION"
259+
--build-arg "CUDA_VERSION=$CUDA_VERSION"
260+
)
261+
262+
for tag in "${TAGS[@]}"; do
263+
BUILD_CMD+=(--tag "$tag")
264+
done
265265

266-
# Add Dockerfile
267-
BUILD_CMD="$BUILD_CMD -f $PROJECT_ROOT/Dockerfile"
266+
BUILD_CMD+=(-f "$PROJECT_ROOT/Dockerfile")
268267

269268
# Add optional flags
270269
if [[ "$PUSH" == "true" ]]; then
271-
BUILD_CMD="$BUILD_CMD --push"
270+
BUILD_CMD+=(--push)
272271
fi
273272

274273
if [[ "$LOAD" == "true" ]]; then
275-
BUILD_CMD="$BUILD_CMD --load"
274+
BUILD_CMD+=(--load)
276275
fi
277276

278277
if [[ "$NO_CACHE" == "true" ]]; then
279-
BUILD_CMD="$BUILD_CMD --no-cache"
278+
BUILD_CMD+=(--no-cache)
280279
fi
281280

282281
# Add context
283-
BUILD_CMD="$BUILD_CMD $PROJECT_ROOT"
282+
BUILD_CMD+=("$PROJECT_ROOT")
284283

285284
# Print build information
286285
echo ""
287286
log_info "========================================"
288287
log_info "GPUd Docker Build"
289288
log_info "========================================"
290-
log_info "Tag: $TAG"
289+
log_info "Tags: ${TAGS[*]}"
291290
log_info "Platforms: $PLATFORMS"
292291
log_info "OS: $OS_NAME $OS_VERSION"
293292
log_info "CUDA Version: $CUDA_VERSION"
@@ -300,11 +299,11 @@ echo ""
300299

301300
log_step "Building Docker image..."
302301
echo ""
303-
log_info "Command: $BUILD_CMD"
302+
log_info "Command: ${BUILD_CMD[*]}"
304303
echo ""
305304

306305
# Execute build
307-
eval "$BUILD_CMD"
306+
"${BUILD_CMD[@]}"
308307

309308
BUILD_STATUS=$?
310309

0 commit comments

Comments
 (0)