#!/bin/sh set -e if [ -z "$INPUT_HOST" ]; then echo "Error: host is required" exit 1 fi if [ -z "$INPUT_USERNAME" ]; then echo "Error: username is required" exit 1 fi if [ -z "$INPUT_KEY" ]; then echo "Error: key is required" exit 1 fi if [ -z "$INPUT_TARGET" ]; then echo "Error: target is required" exit 1 fi SSH_PORT="${INPUT_PORT:-22}" SOURCE="${INPUT_SOURCE:-.}" # ssh expands ~ from the passwd database rather than $HOME, so the two disagree # whenever a container sets HOME elsewhere. Pass absolute paths instead. SSH_DIR="$HOME/.ssh" KEY_FILE="$SSH_DIR/deploy_key" KNOWN_HOSTS="$SSH_DIR/known_hosts" mkdir -p "$SSH_DIR" chmod 700 "$SSH_DIR" trap 'rm -f "$KEY_FILE"' EXIT echo "$INPUT_KEY" > "$KEY_FILE" chmod 600 "$KEY_FILE" ssh-keyscan -p "$SSH_PORT" -H "$INPUT_HOST" >> "$KNOWN_HOSTS" 2>/dev/null rsync -avz \ -e "ssh -i $KEY_FILE -o UserKnownHostsFile=$KNOWN_HOSTS -p $SSH_PORT -o ConnectTimeout=30" \ $INPUT_ARGS \ "${SOURCE}/" \ "${INPUT_USERNAME}@${INPUT_HOST}:${INPUT_TARGET}/" echo "Deployed ${SOURCE} to ${INPUT_HOST}:${INPUT_TARGET}"