mirror of
https://github.com/abraunegg/onedrive
synced 2024-06-16 12:45:14 +02:00
64d91b844a
* Update LDC to v1.16.0 for Travis CI testing
193 lines
6.7 KiB
Bash
193 lines
6.7 KiB
Bash
#!/bin/bash
|
|
# Based on a test script from avsm/ocaml repo https://github.com/avsm/ocaml
|
|
# Adapted from https://www.tomaz.me/2013/12/02/running-travis-ci-tests-on-arm.html
|
|
# Adapted from https://github.com/PJK/libcbor/blob/master/.travis-qemu.sh
|
|
# Adapted from https://gist.github.com/oznu/b5efd7784e5a820ec3746820f2183dc0
|
|
# Adapted from https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html
|
|
# Adapted from https://blog.lazy-evaluation.net/posts/linux/debian-stretch-arm64.html
|
|
|
|
set -e
|
|
|
|
# CHROOT Directory
|
|
CHROOT_DIR=/tmp/chroot
|
|
|
|
# Debian package dependencies for the host to run ARM under QEMU
|
|
DEBIAN_MIRROR="http://httpredir.debian.org/debian"
|
|
HOST_DEPENDENCIES="qemu-user-static binfmt-support debootstrap sbuild wget"
|
|
|
|
# Debian package dependencies for the chrooted environment
|
|
GUEST_DEPENDENCIES="build-essential libcurl4-openssl-dev libsqlite3-dev libgnutls-openssl27 git pkg-config libxml2"
|
|
|
|
# LDC Version
|
|
# Different versions due to https://github.com/ldc-developers/ldc/issues/3027
|
|
# LDC v1.16.0 re-introduces ARMHF and ARM64 version - https://github.com/ldc-developers/ldc/releases/tag/v1.16.0
|
|
LDC_VERSION_ARMHF=1.16.0
|
|
LDC_VERSION_ARM64=1.16.0
|
|
|
|
function setup_arm32_chroot {
|
|
# Update apt repository details
|
|
sudo apt-get update
|
|
# 32Bit Variables
|
|
VERSION=jessie
|
|
CHROOT_ARCH=armhf
|
|
# Host dependencies
|
|
sudo apt-get install -qq -y ${HOST_DEPENDENCIES}
|
|
# Download LDC compiler
|
|
wget https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION_ARMHF}/ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz
|
|
tar -xf ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz
|
|
mv ldc2-${LDC_VERSION_ARMHF}-linux-armhf dlang-${ARCH}
|
|
rm -rf ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz
|
|
# Create chrooted environment
|
|
sudo mkdir ${CHROOT_DIR}
|
|
sudo debootstrap --foreign --no-check-gpg --variant=buildd --arch=${CHROOT_ARCH} ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
sudo cp /usr/bin/qemu-arm-static ${CHROOT_DIR}/usr/bin/
|
|
sudo chroot ${CHROOT_DIR} /debootstrap/debootstrap --second-stage
|
|
sudo sbuild-createchroot --arch=${CHROOT_ARCH} --foreign --setup-only ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
configure_chroot
|
|
}
|
|
|
|
function setup_arm64_chroot {
|
|
# Update apt repository details
|
|
sudo apt-get update
|
|
# 64Bit Variables
|
|
VERSION64=stretch
|
|
CHROOT_ARCH64=arm64
|
|
# Host dependencies
|
|
sudo apt-get install -qq -y ${HOST_DEPENDENCIES}
|
|
# Download LDC compiler
|
|
wget https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION_ARM64}/ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz
|
|
tar -xf ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz
|
|
mv ldc2-${LDC_VERSION_ARM64}-linux-aarch64 dlang-${ARCH}
|
|
rm -rf ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz
|
|
|
|
# ARM64 qemu-debootstrap needs to be 1.0.78, Trusty is 1.0.59
|
|
#sudo echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> /etc/apt/sources.list
|
|
echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list > /dev/null
|
|
sudo apt-get update
|
|
sudo apt-get install -t xenial debootstrap
|
|
|
|
# Create chrooted environment
|
|
sudo mkdir ${CHROOT_DIR}
|
|
sudo qemu-debootstrap --arch=${CHROOT_ARCH64} ${VERSION64} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
configure_chroot
|
|
}
|
|
|
|
function setup_x32_chroot {
|
|
# Update apt repository details
|
|
sudo apt-get update
|
|
# 32Bit Variables
|
|
VERSION=jessie
|
|
CHROOT_ARCH32=i386
|
|
# Host dependencies
|
|
sudo apt-get install -qq -y ${HOST_DEPENDENCIES}
|
|
# Download DMD compiler
|
|
DMDVER=2.083.1
|
|
wget http://downloads.dlang.org/releases/2.x/${DMDVER}/dmd.${DMDVER}.linux.tar.xz
|
|
tar -xf dmd.${DMDVER}.linux.tar.xz
|
|
mv dmd2 dlang-${ARCH}
|
|
rm -rf dmd.${DMDVER}.linux.tar.xz
|
|
# Create chrooted environment
|
|
sudo mkdir ${CHROOT_DIR}
|
|
sudo debootstrap --foreign --no-check-gpg --variant=buildd --arch=${CHROOT_ARCH32} ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
sudo cp /usr/bin/qemu-i386-static ${CHROOT_DIR}/usr/bin/
|
|
sudo cp /usr/bin/qemu-x86_64-static ${CHROOT_DIR}/usr/bin/
|
|
sudo chroot ${CHROOT_DIR} /debootstrap/debootstrap --second-stage
|
|
sudo sbuild-createchroot --arch=${CHROOT_ARCH32} --foreign --setup-only ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
configure_chroot
|
|
}
|
|
|
|
function configure_chroot {
|
|
# Create file with environment variables which will be used inside chrooted environment
|
|
echo "export ARCH=${ARCH}" > envvars.sh
|
|
echo "export TRAVIS_BUILD_DIR=${TRAVIS_BUILD_DIR}" >> envvars.sh
|
|
chmod a+x envvars.sh
|
|
|
|
# Install dependencies inside chroot
|
|
sudo chroot ${CHROOT_DIR} apt-get update
|
|
sudo chroot ${CHROOT_DIR} apt-get --allow-unauthenticated install -qq -y ${GUEST_DEPENDENCIES}
|
|
|
|
# Create build dir and copy travis build files to our chroot environment
|
|
sudo mkdir -p ${CHROOT_DIR}/${TRAVIS_BUILD_DIR}
|
|
sudo rsync -a ${TRAVIS_BUILD_DIR}/ ${CHROOT_DIR}/${TRAVIS_BUILD_DIR}/
|
|
|
|
# Indicate chroot environment has been set up
|
|
sudo touch ${CHROOT_DIR}/.chroot_is_done
|
|
|
|
# Call ourselves again which will cause tests to run
|
|
sudo chroot ${CHROOT_DIR} bash -c "cd ${TRAVIS_BUILD_DIR} && chmod a+x ./.travis-ci.sh"
|
|
sudo chroot ${CHROOT_DIR} bash -c "cd ${TRAVIS_BUILD_DIR} && ./.travis-ci.sh"
|
|
}
|
|
|
|
function build_onedrive {
|
|
# Depending on architecture, build onedrive using applicable tool
|
|
echo "$(uname -a)"
|
|
HOMEDIR=$(pwd)
|
|
if [ "${ARCH}" = "x64" ]; then
|
|
# Build on x86_64 as normal
|
|
./configure
|
|
make clean; make;
|
|
else
|
|
if [ "${ARCH}" = "x32" ]; then
|
|
# 32Bit DMD Build
|
|
./configure DC=${HOMEDIR}/dlang-${ARCH}/linux/bin32/dmd
|
|
make clean;
|
|
make
|
|
else
|
|
# LDC Build - ARM32, ARM64
|
|
./configure DC=${HOMEDIR}/dlang-${ARCH}/bin/ldmd2
|
|
make clean;
|
|
make
|
|
fi
|
|
fi
|
|
# Functional testing of built application
|
|
test_onedrive
|
|
}
|
|
|
|
function test_onedrive {
|
|
# Testing onedrive client - does the built application execute?
|
|
./onedrive --version
|
|
|
|
# Functional testing on x64 only
|
|
if [ "${ARCH}" = "x64" ]; then
|
|
chmod a+x ./tests/makefiles.sh
|
|
cd ./tests/
|
|
./makefiles.sh
|
|
cd ..
|
|
mkdir -p ~/.config/onedrive/
|
|
echo $ODP > ~/.config/onedrive/refresh_token
|
|
./onedrive --synchronize --verbose --syncdir '~/OneDriveALT'
|
|
# OneDrive Cleanup
|
|
rm -rf ~/OneDriveALT/*
|
|
./onedrive --synchronize --verbose --syncdir '~/OneDriveALT'
|
|
fi
|
|
}
|
|
|
|
if [ "${ARCH}" = "arm32" ] || [ "${ARCH}" = "arm64" ] || [ "${ARCH}" = "x32" ]; then
|
|
if [ -e "/.chroot_is_done" ]; then
|
|
# We are inside ARM chroot
|
|
echo "Running inside chrooted QEMU ${ARCH} environment"
|
|
. ./envvars.sh
|
|
export PATH="$PATH:/usr/sbin:/sbin:/bin"
|
|
build_onedrive
|
|
else
|
|
# Need to set up chrooted environment first
|
|
echo "Setting up chrooted ${ARCH} build environment"
|
|
if [ "${ARCH}" = "x32" ]; then
|
|
# 32Bit i386 Environment
|
|
setup_x32_chroot
|
|
else
|
|
if [ "${ARCH}" = "arm32" ]; then
|
|
# 32Bit ARM Environment
|
|
setup_arm32_chroot
|
|
else
|
|
# 64Bit ARM Environment
|
|
setup_arm64_chroot
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
# Proceed as normal
|
|
echo "Running an x86_64 Build"
|
|
build_onedrive
|
|
fi
|