feat: add composite action for docker buildx setup
This commit is contained in:
74
action.yml
Normal file
74
action.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user