diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2018-10-06 10:11:15 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-10-07 14:00:45 -0700 |
commit | 450f654063cbbffe7b58e0b785ef8970a0be41ea (patch) | |
tree | 5295dbd03a6fb7faee6759b3e9ec288063b0b4de | |
parent | 6b9e77ba01472070dd1ac9b87c9dcb068c49b852 (diff) | |
download | subsurface-450f654063cbbffe7b58e0b785ef8970a0be41ea.tar.gz |
Travis: add Windows build in a container
I expect this to become the default way to test Windows builds and
create installers on Travis. The idea is that instead of downloading the
pre-built MXE binaries we might as well use a container that has all
this installed and can be used locally to test if things fail on Travis;
which will allow us to have the exact same environment for testing
locally as runs on Travis.
At this point the container used is way too big - more effort needs to
be spent on shrinking it.
Right now this only deals with Subsurface and not with smtk2ssrf.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | .travis.yml | 7 | ||||
-rw-r--r-- | scripts/windows-container/after_success.sh | 30 | ||||
-rw-r--r-- | scripts/windows-container/before_install.sh | 62 | ||||
-rw-r--r-- | scripts/windows-container/in-container-build.sh | 18 | ||||
-rw-r--r-- | scripts/windows-container/travisbuild.sh | 13 |
5 files changed, 130 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml index b0751246c..a0c48f767 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,13 @@ matrix: sudo: required language: c++ + - env: SUBSURFACE_PLATFORM='windows-container' + os: linux + filter_secrets: false + language: c++ + services: + - docker + - env: SUBSURFACE_PLATFORM='linux' os: linux dist: trusty diff --git a/scripts/windows-container/after_success.sh b/scripts/windows-container/after_success.sh new file mode 100644 index 000000000..a6c51a986 --- /dev/null +++ b/scripts/windows-container/after_success.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ ! -z $TRAVIS_BRANCH ] && [ "$TRAVIS_BRANCH" != "master" ] ; then + export UPLOADTOOL_SUFFIX=$TRAVIS_BRANCH +fi + +cd ${TRAVIS_BUILD_DIR}/../win32/subsurface + +echo "Submitting the following Windows files for continuous build release:" +find . -name subsurface\*.exe* + +# set up the release message to use +source ${TRAVIS_BUILD_DIR}/scripts/release-message.sh + +# for debugging, let's look around a bit +ls -la + +# the win32 dir is owned by root, as is all its content (because that's +# the user inside the docker container, I guess. So let's create upload.sh +# in the TRAVIS_BUILD_DIR +cd ${TRAVIS_BUILD_DIR} + +# get and run the upload script +wget -c https://raw.githubusercontent.com/dirkhh/uploadtool/master/upload.sh +bash ./upload.sh ${TRAVIS_BUILD_DIR}/../win32/subsurface/subsurface*.exe* + + +# upload smtk2ssrf +#cd ${TRAVIS_BUILD_DIR}/../win32/smtk-import +#bash ../subsurface/upload.sh smtk2ssrf*.exe* diff --git a/scripts/windows-container/before_install.sh b/scripts/windows-container/before_install.sh new file mode 100644 index 000000000..3c4732167 --- /dev/null +++ b/scripts/windows-container/before_install.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +set -x +set -e + +# when running this locally, set TRAVIS_BUILD_DIR to the Subsurface +# directory inside your Windows build tree +TRAVIS_BUILD_DIR=${TRAVIS_BUILD_DIR:-$PWD} + +git fetch --unshallow || true # if running locally, unshallow could fail +git pull --tags +git submodule init +git describe + +# make sure we have libdivecomputer +echo "Get libdivecomputer" +cd ${TRAVIS_BUILD_DIR} +git submodule update --recursive +cd libdivecomputer +autoreconf --install +autoreconf --install + +# the intended layout as seen inside the container is +# /win/subsurface # sources that we are testing +# /win32 # binaries that are build +# /grantlee +# /libzip +# /hidapi +# /googlemaps +# +# the first two are mounted as volumes (this way we get access to the +# build results outside of the container +cd ${TRAVIS_BUILD_DIR}/.. +mkdir -p win32 + +# start the container and keep it running +docker run -v $PWD/win32:/win/win32 -v $PWD/subsurface:/win/subsurface --name=builder -w /win -d dirkhh/mxe-build-container:0.6 /bin/sleep 60m + +# for some reason this package was installed but still isn't there? +docker exec -t builder apt-get install -y ca-certificates + +# now set up our other dependencies +# these are either not available in MXE, or a version that's too old +docker exec -t builder bash subsurface/scripts/get-dep-lib.sh single . libzip +docker exec -t builder bash subsurface/scripts/get-dep-lib.sh single . hidapi +docker exec -t builder bash subsurface/scripts/get-dep-lib.sh single . googlemaps +docker exec -t builder bash subsurface/scripts/get-dep-lib.sh single . grantlee + + +# the rest we'll need when we enable smtk2ssrf + +#echo "Get mdbtools" +#cd ${TRAVIS_BUILD_DIR}/.. +#git clone https://github.com/brianb/mdbtools.git + +# get prebuilt mxe libraries for mdbtools and glib. +# do not overwrite upstream prebuilt mxe binaries if there is any coincidence. +#wget https://www.dropbox.com/s/842skyusb96ii1u/mxe-static-minimal-994ad473.tar.xz +#[[ ! -f mxe-static-minimal-994ad473.tar.xz ]] && exit 1 +#cd mxe +#tar -xJf ../mxe-static-minimal-994ad473.tar.xz --skip-old-files +#ls -al usr/ diff --git a/scripts/windows-container/in-container-build.sh b/scripts/windows-container/in-container-build.sh new file mode 100644 index 000000000..ca5e15b08 --- /dev/null +++ b/scripts/windows-container/in-container-build.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# this gets executed inside the container when building a Windows +# installer on Travis +# +# working directory is assumed to be the directory including all the +# source directories (subsurface, googlemaps, grantlee, etc) +# in order to be compatible with the assumed layout in the MXE script, we +# need to create the secondary build directory + +set -x +set -e + +mkdir -p win32 +cd win32 +bash -ex ../subsurface/packaging/windows/mxe-based-build.sh installer + +# re-enable this when smtk2ssrf is figured out +#bash -ex ${TRAVIS_BUILD_DIR}/packaging/windows/smtk2ssrf-mxe-build.sh -i diff --git a/scripts/windows-container/travisbuild.sh b/scripts/windows-container/travisbuild.sh new file mode 100644 index 000000000..50f9df42b --- /dev/null +++ b/scripts/windows-container/travisbuild.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# this is run to actually trigger the creation of the Windows installer +# inside the container + +set -x +set -e + +docker exec -t builder bash subsurface/scripts/windows-container/in-container-build.sh 2>&1 | tee build.log + +# fail the build if we didn't create the target binary +grep "Built target installer" build.log + |