updated workflow
This commit is contained in:
@@ -1,63 +1,74 @@
|
||||
name: docker-build-push
|
||||
description: Clone, build, and optionally push a Docker image
|
||||
description: Clone app repo, build Docker image, and push it to the private registry
|
||||
|
||||
inputs:
|
||||
git_base_url:
|
||||
description: Base Git host without scheme path, for example git.example.com
|
||||
required: true
|
||||
|
||||
git_repository:
|
||||
description: Repository path, for example example/signup_app
|
||||
required: true
|
||||
git_ref:
|
||||
required: true
|
||||
|
||||
git_sha:
|
||||
description: Commit SHA to check out
|
||||
required: true
|
||||
|
||||
git_user:
|
||||
description: Git username for cloning private repositories
|
||||
required: true
|
||||
|
||||
git_token:
|
||||
description: Git token for cloning private repositories
|
||||
required: true
|
||||
|
||||
registry:
|
||||
description: OCI registry host
|
||||
required: true
|
||||
default: zmeyka.exocortex.ru
|
||||
|
||||
registry_user:
|
||||
description: Registry username
|
||||
required: true
|
||||
|
||||
registry_token:
|
||||
description: Registry token or password
|
||||
required: true
|
||||
|
||||
image_name:
|
||||
required: true
|
||||
image_tag:
|
||||
description: Image path inside registry, for example example/signup_app
|
||||
required: true
|
||||
|
||||
push:
|
||||
required: false
|
||||
default: "false"
|
||||
registry:
|
||||
required: false
|
||||
default: ""
|
||||
registry_user:
|
||||
required: false
|
||||
default: ""
|
||||
registry_token:
|
||||
required: false
|
||||
default: ""
|
||||
image_tag:
|
||||
description: Image tag, for example latest
|
||||
required: true
|
||||
|
||||
context:
|
||||
description: Docker build context
|
||||
required: false
|
||||
default: "."
|
||||
default: .
|
||||
|
||||
dockerfile:
|
||||
description: Dockerfile path
|
||||
required: false
|
||||
default: "Dockerfile"
|
||||
default: Dockerfile
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
- name: Run build script
|
||||
- name: Run build and push script
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_GIT_BASE_URL: ${{ inputs.git_base_url }}
|
||||
INPUT_GIT_REPOSITORY: ${{ inputs.git_repository }}
|
||||
INPUT_GIT_REF: ${{ inputs.git_ref }}
|
||||
INPUT_GIT_SHA: ${{ inputs.git_sha }}
|
||||
INPUT_GIT_USER: ${{ inputs.git_user }}
|
||||
INPUT_GIT_TOKEN: ${{ inputs.git_token }}
|
||||
INPUT_IMAGE_NAME: ${{ inputs.image_name }}
|
||||
INPUT_IMAGE_TAG: ${{ inputs.image_tag }}
|
||||
INPUT_PUSH: ${{ inputs.push }}
|
||||
INPUT_REGISTRY: ${{ inputs.registry }}
|
||||
INPUT_REGISTRY_USER: ${{ inputs.registry_user }}
|
||||
INPUT_REGISTRY_TOKEN: ${{ inputs.registry_token }}
|
||||
INPUT_IMAGE_NAME: ${{ inputs.image_name }}
|
||||
INPUT_IMAGE_TAG: ${{ inputs.image_tag }}
|
||||
INPUT_CONTEXT: ${{ inputs.context }}
|
||||
INPUT_DOCKERFILE: ${{ inputs.dockerfile }}
|
||||
run: ${{ gitea.action_path }}/build.sh
|
||||
|
||||
@@ -1,27 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
workdir="$PWD/repo"
|
||||
: "${INPUT_GIT_BASE_URL:?missing INPUT_GIT_BASE_URL}"
|
||||
: "${INPUT_GIT_REPOSITORY:?missing INPUT_GIT_REPOSITORY}"
|
||||
: "${INPUT_GIT_SHA:?missing INPUT_GIT_SHA}"
|
||||
: "${INPUT_GIT_USER:?missing INPUT_GIT_USER}"
|
||||
: "${INPUT_GIT_TOKEN:?missing INPUT_GIT_TOKEN}"
|
||||
: "${INPUT_REGISTRY:?missing INPUT_REGISTRY}"
|
||||
: "${INPUT_REGISTRY_USER:?missing INPUT_REGISTRY_USER}"
|
||||
: "${INPUT_REGISTRY_TOKEN:?missing INPUT_REGISTRY_TOKEN}"
|
||||
: "${INPUT_IMAGE_NAME:?missing INPUT_IMAGE_NAME}"
|
||||
: "${INPUT_IMAGE_TAG:?missing INPUT_IMAGE_TAG}"
|
||||
: "${INPUT_CONTEXT:?missing INPUT_CONTEXT}"
|
||||
: "${INPUT_DOCKERFILE:?missing INPUT_DOCKERFILE}"
|
||||
|
||||
rm -rf "$workdir"
|
||||
mkdir -p "$workdir"
|
||||
case "${INPUT_IMAGE_NAME}" in
|
||||
*/*) ;;
|
||||
*)
|
||||
echo "INPUT_IMAGE_NAME must include owner/name, for example: example/signup_app" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
git init "$workdir"
|
||||
cd "$workdir"
|
||||
case "${INPUT_IMAGE_NAME}" in
|
||||
*.*/*|*:*/*)
|
||||
echo "INPUT_IMAGE_NAME must not include a registry hostname; use INPUT_REGISTRY for that" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
workdir="${PWD}/repo"
|
||||
local_image="localbuild:${INPUT_IMAGE_TAG}"
|
||||
remote_image="${INPUT_REGISTRY}/${INPUT_IMAGE_NAME}:${INPUT_IMAGE_TAG}"
|
||||
|
||||
rm -rf "${workdir}"
|
||||
mkdir -p "${workdir}"
|
||||
|
||||
git init "${workdir}"
|
||||
cd "${workdir}"
|
||||
git remote add origin "https://${INPUT_GIT_USER}:${INPUT_GIT_TOKEN}@${INPUT_GIT_BASE_URL}/${INPUT_GIT_REPOSITORY}.git"
|
||||
git fetch --depth=1 origin "${INPUT_GIT_SHA}"
|
||||
git checkout --detach FETCH_HEAD
|
||||
|
||||
full_image="${INPUT_IMAGE_NAME}:${INPUT_IMAGE_TAG}"
|
||||
|
||||
docker build \
|
||||
-f "${INPUT_DOCKERFILE}" \
|
||||
-t "${full_image}" \
|
||||
-t "${local_image}" \
|
||||
"${INPUT_CONTEXT}"
|
||||
|
||||
if [ "${INPUT_PUSH}" = "true" ]; then
|
||||
echo "${INPUT_REGISTRY_TOKEN}" | docker login "${INPUT_REGISTRY}" -u "${INPUT_REGISTRY_USER}" --password-stdin
|
||||
docker tag "${full_image}" "${INPUT_REGISTRY}/${full_image}"
|
||||
docker push "${INPUT_REGISTRY}/${full_image}"
|
||||
fi
|
||||
docker tag "${local_image}" "${remote_image}"
|
||||
docker push "${remote_image}"
|
||||
|
||||
Reference in New Issue
Block a user