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
				
			
		
							
								
								
									
										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