summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-06 10:11:15 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-07 14:00:45 -0700
commit450f654063cbbffe7b58e0b785ef8970a0be41ea (patch)
tree5295dbd03a6fb7faee6759b3e9ec288063b0b4de
parent6b9e77ba01472070dd1ac9b87c9dcb068c49b852 (diff)
downloadsubsurface-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.yml7
-rw-r--r--scripts/windows-container/after_success.sh30
-rw-r--r--scripts/windows-container/before_install.sh62
-rw-r--r--scripts/windows-container/in-container-build.sh18
-rw-r--r--scripts/windows-container/travisbuild.sh13
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
+