Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GitHub actions #838

Merged
merged 1 commit into from
Nov 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 166 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
#
# SPDX-License-Identifier: MIT

name: CI

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest

build_type:
- Release

client_only:
- client_only
- client_and_ui

config:
- qt_major: 5
qt_version: "5.15"
- qt_major: 6
qt_version: "6.5.*"
qt_modules: qtshadertools

steps:
- name: Install Qt with options and default aqtversion
uses: jurplel/install-qt-action@v3
with:
aqtversion: null # use whatever the default is
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm trying to understand why this is here.

If it's not specified at all, the default will be used, right? That's why it's the default. Why would it be necessary to explicitly ask for a default?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can remove ofcourse, but I feel like this might be needed in future, also helps one knowing that it uses aqt behind the scenes

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair.

modules: ${{ matrix.config.qt_modules }}
version: ${{ matrix.config.qt_version }}
cache: true

- name: Checkout sources
uses: actions/checkout@v4

- name: Install ninja-build tool (must be after Qt due PATH changes)
uses: turtlesec-no/get-ninja@main

- name: Make sure MSVC is found when Ninja generator is in use
if: ${{ runner.os == 'Windows' }}
uses: ilammy/msvc-dev-cmd@v1

- name: Configure project
run: >
cmake -S . -B ./build -G Ninja
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DGAMMARAY_CLIENT_ONLY_BUILD=${{ matrix.client_only == 'client_only' }}
-DGAMMARAY_BUILD_DOCS=${{ matrix.build_type == 'Debug' && runner.os == 'Linux' }}
-DGAMMARAY_INSTALL_QT_LAYOUT=ON
-DGAMMARAY_MULTI_BUILD=OFF

- name: Build Project
run: cmake --build ./build

- name: Install dependencies on Ubuntu
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Linux' }}
run: |
sudo apt update -qq
sudo apt install -y gdb

- name: Enable gdb attaching
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Linux' }}
run: echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

# Exclude
# connectiontest-style-filter is flaky
# quickmaterialtest|quicktexturetest fails because of QT_QUICK_BACKEND=software
- name: Run tests on Linux Qt5 (offscreen)
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Linux' && matrix.config.qt_major == 5 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex "quickmaterialtest|quicktexturetest|connectiontest-style-filter"
env:
QT_QPA_PLATFORM: offscreen
QT_QUICK_BACKEND: software

# Exclude
# connectiontest-style-filter|bindinginspectortest is flaky
# quickmaterialtest|quicktexturetest fails because of QT_QUICK_BACKEND=software AND QT_QPA_PLATFORM=offscreen
# quickinspectortest|quickinspectortest2 fails at CI, local with 6.2.4 passes
# modelinspectortest fails in Qt6/CI passes locally
- name: Run tests on Linux Qt6 (offscreen)
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Linux' && matrix.config.qt_major == 6 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex "quickmaterialtest|quicktexturetest|connectiontest-style-filter|bindinginspectortest|quickinspectortest|quickinspectortest2|modelinspectortest"
env:
QT_QPA_PLATFORM: offscreen
QT_QUICK_BACKEND: software

