90 lines
2.8 KiB
YAML
90 lines
2.8 KiB
YAML
name: 'Docker Build and Push'
|
|
description: 'Log into Harbor, build and push image'
|
|
inputs:
|
|
harbor_user:
|
|
description: 'Harbor Username'
|
|
required: true
|
|
harbor_secret:
|
|
description: 'Harbor Secret'
|
|
required: true
|
|
image_repo:
|
|
description: 'Harbor Image Repository (without tag)'
|
|
required: true
|
|
dockerfile:
|
|
description: 'Path to Dockerfile'
|
|
required: false
|
|
default: './Dockerfile'
|
|
build_context:
|
|
description: 'Docker Build Context'
|
|
required: false
|
|
default: '.'
|
|
docker_build_args:
|
|
description: 'Docker Build Args as multiple lines or single line'
|
|
required: false
|
|
default: ''
|
|
harbor_host:
|
|
description: 'Harbor Host'
|
|
required: false
|
|
default: 'harbor.hclife.co'
|
|
outputs:
|
|
image_tag:
|
|
description: 'Generated Image Tag (UTC timestamp)'
|
|
value: ${{ steps.build_push.outputs.image_tag }}
|
|
runs:
|
|
using: 'composite'
|
|
steps:
|
|
- name: Build and Push
|
|
id: build_push
|
|
shell: bash
|
|
env:
|
|
DOCKER_BUILDKIT: 1
|
|
HARBOR_USER: ${{ inputs.harbor_user }}
|
|
HARBOR_SECRET: ${{ inputs.harbor_secret }}
|
|
COMMIT_SHA: ${{ github.sha }}
|
|
IMAGE_REPO: ${{ inputs.image_repo }}
|
|
DOCKERFILE: ${{ inputs.dockerfile }}
|
|
BUILD_CONTEXT: ${{ inputs.build_context }}
|
|
DOCKER_BUILD_ARGS: ${{ inputs.docker_build_args }}
|
|
HARBOR_HOST: ${{ inputs.harbor_host }}
|
|
run: |
|
|
set -eu
|
|
IMAGE_TAG="$(date -u +%Y%m%d-%H%M%S)"
|
|
echo "image_tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT"
|
|
|
|
test -n "$IMAGE_REPO"
|
|
test -n "$DOCKERFILE"
|
|
test -n "$BUILD_CONTEXT"
|
|
test -f "$DOCKERFILE"
|
|
test -d "$BUILD_CONTEXT"
|
|
|
|
echo "Logging into $HARBOR_HOST..."
|
|
echo "$HARBOR_SECRET" | docker login "$HARBOR_HOST" -u "$HARBOR_USER" --password-stdin
|
|
|
|
BUILD_ARG_FLAGS=()
|
|
if [ -n "$DOCKER_BUILD_ARGS" ]; then
|
|
while IFS= read -r build_arg_line; do
|
|
[ -n "$build_arg_line" ] || continue
|
|
BUILD_ARG_FLAGS+=("--build-arg" "$build_arg_line")
|
|
done <<< "$DOCKER_BUILD_ARGS"
|
|
fi
|
|
|
|
echo "Building Image..."
|
|
if [ ${#BUILD_ARG_FLAGS[@]} -gt 0 ]; then
|
|
docker build "${BUILD_ARG_FLAGS[@]}" \
|
|
-t "$IMAGE_REPO:$IMAGE_TAG" \
|
|
-t "$IMAGE_REPO:$COMMIT_SHA" \
|
|
-t "$IMAGE_REPO:latest" \
|
|
-f "$DOCKERFILE" "$BUILD_CONTEXT"
|
|
else
|
|
docker build \
|
|
-t "$IMAGE_REPO:$IMAGE_TAG" \
|
|
-t "$IMAGE_REPO:$COMMIT_SHA" \
|
|
-t "$IMAGE_REPO:latest" \
|
|
-f "$DOCKERFILE" "$BUILD_CONTEXT"
|
|
fi
|
|
|
|
echo "Pushing Image..."
|
|
docker push "$IMAGE_REPO:$IMAGE_TAG"
|
|
docker push "$IMAGE_REPO:$COMMIT_SHA"
|
|
docker push "$IMAGE_REPO:latest"
|