mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									6b9e77ba01
								
							
						
					
					
						commit
						450f654063
					
				
					 5 changed files with 130 additions and 0 deletions
				
			
		|  | @ -18,6 +18,13 @@ matrix: | ||||||
|       sudo: required |       sudo: required | ||||||
|       language: c++ |       language: c++ | ||||||
| 
 | 
 | ||||||
|  |     - env: SUBSURFACE_PLATFORM='windows-container' | ||||||
|  |       os: linux | ||||||
|  |       filter_secrets: false | ||||||
|  |       language: c++ | ||||||
|  |       services: | ||||||
|  |           - docker | ||||||
|  | 
 | ||||||
|     - env: SUBSURFACE_PLATFORM='linux' |     - env: SUBSURFACE_PLATFORM='linux' | ||||||
|       os: linux |       os: linux | ||||||
|       dist: trusty |       dist: trusty | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								scripts/windows-container/after_success.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								scripts/windows-container/after_success.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -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* | ||||||
							
								
								
									
										62
									
								
								scripts/windows-container/before_install.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								scripts/windows-container/before_install.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -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/ | ||||||
							
								
								
									
										18
									
								
								scripts/windows-container/in-container-build.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								scripts/windows-container/in-container-build.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
							
								
								
									
										13
									
								
								scripts/windows-container/travisbuild.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								scripts/windows-container/travisbuild.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue