Skip to content

Fix qt6 compatibility in test #34902

Fix qt6 compatibility in test

Fix qt6 compatibility in test #34902

Workflow file for this run

name: 🧪 QGIS tests
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
on:
push:
branches:
- master
- release-**
- queued_ltr_backports
paths:
- 'src/**'
- 'external/**'
- 'python/**'
- 'tests/**'
- 'CMakeLists.txt'
- '.github/workflows/run-tests.yml'
- '.docker/**'
- '.ci/**'
pull_request:
branches:
- master
- release-**
- queued_ltr_backports
# paths cannot be filtered on this workflow on pull request as it is a required one in the branch protection
# feature request and hacks: https://github.community/t/feature-request-conditional-required-checks/16761
jobs:
build:
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
QGIS_WORKSPACE: ${{ github.workspace }} # used in docker compose
RUN_FLAKY_TESTS: ${{ contains( github.event.pull_request.labels.*.name, 'run flaky tests') }}
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
matrix:
include:
- distro-version: '22.04'
qt-version: 5
run-tests: true
docker-tag-suffix: ''
with-qt6: OFF
with-qt5: ON
with-3d: ON
with-quick: ON
with-clazy: ON
with-grass7: OFF
with-grass8: OFF
with-compile-commands: ON
# LD_PRELOAD: /lib/x86_64-linux-gnu/libSegFault.so
experimental: false
- distro-version: '38'
qt-version: 6
run-tests: true
docker-tag-suffix: ''
with-qt6: ON
with-qt5: OFF
with-3d: ON
with-quick: ON
with-clazy: OFF
with-grass7: OFF
with-grass8: ON
with-compile-commands: OFF
LD_PRELOAD: ''
experimental: false
fail-fast: false
outputs:
compile_outcome: ${{ steps.compile.outcome }}
tests_failing: ${{ steps.tests.outputs.TESTS_FAILING }}
cdash_url: ${{ steps.tests.outputs.CDASH_URL }}
runners_outcome: ${{ steps.runners.outcome }}
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: true
large-packages: false
docker-images: false
swap-storage: true
- name: Checkout
uses: actions/checkout@v4
- name: Set vars
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF: ${{ github.ref }}
GITHUB_PR_NUMBER: ${{github.event.number}}
run: |
# Be aware that these instructions are duplicated in run-tests job
DOCKER_TAG=$(echo $( [[ ${GITHUB_EVENT_NAME} == pull_request ]] && echo ${GITHUB_BASE_REF} || echo ${GITHUB_REF##*/} ) | sed 's/^master$/latest/')${{ matrix.docker-tag-suffix }}
CTEST_BUILD_NAME=$( [[ ${GITHUB_EVENT_NAME} == pull_request ]] && echo "PR${GITHUB_PR_NUMBER}" || echo ${GITHUB_REF##*/} )"_${GITHUB_SHA}"
echo "DOCKER_TAG=${DOCKER_TAG}" >> $GITHUB_ENV
echo "CTEST_BUILD_NAME=${CTEST_BUILD_NAME}" >> $GITHUB_ENV
echo "QT_VERSION=${{ matrix.qt-version }}" >> $GITHUB_ENV
- name: Print vars
run: |
echo DOCKER_TAG: ${DOCKER_TAG}
echo CTEST_BUILD_NAME: ${CTEST_BUILD_NAME}
echo QT_VERSION: ${QT_VERSION}
- name: Build Docker Container with Build Environment
id: docker-build
uses: whoan/docker-build-with-cache-action@v6
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: docker.pkg.github.com
image_name: qgis3-build-deps-${{ matrix.distro-version }}
dockerfile: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
build_extra_args: "--build-arg=DISTRO_VERSION=${{ matrix.distro-version }}"
push_git_tag: true
push_image_and_stages: on:push
pull_image_and_stages: ${{ github.event_name != 'workflow_dispatch' }}
- name: Tag image
run: |
docker tag ${DOCKER_IMAGE} qgis3-build-deps
env:
DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }}
- name: Push Qt5 deps image to Docker hub
if: ${{ github.repository_owner == 'qgis' && github.event_name != 'pull_request' && matrix.qt-version == '5' }}
run: |
docker tag qgis3-build-deps qgis/qgis3-build-deps:${DOCKER_TAG}
docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"
docker push "qgis/qgis3-build-deps:${DOCKER_TAG}"
- name: Restore build cache
uses: actions/cache/restore@v4
with:
path: /home/runner/QGIS/.ccache
key: build-ccache-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}-${{ github.event.pull_request.base.ref || github.ref_name }}
restore-keys: |
build-ccache-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}-master
- name: Compile QGIS
id: compile
run: |
docker run -t --name qgis_container \
-v $(pwd):/root/QGIS \
-v /home/runner/QGIS/.ccache:/root/.ccache \
--env-file .docker/docker-variables.env \
--env PUSH_TO_CDASH=true \
--env WITH_QT5=${{ matrix.with-qt5 }} \
--env BUILD_WITH_QT6=${{ matrix.with-qt6 }} \
--env WITH_QUICK=${{ matrix.with-quick }} \
--env WITH_3D=${{ matrix.with-3d }} \
--env WITH_GRASS7=${{ matrix.with-grass7 }} \
--env WITH_GRASS8=${{ matrix.with-grass8 }} \
--env LD_PRELOAD=${{ matrix.LD_PRELOAD }} \
--env WITH_CLAZY=${{ matrix.with-clazy }} \
--env WITH_COMPILE_COMMANDS=${{ matrix.with-compile-commands }} \
qgis3-build-deps \
/root/QGIS/.docker/docker-qgis-build.sh
- name: Save build cache for push only
uses: actions/cache/save@v4
if: ${{ github.event_name == 'push' }}
with:
path: /home/runner/QGIS/.ccache
key: build-ccache-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}-${{ github.ref_name }}-${{ github.run_id }}
- name: Push artifact
id: push_artifact
if: ${{ matrix.run-tests }}
run: tar --exclude='*.o' -cvzf build.tgz build
- uses: actions/upload-artifact@v3
if: ${{ matrix.run-tests }}
with:
name: build-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}.tgz
path: ./build.tgz
retention-days: 1
# - name: Test QGIS runners
# id: runners
# if: ${{ matrix.distro-version == env.DEFAULT_DISTRO_VERSION }}
# run: |
# docker run -d --name qgis-testing-environment \
# -v $(pwd):/root/QGIS \
# -v $(pwd)/tests/src/python:/tests_directory \
# -v $(pwd)/.docker/qgis_resources/test_runner:/usr/bin/test_runner \
# -v $(pwd)/.docker/qgis_resources/supervisor:/etc/supervisor \
# -e QGIS_BUILD_PATH=/root/QGIS/build/output/bin/qgis \
# -e TEST_RUNNER_PATH=/usr/bin/test_runner/qgis_testrunner.py \
# -e DISPLAY=:99 \
# qgis_image \
# /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
# # Wait for xvfb to finish starting
# printf "Waiting for the docker...🐳..."
# sleep 10
# echo " done 🥩"
#
# declare -A testrunners
# # Passing cases:
# testrunners["test_testrunner.run_passing"]=0
# testrunners["test_testrunner.run_skipped_and_passing"]=0
# # Failing cases:
# testrunners["test_testrunner"]=1
# testrunners["test_testrunner.run_all"]=1
# testrunners["test_testrunner.run_failing"]=1
# set +e # do not exit on error
# # Run tests in the docker
# for i in "${!testrunners[@]}"
# do
# echo "::group::docker_test_runner_${i}"
# echo "test ${i}..."
# docker exec -i qgis-testing-environment sh -c "cd /tests_directory && /usr/bin/test_runner/qgis_testrunner.sh ${i}"
# [[ $? -eq "${testrunners[$i]}" ]] && echo "success" || exit 1
# echo "::endgroup::"
# done
# set -e # switch back
# docker stop qgis-testing-environment
# tests-report-comment:
# name: Write tests report in a comment
# needs: build
# runs-on: ubuntu-latest
# if: always() && ( needs.build.result == 'failure' || needs.build.result == 'success' ) && github.event_name == 'pull_request'
# steps:
# - name: Find Comment
# uses: peter-evans/find-comment@v1
# id: find-comment
# with:
# issue-number: ${{ github.event.pull_request.number }}
# comment-author: 'github-actions[bot]'
# body-includes: Tests report
#
# - name: Create comment
# if: ${{ steps.find-comment.outputs.comment-id == 0 }}
# uses: peter-evans/create-or-update-comment@v1
# id: create-comment
# with:
# issue-number: ${{ github.event.pull_request.number }}
# body: |
# **Tests report**
#
# - name: Process
# id: process-vars
# env:
# COMMENT_FOUND: ${{ steps.find-comment.outputs.comment-id }}
# COMMENT_CREATED: ${{ steps.create-comment.outputs.comment-id }}
# COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
# CDASH_URL: ${{ needs.build.outputs.cdash_url }}
# COMPILE_OUTCOME: ${{ needs.build.outputs.compile_outcome }}
# TESTS_FAILING: ${{ needs.build.outputs.tests_failing }}
# RUNNERS_OUTCOME: ${{ needs.build.outputs.runners_outcome }}
# run: |
# echo "::set-output name=COMMENT_ID::"$([[ "${COMMENT_FOUND}" -eq "0" ]] && echo ${COMMENT_CREATED} || echo ${COMMENT_FOUND})
# if [[ ${COMPILE_OUTCOME} != "success" ]]; then
# echo "::set-output name=COMMENT_BODY::${COMMIT_SHA} :scream: compilation failed"
# elif [[ ${TESTS_FAILING} != "0" ]]; then
# echo "::set-output name=COMMENT_BODY::${COMMIT_SHA} :fire: ${TESTS_FAILING} unit-tests are failing ${CDASH_URL}"
# elif [[ ${RUNNERS_OUTCOME} != "success" ]]; then
# echo "::set-output name=COMMENT_BODY::${COMMIT_SHA} :broken_heart: QGIS runners test failed"
# else
# echo "::set-output name=COMMENT_BODY::${COMMIT_SHA} :sunglasses: unit-tests succeeded"
# fi
#
# - name: Update comment
# uses: peter-evans/create-or-update-comment@v1
# with:
# comment-id: ${{ steps.process-vars.outputs.COMMENT_ID }}
# edit-mode: append
# body: ${{ steps.process-vars.outputs.COMMENT_BODY }}
run-tests:
name: Run tests
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
QGIS_WORKSPACE: ${{ github.workspace }} # used in docker compose
runs-on: ubuntu-latest
needs: build
if: always()
strategy:
matrix:
qt-version: [5, 6]
test-batch: [ALL_BUT_PROVIDERS, POSTGRES, HANA]
include:
- qt-version: 5
distro-version: 22.04
docker-target: binary-only
- qt-version: 6
distro-version: 38
docker-target: single
- qt-version: 5
distro-version: 22.04
test-batch: ORACLE
docker-target: binary-for-oracle
exclude:
- qt-version: 6
test-batch: HANA
- qt-version: 6
test-batch: POSTGRES
fail-fast: false
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: true
large-packages: false
docker-images: false
swap-storage: true
- name: Checkout
uses: actions/checkout@v4
- name: Set vars
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF: ${{ github.ref }}
GITHUB_PR_NUMBER: ${{github.event.number}}
run: |
# Be aware that these instructions are duplicated in build job
CTEST_BUILD_NAME=$( [[ ${GITHUB_EVENT_NAME} == pull_request ]] && echo "PR${GITHUB_PR_NUMBER}" || echo ${GITHUB_REF##*/} )"_${GITHUB_SHA}_${{ matrix.test-batch }}"
echo "CTEST_BUILD_NAME=${CTEST_BUILD_NAME}" >> $GITHUB_ENV
echo "QT_VERSION=${{ matrix.qt-version }}" >> $GITHUB_ENV
- name: Print vars
run: |
echo CTEST_BUILD_NAME: ${CTEST_BUILD_NAME}
- name: Build Docker Container with Testing Environment
id: docker-build
uses: whoan/docker-build-with-cache-action@v6
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: docker.pkg.github.com
image_name: qgis3-qt${{ matrix.qt-version }}-build-deps-bin-only
dockerfile: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
build_extra_args: "--target ${{ matrix.docker-target }} --build-arg=DISTRO_VERSION=${{ matrix.distro-version }}"
push_git_tag: true
push_image_and_stages: on:push
pull_image_and_stages: ${{ github.event_name != 'workflow_dispatch' }}
- name: Tag image
run: |
docker tag ${DOCKER_IMAGE} qgis3-build-deps-binary-image
env:
DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }}
- name: Print disk space
run: |
echo "DOCKER IMAGES"
docker images
echo "DF -H"
sudo df -h
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: build-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}.tgz
path: .
- name: Extract build artifact
run: |
tar xvzf build.tgz
rm -Rf build.tgz
- name: Print disk space
run: |
echo "DF -H"
sudo df -h
- name: Run tests
id: tests
env:
TEST_BATCH: ${{matrix.test-batch}}
QGIS_COMMON_GIT_DIR: ${{ github.workspace }}
run: |
DOCKERFILE=$( ( [[ ${{ matrix.test-batch }} == "ORACLE" ]] && echo "docker-compose-testing-oracle.yml" ) \
|| ( [[ ${{ matrix.test-batch }} == "POSTGRES" ]] && echo "docker-compose-testing-postgres.yml" ) \
|| echo "docker-compose-testing.yml" )
[[ ${{ matrix.test-batch }} == "ORACLE" ]] && sudo rm -rf /usr/share/dotnet/sdk
echo "TEST_BATCH=$TEST_BATCH"
echo "DOCKERFILE=$DOCKERFILE"
mkdir -p /tmp/webdav_tests && chmod 777 /tmp/webdav_tests
mkdir -p /tmp/minio_tests/test-bucket && chmod -R 777 /tmp/minio_tests
docker compose -f .docker/$DOCKERFILE run qgis-deps /root/QGIS/.docker/docker-qgis-test.sh $TEST_BATCH
- name: Fix permissions on test report
if: ${{ failure() }}
run: |
sudo chmod -R 777 qgis_test_report
- name: Save PR number to test report
if: ${{ failure() }}
env:
PR_NUMBER: ${{ github.event.number }}
run: |
echo $PR_NUMBER | sudo tee qgis_test_report/pr_number
- name: Archive test results report
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: test-results-qt${{ matrix.qt-version }}
path: qgis_test_report
clang-tidy:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
needs: build
strategy:
matrix:
include:
- distro-version: '22.04'
qt-version: 5
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: true
large-packages: false
docker-images: false
swap-storage: true
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Build Docker Container with Testing Environment
id: docker-build
uses: whoan/docker-build-with-cache-action@v6
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: docker.pkg.github.com
image_name: qgis3-qt${{ matrix.qt-version }}-build-deps-bin-only
dockerfile: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
build_extra_args: "--build-arg=DISTRO_VERSION=${{ matrix.distro-version }}"
push_git_tag: true
push_image_and_stages: on:push
pull_image_and_stages: ${{ github.event_name != 'workflow_dispatch' }}
- name: Tag image
run: |
docker tag ${DOCKER_IMAGE} qgis3-build-deps
env:
DOCKER_IMAGE: ${{ steps.docker-build.outputs.FULL_IMAGE_NAME }}
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: build-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}.tgz
path: .
- name: Extract build artifact
run: |
tar xvzf build.tgz
rm -Rf build.tgz
- name: Run Clang-Tidy
run: |
docker run -t --name qgis_container \
-v $(pwd):/root/QGIS \
-v /home/runner/QGIS/.ccache:/root/.ccache \
--env-file .docker/docker-variables.env \
qgis3-build-deps \
/root/QGIS/.docker/docker-qgis-clangtidy.sh