75 lines
2.4 KiB
YAML
75 lines
2.4 KiB
YAML
name: "Setup Buildx (tiny)"
|
|
description: "Create & optionally use a docker buildx builder with an optional random name."
|
|
inputs:
|
|
name:
|
|
description: "Builder name. If empty, a random name is generated."
|
|
required: false
|
|
default: ""
|
|
use:
|
|
description: "Whether to set the builder as current (default: true)."
|
|
required: false
|
|
default: "true"
|
|
driver:
|
|
description: "Buildx driver (default: docker-container)."
|
|
required: false
|
|
default: "docker-container"
|
|
image:
|
|
description: "Optional BuildKit image (e.g. moby/buildkit:v0.15.2). If empty, not passed."
|
|
required: false
|
|
default: ""
|
|
outputs:
|
|
name:
|
|
description: "The effective builder name."
|
|
value: ${{ steps.main.outputs.name }}
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- id: main
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# Inputs
|
|
IN_NAME="${{ inputs.name }}"
|
|
IN_USE="${{ inputs.use }}"
|
|
IN_DRIVER="${{ inputs.driver }}"
|
|
IN_IMAGE="${{ inputs.image }}"
|
|
|
|
# Generate random name if empty (lowercase, 8 chars)
|
|
if [[ -z "${IN_NAME}" ]]; then
|
|
if command -v uuidgen >/dev/null 2>&1; then
|
|
RAND="$(uuidgen | tr 'A-Z' 'a-z' | tr -cd 'a-z0-9' | cut -c1-8)"
|
|
else
|
|
RAND="$(head -c 12 /dev/urandom | tr -cd 'a-z0-9' | cut -c1-8)"
|
|
fi
|
|
BUILDER_NAME="builder-${RAND}"
|
|
else
|
|
BUILDER_NAME="${IN_NAME}"
|
|
fi
|
|
|
|
# Compose driver-opts if image provided
|
|
DRIVER_OPTS=()
|
|
if [[ -n "${IN_IMAGE}" ]]; then
|
|
DRIVER_OPTS+=(--driver-opt "image=${IN_IMAGE}")
|
|
fi
|
|
|
|
# If builder exists: optionally use it; else create it
|
|
if docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then
|
|
echo "ℹ️ Builder '${BUILDER_NAME}' already exists."
|
|
if [[ "${IN_USE}" == "true" ]]; then
|
|
docker buildx use "${BUILDER_NAME}"
|
|
echo "✅ Using existing builder: ${BUILDER_NAME}"
|
|
fi
|
|
else
|
|
CMD=(docker buildx create --name "${BUILDER_NAME}" --driver "${IN_DRIVER}" "${DRIVER_OPTS[@]}")
|
|
if [[ "${IN_USE}" == "true" ]]; then
|
|
CMD+=("--use")
|
|
fi
|
|
echo "+ ${CMD[*]}"
|
|
"${CMD[@]}"
|
|
echo "✅ Created${IN_USE:+ and using} builder: ${BUILDER_NAME}"
|
|
fi
|
|
|
|
# Output for downstream steps
|
|
echo "name=${BUILDER_NAME}" >> "$GITHUB_OUTPUT"
|