mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.5 to 2.1.6. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.5...v2.1.6) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
171 lines
5.9 KiB
YAML
171 lines
5.9 KiB
YAML
name: 🐳 Build Docker images for current branches
|
|
|
|
# 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:
|
|
push:
|
|
tags:
|
|
- final-*
|
|
branches:
|
|
- master
|
|
paths:
|
|
- .github/workflows/build-docker.yml
|
|
schedule:
|
|
# runs every day
|
|
- cron: '0 0 * * *'
|
|
workflow_dispatch:
|
|
# POST https://api.github.com/repos/qgis/QGIS/actions/workflows/2264135/dispatches:
|
|
|
|
jobs:
|
|
define-strategy:
|
|
if: github.repository_owner == 'qgis'
|
|
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:
|
|
if: github.repository_owner == 'qgis'
|
|
runs-on: ubuntu-latest
|
|
needs: define-strategy
|
|
|
|
env:
|
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
CC: /usr/lib/ccache/gcc
|
|
CXX: /usr/lib/ccache/g++ # Building SIP binding freezes with Clang in Docker, maybe a SIP issue, maybe not
|
|
DOCKER_BUILD_DEPS_FILE: qgis3-build-deps.dockerfile
|
|
|
|
strategy:
|
|
matrix: ${{ fromJSON( needs.define-strategy.outputs.matrix ) }}
|
|
|
|
steps:
|
|
- name: Free additional space
|
|
run: |
|
|
df -h
|
|
rm -rf /tmp/workspace
|
|
rm -rf /usr/share/dotnet/sdk
|
|
sudo apt remove llvm-* ghc-* google-chrome-* dotnet-sdk-*
|
|
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 100
|
|
du -a /usr/share | sort -n -r | head -n 10
|
|
du -a /usr/local/share | sort -n -r | head -n 10
|
|
df -h
|
|
sudo apt clean
|
|
df -h
|
|
|
|
- name: Cache
|
|
id: cache
|
|
uses: actions/cache@v2.1.6
|
|
with:
|
|
path: ~/.ccache
|
|
key: docker-build-${{ matrix.branch }}-${{ github.sha }}
|
|
restore-keys: |
|
|
docker-build-${{ matrix.branch }}-
|
|
docker-build-master-
|
|
|
|
- name: checkout ${{ matrix.branch }}
|
|
uses: actions/checkout@v2
|
|
with:
|
|
ref: ${{ matrix.branch }}
|
|
|
|
- name: Define vars
|
|
env:
|
|
branch: ${{ matrix.branch }}
|
|
run: |
|
|
export DOCKER_TAG=${branch//master/latest}
|
|
export DOCKER_DEPS_TAG=${DOCKER_TAG}
|
|
|
|
# add vars for next steps
|
|
echo "DOCKER_TAG=${DOCKER_TAG}" >> $GITHUB_ENV
|
|
echo "DOCKER_DEPS_TAG=${DOCKER_DEPS_TAG}" >> $GITHUB_ENV
|
|
|
|
echo "branch: ${branch}"
|
|
echo "docker tag: ${DOCKER_TAG}"
|
|
echo "docker deps tag: ${DOCKER_DEPS_TAG}"
|
|
|
|
- name: Copy cache
|
|
run: |
|
|
[[ -d ~/.ccache ]] && echo "cache directory (~/.ccache) exists" || mkdir -p ~/.ccache
|
|
# copy ccache dir within QGIS source so it can be accessed from docker
|
|
cp -r ~/.ccache/. ./.ccache_image_build
|
|
|
|
- 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: |
|
|
cd .docker
|
|
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)
|
|
|
|
- name: Finalize image
|
|
run: |
|
|
cd .docker
|
|
# enable experimental features in Docker to squash
|
|
echo '{ "experimental": true}' | sudo tee /etc/docker/daemon.json
|
|
sudo service docker restart
|
|
docker build ${DOCKER_BUILD_ARGS} \
|
|
--cache-from "qgis/qgis:BUILDER" \
|
|
--squash \
|
|
-t "qgis/qgis:${DOCKER_TAG}" \
|
|
-f qgis.dockerfile ..
|
|
|
|
- name: Pushing image to docker hub
|
|
run: |
|
|
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
|
|
docker push "qgis/qgis:${DOCKER_TAG}"
|
|
|
|
- name: Trigger PyQGIS API docs build for ${{ matrix.branch }}
|
|
if: success() && !startsWith(github.ref, 'refs/tags/')
|
|
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}"
|
|
|
|
|
|
|