#!/usr/bin/env bash set -euo pipefail if [ "${INPUT_DEBUG,,}" == "true" ]; then set -x fi RUNTIME_OPTIONS=() CUSTOM_OPTIONS=() RUN_COMMAND=() env | grep -v -E "^(#|;| |PATH|SHLVL|HOSTNAME|DOCKER_*)" | awk '$1 ~ /^\w+=/' | xargs -0 > "/docker-run-action.env" if [ "${INPUT_DEBUG,,}" == "true" ]; then cat "/docker-run-action.env" fi # login to container registry if [ -n "${INPUT_USERNAME}" ]; then printf -- '%s' "'${INPUT_PASSWORD}'" | docker login "${INPUT_REGISTRY}" -u "${INPUT_USERNAME}" --password-stdin fi # set custom network if [ -n "${INPUT_DOCKER_NETWORK}" ]; then RUNTIME_OPTIONS+=(--network "${INPUT_DOCKER_NETWORK}") fi # mount docker socket if [ "${INPUT_MOUNT_SOCKET,,}" == "true" ]; then RUNTIME_OPTIONS+=(--volume "/var/run/docker.sock:/var/run/docker.sock") fi # set entrypoint if [ "${INPUT_ENTRYPOINT,,}" == "true" ]; then RUNTIME_OPTIONS+=(--entrypoint="${INPUT_ENTRYPOINT}") fi # map volumes mapfile -t -d ' ' TMP_VOLUMES < <(printf -- '%s' "${INPUT_VOLUMES}") for vol in "${TMP_VOLUMES[@]}"; do RUNTIME_OPTIONS+=(--volume "${vol}") done # get custom options mapfile -t -d ' ' TMP_OPTIONS < <(printf -- '%s' "${INPUT_OPTIONS}") for opt in "${TMP_OPTIONS[@]}"; do CUSTOM_OPTIONS+=("${opt}") done # get run command mapfile -t -d ' ' TMP_RUN < <(printf -- '%s' "${INPUT_RUN}") for cmd in "${TMP_RUN[@]}"; do RUN_COMMAND+=("${cmd}") done exec docker run \ --volume "${INPUT_WORKDIR}:${INPUT_WORKDIR}" \ --workdir "${INPUT_WORKDIR}" \ --env-file "/docker-run-action.env" \ "${RUNTIME_OPTIONS[@]}" \ "${CUSTOM_OPTIONS[@]}" \ "${INPUT_IMAGE}" \ "${RUN_COMMAND[@]}"