77 lines
2.7 KiB
YAML
77 lines
2.7 KiB
YAML
name: docker-cp
|
|
description: "Copy a file or folder to or from a docker container or volume."
|
|
inputs:
|
|
volume:
|
|
description: "Name of the volume to copy to or from."
|
|
required: true
|
|
volumeMount:
|
|
description: "Where to mount the volume in the container. Defaults to '/mnt'."
|
|
required: true
|
|
default: ""
|
|
recreateVolume:
|
|
description: "Delete the specified volume before creation if it exist."
|
|
required: true
|
|
default: "false"
|
|
fromPath:
|
|
description: "Path the copy from. 'volumeName:' in the path will be replaced with volumeMount. Defaults to root volume path."
|
|
required: true
|
|
toPath:
|
|
description: "Path the copy to. 'volumeName:' in the path will be replaced with volumeMount. Defaults to root volume path."
|
|
required: true
|
|
default: ""
|
|
containerName:
|
|
description: "Name of the temporary docker container to create."
|
|
required: true
|
|
default: ${{ env.bamboo_buildResultKey || github.sha }}
|
|
copyFlags:
|
|
description: "Flags to use for docker cp. Use -a to copy permissions. Use -L to follow symbolic links."
|
|
required: false
|
|
default: ""
|
|
image:
|
|
description: "Docker image to run."
|
|
required: true
|
|
default: "busybox:latest"
|
|
entrypoint:
|
|
description: "Entrypoint of the docker image."
|
|
required: false
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: "Copy Files"
|
|
run: |
|
|
DEFAULT_PATH="${{ inputs.volume }}:/"
|
|
|
|
FROM_PATH="${{ inputs.fromPath }}"
|
|
if [[ -z "$FROM_PATH" ]]; then
|
|
FROM_PATH="$DEFAULT_PATH"
|
|
fi
|
|
TO_PATH="${{ inputs.toPath }}"
|
|
if [[ -z "$TO_PATH" ]]; then
|
|
TO_PATH="$DEFAULT_PATH"
|
|
fi
|
|
|
|
VOLUME_MOUNT="${{ inputs.volumeMount }}"
|
|
if [[ -z "$VOLUME_MOUNT" ]]; then
|
|
VOLUME_MOUNT="/mnt"
|
|
fi
|
|
|
|
DEFAULT_REPLACEMENT="${{ inputs.containerName }}:$VOLUME_MOUNT"
|
|
FROM_PATH=$(echo "$FROM_PATH" | sed "s|${{ inputs.volume }}:|$DEFAULT_REPLACEMENT|g")
|
|
TO_PATH=$(echo "$TO_PATH" | sed "s|${{ inputs.volume }}:|$DEFAULT_REPLACEMENT|g")
|
|
|
|
# Delete the volume if it exists.
|
|
if [[ "${{ inputs.recreateVolume }}" == "true" ]] && [[ $(docker volume ls --quiet | grep -w "^${{ inputs.volume }}$" | wc -l ) -gt 0 ]]; then
|
|
docker volume rm "${{ inputs.volume }}" --force
|
|
echo "Deleted volume: ${{ inputs.volume }}"
|
|
fi
|
|
|
|
docker run --rm -d -i -v ${{ inputs.volume }}:$VOLUME_MOUNT --name ${{ inputs.containerName }} ${{ inputs.image }} ${{ inputs.entrypoint }}
|
|
OUTPUT=$(docker cp ${{ inputs.copyFlags }} $FROM_PATH $TO_PATH 2>&1) && RESULT=$? || RESULT=$?
|
|
echo "$OUTPUT"
|
|
|
|
echo "Removing Temporary Container"
|
|
docker stop ${{ inputs.containerName }} -t 0
|
|
|
|
exit $RESULT
|
|
shell: bash
|