From 91c0519c645a81a39f15c1a549da5bf1be8bdf3c Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 31 Mar 2026 11:55:37 +0300 Subject: [PATCH] updated workflow --- docker-build-push/action.yml | 61 +++++++++++++++++++++--------------- docker-build-push/build.sh | 51 ++++++++++++++++++++++-------- 2 files changed, 74 insertions(+), 38 deletions(-) diff --git a/docker-build-push/action.yml b/docker-build-push/action.yml index bc06cd3..8f7e9ce 100644 --- a/docker-build-push/action.yml +++ b/docker-build-push/action.yml @@ -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 diff --git a/docker-build-push/build.sh b/docker-build-push/build.sh index 673bbd1..b896119 100755 --- a/docker-build-push/build.sh +++ b/docker-build-push/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 +echo "${INPUT_REGISTRY_TOKEN}" | docker login "${INPUT_REGISTRY}" -u "${INPUT_REGISTRY_USER}" --password-stdin +docker tag "${local_image}" "${remote_image}" +docker push "${remote_image}"