rsync-action/action.yml
2024-05-01 17:19:22 +02:00

108 lines
2.8 KiB
YAML

name: 'Rsync SSH transfer'
description: 'Transfer files to another location'
inputs:
username:
description: "Username to be used for login"
required: true
ssh-key:
description: "private SSH key to use for logging int"
required: false
host:
description: "Host to log in at"
required: true
port:
description: "Port to connect to"
required: true
default: "22"
known-hosts:
description: "Content to add to the known_hosts file, to verify the authenticity of the remote"
required: false
source:
description: "Which files to copy"
required: true
target:
description: "Where on the host to copy the files"
required: true
args:
description: "Command line args to pass to rsync"
required: true
default: "--archive --compress --verbose --mkpath"
runs:
using: "composite"
steps:
- name: Install rsync
run: |
if ! command -v apt-get &> /dev/null
then
echo "Only apt is supported"
exit 1
fi
if command -v rsync &> /dev/null
then
echo "rsync is already installed"
else
echo "Updating package index"
apt-get update
echo "Installing rsync"
apt-get install -y rsync
fi
shell: bash
- name: Create SSH directory
run: |
echo "Creating ~/.ssh"
mkdir -p ~/.ssh
shell: bash
- name: Install SSH config
run: |
echo "Installing SSH config"
cat <<EOF > ~/.ssh/config
Host targethost
User ${{ inputs.username }}
HostName ${{ inputs.host }}
Port ${{ inputs.port }}
IdentityFile ~/.ssh/key
ForwardAgent no
ForwardX11 no
PasswordAuthentication no
EOF
chmod 600 ~/.ssh/config
shell: bash
- name: Install SSH known_hosts
run: |
echo "Installing known_hosts"
echo "${{ inputs.known-hosts }}" > ~/.ssh/known_hosts
echo " StrictHostKeyChecking yes" >> ~/.ssh/config
shell: bash
if: ${{ inputs.known-hosts != null }}
- name: Disable SSH host key checking
run: |
echo "Disabling host key checking"
echo " StrictHostKeyChecking no" >> ~/.ssh/config
shell: bash
if: ${{ inputs.known-hosts == null }}
- name: Install SSH key
run: |
echo "Installing SSH key"
echo "${{ inputs.ssh-key }}" > ~/.ssh/key
chmod 600 ~/.ssh/key
shell: bash
if: ${{ inputs.ssh-key != null }}
- name: Transfer files
run: |
echo "Transferring files"
rsync ${{ inputs.args }} "${{ inputs.source }}" "targethost:${{ inputs.target }}"
shell: bash
- name: Cleanup
run: |
echo "Cleaning up"
rm -f ~/.ssh/{config,key,known_hosts} || true
shell: bash