mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
452 lines
16 KiB
YAML
452 lines
16 KiB
YAML
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
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build:
|
|
env:
|
|
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: '24.04'
|
|
qt-version: 5
|
|
run-tests: true
|
|
with-qt6: OFF
|
|
with-qt5: ON
|
|
with-3d: ON
|
|
with-quick: ON
|
|
with-clazy: ON
|
|
with-grass7: OFF
|
|
with-grass8: OFF
|
|
with-webengine: OFF
|
|
with-pdf4qt: OFF
|
|
with-compile-commands: ON
|
|
# LD_PRELOAD: /lib/x86_64-linux-gnu/libSegFault.so
|
|
experimental: false
|
|
unity-builds: ON
|
|
|
|
- distro-version: '39'
|
|
qt-version: 6
|
|
run-tests: true
|
|
with-qt6: ON
|
|
with-qt5: OFF
|
|
with-3d: ON
|
|
with-quick: ON
|
|
with-clazy: OFF
|
|
with-grass7: OFF
|
|
with-grass8: ON
|
|
with-webengine: ON
|
|
with-pdf4qt: ON
|
|
with-compile-commands: OFF
|
|
LD_PRELOAD: ''
|
|
experimental: false
|
|
unity-builds: ON
|
|
|
|
|
|
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/')
|
|
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: Login to Docker Hub
|
|
if: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
uses: docker/login-action@v3
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
- name: Build Docker Container with Build Environment
|
|
id: docker-build
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
|
|
tags: qgis/qgis3-build-deps-${{ matrix.distro-version }}-qt${{ matrix.qt-version }}:${{ github.event.pull_request.base.ref || github.ref_name }}
|
|
push: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
pull: true
|
|
build-args:
|
|
DISTRO_VERSION=${{ matrix.distro-version }}
|
|
|
|
- name: Tag image
|
|
run: docker tag ${{ steps.docker-build.outputs.imageid }} qgis3-build-deps
|
|
|
|
- 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 CCACHE_DIR=/root/.ccache \
|
|
--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 WITH_QTWEBENGINE=${{ matrix.with-webengine }} \
|
|
--env WITH_PDF4QT=${{ matrix.with-pdf4qt }} \
|
|
--env LD_PRELOAD=${{ matrix.LD_PRELOAD }} \
|
|
--env WITH_CLAZY=${{ matrix.with-clazy }} \
|
|
--env WITH_COMPILE_COMMANDS=${{ matrix.with-compile-commands }} \
|
|
--env ENABLE_UNITY_BUILDS=${{ matrix.unity-builds }} \
|
|
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@v4
|
|
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
|
|
|
|
run-tests:
|
|
name: Run tests
|
|
env:
|
|
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: 24.04
|
|
docker-target: binary-only
|
|
|
|
- qt-version: 6
|
|
distro-version: 39
|
|
docker-target: binary-only
|
|
|
|
- qt-version: 5
|
|
distro-version: 24.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: Login to Docker Hub
|
|
if: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
uses: docker/login-action@v3
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
- name: Build Docker Container with Testing Environment
|
|
id: docker-build
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
|
|
tags: qgis/qgis3-qt${{ matrix.qt-version }}-build-deps-bin-only:${{ github.event.pull_request.base.ref || github.ref_name }}
|
|
push: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
pull: true
|
|
target: ${{ matrix.docker-target }}
|
|
build-args:
|
|
DISTRO_VERSION=${{ matrix.distro-version }}
|
|
|
|
- name: Tag image
|
|
run: docker tag ${{ steps.docker-build.outputs.imageid }} qgis3-build-deps-binary-image
|
|
|
|
- name: Print disk space
|
|
run: |
|
|
echo "DOCKER IMAGES"
|
|
docker images
|
|
echo "DF -H"
|
|
sudo df -h
|
|
|
|
- name: Download build artifact
|
|
uses: actions/download-artifact@v4
|
|
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 }}
|
|
GITHUB_SHA: ${{ github.sha }}
|
|
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 -e GITHUB_SHA=$GITHUB_SHA 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: Dump report contents
|
|
if: ${{ failure() }}
|
|
run: |
|
|
MD_REPORT_FILE="qgis_test_report/summary.md"; [ -f "$MD_REPORT_FILE" ] && cat "$MD_REPORT_FILE" || true
|
|
|
|
- name: Save PR number to test report
|
|
if: ${{ failure() }}
|
|
run: |
|
|
echo ${{ github.event.number }} | tee qgis_test_report/pr_number
|
|
echo ${{ github.event.pull_request.head.sha }} | tee qgis_test_report/git_commit
|
|
|
|
- name: Archive test results report
|
|
if: ${{ failure() }}
|
|
uses: actions/upload-artifact@v4
|
|
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: '24.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: Login to Docker Hub
|
|
if: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
uses: docker/login-action@v3
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
- name: Build Docker Container with Testing Environment
|
|
id: docker-build
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: .docker/qgis3-qt${{ matrix.qt-version }}-build-deps.dockerfile
|
|
tags: qgis/qgis3-qt${{ matrix.qt-version }}-build-deps-bin-only:${{ github.event.pull_request.base.ref || github.ref_name }}
|
|
push: ${{ github.event_name == 'push' && github.repository == 'qgis/QGIS' }}
|
|
pull: true
|
|
target: ${{ matrix.docker-target }}
|
|
build-args:
|
|
DISTRO_VERSION=${{ matrix.distro-version }}
|
|
|
|
- name: Tag image
|
|
run: docker tag ${{ steps.docker-build.outputs.imageid }} qgis3-build-deps-binary-image
|
|
|
|
- name: Download build artifact
|
|
uses: actions/download-artifact@v4
|
|
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-binary-image \
|
|
/root/QGIS/.docker/docker-qgis-clangtidy.sh
|