updated workflow

This commit is contained in:
SG
2026-03-31 11:55:37 +03:00
parent c1198a4f70
commit 91c0519c64
2 changed files with 74 additions and 38 deletions

View File

@@ -1,63 +1,74 @@
name: docker-build-push 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: inputs:
git_base_url: git_base_url:
description: Base Git host without scheme path, for example git.example.com
required: true required: true
git_repository: git_repository:
description: Repository path, for example example/signup_app
required: true required: true
git_ref:
required: true
git_sha: git_sha:
description: Commit SHA to check out
required: true required: true
git_user: git_user:
description: Git username for cloning private repositories
required: true required: true
git_token: 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 required: true
image_name: image_name:
required: true description: Image path inside registry, for example example/signup_app
image_tag:
required: true required: true
push: image_tag:
required: false description: Image tag, for example latest
default: "false" required: true
registry:
required: false
default: ""
registry_user:
required: false
default: ""
registry_token:
required: false
default: ""
context: context:
description: Docker build context
required: false required: false
default: "." default: .
dockerfile: dockerfile:
description: Dockerfile path
required: false required: false
default: "Dockerfile" default: Dockerfile
runs: runs:
using: "composite" using: composite
steps: steps:
- name: Run build script - name: Run build and push script
shell: bash shell: bash
env: env:
INPUT_GIT_BASE_URL: ${{ inputs.git_base_url }} INPUT_GIT_BASE_URL: ${{ inputs.git_base_url }}
INPUT_GIT_REPOSITORY: ${{ inputs.git_repository }} INPUT_GIT_REPOSITORY: ${{ inputs.git_repository }}
INPUT_GIT_REF: ${{ inputs.git_ref }}
INPUT_GIT_SHA: ${{ inputs.git_sha }} INPUT_GIT_SHA: ${{ inputs.git_sha }}
INPUT_GIT_USER: ${{ inputs.git_user }} INPUT_GIT_USER: ${{ inputs.git_user }}
INPUT_GIT_TOKEN: ${{ inputs.git_token }} 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: ${{ inputs.registry }}
INPUT_REGISTRY_USER: ${{ inputs.registry_user }} INPUT_REGISTRY_USER: ${{ inputs.registry_user }}
INPUT_REGISTRY_TOKEN: ${{ inputs.registry_token }} INPUT_REGISTRY_TOKEN: ${{ inputs.registry_token }}
INPUT_IMAGE_NAME: ${{ inputs.image_name }}
INPUT_IMAGE_TAG: ${{ inputs.image_tag }}
INPUT_CONTEXT: ${{ inputs.context }} INPUT_CONTEXT: ${{ inputs.context }}
INPUT_DOCKERFILE: ${{ inputs.dockerfile }} INPUT_DOCKERFILE: ${{ inputs.dockerfile }}
run: ${{ gitea.action_path }}/build.sh run: ${{ gitea.action_path }}/build.sh

View File

@@ -1,27 +1,52 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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" case "${INPUT_IMAGE_NAME}" in
mkdir -p "$workdir" */*) ;;
*)
echo "INPUT_IMAGE_NAME must include owner/name, for example: example/signup_app" >&2
exit 1
;;
esac
git init "$workdir" case "${INPUT_IMAGE_NAME}" in
cd "$workdir" *.*/*|*:*/*)
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 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 fetch --depth=1 origin "${INPUT_GIT_SHA}"
git checkout --detach FETCH_HEAD git checkout --detach FETCH_HEAD
full_image="${INPUT_IMAGE_NAME}:${INPUT_IMAGE_TAG}"
docker build \ docker build \
-f "${INPUT_DOCKERFILE}" \ -f "${INPUT_DOCKERFILE}" \
-t "${full_image}" \ -t "${local_image}" \
"${INPUT_CONTEXT}" "${INPUT_CONTEXT}"
if [ "${INPUT_PUSH}" = "true" ]; then
echo "${INPUT_REGISTRY_TOKEN}" | docker login "${INPUT_REGISTRY}" -u "${INPUT_REGISTRY_USER}" --password-stdin echo "${INPUT_REGISTRY_TOKEN}" | docker login "${INPUT_REGISTRY}" -u "${INPUT_REGISTRY_USER}" --password-stdin
docker tag "${full_image}" "${INPUT_REGISTRY}/${full_image}" docker tag "${local_image}" "${remote_image}"
docker push "${INPUT_REGISTRY}/${full_image}" docker push "${remote_image}"
fi