summaryrefslogtreecommitdiff
path: root/src/CI/travis/lib.sh
diff options
context:
space:
mode:
authorRyo Hashimoto <hashimoto@google.com>2020-02-03 18:17:14 +0900
committerRyo Hashimoto <hashimoto@google.com>2020-02-05 09:03:50 +0000
commit8fcb4fb5c580bfd9121dd8ddb93d4eb907d23f9e (patch)
treed30afe0b455266a8177e796f52375c5a04b85a99 /src/CI/travis/lib.sh
parent6a8782c7506c89c95cd7443580458a49559f8291 (diff)
downloadlibiio-android11-d2-release.tar.gz
Upgrade to v0.18r_aml_301500702platform-tools-31.0.0platform-tools-30.0.5android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r4android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r33android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android-mainline-11.0.0_r10android-mainline-11.0.0_r1android-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android-11.0.0_r16android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-mainline-tethering-releaseandroid11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devandroid11-d2-releaseandroid11-d1-b-release
Bug: 148763437 Test: make libiio Change-Id: I9810cec91e823a300a5a9da5e0a6b11053a0e420 (cherry picked from commit 79a1a11db0c1ab0ae311ce69c8762b6b285cd5bf)
Diffstat (limited to 'src/CI/travis/lib.sh')
-rw-r--r--src/CI/travis/lib.sh304
1 files changed, 304 insertions, 0 deletions
diff --git a/src/CI/travis/lib.sh b/src/CI/travis/lib.sh
new file mode 100644
index 0000000..a071cfc
--- /dev/null
+++ b/src/CI/travis/lib.sh
@@ -0,0 +1,304 @@
+#!/bin/sh -e
+
+export TRAVIS_API_URL="https://api.travis-ci.org"
+LOCAL_BUILD_DIR=${LOCAL_BUILD_DIR:-build}
+
+COMMON_SCRIPTS="jobs_running_cnt.py inside_docker.sh"
+
+echo_red() { printf "\033[1;31m$*\033[m\n"; }
+echo_green() { printf "\033[1;32m$*\033[m\n"; }
+echo_blue() { printf "\033[1;34m$*\033[m\n"; }
+
+get_script_path() {
+ local script="$1"
+
+ [ -n "$script" ] || return 1
+
+ if [ -f "CI/travis/$script" ] ; then
+ echo "CI/travis/$script"
+ elif [ -f "ci/travis/$script" ] ; then
+ echo "ci/travis/$script"
+ elif [ -f "${LOCAL_BUILD_DIR}/$script" ] ; then
+ echo "${LOCAL_BUILD_DIR}/$script"
+ else
+ return 1
+ fi
+}
+
+pipeline_branch() {
+ local branch=$1
+
+ [ -n "$branch" ] || return 1
+
+ # master is a always a pipeline branch
+ [ "$branch" = "master" ] && return 0
+
+ set +x
+ # Check if branch name is 20XX_RY where:
+ # XX - 14 to 99 /* wooh, that's a lot of years */
+ # Y - 1 to 9 /* wooh, that's a lot of releases per year */
+ for year in $(seq 2014 2099) ; do
+ for rel_num in $(seq 1 9) ; do
+ [ "$branch" = "${year}_R${rel_num}" ] && \
+ return 0
+ done
+ done
+
+ return 1
+}
+
+should_trigger_next_builds() {
+ local branch="$1"
+
+ [ -z "${COVERITY_SCAN_PROJECT_NAME}" ] || return 1
+
+ # These Travis-CI vars have to be non-empty
+ [ -n "$TRAVIS_PULL_REQUEST" ] || return 1
+ [ -n "$branch" ] || return 1
+ set +x
+ [ -n "$TRAVIS_API_TOKEN" ] || return 1
+
+ # Has to be a non-pull-request
+ [ "$TRAVIS_PULL_REQUEST" = "false" ] || return 1
+
+ pipeline_branch "$branch" || return 1
+
+ local python_script="$(get_script_path jobs_running_cnt.py)"
+ if [ -z "$python_script" ] ; then
+ echo "Could not find 'jobs_running_cnt.py'"
+ return 1
+ fi
+
+ local jobs_cnt=$(python $python_script)
+
+ # Trigger next job if we are the last job running
+ [ "$jobs_cnt" = "1" ]
+}
+
+trigger_build() {
+ local repo_slug="$1"
+ local branch="$2"
+
+ [ -n "$repo_slug" ] || return 1
+ [ -n "$branch" ] || return 1
+
+ local body="{
+ \"request\": {
+ \"branch\":\"$branch\"
+ }
+ }"
+
+ # Turn off tracing here (shortly)
+ set +x
+ curl -s -X POST \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json" \
+ -H "Travis-API-Version: 3" \
+ -H "Authorization: token $TRAVIS_API_TOKEN" \
+ -d "$body" \
+ https://api.travis-ci.org/repo/$repo_slug/requests
+}
+
+trigger_adi_build() {
+ local adi_repo="$1"
+ local branch="$2"
+
+ [ -n "$adi_repo" ] || return 1
+ trigger_build "analogdevicesinc%2F$adi_repo" "$branch"
+}
+
+command_exists() {
+ local cmd=$1
+ [ -n "$cmd" ] || return 1
+ type "$cmd" >/dev/null 2>&1
+}
+
+get_ldist() {
+ case "$(uname)" in
+ Linux*)
+ if [ ! -f /etc/os-release ] ; then
+ if [ -f /etc/centos-release ] ; then
+ echo "centos-$(sed -e 's/CentOS release //' -e 's/(.*)$//' \
+ -e 's/ //g' /etc/centos-release)-$(uname -m)"
+ return 0
+ fi
+ ls /etc/*elease
+ [ -z "${OSTYPE}" ] || {
+ echo "${OSTYPE}-unknown"
+ return 0
+ }
+ echo "linux-unknown"
+ return 0
+ fi
+ . /etc/os-release
+ if ! command_exists dpkg ; then
+ echo $ID-$VERSION_ID-$(uname -m)
+ else
+ echo $ID-$VERSION_ID-$(dpkg --print-architecture)
+ fi
+ ;;
+ Darwin*)
+ echo "darwin-$(sw_vers -productVersion)"
+ ;;
+ *)
+ echo "$(uname)-unknown"
+ ;;
+ esac
+ return 0
+}
+
+__brew_install_or_upgrade() {
+ brew install $1 || \
+ brew upgrade $1 || \
+ brew ls --version $1
+}
+
+brew_install_or_upgrade() {
+ while [ -n "$1" ] ; do
+ __brew_install_or_upgrade "$1" || return 1
+ shift
+ done
+}
+
+sftp_cmd_pipe() {
+ sftp ${EXTRA_SSH} ${SSHUSER}@${SSHHOST}
+}
+
+sftp_rm_artifact() {
+ local artifact="$1"
+ sftp_cmd_pipe <<-EOF
+ cd ${DEPLOY_TO}
+ rm ${artifact}
+ EOF
+}
+
+sftp_upload() {
+ local FROM="$1"
+ local TO="$2"
+ local LATE="$3"
+
+ sftp_cmd_pipe <<-EOF
+ cd ${DEPLOY_TO}
+
+ put ${FROM} ${TO}
+ ls -l ${TO}
+
+ symlink ${TO} ${LATE}
+ ls -l ${LATE}
+ bye
+ EOF
+}
+
+upload_file_to_swdownloads() {
+
+ if [ "$#" -ne 4 ] ; then
+ echo "skipping deployment of something"
+ echo "send called with $@"
+ return 0
+ fi
+
+ local LIBNAME=$1
+ local FROM=$2
+ local FNAME=$3
+ local EXT=$4
+
+ if [ -z "$FROM" ] ; then
+ echo no file to send
+ return 1
+ fi
+
+ if [ ! -r "$FROM" ] ; then
+ echo "file $FROM is not readable"
+ return 1
+ fi
+
+ if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ] ; then
+ local branch="$TRAVIS_PULL_REQUEST_BRANCH"
+ else
+ local branch="$TRAVIS_BRANCH"
+ fi
+
+ local TO=${branch}_${FNAME}
+ local LATE=${branch}_latest_${LIBNAME}${LDIST}${EXT}
+ local GLOB=${DEPLOY_TO}/${branch}_${LIBNAME}-*
+
+ echo attemting to deploy $FROM to $TO
+ echo and ${branch}_${LIBNAME}${LDIST}${EXT}
+ ssh -V
+
+ for rmf in ${TO} ${LATE} ; do
+ sftp_rm_artifact ${rmf} || \
+ echo_blue "Could not delete ${rmf}"
+ done
+
+ sftp_upload "${FROM}" "${TO}" "${LATE}" || {
+ echo_red "Failed to upload artifact from '${FROM}', to '${TO}', symlink '${LATE}'"
+ return 1
+ }
+
+ # limit things to a few files, so things don't grow forever
+ if [ "${EXT}" = ".deb" ] ; then
+ for files in $(ssh ${EXTRA_SSH} ${SSHUSER}@${SSHHOST} \
+ "ls -lt ${GLOB}" | tail -n +100 | awk '{print $NF}')
+ do
+ ssh ${EXTRA_SSH} ${SSHUSER}@${SSHHOST} \
+ "rm ${DEPLOY_TO}/${files}" || \
+ return 1
+ done
+ fi
+
+ return 0
+}
+
+prepare_docker_image() {
+ local DOCKER_IMAGE="$1"
+ sudo apt-get -qq update
+ echo 'DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -s devicemapper"' | sudo tee /etc/default/docker > /dev/null
+ sudo service docker restart
+ sudo docker pull "$DOCKER_IMAGE"
+}
+
+run_docker_script() {
+ local DOCKER_SCRIPT="$(get_script_path $1)"
+ local DOCKER_IMAGE="$2"
+ local OS_TYPE="$3"
+ local MOUNTPOINT="${4:-docker_build_dir}"
+ sudo docker run --rm=true \
+ -v "$(pwd):/${MOUNTPOINT}:rw" \
+ $DOCKER_IMAGE \
+ /bin/bash -e "/${MOUNTPOINT}/${DOCKER_SCRIPT}" "${MOUNTPOINT}" "${OS_TYPE}"
+}
+
+ensure_command_exists() {
+ local cmd="$1"
+ local package="$2"
+ [ -n "$cmd" ] || return 1
+ [ -n "$package" ] || package="$cmd"
+ ! command_exists "$cmd" || return 0
+ # go through known package managers
+ for pacman in apt-get brew yum ; do
+ command_exists $pacman || continue
+ $pacman install -y $package || {
+ # Try an update if install doesn't work the first time
+ $pacman -y update && \
+ $pacman install -y $package
+ }
+ return $?
+ done
+ return 1
+}
+
+ensure_command_exists sudo
+
+# Other scripts will download lib.sh [this script] and lib.sh will
+# in turn download the other scripts it needs.
+# This gives way more flexibility when changing things, as they propagate
+for script in $COMMON_SCRIPTS ; do
+ [ ! -f "CI/travis/$script" ] || continue
+ [ ! -f "ci/travis/$script" ] || continue
+ [ ! -f "${LOCAL_BUILD_DIR}/$script" ] || continue
+ mkdir -p ${LOCAL_BUILD_DIR}
+ ensure_command_exists wget
+ wget https://raw.githubusercontent.com/analogdevicesinc/libiio/master/CI/travis/$script \
+ -O $LOCAL_BUILD_DIR/$script
+done