diff --git a/Readme.md b/Readme.md index 66c3688..b12ea10 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,7 @@ # drone-webdav -*A WebDAV plugin for the drone.io project* +A WebDAV plugin, for the drone.io project, which allows you to push build artifacts to any WebDAV server, including Nextcloud or ownCloud. -The WebDAV plugin will allow pushing build artifacts to any WebDAV server, including Nextcloud or ownCloud. +## Examples An example configuration would be as follows: @@ -29,3 +29,14 @@ pipeline: - source: WEBDAV_PASSWORD target: PLUGIN_PASSWORD ``` + +## Customization + +The following environment variables can be used for further cutomization: + +| Variable | Description | +|-----------------------------|----------------------------------------------------------------------------------------------------------| +| ``PLUGIN_PROXY_URL`` | May be used to specify a proxy (e.g. ``socks5://{ip_address}:{port}``) | +| ``PLUGIN_TIMEOUT`` | Defines a timeout (in seconds) to stop the upload after a certain time. | +| ``PLUGIN_ATTEMPTS`` | Defines how often a failed upload should be retried. Normally there is only one upload attempt. | +| ``PLUGIN_CUSTOM_ARGUMENTS`` | Allows for adding custom arguments. | \ No newline at end of file diff --git a/push.sh b/push.sh index 2492530..1fe127f 100755 --- a/push.sh +++ b/push.sh @@ -1,16 +1,64 @@ #! /bin/sh -# Use WEBDAV_USERNAME or WEBDAV_PASSWORD as default, if provided +# Use WEBDAV_USERNAME as default, if provided. if [ -z "$PLUGIN_USERNAME" ] && [ ! -z "$WEBDAV_USERNAME" ]; then + PLUGIN_USERNAME="$WEBDAV_USERNAME" fi + +# Use WEBDAV_PASSWORD as default, if provided. if [ -z "$PLUGIN_PASSWORD" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then + PLUGIN_PASSWORD="$WEBDAV_PASSWORD" fi # If username and password are provided, add auth if [ ! -z "$PLUGIN_USERNAME" ] && [ ! -z "$PLUGIN_PASSWORD" ]; then - AUTH="-u ${PLUGIN_USERNAME}:${PLUGIN_PASSWORD}" + + AUTH="--user '${PLUGIN_USERNAME}':'${PLUGIN_PASSWORD}'" fi -curl -T $PLUGIN_FILE $AUTH $PLUGIN_DESTINATION +# Use a proxy, if one is specified +if [ ! -z "$PLUGIN_PROXY_URL" ]; then + + PLUGIN_PROXY_URL="--proxy '${PLUGIN_PROXY_URL}'" +fi + +# If a timeout is specified, make use of it. +if [ ! -z "$PLUGIN_TIMEOUT" ]; then + + PLUGIN_TIMEOUT="--max-time '${PLUGIN_TIMEOUT}'" +fi + +# Set PLUGIN_ATTEMPTS to one if nothing else is specified +if [ -z "$PLUGIN_ATTEMPTS" ]; then + + PLUGIN_ATTEMPTS=1 +fi + +# Repeat the upload as long as specified. +while [ "${PLUGIN_ATTEMPTS}" -gt 0 ]; do + + # Uploading the file + curl $PLUGIN_PROXY_URL $PLUGIN_TIMEOUT $PLUGIN_CUSTOM_ARGUMENTS --upload-file $PLUGIN_FILE $AUTH $PLUGIN_DESTINATION && { + + # Terminate the script as soon as the upload is successful + echo "[INFO] Upload was successful." + exit 0 + + } + + # Show messages in case uploads have failed + [ "$PLUGIN_ATTEMPTS" -gt 1 ] && { + + echo "[INFO] Upload failed. Attempting a new upload, if possible." + + } + + PLUGIN_ATTEMPTS=$((PLUGIN_ATTEMPTS-1)) + +done + +# Returns an error because the upload was not successful +echo "[ERROR] All upload attempts have failed." +exit 1