diff --git a/docker-build-push/action.yml b/docker-build-push/action.yml index e8a6719..51a29bb 100644 --- a/docker-build-push/action.yml +++ b/docker-build-push/action.yml @@ -53,22 +53,53 @@ inputs: required: false default: Dockerfile + remote_docker_ssh_host: + description: Remote Docker host to pull and run the image on + required: false + + remote_docker_ssh_port: + description: SSH port on the remote Docker host + required: false + default: "22" + + remote_docker_ssh_username: + description: Remote Docker host SSH user + required: false + + remote_docker_ssh_key: + decription: Private SSH key to update the image on remote Docker host + required: false + + runs: using: composite steps: - - name: Run build and push script + - name: Build the image shell: bash - env: - INPUT_GIT_SERVER_URL: ${{ inputs.git_server_url }} - INPUT_GIT_REPOSITORY: ${{ inputs.git_repository }} - INPUT_GIT_SHA: ${{ inputs.git_sha }} - INPUT_GIT_USER: ${{ inputs.git_user }} - INPUT_GIT_TOKEN: ${{ inputs.git_token }} - 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 + - name: Push to registry + shell: bash + run: ${{ gitea.action_path }}/push.sh + - name: Update remote Docker host + shell: bash + run: ${{ gitea.action_path }}/update.sh + +env: + INPUT_GIT_SERVER_URL: ${{ inputs.git_server_url }} + INPUT_GIT_REPOSITORY: ${{ inputs.git_repository }} + INPUT_GIT_SHA: ${{ inputs.git_sha }} + INPUT_GIT_USER: ${{ inputs.git_user }} + INPUT_GIT_TOKEN: ${{ inputs.git_token }} + 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 }} + INPUT_REMOTE_DOCKER_SSH_HOST: ${{ inputs.remote_docker_ssh_host }} + INPUT_REMOTE_DOCKER_SSH_PORT: ${{ inputs.remote_docker_ssh_port }} + INPUT_REMOTE_DOCKER_SSH_USERNAME: ${{ inputs.remote_docker_ssh_username }} + INPUT_REMOTE_DOCKER_SSH_KEY: ${{ inputs.remote_docker_ssh_key }} + + diff --git a/docker-build-push/push.sh b/docker-build-push/push.sh new file mode 100755 index 0000000..0c79e23 --- /dev/null +++ b/docker-build-push/push.sh @@ -0,0 +1,53 @@ +#!/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}" diff --git a/docker-build-push/update.sh b/docker-build-push/update.sh new file mode 100755 index 0000000..06d81f7 --- /dev/null +++ b/docker-build-push/update.sh @@ -0,0 +1,23 @@ +#!/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}" +: "${INPUT_REMOTE_DOCKER_SSH_HOST:?missing INPUT_REMOTE_DOCKER_SSH_HOST}" +: "${INPUT_REMOTE_DOCKER_SSH_PORT:?missing INPUT_REMOTE_DOCKER_SSH_PORT}" +: "${INPUT_REMOTE_DOCKER_SSH_USERNAME:?missing INPUT_REMOTE_DOCKER_SSH_USERNAME}" +: "${INPUT_REMOTE_DOCKER_SSH_KEY:?missing INPUT_REMOTE_DOCKER_SSH_KEY}" +echo "Dummy Update step, pretend to ssh into remote Docker host" "$INPUT_REMOTE_DOCKER_SSH_USERNAME"@"$INPUT_REMOTE_DOCKER_SSH_HOST":"$DOCKER_REMOTE_SSH_PORT" + + +