diff --git a/.ci/ogc/Dockerfile b/.ci/ogc/Dockerfile index 3f5cdbc5807..e0d55eaf796 100644 --- a/.ci/ogc/Dockerfile +++ b/.ci/ogc/Dockerfile @@ -6,6 +6,7 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y \ + ccache \ cmake \ ninja-build \ clang \ diff --git a/.ci/ogc/build.sh b/.ci/ogc/build.sh index b933908604c..8cfa8c9e290 100755 --- a/.ci/ogc/build.sh +++ b/.ci/ogc/build.sh @@ -3,7 +3,16 @@ mkdir /usr/src/qgis/build cd /usr/src/qgis/build || exit 1 +export CCACHE_TEMPDIR=/tmp +# Github workflow cache max size is 2.0, but ccache data get compressed (roughly 1/5?) +ccache -M 2.0G + +# Temporarily uncomment to debug ccache issues +# export CCACHE_LOGFILE=/tmp/cache.debug +ccache -z + cmake -GNinja \ + -DUSE_CCACHE=ON \ -DWITH_QUICK=OFF \ -DWITH_3D=OFF \ -DWITH_STAGED_PLUGINS=OFF \ @@ -34,3 +43,6 @@ cmake -GNinja \ .. ninja + +echo "ccache statistics" +ccache -s diff --git a/.github/workflows/ogc.yml b/.github/workflows/ogc.yml index 3c4cd3d35a4..a6aafd48ff0 100644 --- a/.github/workflows/ogc.yml +++ b/.github/workflows/ogc.yml @@ -36,13 +36,50 @@ jobs: - name: Checkout uses: actions/checkout@master - - name: Setup build dependencies - run: | - docker build -t qgis_server_deps -f .ci/ogc/Dockerfile .ci/ogc/ + - name: Prepare build cache for pull request + uses: pat-s/always-upload-cache@v2.1.5 + if: github.event_name == 'pull_request' + with: + path: /home/runner/QGIS/.ccache + key: build-ccache-ogc-${{ github.actor }}-${{ github.head_ref }}-${{ github.sha }} + # The head_ref or source branch of the pull request in a workflow run. + # The base_ref or target branch of the pull request in a workflow run. + restore-keys: | + build-ccache-ogc-${{ github.actor }}-${{ github.head_ref }}- + build-ccache-ogc-refs/heads/${{ github.base_ref }}- + build-ccache-ogc-refs/heads/master- + + - name: Prepare build cache for branch/tag + # use a fork of actions/cache@v2 to upload cache even when the build or test failed + uses: pat-s/always-upload-cache@v2.1.5 + if: github.event_name != 'pull_request' + with: + path: /home/runner/QGIS/.ccache + # The branch or tag ref that triggered the workflow run. For branches this in the format refs/heads/, and for tags it is refs/tags/ + key: build-ccache-ogc-${{ github.ref }}-${{ github.sha }} + restore-keys: | + build-ccache-ogc-${{ github.ref }}- + build-ccache-ogc-refs/heads/master- + + - name: Build Docker Container with Build Environment + id: docker-build + uses: whoan/docker-build-with-cache-action@v5 + with: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: docker.pkg.github.com + image_name: qgis-deps-ogc + context: .ci/ogc + dockerfile: Dockerfile + push_git_tag: true + push_image_and_stages: on:push + pull_image_and_stages: ${{ github.event_name != 'workflow_dispatch' }} - name: Run build run: | - docker run -v $(pwd):/usr/src/qgis qgis_server_deps /usr/src/qgis/.ci/ogc/build.sh + docker run -v $(pwd):/usr/src/qgis -v /home/runner/QGIS/.ccache:/root/.ccache ${DOCKER_IMAGE} /usr/src/qgis/.ci/ogc/build.sh + env: + DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }} - name: Install pyogctest run: |