You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. #!/bin/bash
  2. set -e
  3. exec 3>&1 # make stdout available as fd 3 for the result
  4. exec 1>&2 # redirect all output to stderr for logging
  5. echo "BUILD_ID: $BUILD_ID"
  6. echo "BUILD_NAME: $BUILD_NAME"
  7. echo "BUILD_JOB_NAME: $BUILD_JOB_NAME"
  8. echo "BUILD_PIPELINE_NAME: $BUILD_PIPELINE_NAME"
  9. # shellcheck disable=1090
  10. source "$(dirname $0)/common.sh"
  11. source=$1
  12. if [ -z "$source" ]; then
  13. echo "usage: $0 <path/to/source>"
  14. exit 1
  15. fi
  16. # for jq
  17. PATH=/usr/local/bin:$PATH
  18. payload=$(mktemp "$TMPDIR/rclone-resource-request.XXXXXX")
  19. cat > "$payload" <&0
  20. # TODO: Remove Me - DEBUGGING
  21. echo "Payload:"
  22. cat "$payload"
  23. load_config "$payload"
  24. load_files "$payload"
  25. rclone_source_directory=$(jq -r '.params.source // ""' < "$payload")
  26. rclone_destinations=$(jq -r '.params.destination[]? | .dir // ""' < "$payload")
  27. if [ -z "$rclone_source_directory" ]; then
  28. echo "invalid source directory (missing source)"
  29. exit 1
  30. fi
  31. if [ -z "$rclone_destinations" ]; then
  32. echo "invalid destination (missing destination)"
  33. exit 1
  34. fi
  35. echo "Source directory: $rclone_source_directory"
  36. echo "Destinations:"
  37. jq -c '.params.destination[] | .dir' < "$payload"
  38. local_source_dir="${source}/${rclone_source_directory}"
  39. ls -alh "${local_source_dir}"
  40. sha256=$( (find "${local_source_dir}" -type f -exec sha256sum {} \;) | cut -d ' ' -f1 )
  41. echo "sha256:${sha256}"
  42. # Source is always the same for each destination
  43. rclone_source="local:${local_source_dir}"
  44. echo "Source: ${rclone_source}"
  45. destinations=$(jq -r '.params.destination[] | @base64' < "$payload")
  46. echo "Using encoded destinations:"
  47. echo " ${destinations}"
  48. for destination in $destinations; do
  49. _jq() {
  50. echo "${destination}" | base64 -d | jq -r "${1}"
  51. }
  52. rclone_destination=$(_jq '.dir')
  53. echo "Destination: $rclone_destination"
  54. rclone_destination_subdir_file=$(_jq '.subdir // ""')
  55. echo "Destination subdir file: ${rclone_destination_subdir_file}"
  56. rclone_destination_subdir=""
  57. if [ -n "$rclone_destination_subdir_file" ]; then
  58. echo "Looking in ${source}/${rclone_destination_subdir_file} for subdir to use"
  59. rclone_destination_subdir=$(head -n 1 < "${source}/${rclone_destination_subdir_file}")
  60. fi
  61. rclone_target="${rclone_destination}/${rclone_destination_subdir}"
  62. echo "Target: ${rclone_target}"
  63. rclone copy "${rclone_source}" "${rclone_target}" --config /opt/rclone/config/.rclone.conf --progress
  64. done
  65. jq -n "{
  66. version: {
  67. digest: $( (echo -n "sha256:"; echo "$sha256") | jq -R . )
  68. }
  69. }" >&3