diff --git a/cicd/stages/build.yml b/cicd/stages/build.yml index 5d2bd29e1cab327638e4555ea5c14a71464e24bc..a4dd1e13d2ac9ca4631107bc664f52dcd5919ab2 100644 --- a/cicd/stages/build.yml +++ b/cicd/stages/build.yml @@ -1,5 +1,53 @@ # 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-components: &build-components + - pushd 3rdparty/qtquickdesigner-components + - | + cmake \ + -S . \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=${QDS_CI_JOB_QT_ANDROID_PATH}/lib/cmake/Qt6/qt.toolchain.cmake \ + -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \ + -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \ + -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \ + -DFLOWVIEW_AUTO_QMLDIR=ON \ + -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} + - cmake --build . + - cmake --install . + - popd + +.build-android-apps: &build-android-apps + - | + cmake \ + -S . \ + -B ${QDS_CI_JOB_BUILD_PATH} \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=${QDS_CI_JOB_QT_ANDROID_PATH}/lib/cmake/Qt6/qt.toolchain.cmake \ + -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \ + -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \ + -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \ + -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \ + -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \ + -DBUILD_EXAMPLES=OFF + - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target aab + +.copy-and-sign-apks: ©-and-sign-apks + - 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 ${QDS_VAR_PASS} | ${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 ${QDS_VAR_PASS} | ${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 + +.copy-and-sign-aab: ©-and-sign-aab + - | + if [[ -n ${CI_COMMIT_TAG} ]]; + then + cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/bundle/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP} + /usr/bin/jarsigner -keystore ${CI_PROJECT_DIR}/cicd/android/android_release.keystore ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.aab designviewer -storepass ${QDS_VAR_PASS} + fi + build-android: extends: .pipeline_common stage: build @@ -18,50 +66,19 @@ build-android: variables: 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: ${QDS_CI_ARTIFACTS_PATH}/${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}" artifacts: - name: design-viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_PLATFORM}-${QDS_CI_JOB_TARGET_ARCH} + name: qt_ui_viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_ARCH} expose_as: "build-artifacts" paths: - ${QDS_CI_ARTIFACTS_PATH} + expire_in: 1 week script: - 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 - - | - cmake \ - -S . \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WITH_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \ - -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \ - -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \ - -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \ - -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \ - -DFLOWVIEW_AUTO_QMLDIR=ON - - cmake --build . - - cmake --install . - - popd - - | - cmake \ - -S . \ - -B ${QDS_CI_JOB_BUILD_PATH} \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WITH_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \ - -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \ - -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \ - -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \ - -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \ - -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \ - -DBUILD_EXAMPLES=OFF - - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target all - - 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 + - export QDS_CI_JOB_QT_ANDROID_PATH="${DOCKER_ENV_QT_PATH_WITH_VERSION}/android_${QDS_CI_JOB_TARGET_ARCH}" + - *build-components + - *build-android-apps + - *copy-and-sign-apks + - *copy-and-sign-aab diff --git a/cicd/stages/release.yml b/cicd/stages/release.yml index 9397cbb0dbf345653513f9d3472e43b0b31fb794..3e06feb1098cb14ddf60f2d33d66caff7a8f156b 100644 --- a/cicd/stages/release.yml +++ b/cicd/stages/release.yml @@ -8,27 +8,29 @@ create-packages: - job: test-x86_64 optional: false artifacts: true + - job: build-android + optional: false + artifacts: true variables: QDS_PACKAGE_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/qt-ui-viewer/${CI_COMMIT_TAG}" + GIT_SUBMODULE_STRATEGY: none script: - apk add tar curl - - cd ${QDS_CI_ARTIFACTS_PATH_APP} + - echo ${QDS_CI_ARTIFACTS_PATH}; ls -l ${QDS_CI_ARTIFACTS_PATH} + - ls -l ${QDS_CI_ARTIFACTS_PATH}/* + - cd ${QDS_CI_ARTIFACTS_PATH} - | - for platform in $(ls); do - echo "Creating packages for platform $platform" - cd "$platform" - for arch in $(ls); do - echo "Running for $platform-$arch. Compressing..." - # 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 - cd .. - done - cd .. + for arch in $(ls); do + echo "Running for ${arch}. Compressing..." + # app folder contains the apk for the app + # test folder contains the apk for the tests + # we only need to compress the app folder + current_dir=$(pwd) + cd "${arch}/app" + tar -czf "${arch}.tar.gz" * + echo "Uploading ${arch}.tar.gz to GitLab Package Registry" + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-${arch}.tar.gz + cd ${current_dir} done artifacts: name: qt-ui-viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION} @@ -50,6 +52,7 @@ create-release: QDS_PACKAGE_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/qt-ui-viewer/${CI_COMMIT_TAG}" QDS_RELEASE_NAME: "Qt UI Viewer - ${CI_COMMIT_TAG}" QDS_RELEASE_DESCRIPTION: "This version is built with Qt-${QDS_CI_QT_VERSION}." + GIT_SUBMODULE_STRATEGY: none release: name: ${QDS_RELEASE_NAME} description: ${QDS_RELEASE_DESCRIPTION} diff --git a/cicd/stages/test.yml b/cicd/stages/test.yml index 4912a8ba331069d62ff16ab6d39469cd285a1593..9fa8a66e3087c6c47bfbe81f2a1925f1bfed11f6 100644 --- a/cicd/stages/test.yml +++ b/cicd/stages/test.yml @@ -17,14 +17,14 @@ test-x86_64: 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 + - cd ${QDS_CI_ARTIFACTS_PATH}/x86_64/test || exit 1 - mkdir -p ${QDS_CI_JOB_TEST_RESULTS_PATH} - adb install -r -g android-build-release.apk - - adb shell "run-as io.qt.qtuiviewer.test rm -rf /data/data/io.qt.qtuiviewer.test/files/output.junitxml" - - adb shell am start -e applicationArguments "'-o output.junitxml,junitxml'" -n io.qt.qtuiviewer.test/org.qtproject.qt.android.bindings.QtActivity + - adb shell "run-as io.qt.qtdesignviewer.test rm -rf /data/data/io.qt.qtdesignviewer.test/files/output.junitxml" + - adb shell am start -e applicationArguments "'-o output.junitxml,junitxml'" -n io.qt.qtdesignviewer.test/org.qtproject.qt.android.bindings.QtActivity - | counter=0 - while [ -z "$(adb shell pidof -s io.qt.qtuiviewer.test)" ]; do + while [ -z "$(adb shell pidof -s io.qt.qtdesignviewer.test)" ]; do echo "Waiting for test to start" sleep 0.1 counter=$((counter+1)) @@ -33,12 +33,12 @@ test-x86_64: exit 1 fi done - - PID_OF_TEST=$(adb shell pidof -s io.qt.qtuiviewer.test) + - PID_OF_TEST=$(adb shell pidof -s io.qt.qtdesignviewer.test) - 'echo "PID of test: ${PID_OF_TEST}"' - | counter=0 - while [ -n "$(adb shell pidof -s io.qt.qtuiviewer.test)" ]; do - echo "Waiting for test to finish with PID ${PID_OF_TEST}" + while [ -n "$(adb shell pidof -s io.qt.qtdesignviewer.test)" ]; do + echo "Waiting for test to finish" sleep 1 counter=$((counter+1)) if [ $counter -gt 180 ]; then @@ -47,8 +47,8 @@ test-x86_64: fi done - adb logcat -d --pid=${PID_OF_TEST} > ${QDS_CI_JOB_TEST_RESULTS_PATH}/logcat.txt - - adb shell "run-as io.qt.qtuiviewer.test cat /data/data/io.qt.qtuiviewer.test/files/output.junitxml" > output.junit.xml - - adb uninstall io.qt.qtuiviewer.test + - adb shell "run-as io.qt.qtdesignviewer.test cat /data/data/io.qt.qtdesignviewer.test/files/output.junitxml" > output.junit.xml + - adb uninstall io.qt.qtdesignviewer.test - mv output.junit.xml ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml - chmod +x ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh - ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml diff --git a/src/backend/importdummy.qml b/src/backend/importdummy.qml index f0b1bc230de29f5643a4782b10cd9806d23627c3..cb75b90a43c052262c8814ef6a4cad3d2af710e6 100644 --- a/src/backend/importdummy.qml +++ b/src/backend/importdummy.qml @@ -29,7 +29,6 @@ import QtQuickUltralite.Extras import QtQuickUltralite.Layers import FlowView - import Qt.labs.folderlistmodel import QtWebSockets diff --git a/src/ui/main.qml b/src/ui/main.qml index 0093041475f8d50a6a9d9a9caf85addfd71aec25..5d00d420ebce5231a8a7836751d514643989df20 100644 --- a/src/ui/main.qml +++ b/src/ui/main.qml @@ -216,7 +216,7 @@ Rectangle { Layout.fillWidth: true checkable: true autoExclusive: true - visible: false; + visible: false onClicked: { stackLayout.currentIndex = 3 drawer.close() diff --git a/tests/android/AndroidManifest.xml b/tests/android/AndroidManifest.xml index e3ad0a2c7b8c5670e4502a84c2438cd9cc7508a2..0af4173e5fa084b5b996dec260ffd1b2a18d6fe6 100644 --- a/tests/android/AndroidManifest.xml +++ b/tests/android/AndroidManifest.xml @@ -1,5 +1,6 @@ <?xml version="1.0"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.qt.qtuiviewer.test" +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="io.qt.qtdesignviewer.test" android:installLocation="auto" android:versionCode="1" android:versionName="1"> <!-- %%INSERT_PERMISSIONS --> <!-- %%INSERT_FEATURES -->