pekko/.github/actions/sync-nightlies/action.yml
2023-01-14 13:47:15 -05:00

86 lines
2.9 KiB
YAML

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Based on Apache Arrow's sync-nightlies action
# https://github.com/apache/arrow/blob/master/.github/actions/sync-nightlies/action.yml
name: 'Sync Nightlies'
description: 'Sync files to and from nightlies.apache.org'
inputs:
upload:
description: 'Sync from local to remote'
default: false
required: false
switches:
description: 'see rsync --help'
required: true
local_path:
description: 'The relative local path within $GITHUB_WORKSPACE'
required: true
remote_path:
description: 'The remote path incl. sub dirs e.g. {{secrets.path}}/arrow/r'
required: true
remote_host:
description: 'The remote host'
required: true
remote_port:
description: 'The remote port'
required: false
default: 22
remote_user:
description: 'The remote user'
required: true
remote_key:
description: 'The remote key'
required: true
runs:
using: "composite"
steps:
- name: Sync files
shell: bash
env:
SWITCHES: "${{ inputs.switches }}"
LOCAL_PATH: "${{ github.workspace }}/${{ inputs.local_path }}"
SSH_KEY: "${{ inputs.remote_key }}"
PORT: "${{ inputs.remote_port }}"
USER: "${{ inputs.remote_user }}"
HOST: "${{ inputs.remote_host }}"
REMOTE_PATH: "${{ inputs.remote_path }}"
run: |
# Make SSH key available and add remote to known hosts
eval "$(ssh-agent)" > /dev/null
echo "$SSH_KEY" | tr -d '\r' | ssh-add - >/dev/null
mkdir -p .ssh
chmod go-rwx .ssh
echo "$HOST_KEY" >> .ssh/known_hosts
# strict errors
set -eu
# We have to use a custom RSH to supply the port
RSH="ssh -o StrictHostKeyChecking=no -p $PORT"
DSN="$USER@$HOST"
# It is important to append '/' to the source path otherwise
# the entire source dir will be created as a sub dir in the destination
if [ "${{ inputs.upload }}" = true ]
then
SOURCE=$LOCAL_PATH/
DEST=$DSN:$REMOTE_PATH
else
SOURCE=$DSN:$REMOTE_PATH/
DEST=$LOCAL_PATH
fi
rsync $SWITCHES --rsh="$RSH" $SOURCE $DEST