# Exclude
#1 - connectiontest-preload (Failed)
#2 - connectiontest-preload-filter (Failed)
#3 - connectiontest-style (Failed)
#4 - connectiontest-style-filter (Failed)
#5 - connectiontest-lldb (Failed)
#6 - connectiontest-lldb-filter (Failed)
#23 - probeabidetectortest (Failed)
#26 - launchertest (Failed)
#37 - quickinspectortest2 (Failed)
- name: Run tests Qt5 on macOS
if: ${{ matrix.build_type == 'Debug' && runner.os == 'macOS' && matrix.config.qt_major == 5 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex "connectiontest-*|probeabidetectortest|launchertest|quickinspectortest2"

# Exclude
#1 - connectiontest-preload (Failed)
#2 - connectiontest-preload-filter (Failed)
#3 - connectiontest-style (Failed)
#4 - connectiontest-style-filter (Failed)
#5 - connectiontest-lldb (Failed)
#6 - connectiontest-lldb-filter (Failed)
#28 - probeabidetectortest (Failed)
#31 - launchertest (Failed)
#32 - clientconnectiontest (Failed)
# modelinspectortest fails in Qt6/CI passes locally
# quickinspectortest2
# bindinginspectortest fails in client_and_ui
- name: Run tests Qt6 on macOS
if: ${{ matrix.build_type == 'Debug' && runner.os == 'macOS' && matrix.config.qt_major == 6 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex
"connectiontest-*|probeabidetectortest|launchertest|clientconnectiontest|modelinspectortest|quickinspectortest2|bindinginspectortest|quicktexturetest"

# Exclude
# quicktexturetest
# bindinginspectortest
- name: Qt5 Run tests on Windows
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Windows' && matrix.config.qt_major == 5 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex "quicktexturetest|bindinginspectortest|connectiontest-windll|connectiontest-windll-filter"

# Exclude
# quicktexturetest
# bindinginspectortest
# modelinspectortest fails in Qt6/CI passes locally
- name: Qt6 Run tests on Windows
if: ${{ matrix.build_type == 'Debug' && runner.os == 'Windows' && matrix.config.qt_major == 6 }}
run: >
ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure
--exclude-regex "quicktexturetest|launchertest|bindinginspectortest|modelinspectortest"

- name: Read tests log when it fails
uses: andstor/file-reader-action@v1
if: ${{ failure() && matrix.build_type == 'Debug' }}
with:
path: "./build/Testing/Temporary/LastTest.log"
2 changes: 1 addition & 1 deletion .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Copyright: 2010-2023 Klarälvdalens Datakonsult AB, a KDAB Group company <info@k
License: GPL-2.0-or-later

#misc config files
Files: 3rdparty/*/qt_attribution.json .clang-format .clang-tidy .clangd .clazy .cmake-format.py .codespellrc .emacs-dirvars .git-blame-ignore-revs .gitattributes .gitignore .kateconfig .krazy .mdlrc .mdlrc.rb .pep8 .pre-commit-config.yaml .pylintrc .qmake.conf .tag .travis.yml appveyor.ini appveyor.yml distro/* format.config.uncrustify.4_spaces *.qdocconf format_sources docs/collection/gammaray.qhcp.cmake examples/yocto/gammaray_git*.bb probe/gammaray_probe-android-dependencies.xml docs/api/Doxyfile.cmake
Files: 3rdparty/*/qt_attribution.json .clang-format .clang-tidy .clangd .clazy .cmake-format.py .codespellrc .emacs-dirvars .git-blame-ignore-revs .gitattributes .gitignore .kateconfig .krazy .mdlrc .mdlrc.rb .pep8 .pre-commit-config.yaml .pylintrc .qmake.conf .tag .travis.yml appveyor.ini appveyor.yml distro/* format.config.uncrustify.4_spaces *.qdocconf format_sources docs/collection/gammaray.qhcp.cmake examples/yocto/gammaray_git*.bb probe/gammaray_probe-android-dependencies.xml docs/api/Doxyfile.cmake .github/*
Copyright: 2010-2023 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
License: BSD-3-Clause

Expand Down
9 changes: 6 additions & 3 deletions tests/launchertest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include <QDebug>
#include <QObject>
#include <QScopeGuard>
#include <QSignalSpy>
#include <QTest>

Expand Down Expand Up @@ -130,6 +131,11 @@ private slots:
static void testAttach()
{
QProcess target;
auto cleanup = qScopeGuard([&target] {
target.kill();
target.waitForFinished();
});

target.setProcessChannelMode(QProcess::ForwardedChannels);
target.start(QLatin1String(TESTBIN_DIR "/minimalcoreapplication"), {}, QProcess::ReadWrite);
QVERIFY(target.waitForStarted());
Expand All @@ -149,9 +155,6 @@ private slots:

spy.wait(30000);
QCOMPARE(spy.count(), 1);

target.kill();
target.waitForFinished();
}
};

Expand Down
16 changes: 12 additions & 4 deletions tests/qmlsupporttest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,20 @@ private slots:
{
QQmlEngine engine;
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nRectangle { Text { text: \"Hello world!\" } }",
component.setData(R"V0G0N(
import QtQuick 2.0
Rectangle {
Text {
text: "Hello world!"
}
}
)V0G0N",
QUrl());
auto obj = component.create();
QVERIFY(obj);
QVERIFY2(obj, qPrintable(component.errorString()));

auto adaptor = PropertyAdaptorFactory::create(obj, this);

QVERIFY(adaptor);
QVERIFY(adaptor->count() > 20);

Expand Down Expand Up @@ -96,7 +104,7 @@ private slots:
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nRectangle { Keys.enabled: true }", QUrl());
auto obj = component.create();
QVERIFY(obj);
QVERIFY2(obj, qPrintable(component.errorString()));

auto adaptor = PropertyAdaptorFactory::create(obj, this);
QVERIFY(adaptor);
Expand All @@ -123,7 +131,7 @@ private slots:
"import QtQuick 2.0\nRectangle { property var a1: []; property var a2: [\"hello\", \"world\"] }",
QUrl());
auto obj = component.create();
QVERIFY(obj);
QVERIFY2(obj, qPrintable(component.errorString()));

auto adaptor = PropertyAdaptorFactory::create(obj, this);
QVERIFY(adaptor);
Expand Down