Skip to content
Snippets Groups Projects
Commit 207686b1 authored by Burak Hançerli's avatar Burak Hançerli :headphones:
Browse files

QDS-11960 Create testing infrastructure for x86_64

parent 6158ab6e
No related branches found
No related tags found
1 merge request!43QDS-11960 Create testing infrastructure for x86_64
Pipeline #68427 passed
Showing
with 130 additions and 83 deletions
......@@ -7,3 +7,6 @@ url = https://git.qt.io/design-studio/kit-dependencies/qt-quickdesigner-componen
[submodule "3rdparty/qtquickdesigner-components"]
path = 3rdparty/qtquickdesigner-components
url = https://git.qt.io/design-studio/kit-dependencies/qt-quickdesigner-components
[submodule "3rdparty/googletest"]
path = 3rdparty/googletest
url = https://github.com/google/googletest.git
cmake_minimum_required(VERSION 3.14)
project(qtdesignviewer-android LANGUAGES CXX)
project(qtuiviewer LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
......@@ -11,83 +11,40 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(-Wall -Wextra)
if(NOT EXISTS ${ANDROID_OPENSSL_PATH})
message(WARNING "Cannot find OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}")
message(FATAL_ERROR "Please set ANDROID_OPENSSL_PATH to the path of OpenSSL for Android.")
endif()
message(STATUS "Found OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}")
find_package(
QT NAMES Qt6
COMPONENTS Core Widgets Quick Gui Qml Multimedia MultimediaWidgets Concurrent
REQUIRED
)
find_package(
Qt6
COMPONENTS Core Widgets Quick Gui Qml Multimedia MultimediaWidgets Concurrent
REQUIRED
)
find_package(Qt6 REQUIRED COMPONENTS Core)
qt_policy(SET QTP0002 NEW)
set(QT_MINIMUM_VERSION 6.3.0)
set(QT_MINIMUM_VERSION 6.6.1)
if(QT_VERSION VERSION_LESS QT_MINIMUM_VERSION)
message(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}")
endif()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zxing-cpp)
qt_add_executable(${PROJECT_NAME}
src/importdummy.qml
src/main.cpp
src/backend.cpp src/backend.h
src/serviceconnector.cpp src/serviceconnector.h
src/projectmanager.cpp src/projectmanager.h
src/dsconnector.cpp src/dsconnector.h
src/qrscanner.cpp src/qrscanner.h
3rdparty/zxing-cpp/example/ZXingQtReader.h
ui/main.qml
ui/resources.qrc
)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core Qt6::Widgets
Qt6::Quick Qt6::Gui
Qt6::Qml Qt6::GuiPrivate
Qt6::Multimedia Qt6::MultimediaWidgets
Qt6::Concurrent
ZXing::ZXing
)
set_property(TARGET ${PROJECT_NAME}
APPEND PROPERTY QT_WASM_INITIAL_MEMORY "50MB"
)
set_property(TARGET ${PROJECT_NAME}
APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android
)
if(NOT EXISTS ${ANDROID_OPENSSL_PATH})
message(WARNING "Cannot find OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}")
message(FATAL_ERROR "Please set ANDROID_OPENSSL_PATH to the path of OpenSSL for Android.")
endif()
message(STATUS "Found OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}")
set_property(TARGET ${PROJECT_NAME} PROPERTY QT_ANDROID_EXTRA_LIBS
${ANDROID_OPENSSL_PATH}/libcrypto_3.so
${ANDROID_OPENSSL_PATH}/libssl_3.so)
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_INSTALL_PREFIX})
set_property(TARGET ${PROJECT_NAME} PROPERTY QT_ANDROID_TARGET_SDK_VERSION 34)
qt6_import_qml_plugins(${PROJECT_NAME})
execute_process(COMMAND git describe --always --tags OUTPUT_VARIABLE CMAKE_VAR_GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git -C ${CMAKE_SOURCE_DIR}/3rdparty/qtquickdesigner-components describe --always --tags OUTPUT_VARIABLE CMAKE_VAR_QT_QUICK_COMPONENTS_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git -C ${CMAKE_SOURCE_DIR}/3rdparty/zxing-cpp describe --always --tags OUTPUT_VARIABLE CMAKE_VAR_ZXING_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git describe --always --tags OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git -C ${CMAKE_SOURCE_DIR}/3rdparty/qtquickdesigner-components describe --always --tags OUTPUT_VARIABLE QT_QUICK_COMPONENTS_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git -C ${CMAKE_SOURCE_DIR}/3rdparty/zxing-cpp describe --always --tags OUTPUT_VARIABLE ZXING-CPP OUTPUT_STRIP_TRAILING_WHITESPACE)
add_definitions( -DCMAKE_VAR_GIT_VERSION="${CMAKE_VAR_GIT_VERSION}" )
add_definitions( -DCMAKE_VAR_QT_QUICK_COMPONENTS_VERSION="${CMAKE_VAR_QT_QUICK_COMPONENTS_VERSION}" )
add_definitions( -DCMAKE_VAR_ZXING_VERSION="${CMAKE_VAR_ZXING_VERSION}" )
add_definitions( -DGIT_VERSION="${GIT_VERSION}" )
add_definitions( -DQT_QUICK_COMPONENTS_VERSION="${QT_QUICK_COMPONENTS_VERSION}" )
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zxing-cpp)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
message(STATUS "PROJECT VERSION: ${GIT_VERSION}")
message(STATUS "PROJECT VERSION: ${CMAKE_VAR_GIT_VERSION}")
message(STATUS "QT_VERSION: ${QT_VERSION}")
message(STATUS "QT_QUICK_COMPONENTS_VERSION: ${QT_QUICK_COMPONENTS_VERSION}")
message(STATUS "ZXING-CPP: ${ZXING-CPP}")
message(STATUS "QT_QUICK_COMPONENTS_VERSION: ${CMAKE_VAR_QT_QUICK_COMPONENTS_VERSION}")
message(STATUS "ZXING-CPP: ${CMAKE_VAR_ZXING_VERSION}")
File added
......@@ -9,8 +9,14 @@ workflow:
stages:
- build
- test
- deploy
- release
include:
- local: "cicd/stages/*"
.pipeline_common:
image: "git.qt.io:4567/design-studio/maintenance/docker-images/qt-full:${QDS_CI_QT_VERSION}"
tags:
- linux-blade
# QDS_CI_BUILD_QT_VERSION_ANDROID and QDS_CI_BUILD_QT_VERSION_WASM are the tags for the docker images.
# https://git.qt.io/design-studio/maintenance/docker-images/container_registry
build-android:
extends: .pipeline_common
stage: build
tags:
- linux-blade
rules:
- if: $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web"
parallel:
......@@ -17,18 +16,19 @@ build-android:
- QDS_CI_JOB_TARGET_ARCH: "x86_64"
QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/x86_64"
variables:
QDS_CI_JOB_BUILD_PATH: "${CI_PROJECT_DIR}/outdir/build"
QDS_CI_JOB_BUILD_PATH: "${QDS_CI_CACHE_PATH}/${QDS_CI_JOB_TARGET_ARCH}/build"
QDS_CI_JOB_TARGET_PLATFORM: "android"
QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_PLATFORM}/${QDS_CI_JOB_TARGET_ARCH}
QDS_CI_JOB_ARTIFACTS_PATH_APP: ${QDS_CI_JOB_ARTIFACTS_PATH}/app
QDS_CI_JOB_ARTIFACTS_PATH_TEST: ${QDS_CI_JOB_ARTIFACTS_PATH}/test
QDS_CI_JOB_QT_ANDROID_PATH: "${QDS_CI_QT_PATH}/${QDS_CI_QT_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}"
image: "git.qt.io:4567/design-studio/maintenance/docker-images/qt-full:${QDS_CI_QT_VERSION}"
artifacts:
name: design-viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_PLATFORM}-${QDS_CI_JOB_TARGET_ARCH}
expose_as: "build-artifacts"
paths:
- ${QDS_CI_ARTIFACTS_PATH}
script:
- mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH}
- mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH_APP} ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
- ls -l ${QDS_CI_JOB_OPENSSL_PATH}
- pushd 3rdparty/qtquickdesigner-components
- export
......@@ -58,4 +58,8 @@ build-android:
-DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \
-DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH}
- cmake --build ${QDS_CI_JOB_BUILD_PATH} --target all
- cp -r ${QDS_CI_JOB_BUILD_PATH}/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH}
- cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP}
- cp -r ${QDS_CI_JOB_BUILD_PATH}/tests/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
- echo designviewer | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk
- echo designviewer | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
- rm -f ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
create-packages:
stage: release
image: alpine:latest
tags:
- linux-blade
extends: .pipeline_common
rules:
- if: $CI_COMMIT_TAG
needs:
- job: build-android
- job: test-x86_64
optional: false
artifacts: true
variables:
QDS_PACKAGE_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/qt-ui-viewer/${CI_COMMIT_TAG}"
script:
- apk add tar curl
- cd ${QDS_CI_ARTIFACTS_PATH}
- cd ${QDS_CI_ARTIFACTS_PATH_APP}
- |
for platform in $(ls); do
echo "Creating packages for platform $platform"
cd "$platform"
for arch in $(ls); do
echo "Running for $platform-$arch. Compressing..."
cd "$arch"
# app folder contains the apk for the app
# test folder contains the apk for the tests
# we only need to compress the app folder
cd "$arch/app"
tar -czf "$platform-$arch.tar.gz" *
echo "Uploading $platform-$arch.tar.gz to GitLab Package Registry"
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${platform}-${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-${platform}-${arch}.tar.gz
......
# todo: run the tests for all architectures
test-x86_64:
stage: test
extends: .pipeline_common
tags:
- qds-blade-server-shell
needs:
- job: build-android
optional: false
artifacts: true
variables:
GIT_SUBMODULE_STRATEGY: none
QDS_CI_JOB_TEST_RESULTS_PATH: ${CI_PROJECT_DIR}/test
script:
- |
export ANDROID_SDK_ROOT=/opt/android
export PATH=$PATH:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/
export PATH=$PATH:${ANDROID_SDK_ROOT}/emulator
export PATH=$PATH:${ANDROID_SDK_ROOT}/platform-tools
- cd ${QDS_CI_ARTIFACTS_PATH}/android/x86_64/test || exit 1
- mkdir -p ${QDS_CI_JOB_TEST_RESULTS_PATH}
- adb install -r -g android-build-release.apk
- adb shell am start -e applicationArguments "'-o output.txt,txt -o output.xml,xml -o output.junitxml,junitxml'" -n io.qt.qtuiviewer.test/org.qtproject.qt.android.bindings.QtActivity
- adb shell "run-as io.qt.qtuiviewer.test cat /data/data/io.qt.qtuiviewer.test/files/output.junitxml" > output.junit.xml
- mv output.junit.xml ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
artifacts:
paths:
- ${QDS_CI_JOB_TEST_RESULTS_PATH}/
reports:
junit: ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
expire_in: 1 week
find_package(
Qt6
COMPONENTS Core Widgets Quick Gui Qml Multimedia MultimediaWidgets Concurrent
REQUIRED
)
qt_add_executable(${PROJECT_NAME}
backend/importdummy.qml
backend/main.cpp
backend/backend.cpp backend/backend.h
backend/serviceconnector.cpp backend/serviceconnector.h
backend/projectmanager.cpp backend/projectmanager.h
backend/dsconnector.cpp backend/dsconnector.h
backend/qrscanner.cpp backend/qrscanner.h
ui/main.qml
ui/resources.qrc
../3rdparty/zxing-cpp/example/ZXingQtReader.h
)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core Qt6::Widgets
Qt6::Quick Qt6::Gui
Qt6::Qml Qt6::GuiPrivate
Qt6::Multimedia Qt6::MultimediaWidgets
Qt6::Concurrent
ZXing::ZXing
)
set_property(TARGET ${PROJECT_NAME}
APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android
)
set_property(TARGET ${PROJECT_NAME} PROPERTY QT_ANDROID_EXTRA_LIBS
${ANDROID_OPENSSL_PATH}/libcrypto_3.so
${ANDROID_OPENSSL_PATH}/libssl_3.so
)
set_property(TARGET ${PROJECT_NAME} PROPERTY QT_ANDROID_TARGET_SDK_VERSION 34)
qt6_import_qml_plugins(${PROJECT_NAME})
<?xml version="1.0"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.qt.qtdesignviewer"
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.qt.qtuiviewer"
android:installLocation="auto" android:versionCode="27" android:versionName="1.2">
<!-- %%INSERT_PERMISSIONS -->
<!-- %%INSERT_FEATURES -->
<supports-screens android:anyDensity="true" android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true" />
<application android:name="org.qtproject.qt.android.bindings.QtApplication"
<application android:icon="@mipmap/app_icon"
android:name="org.qtproject.qt.android.bindings.QtApplication"
android:extractNativeLibs="true" android:hardwareAccelerated="true"
android:label="Qt UI Viewer" android:requestLegacyExternalStorage="true"
android:allowNativeHeapPointerTagging="false" android:icon="@mipmap/app_icon">
android:allowNativeHeapPointerTagging="false">
<profileable android:shell="true" android:enabled="true" />
<activity android:name="org.qtproject.qt.android.bindings.QtActivity"
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
......@@ -30,9 +31,11 @@
<category android:name="android.intent.category.DEFAULT" />
<data android:host="designviewer.qt.io" android:scheme="https" />
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<meta-data android:name="android.app.arguments" android:value="-- %%INSERT_APP_ARGUMENTS%% --"/>
<meta-data android:name="android.app.extract_android_style" android:value="minimal"/>
<meta-data android:name="android.app.lib_name"
android:value="-- %%INSERT_APP_LIB_NAME%% --" />
<meta-data android:name="android.app.arguments"
android:value="-- %%INSERT_APP_ARGUMENTS%% --" />
<meta-data android:name="android.app.extract_android_style" android:value="minimal" />
</activity>
</application>
</manifest>
......@@ -63,8 +63,10 @@ Backend::Backend(QObject *parent)
const QString buildType = "Release";
#endif
m_buildInfo = QCoreApplication::applicationVersion() + "\nTechnology Preview - "
+ QString(GIT_VERSION) + "\nQt " + QString(QT_VERSION_STR) + " - " + buildType
+ " Build" + "\nQt Quick Components " + QString(QT_QUICK_COMPONENTS_VERSION)
+ QString(CMAKE_VAR_GIT_VERSION) + "\nQt " + QString(QT_VERSION_STR) + " - "
+ buildType + " Build" + "\nQt Quick Components "
+ QString(CMAKE_VAR_QT_QUICK_COMPONENTS_VERSION)
+ "\nZXing-Cpp: " + QString(CMAKE_VAR_ZXING_VERSION)
+ "\nOpenSSL support: " + QVariant(QSslSocket::supportsSsl()).toString();
const QRect screenGeometry = QGuiApplication::primaryScreen()->geometry();
......
File moved
File moved
File moved
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment