commit 7d66076e3b2311886e793019bd4ba974e8452faf Author: M. Passarello Date: Mon Oct 20 11:59:58 2025 +0200 feat: add composite action for docker buildx setup diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..0bfb2a7 --- /dev/null +++ b/action.yml @@ -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"