Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/duplicati/duplicati.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorverhoek <30193551+verhoek@users.noreply.github.com>2019-12-02 23:30:37 +0300
committerverhoek <30193551+verhoek@users.noreply.github.com>2019-12-02 23:35:39 +0300
commit49db5035a82a7ae055d9da8bb19aa65b30f77bcf (patch)
treeeaaefcd96d41df1d1981ae8510125f7fb19741ca /pipeline/docker-run
parent430bf8024161eb83243fdfeb1d93f12c0c056146 (diff)
Imported duplicatipipeline scripts
Added bash scripts to run the dockerized build and test environment
Diffstat (limited to 'pipeline/docker-run')
-rwxr-xr-xpipeline/docker-run/docker-run91
-rw-r--r--pipeline/docker-run/error_handling.sh17
-rw-r--r--pipeline/docker-run/markers.sh11
-rwxr-xr-xpipeline/docker-run/runner.sh109
4 files changed, 228 insertions, 0 deletions
diff --git a/pipeline/docker-run/docker-run b/pipeline/docker-run/docker-run
new file mode 100755
index 000000000..8e1cf78a9
--- /dev/null
+++ b/pipeline/docker-run/docker-run
@@ -0,0 +1,91 @@
+#!/bin/bash
+. "$( cd "$(dirname "$0")" ; pwd -P )/error_handling.sh"
+. "$( cd "$(dirname "$0")" ; pwd -P )/markers.sh"
+
+function pull_docker_image () {
+ travis_mark_begin "PULL MINIMAL DOCKER IMAGE"
+ docker pull $DOCKER_IMAGE
+ travis_mark_end "PULL MINIMAL DOCKER IMAGE"
+}
+
+function add_option () {
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1"
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2"
+}
+
+function add_volumes () {
+ volume_args=()
+
+ volume_args[${#volume_args[@]}]="-v /var/run/docker.sock:/var/run/docker.sock \
+ -v ${TARGET_DIR}:/application \
+ ${DOCKER_VOLUME} \
+ -v $( cd "$(dirname "$0")" ; pwd -P )/../:/pipeline ${DOCKER_SHARED_MEM}"
+
+ for (( i=1; i<${#SOURCE_DIR[@]}+1; i++ )); do
+ volume_args[${#volume_args[@]}]="-v ${SOURCE_DIR[$i-1]}:/source_$i"
+ done
+}
+
+function run_with_docker () {
+ if [ -z ${TARGET_DIR} ]; then
+ echo "no target cache specified"
+ exit 1
+ fi
+
+ add_volumes
+
+ docker run ${volume_args[@]} \
+ --privileged $DOCKER_AS_ROOT --rm $DOCKER_IMAGE "/pipeline/docker-run/runner.sh" "${FORWARD_OPTS[@]}"
+}
+
+function parse_options () {
+ FORWARD_OPTS=()
+ SOURCE_DIR=()
+
+ while true ; do
+ case "$1" in
+ --image)
+ DOCKER_IMAGE="$2"
+ ;;
+ --sourcedir)
+ SOURCE_DIR[${#SOURCE_DIR[@]}]="$2"
+ ;;
+ --targetdir)
+ TARGET_DIR="$2"
+ ;;
+ --asroot)
+ DOCKER_AS_ROOT="-u 0"
+ ;;
+ --volume)
+ DOCKER_VOLUME="-v $2"
+ ;;
+ --sharedmem)
+ DOCKER_SHARED_MEM="-v /dev/shm:/dev/shm"
+ ;;
+ --*)
+ if [[ $2 =~ ^--.* || -z $2 ]]; then
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1"
+ else
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1"
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2"
+ fi
+ ;;
+ esac
+
+ if [[ -z $1 ]]; then
+ break
+ elif [[ $2 =~ ^--.* || -z $2 ]]; then
+ shift
+ else
+ shift
+ shift
+ fi
+ done
+
+ add_option "--workingdir" "$TARGET_DIR"
+ add_option "--sourcedirnum" ${#SOURCE_DIR[@]}
+}
+
+parse_options "$@"
+pull_docker_image
+run_with_docker \ No newline at end of file
diff --git a/pipeline/docker-run/error_handling.sh b/pipeline/docker-run/error_handling.sh
new file mode 100644
index 000000000..baab6e68b
--- /dev/null
+++ b/pipeline/docker-run/error_handling.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+function quit_on_error() {
+ local parent_lineno="$1"
+ local message="$2"
+ local code="${3:-1}"
+ if [[ -n "$message" ]] ; then
+ echo "Error in $0 line ${parent_lineno}: ${message}; exiting with status ${code}"
+ else
+ echo "Error in $0 line ${parent_lineno}; exiting with status ${code}"
+ fi
+ exit "${code}"
+}
+
+set -eE
+trap 'quit_on_error $LINENO' ERR
+set -o pipefail
diff --git a/pipeline/docker-run/markers.sh b/pipeline/docker-run/markers.sh
new file mode 100644
index 000000000..f27571163
--- /dev/null
+++ b/pipeline/docker-run/markers.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+function travis_mark_begin () {
+ echo "travis_fold:start:$1"
+ echo "+ START $1"
+}
+
+function travis_mark_end () {
+ echo "travis_fold:end:$1"
+ echo "+ DONE $1"
+}
diff --git a/pipeline/docker-run/runner.sh b/pipeline/docker-run/runner.sh
new file mode 100755
index 000000000..b7f299c11
--- /dev/null
+++ b/pipeline/docker-run/runner.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+. "$( cd "$(dirname "$0")" ; pwd -P )/error_handling.sh"
+. "$( cd "$(dirname "$0")" ; pwd -P )/markers.sh"
+
+function sync_dirs () {
+ rsync_delete_option="--delete"
+ for (( i=1; i<$SOURCE_DIR_NUM+1; i++ )); do
+ travis_mark_begin "SYNCING DIR source_${i}"
+ rsync -a $rsync_delete_option "/source_${i}/" "/application/"
+ unset rsync_delete_option
+ travis_mark_end "SYNCING DIR source_${i}"
+ done
+}
+
+function setup () {
+ if [ -f /sbin/apk ]; then
+ apk --update add $DOCKER_PACKAGES
+ return
+ fi
+
+ if [ -f /usr/bin/apt-get ]; then
+ export DEBIAN_FRONTEND=noninteractive
+ apt-get update && apt-get install -y $DOCKER_PACKAGES
+ return
+ fi
+}
+
+function clean_up () {
+ if [[ -z $KEEP_TARGET_FILTER ]]; then
+ return
+ fi
+
+ cd /application
+ find . -type f ! -regex "${KEEP_TARGET_FILTER}" -delete
+ find . -type d -empty -delete
+
+ for (( i=1; i<${#KEEP_SOURCE_FILTER[@]}+1; i++ )); do
+ cd /source_${i}
+ find . -type f ! -regex "${KEEP_SOURCE_FILTER[$i-1]}" -delete
+ find . -type d -empty -delete
+ done
+}
+
+function parse_options () {
+ KEEP_SOURCE_FILTER=()
+
+ while true ; do
+ case "$1" in
+ --command)
+ DOCKER_COMMAND="$2"
+ ;;
+ --packages)
+ DOCKER_PACKAGES="$2"
+ ;;
+ --sourcedirnum)
+ SOURCE_DIR_NUM="$2"
+ ;;
+ --keeptargetfilter)
+ KEEP_TARGET_FILTER="$2"
+ ;;
+ --keepsourcefilter)
+ KEEP_SOURCE_FILTER[${#KEEP_SOURCE_FILTER[@]}]="$2"
+ ;;
+ --*)
+ if [[ $2 =~ ^--.* || -z $2 ]]; then
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1"
+ else
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1"
+ FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2"
+ fi
+ ;;
+ esac
+
+ if [[ -z $1 ]]; then
+ break
+ elif [[ $2 =~ ^--.* || -z $2 ]]; then
+ shift
+ else
+ shift
+ shift
+ fi
+ done
+}
+
+function set_user_script_vars () {
+ option_found=false
+ for arg in ${FORWARD_OPTS[@]}; do
+ if [[ $option_found == true ]]; then
+ eval $option=$arg
+ export $option
+ option_found=false
+ elif [[ $arg =~ ^--.* ]]; then
+ option_found=true
+ option=${arg#"--"}
+ elif [[ $arg =~ ^-.* ]]; then
+ flag=${arg#"-"}
+ eval $flag=true
+ export $flag
+ fi
+ done
+}
+
+parse_options "$@"
+setup
+sync_dirs
+cd /application
+set_user_script_vars
+$DOCKER_COMMAND "${FORWARD_OPTS[@]}"
+clean_up \ No newline at end of file