init
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user