Files
2026-03-31 15:56:16 +03:00

57 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
: "${INPUT_GIT_SERVER_URL:?missing INPUT_GIT_SERVER_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}"
case "${INPUT_IMAGE_NAME}" in
*/*) ;;
*)
echo "INPUT_IMAGE_NAME must include owner/name, for example: example/testapp" >&2
exit 1
;;
esac
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"
sha_tag="${INPUT_GIT_SHA}"
latest_tag="latest"
local_image="localbuild:${INPUT_IMAGE_TAG}"
remote_image="${INPUT_REGISTRY}/${INPUT_IMAGE_NAME}:${INPUT_IMAGE_TAG}"
remote_image_sha="${INPUT_REGISTRY}/${INPUT_IMAGE_NAME}:${sha_tag}"
remote_image_latest="${INPUT_REGISTRY}/${INPUT_IMAGE_NAME}:${latest_tag}"
rm -rf "${workdir}"
mkdir -p "${workdir}"
git init "${workdir}"
cd "${workdir}"
git remote add origin "${INPUT_GIT_SERVER_URL}/${INPUT_GIT_REPOSITORY}.git"
git config http.extraHeader "Authorization: Basic $(printf '%s:%s' "${INPUT_GIT_USER}" "${INPUT_GIT_TOKEN}" | base64 -w0)"
git fetch --depth=1 origin "${INPUT_GIT_SHA}"
git checkout --detach FETCH_HEAD
docker build \
-f "${INPUT_DOCKERFILE}" \
--label "org.opencontainers.image.revision=${INPUT_GIT_SHA}" \
--label "org.opencontainers.image.source=${INPUT_GIT_SERVER_URL}/${INPUT_GIT_REPOSITORY}" \
-t "${local_image}" \
"${INPUT_CONTEXT}"