#!/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" 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 "${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}" \ -t "${local_image}" \ "${INPUT_CONTEXT}" echo "${INPUT_REGISTRY_TOKEN}" | docker login "${INPUT_REGISTRY}" -u "${INPUT_REGISTRY_USER}" --password-stdin docker tag "${local_image}" "${remote_image}" docker push "${remote_image}"