Skip to content

Commit

Permalink
more
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed Oct 16, 2019
1 parent b97436f commit a876a53
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
38 changes: 25 additions & 13 deletions .ci/travis/docker_image/script.sh
Expand Up @@ -21,43 +21,55 @@ set -e
[[ -d ${CCACHE_DIR} ]] && echo "cache directory (${CCACHE_DIR}) exists" || mkdir -p "${CCACHE_DIR}"

# copy ccache dir within QGIS source so it can be accessed from docker
cp -r ${CCACHE_DIR} ${TRAVIS_BUILD_DIR}/.ccache_image_build
cp -r ${CCACHE_DIR}/. ${TRAVIS_BUILD_DIR}/.ccache_image_build

echo "Cache directory size: "$(du -h --max-depth=0 ${TRAVIS_BUILD_DIR}/.ccache_image_build)

# calculate timeouts
CURRENT_TIME=$(date +%s)
TIMEOUT=$((( TRAVIS_AVAILABLE_TIME - TRAVIS_UPLOAD_TIME ) * 60 - CURRENT_TIME + TRAVIS_TIMESTAMP))
TIMEOUT=$(( TIMEOUT < 300 ? 300 : TIMEOUT ))
#TIMEOUT=$(( TIMEOUT < 300 ? 300 : TIMEOUT ))
TIMEOUT=10
echo "Timeout: ${TIMEOUT}s"

# building docker images
pushd "${TRAVIS_BUILD_DIR}/.docker"
echo "${bold}Building QGIS Docker image '${DOCKER_TAG}'...${endbold}"
docker build --build-arg DOCKER_TAG="${DOCKER_TAG}" \
--build-arg BUILD_TIMEOUT="${TIMEOUT}" \
--build-arg CC --build-arg CXX \
DOCKER_BUILD_ARGS="--build-arg DOCKER_TAG=${DOCKER_TAG} \
--build-arg BUILD_TIMEOUT=${TIMEOUT} \
--build-arg CC --build-arg CXX"
docker build ${DOCKER_BUILD_ARGS} \
--cache-from "qgis/qgis:${DOCKER_TAG}" \
-t "qgis/qgis:${DOCKER_TAG}" \
-t "qgis/qgis:BUILDER" \
-f qgis.dockerfile ..

docker run --name qgis_container qgis/qgis:${DOCKER_TAG} /bin/true
docker run --name qgis_container qgis/qgis:BUILDER /bin/true

echo "Copy build cache from Docker container to Travis cache directory"
rm -rf "${CCACHE_DIR:?}/"*
docker cp qgis_container:/usr/src/QGIS/.ccache_image_build ${CCACHE_DIR}
popd
mkdir -p ${CCACHE_DIR}
docker cp qgis_container:/QGIS/.ccache_image_build/. ${CCACHE_DIR}

docker cp qgis_container:/QGIS/build_exit_value ${HOME}/build_exit_value

docker cp qgis_container:/usr/src/build_exit_value ${HOME}/build_exit_value
if [[ $(cat ${HOME}/build_exit_value) -eq 124 ]]; then
if [[ $(cat ${HOME}/build_exit_value) == "TIMEOUT" ]]; then
echo "Build timeout, not pushing image or triggering PyQGIS docs"
exit 1
else
echo "${bold}Pushing image to docker hub...${endbold}"
echo "${bold}Finalize image…${endbold}"
# enable experimental features in Docker to squash
echo '{ "experimental": true}' | sudo tee /etc/docker/daemon.json
docker build ${DOCKER_BUILD_ARGS} \
--cache-from "qgis/qgis:BUILDER" \
--squash \
-t "qgis/qgis:${DOCKER_TAG}" \
-f qgis.dockerfile ..

echo "${bold}Pushing image to docker hub…${endbold}"
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
docker push "qgis/qgis:${DOCKER_TAG}"

echo "Trigger build of PyQGIS Documentation"
echo "Trigger build of PyQGIS Documentation"
if [[ ${TRIGGER_PYQGIS_DOC} =~ ^TRUE$ ]]; then
body='{
"request": {
Expand Down
21 changes: 12 additions & 9 deletions .docker/qgis.dockerfile
Expand Up @@ -3,7 +3,7 @@
# using ARG in FROM requires min v17.05.0-ce
ARG DOCKER_TAG=latest

FROM qgis/qgis3-build-deps:${DOCKER_TAG}
FROM qgis/qgis3-build-deps:${DOCKER_TAG} AS BUILDER
MAINTAINER Denis Rouzaud <denis@opengis.ch>

LABEL Description="Docker container with QGIS" Vendor="QGIS.org" Version="1.1"
Expand All @@ -15,17 +15,18 @@ ARG CC=/usr/lib/ccache/clang
ARG CXX=/usr/lib/ccache/clang++
ENV LANG=C.UTF-8

COPY . /usr/src/QGIS
COPY . /QGIS

# If this directory is changed, also adapt script.sh which copies the directory
RUN mkdir -p /usr/src/QGIS/.ccache_image_build
ENV CCACHE_DIR=/usr/src/QGIS/.ccache_image_build
# if ccache directory is not provided with the source
RUN mkdir -p /QGIS/.ccache_image_build
ENV CCACHE_DIR=/QGIS/.ccache_image_build
RUN ccache -M 1G
RUN ccache -s

RUN echo "ccache_dir: "$(du -h --max-depth=0 ${CCACHE_DIR})

WORKDIR /usr/src/QGIS/build
WORKDIR /QGIS/build

RUN cmake \
-GNinja \
Expand All @@ -50,12 +51,14 @@ RUN cmake \
-DCMAKE_PREFIX_PATH="/usr/src/QGIS/external/qt3dextra-headers/cmake" \
.. \
&& echo "Timeout: ${BUILD_TIMEOUT}s" \
&& timeout ${BUILD_TIMEOUT}s ninja install \
&& rm -rf /usr/src/QGIS \
&& rv=$? \
&& echo "$rv" > /usr/src/build_exit_value
&& SUCCESS=OK \
&& timeout ${BUILD_TIMEOUT}s ninja install || SUCCESS=TIMEOUT \
&& echo "$SUCCESS" > /QGIS/build_exit_value

################################################################################
ARG DELETE_CACHE=FALSE
RUN if [[ ${DELETE_CACHE} == TRUE ]]; then rm /QGIS; fi

# Python testing environment setup

# Add QGIS test runner
Expand Down
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -121,6 +121,7 @@ matrix:
name: disco docker build 💃
if: repo = qgis/QGIS AND (tag IS PRESENT OR type = cron)
services: docker
sudo: required # required to restart Docker Daemon with experimental features
env:
- TRAVIS_CONFIG=docker_image
- CCACHE_DIR=${HOME}/.ccache_docker_build_disco
Expand Down

0 comments on commit a876a53

Please sign in to comment.