kaniko-action/action.yaml

63 lines
2.3 KiB
YAML
Raw Normal View History

2026-10-07 16:01:40 +02:00
name: 'Kaniko Build & Push'
description: 'Builds a multi-stage Dockerfile using Kaniko and pushes it to a container registry'
author: 'Your Name'
inputs:
registry_user:
description: 'Username for the container registry authentication'
required: true
registry_token:
description: 'Password or Token for the container registry authentication'
required: true
dockerfile_path:
description: 'Relative path to the Dockerfile (e.g., ./test-1/Dockerfile)'
required: false
default: './Dockerfile'
target_stage:
description: 'Target stage to build in a multi-stage Dockerfile'
required: false
default: ''
destination_image:
description: 'The full image name and tag (e.g., my-repo/php-fpm:test)'
required: true
cache_repo:
description: 'Custom path for Kaniko cache layers'
required: false
default: ''
runs:
using: 'composite'
steps:
- name: Build and Push with Kaniko
2026-10-07 16:10:06 +02:00
shell: bash
2026-10-07 16:01:40 +02:00
run: |
# 1. Initialize Kaniko Docker config directory
mkdir -p /kaniko/.docker
# 2. Authenticate cleanly using the full server URL string
echo "{\"auths\":{\"${{ forgejo.server_url }}\":{\"username\":\"${{ inputs.registry_user }}\",\"password\":\"${{ inputs.registry_token }}\"}}}" > /kaniko/.docker/config.json
# 3. Clean up the domain name specifically for destinations and cache routing pointers
REGISTRY_DOMAIN=$(echo "${{ forgejo.server_url }}" | sed -e 's/https:\/\///g' -e 's/http:\/\///g')
# 4. Construct execution arguments dynamically based on optional inputs
TARGET_ARG=""
if [ -n "${{ inputs.target_stage }}" ]; then
TARGET_ARG="--target=${{ inputs.target_stage }}"
fi
CACHE_REPO_ARG="$REGISTRY_DOMAIN/${{ forgejo.repository }}/cache"
if [ -n "${{ inputs.cache_repo }}" ]; then
CACHE_REPO_ARG="${{ inputs.cache_repo }}"
fi
# 5. Fire Kaniko executor
/kaniko/executor \
--context="dir://${{ forgejo.workspace }}" \
--dockerfile="${{ forgejo.workspace }}/${{ inputs.dockerfile_path }}" \
$TARGET_ARG \
--destination="$REGISTRY_DOMAIN/${{ inputs.destination_image }}" \
--cache=true \
--cache-repo="$CACHE_REPO_ARG" \
--compressed-caching