53 lines
1.3 KiB
Bash
Executable file
53 lines
1.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
RUNTIME_OPTIONS=()
|
|
CUSTOM_OPTIONS=()
|
|
RUN_COMMAND=()
|
|
|
|
env | grep -v -E "^(#|;| |PATH|SHLVL|HOSTNAME|DOCKER_*)" | awk '$1 ~ /^\w+=/' | xargs -0 > "/docker-run-action.env"
|
|
|
|
# login to container registry
|
|
if [ -n "${INPUT_USERNAME}" ]; then
|
|
echo "${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
|
|
|
|
# map volumes
|
|
mapfile -t TMP_VOLUMES < <(printf ${INPUT_VOLUMES})
|
|
for vol in "${TMP_VOLUMES[@]}"; do
|
|
RUNTIME_OPTIONS+=(--volume "${vol}")
|
|
done
|
|
|
|
# get custom options
|
|
mapfile -t TMP_OPTIONS < <(printf ${INPUT_OPTIONS})
|
|
for opt in "${TMP_OPTIONS[@]}"; do
|
|
CUSTOM_OPTIONS+=("${opt}")
|
|
done
|
|
|
|
# get run command
|
|
mapfile -t TMP_RUN < <(printf ${INPUT_RUN})
|
|
for cmd in "${TMP_RUN[@]}"; do
|
|
RUN_COMMAND+=("${cmd}")
|
|
done
|
|
|
|
exec docker run \
|
|
--rm \
|
|
--volume "${INPUT_WORKDIR}:${INPUT_WORKDIR}" \
|
|
--workdir "${INPUT_WORKDIR}" \
|
|
--entrypoint="${INPUT_SHELL}" \
|
|
--env-file "/docker-run-action.env" \
|
|
"${RUNTIME_OPTIONS[@]}" \
|
|
"${CUSTOM_OPTIONS[@]}" \
|
|
"${INPUT_IMAGE}" \
|
|
"${RUN_COMMAND[@]}"
|