QGIS/.github/workflows/build-docker.yml

145 lines
5.0 KiB
YAML
Raw Normal View History

2020-08-21 15:16:29 +02:00
name: Build Docker images for current branches
2021-02-25 16:15:44 +01:00
# on commits to this file, schedule and dispatch runs, the workflow will build the 3 different Docker images (master, PR, LTR)
# on tags, it will build only the image of the given tag
# this is made by using a matrix defined in a dedicated job
on:
2021-02-15 07:44:54 +01:00
push:
2021-02-25 16:15:44 +01:00
tags:
- final-*
2021-02-23 11:24:45 +01:00
branches:
2021-02-15 07:44:54 +01:00
- master
paths:
- .github/workflows/build-docker.yml
schedule:
# runs every day
2020-08-20 15:49:16 +02:00
- cron: '0 0 * * *'
2020-08-21 12:41:28 +02:00
workflow_dispatch:
# POST https://api.github.com/repos/qgis/QGIS/actions/workflows/2264135/dispatches:
jobs:
2021-02-25 16:15:44 +01:00
define-strategy:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- id: matrix
run: |
if [[ "${GITHUB_REF}" =~ ^refs/tags ]]; then
echo "::set-output name=matrix::{\"branch\":[\"${GITHUB_REF##*/}\"]}"
else
echo "::set-output name=matrix::{\"branch\":[\"master\", \"release-3_16\", \"release-3_18\"]}"
fi
build-docker:
runs-on: ubuntu-latest
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
2020-08-21 12:32:03 +02:00
CC: /usr/lib/ccache/gcc
CXX: /usr/lib/ccache/g++ # Building SIP binding freezes with Clang in Docker, maybe a SIP issue, maybe not
strategy:
2021-02-25 16:15:44 +01:00
matrix: ${{ fromJSON( needs.define-strategy.outputs.matrix ) }}
steps:
2020-08-20 14:39:15 +02:00
- name: Cache
id: cache
uses: actions/cache@v2.1.4
2020-08-20 14:39:15 +02:00
with:
path: ~/.ccache
key: docker-build-${{ matrix.branch }}
2021-02-23 11:24:45 +01:00
- name: checkout ${{ matrix.branch }}
uses: actions/checkout@v2
with:
ref: ${{ matrix.branch }}
- name: Build QGIS Docker image for branch ${{ matrix.branch }}
env:
branch: ${{ matrix.branch }}
run: |
2020-08-21 14:19:17 +02:00
export DOCKER_TAG=${branch//master/latest}
2021-02-15 07:44:54 +01:00
export DOCKER_BUILD_DEPS_FILE=qgis3-build-deps.dockerfile
export DOCKER_DEPS_TAG=${DOCKER_TAG}
echo "branch: ${branch}"
echo "docker tag: ${DOCKER_TAG}"
2020-08-25 08:14:15 +02:00
echo "docker deps tag: ${DOCKER_DEPS_TAG}"
2020-08-20 14:39:15 +02:00
[[ -d ~/.ccache ]] && echo "cache directory (~/.ccache) exists" || mkdir -p ~/.ccache
# copy ccache dir within QGIS source so it can be accessed from docker
2020-08-20 15:00:46 +02:00
cp -r ~/.ccache/. ./.ccache_image_build
2020-08-20 14:39:15 +02:00
2021-02-25 16:18:05 +01:00
- name: QGIS deps Docker pull/rebuild
run: |
cd .docker
docker --version
docker pull "qgis/qgis3-build-deps:${DOCKER_DEPS_TAG}" || true
docker build --cache-from "qgis/qgis3-build-deps:${DOCKER_DEPS_TAG}" -t "qgis/qgis3-build-deps:${DOCKER_DEPS_TAG}" -f ${DOCKER_BUILD_DEPS_FILE} .
echo "push to qgis/qgis3-build-deps:${DOCKER_DEPS_TAG}"
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
docker push "qgis/qgis3-build-deps:${DOCKER_DEPS_TAG}"
- name: Docker QGIS build
run: |
DOCKER_BUILD_ARGS="--build-arg DOCKER_DEPS_TAG --build-arg CC --build-arg CXX"
docker build ${DOCKER_BUILD_ARGS} \
--cache-from "qgis/qgis:${DOCKER_TAG}" \
-t "qgis/qgis:BUILDER" \
-f qgis.dockerfile ..
- name: Tag container and copy cache
run: |
docker run --name qgis_container qgis/qgis:BUILDER /bin/true
docker cp qgis_container:/QGIS/build_exit_value ./build_exit_value
if [[ $(cat ./build_exit_value) != "OK" ]]; then
echo "Build failed, not pushing image"
exit 1
fi
echo "Copy build cache from Docker container to Travis cache directory"
rm -rf ~/.ccache/*
mkdir -p ~/.ccache
docker cp qgis_container:/QGIS/.ccache_image_build/. ~/.ccache
echo "Cache size: "$(du -sh ~/.ccache)
2021-02-25 14:29:07 +01:00
- name: Finalize image
run: |
# enable experimental features in Docker to squash
2020-08-20 14:40:25 +02:00
echo '{ "experimental": true}' | sudo tee /etc/docker/daemon.json
2020-08-20 14:01:02 +02:00
sudo service docker restart
docker build ${DOCKER_BUILD_ARGS} \
--cache-from "qgis/qgis:BUILDER" \
--squash \
-t "qgis/qgis:${DOCKER_TAG}" \
-f qgis.dockerfile ..
2021-02-25 14:29:07 +01:00
- name: Pushing image to docker hub
run: |
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
docker push "qgis/qgis:${DOCKER_TAG}"
2020-08-25 08:14:15 +02:00
- name: Trigger PyQGIS API docs build for ${{ matrix.branch }}
if: success()
env:
branch: ${{ matrix.branch }}
run: |
body='{
"ref": "master",
"inputs": {"qgis_branch": "__QGIS_VERSION_BRANCH__"}
}'
body=$(sed "s/__QGIS_VERSION_BRANCH__/${branch}/;" <<< $body)
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${GH_TOKEN}" \
https://api.github.com/repos/qgis/pyqgis/actions/workflows/2246440/dispatches \
-d "${body}"