#!/bin/bash set -e exec 3>&1 # make stdout available as fd 3 for the result exec 1>&2 # redirect all output to stderr for logging echo "BUILD_ID: $BUILD_ID" echo "BUILD_NAME: $BUILD_NAME" echo "BUILD_JOB_NAME: $BUILD_JOB_NAME" echo "BUILD_PIPELINE_NAME: $BUILD_PIPELINE_NAME" # shellcheck disable=1090 source "$(dirname $0)/common.sh" source=$1 if [[ -z "$source" ]]; then echo "usage: $0 " exit 1 fi # for jq PATH=/usr/local/bin:$PATH payload=$(mktemp "$TMPDIR/rclone-resource-request.XXXXXX") cat > "$payload" <&0 load_config "$payload" load_files "$payload" rclone_source_directory=$(jq -r '.params.source // ""' < "$payload") rclone_destinations=$(jq -r '.params.destination[]? | .dir // ""' < "$payload") if [[ -z "$rclone_source_directory" ]]; then echo "invalid source directory (missing source)" exit 1 fi if [[ -z "$rclone_destinations" ]]; then echo "invalid destination (missing destination)" exit 1 fi echo "Source directory: $rclone_source_directory" echo "Destinations:" jq -c '.params.destination[] | .dir' < "$payload" local_source_dir="${source}/${rclone_source_directory}" ls -alh "${local_source_dir}" echo "Generating SHA256" sha256_file="${TMPDIR}/rclone_source.sha256" touch "${sha256_file}" (find "${local_source_dir}" -type f -exec sha256sum {} \;) | cut -d ' ' -f1 | xargs echo >> "${sha256_file}" sha256=$(sha256sum "${sha256_file}" | cut -d' ' -f1) echo "sha256:${sha256}" # Source is always the same for each destination rclone_source="${local_source_dir}" echo "Source: ${rclone_source}" destinations=$(jq -r '.params.destination[] | @base64' < "$payload") echo "Using encoded destinations:" echo " ${destinations}" for destination in $destinations; do _jq() { echo "${destination}" | base64 -d | jq -r "${1}" } rclone_destination=$(_jq '.dir') rclone_destination_subdir_file=$(_jq '.subdir // ""') rclone_dedupe=$(_jq '.dedupe // "false"') rclone_dedupe_mode=$(_jq '.dedupeMode // "newest"') rclone_args=$(_jq '.args? | join(" ")') echo "Destination: $rclone_destination" echo "Destination subdir file: ${rclone_destination_subdir_file}" echo "Run dedupe: ${rclone_dedupe}" echo "Dedupe mode: ${rclone_dedupe_mode}" echo "Additonal args: ${rclone_args}" rclone_destination_subdir="" if [ -n "$rclone_destination_subdir_file" ]; then echo "Looking in ${source}/${rclone_destination_subdir_file} for subdir to use" rclone_destination_subdir=$(head -n 1 < "${source}/${rclone_destination_subdir_file}") fi rclone_target="${rclone_destination}/${rclone_destination_subdir}" echo "Target: ${rclone_target}" # shellcheck disable=2086 rclone copy "${rclone_source}" "${rclone_target}" --size-only --progress --stats=2s ${rclone_args} if [[ "$rclone_dedupe" == "true" ]]; then echo "Running Dedupe for: ${rclone_target}" # shellcheck disable=2086 rclone dedupe --dedupe-mode "${rclone_dedupe_mode}" "${rclone_target}" ${rclone_args} fi done jq -n "{ version: { digest: $( echo -n "sha256:$sha256" | jq -R . ) } }" >&3