From 62c54d42734bfca07737bb8b9a9fd794edc73c8c Mon Sep 17 00:00:00 2001 From: Roni Lindholm Date: Fri, 31 Oct 2025 15:18:16 +0200 Subject: [PATCH 1/6] feat: define nlsfi app specifier --- cmake/Package.cmake | 2 +- fastlane/Fastfile | 10 +++++----- fastlane/Matchfile | 2 +- platform/android/AndroidManifest.xml.in | 12 ++++++------ platform/android/build.gradle.in | 2 +- .../src/ch/opengis/qfield/QFieldActivity.java | 12 ++++++------ .../src/ch/opengis/qfield/QFieldCloudService.java | 2 +- .../ch/opengis/qfield/QFieldPositioningService.java | 2 +- .../android/src/ch/opengis/qfield/QFieldUtils.java | 2 +- scripts/ci/env_gh.sh | 12 ++++++------ src/qml/WelcomeScreen.qml | 2 +- 11 files changed, 30 insertions(+), 30 deletions(-) diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 9fb9aae9b0..c71a21542f 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -97,7 +97,7 @@ if(ANDROID AND ANDROIDDEPLOYQT_EXECUTABLE) foreach(JAVA_FILE ${JAVA_FILES}) message(STATUS ${JAVA_FILE}) file(READ ${JAVA_FILE} CONTENT) - string(REGEX REPLACE "ch.opengis.qfield" "ch.opengis.${APP_PACKAGE_NAME}" + string(REGEX REPLACE "fi.nls.qfield" "fi.nls.${APP_PACKAGE_NAME}" CONTENT "${CONTENT}") file(WRITE ${JAVA_FILE} "${CONTENT}") endforeach() diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 9a7067a731..59c51ea4cc 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -13,7 +13,7 @@ end platform :ios do lane :setup_signing do |options| signing_type = options[:type] # "development", "appstore" - app_identifier = options[:app_identifier] # "ch.opengis.qfield", "ch.opengis.qfield-dev" + app_identifier = options[:app_identifier] # "fi.nls.qfield", "fi.nls.qfield-dev" setup_ci if is_ci @@ -64,25 +64,25 @@ platform :ios do ) match_nuke( type: "development", - app_identifier: ['ch.opengis.qfield', 'ch.opengis.qfield-dev'], + app_identifier: ['fi.nls.qfield', 'fi.nls.qfield-dev'], skip_confirmation: true, readonly: false ) match_nuke( type: "appstore", - app_identifier: ['ch.opengis.qfield'], + app_identifier: ['fi.nls.qfield'], skip_confirmation: true, readonly: false ) sync_code_signing( type: "development", - app_identifier: ['ch.opengis.qfield', 'ch.opengis.qfield-dev'], + app_identifier: ['fi.nls.qfield', 'fi.nls.qfield-dev'], force_for_new_devices: true, readonly: false ) sync_code_signing( type: "appstore", - app_identifier: ['ch.opengis.qfield'], + app_identifier: ['fi.nls.qfield'], force_for_new_devices: true, readonly: false ) diff --git a/fastlane/Matchfile b/fastlane/Matchfile index 38f3adf927..ef926fef89 100644 --- a/fastlane/Matchfile +++ b/fastlane/Matchfile @@ -4,4 +4,4 @@ storage_mode("git") type("development") # The default type, can be: appstore, adhoc, enterprise or development -app_identifier(["ch.opengis.qfield", "ch.opengis.qfield-dev"]) +app_identifier(["fi.nls.qfield", "fi.nls.qfield-dev"]) diff --git a/platform/android/AndroidManifest.xml.in b/platform/android/AndroidManifest.xml.in index 5c05edea75..3e38c62a55 100644 --- a/platform/android/AndroidManifest.xml.in +++ b/platform/android/AndroidManifest.xml.in @@ -1,5 +1,5 @@ - + @@ -53,8 +53,8 @@ android:requestLegacyExternalStorage="true" android:theme="@style/AppTheme"> - + @@ -313,7 +313,7 @@ - + diff --git a/platform/android/build.gradle.in b/platform/android/build.gradle.in index 165746b5c1..68dab8b465 100644 --- a/platform/android/build.gradle.in +++ b/platform/android/build.gradle.in @@ -58,7 +58,7 @@ android { ndkVersion = '@ANDROID_NDK_VERSION@' compileSdkVersion = @ANDROID_TARGET_PLATFORM@ - namespace = 'ch.opengis.@APP_PACKAGE_NAME@' + namespace = 'fi.nls.@APP_PACKAGE_NAME@' sourceSets { main { diff --git a/platform/android/src/ch/opengis/qfield/QFieldActivity.java b/platform/android/src/ch/opengis/qfield/QFieldActivity.java index 1c359378f6..0778a160ac 100644 --- a/platform/android/src/ch/opengis/qfield/QFieldActivity.java +++ b/platform/android/src/ch/opengis/qfield/QFieldActivity.java @@ -31,7 +31,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package ch.opengis.qfield; +package fi.nls.qfield; import android.Manifest; import android.app.Activity; @@ -80,8 +80,8 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import androidx.documentfile.provider.DocumentFile; -import ch.opengis.qfield.QFieldUtils; -import ch.opengis.qfield.R; +import fi.nls.qfield.QFieldUtils; +import fi.nls.qfield.R; import io.sentry.android.core.SentryAndroid; import java.io.BufferedInputStream; import java.io.File; @@ -885,7 +885,7 @@ private void getCameraResource(String prefix, String filePath, resourceTempFilePath = tempFile.getAbsolutePath(); Uri fileURI = FileProvider.getUriForFile( - this, "ch.opengis.qfield.fileprovider", tempFile); + this, "fi.nls.qfield.fileprovider", tempFile); Log.d("QField", "Camera temporary file uri: " + fileURI.toString()); @@ -946,7 +946,7 @@ private void openResource(String filePath, String mimeType, Uri contentUri = Build.VERSION.SDK_INT < 24 ? Uri.fromFile(resourceFile) : FileProvider.getUriForFile( - this, "ch.opengis.qfield.fileprovider", + this, "fi.nls.qfield.fileprovider", resourceCacheFile); Intent intent = @@ -1273,7 +1273,7 @@ private void checkAllFileAccess() { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { try { - Uri uri = Uri.parse("package:ch.opengis.qfield"); + Uri uri = Uri.parse("package:fi.nls.qfield"); Intent intent = new Intent( Settings .ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, diff --git a/platform/android/src/ch/opengis/qfield/QFieldCloudService.java b/platform/android/src/ch/opengis/qfield/QFieldCloudService.java index fade9bdaf0..68c5464f7d 100644 --- a/platform/android/src/ch/opengis/qfield/QFieldCloudService.java +++ b/platform/android/src/ch/opengis/qfield/QFieldCloudService.java @@ -29,7 +29,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package ch.opengis.qfield; +package fi.nls.qfield; import android.app.Notification; import android.app.NotificationChannel; diff --git a/platform/android/src/ch/opengis/qfield/QFieldPositioningService.java b/platform/android/src/ch/opengis/qfield/QFieldPositioningService.java index 5293e2b113..c163460a89 100644 --- a/platform/android/src/ch/opengis/qfield/QFieldPositioningService.java +++ b/platform/android/src/ch/opengis/qfield/QFieldPositioningService.java @@ -29,7 +29,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package ch.opengis.qfield; +package fi.nls.qfield; import android.app.Notification; import android.app.NotificationChannel; diff --git a/platform/android/src/ch/opengis/qfield/QFieldUtils.java b/platform/android/src/ch/opengis/qfield/QFieldUtils.java index d6210e83e0..e8e440a26b 100644 --- a/platform/android/src/ch/opengis/qfield/QFieldUtils.java +++ b/platform/android/src/ch/opengis/qfield/QFieldUtils.java @@ -15,7 +15,7 @@ * * ***************************************************************************/ -package ch.opengis.qfield; +package fi.nls.qfield; import android.content.ContentResolver; import android.content.ContentUris; diff --git a/scripts/ci/env_gh.sh b/scripts/ci/env_gh.sh index 7b13caf74c..8705bc0b0d 100755 --- a/scripts/ci/env_gh.sh +++ b/scripts/ci/env_gh.sh @@ -42,21 +42,21 @@ export CI_RUN_NUMBER=${GITHUB_RUN_NUMBER} if [[ "${CI_TAG}" ]]; then export IOS_CODE_SIGN_IDENTITY="Apple Distribution" - export IOS_APP_IDENTIFIER="ch.opengis.qfield" - export IOS_PROVISIONING_PROFILE_SPECIFIER="match AppStore ch.opengis.qfield" + export IOS_APP_IDENTIFIER="fi.nls.qfield" + export IOS_PROVISIONING_PROFILE_SPECIFIER="match AppStore fi.nls.qfield" export IOS_EXPORT_METHOD="app-store" export IOS_SIGN_TYPE="appstore" elif [[ ${GITHUB_REF} == "master" && ${CI_PULL_REQUEST} == "false" ]]; then # To be improved for nightly builds / beta... export IOS_CODE_SIGN_IDENTITY="Apple Development" - export IOS_APP_IDENTIFIER="ch.opengis.qfield-dev" - export IOS_PROVISIONING_PROFILE_SPECIFIER="match Development ch.opengis.qfield-dev" + export IOS_APP_IDENTIFIER="fi.nls.qfield-dev" + export IOS_PROVISIONING_PROFILE_SPECIFIER="match Development fi.nls.qfield-dev" export IOS_EXPORT_METHOD="development" export IOS_SIGN_TYPE="development" else export IOS_CODE_SIGN_IDENTITY="Apple Development" - export IOS_APP_IDENTIFIER="ch.opengis.qfield-dev" - export IOS_PROVISIONING_PROFILE_SPECIFIER="match Development ch.opengis.qfield-dev" + export IOS_APP_IDENTIFIER="fi.nls.qfield-dev" + export IOS_PROVISIONING_PROFILE_SPECIFIER="match Development fi.nls.qfield-dev" export IOS_EXPORT_METHOD="development" export IOS_SIGN_TYPE="development" fi diff --git a/src/qml/WelcomeScreen.qml b/src/qml/WelcomeScreen.qml index dbd1032eb3..78849fc780 100644 --- a/src/qml/WelcomeScreen.qml +++ b/src/qml/WelcomeScreen.qml @@ -287,7 +287,7 @@ Page { if (Qt.platform.os === "windows") { Qt.openUrlExternally("https://apps.microsoft.com/detail/xp99h3bcx4bw7f"); } else if (Qt.platform.os === "android") { - Qt.openUrlExternally("market://details?id=ch.opengis.qfield"); + Qt.openUrlExternally("market://details?id=fi.nls.qfield"); } else if (Qt.platform.os === "ios") { Qt.openUrlExternally("itms-apps://itunes.apple.com/app/qfield-for-qgis/id1531726814"); } From c9eff93154759ba6360609eb9b4dfaada8716fb8 Mon Sep 17 00:00:00 2001 From: Roni Lindholm Date: Fri, 31 Oct 2025 15:18:33 +0200 Subject: [PATCH 2/6] chore: customize github actions --- .github/workflows/android.yml | 164 +++++++++++++++++----------------- .github/workflows/ios.yml | 9 +- .github/workflows/linux.yml | 21 ++--- .github/workflows/macos.yml | 9 +- .github/workflows/windows.yml | 53 +++++------ 5 files changed, 124 insertions(+), 132 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 0f3c5cc22f..8f2a90e881 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,19 +4,16 @@ on: push: branches: - master - - release-** + - nlsfi-release pull_request: - release: - types: ['published'] workflow_dispatch: + release: + types: ['created', 'edited'] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true -env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - jobs: build: runs-on: ubuntu-24.04 @@ -32,30 +29,30 @@ jobs: qt_arch: 'android_arm64_v8a' all_files_access: 'ON' artifact_name: 'android-arm64' - - triplet: 'arm-neon-android' - qt_arch: 'android_armv7' - all_files_access: 'OFF' - artifact_name: 'android-arm-neon' - - triplet: 'arm-neon-android' - qt_arch: 'android_armv7' - all_files_access: 'ON' - artifact_name: 'android-arm-neon' - - triplet: 'x64-android' - qt_arch: 'android_x86_64' - all_files_access: 'OFF' - artifact_name: 'android-x64' - - triplet: 'x64-android' - qt_arch: 'android_x86_64' - all_files_access: 'ON' - artifact_name: 'android-x64' - - triplet: 'x86-android' - qt_arch: 'android_x86' - all_files_access: 'OFF' - artifact_name: 'android-x86' - - triplet: 'x86-android' - qt_arch: 'android_x86' - all_files_access: 'ON' - artifact_name: 'android-x86' + # - triplet: 'arm-neon-android' + # qt_arch: 'android_armv7' + # all_files_access: 'OFF' + # artifact_name: 'android-arm-neon' + # - triplet: 'arm-neon-android' + # qt_arch: 'android_armv7' + # all_files_access: 'ON' + # artifact_name: 'android-arm-neon' + # - triplet: 'x64-android' + # qt_arch: 'android_x86_64' + # all_files_access: 'OFF' + # artifact_name: 'android-x64' + # - triplet: 'x64-android' + # qt_arch: 'android_x86_64' + # all_files_access: 'ON' + # artifact_name: 'android-x64' + # - triplet: 'x86-android' + # qt_arch: 'android_x86' + # all_files_access: 'OFF' + # artifact_name: 'android-x86' + # - triplet: 'x86-android' + # qt_arch: 'android_x86' + # all_files_access: 'ON' + # artifact_name: 'android-x86' steps: - name: 🐣 Checkout @@ -185,7 +182,7 @@ jobs: - name: 🔑 Setup signing key env: - SIGNINGKEY: ${{ secrets.PLAYSTORE_SIGNINGKEY }} + SIGNINGKEY: ${{ secrets.APK_SIGNINGKEY }} run: | echo "$SIGNINGKEY" | base64 --decode > ./keystore.p12 @@ -205,13 +202,20 @@ jobs: ${{ env.CMAKE_BUILD_DIR }}/src/app/android-build/build/outputs/apk/release/android-build-release-signed.apk ${{ env.CMAKE_BUILD_DIR }}/src/app/android-build/build/outputs/apk/debug/android-build-debug.apk - - name: 🍺 Deploy + # - name: 🍺 Deploy + # run: | + # sudo apt install -y s3cmd + # # This script will rename the artifact and move it to /tmp + # NAME=${{ matrix.artifact_name }} ALL_FILES_ACCESS=${{ matrix.all_files_access }} ./scripts/ci/upload_artifacts.sh + # env: + # S3CFG: ${{ secrets.S3CMD_CFG }} + + - name: mv apk files run: | - sudo apt install -y s3cmd - # This script will rename the artifact and move it to /tmp - NAME=${{ matrix.artifact_name }} ALL_FILES_ACCESS=${{ matrix.all_files_access }} ./scripts/ci/upload_artifacts.sh - env: - S3CFG: ${{ secrets.S3CMD_CFG }} + set -e + FILENAME_APK="${CI_PACKAGE_NAME}-${CI_PACKAGE_FILE_SUFFIX}-${{ matrix.artifact_name }}.apk" + echo "📦 Renaming APK to /tmp/${FILENAME_APK}" + mv "${CMAKE_BUILD_DIR}/src/app/android-build/build/outputs/apk/release/android-build-release-signed.apk" "/tmp/${FILENAME_APK}" - name: Upload release assets uses: AButler/upload-release-assets@v3.0 @@ -231,49 +235,49 @@ jobs: bundle exec fastlane run sentry_debug_files_upload path:${{ env.CMAKE_BUILD_DIR }}/src/app/android-build/build/intermediates/merged_native_libs/release - deploy_to_playstore: - name: deploy to play store - runs-on: ubuntu-22.04 - needs: build - if: ${{ ( github.event_name == 'release' || ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) ) }} - steps: - - name: Checkout - uses: actions/checkout@v6 - if: ${{ env.SENTRY_AUTH_TOKEN != '' }} - - - name: Vars - id: vars - if: ${{ env.SENTRY_AUTH_TOKEN != '' }} - run: | - ./scripts/ci/env_gh.sh - - - name: Download apks - if: ${{ env.SENTRY_AUTH_TOKEN != '' }} - run: | - wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm64.apk - wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm-neon.apk - wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x64.apk - wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x86.apk - - - name: Upload to Google Play Store - if: ${{ env.SENTRY_AUTH_TOKEN != '' }} - run: | - pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client - - if [[ -n "${{ env.CI_TAG }}" ]] - then - RELEASE_MESSAGE="Find out what's new on https://github.com/opengisch/QField/releases/tag/${{ env.CI_TAG }}" - else - RELEASE_MESSAGE="Update from commit ${GITHUB_SHA}" - fi - - ./scripts/basic_upload_apks_service_account.py ch.opengis.${{ env.APP_PACKAGE_NAME }} beta "${RELEASE_MESSAGE}" \ - qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm64.apk \ - qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm-neon.apk \ - qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x64.apk \ - qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x86.apk - env: - GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + # deploy_to_playstore: + # name: deploy to play store + # runs-on: ubuntu-22.04 + # needs: build + # if: ${{ ( github.event_name == 'release' || ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) ) }} + # steps: + # - name: Checkout + # uses: actions/checkout@v6 + # if: ${{ env.SENTRY_AUTH_TOKEN != '' }} + + # - name: Vars + # id: vars + # if: ${{ env.SENTRY_AUTH_TOKEN != '' }} + # run: | + # ./scripts/ci/env_gh.sh + + # - name: Download apks + # if: ${{ env.SENTRY_AUTH_TOKEN != '' }} + # run: | + # wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm64.apk + # wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm-neon.apk + # wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x64.apk + # wget https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x86.apk + + # - name: Upload to Google Play Store + # if: ${{ env.SENTRY_AUTH_TOKEN != '' }} + # run: | + # pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client + + # if [[ -n "${{ env.CI_TAG }}" ]] + # then + # RELEASE_MESSAGE="Find out what's new on https://github.com/opengisch/QField/releases/tag/${{ env.CI_TAG }}" + # else + # RELEASE_MESSAGE="Update from commit ${GITHUB_SHA}" + # fi + + # ./scripts/basic_upload_apks_service_account.py ch.opengis.${{ env.APP_PACKAGE_NAME }} beta "${RELEASE_MESSAGE}" \ + # qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm64.apk \ + # qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-arm-neon.apk \ + # qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x64.apk \ + # qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-android-x86.apk + # env: + # GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} comment_pr: diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index b2790301c0..64a791c63c 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -1,14 +1,7 @@ --- name: 🍏 iOS -on: - push: - branches: - - master - - release-** - pull_request: - release: - types: ['published'] +on: [] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 71f4035101..efcabce747 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -4,10 +4,11 @@ on: push: branches: - master - - release-** + - nlsfi-release pull_request: + workflow_dispatch: release: - types: ['published'] + types: ['created', 'edited'] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -186,14 +187,14 @@ jobs: asset_name: ${{ env.ARTIFACT_NAME }} overwrite: true - - name: 📮 Upload debug symbols - if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') && env.ARTIFACT_NAME != null - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG_SLUG: opengisch - SENTRY_PROJECT_SLUG: qfield - run: | - bundle exec fastlane run sentry_debug_files_upload path:build + # - name: 📮 Upload debug symbols + # if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') && env.ARTIFACT_NAME != null + # env: + # SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + # SENTRY_ORG_SLUG: opengisch + # SENTRY_PROJECT_SLUG: qfield + # run: | + # bundle exec fastlane run sentry_debug_files_upload path:build - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index eec328b2ab..1d6fd8ddf7 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -1,13 +1,6 @@ --- name: 🍎 MacOS -on: - push: - branches: - - master - - release-** - pull_request: - release: - types: ['published'] +on: [] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index bdf8be7413..51834f21ff 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -7,7 +7,7 @@ on: - release-** pull_request: release: - types: ['published'] + types: ['created', 'edited'] workflow_dispatch: concurrency: @@ -146,21 +146,21 @@ jobs: ${{ env.CMAKE_BUILD_DIR }}/_CPack_Packages/**/*.log ${{ env.CMAKE_BUILD_DIR }}/CMakeCache.txt - - name: 🎭 Sign - if: ( github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') ) || github.event_name == 'workflow_dispatch' && env.ARTIFACT_NAME != null - uses: azure/trusted-signing-action@v0.5.11 - with: - azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} - azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} - azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - endpoint: https://weu.codesigning.azure.net/ - code-signing-account-name: OPENGISch - certificate-profile-name: OPENGISch - files-folder: ${{ env.CMAKE_BUILD_DIR }} - files-folder-filter: exe,msi - file-digest: SHA256 - timestamp-rfc3161: http://timestamp.acs.microsoft.com - timestamp-digest: SHA256 + # - name: 🎭 Sign + # if: ( github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') ) || github.event_name == 'workflow_dispatch' && env.ARTIFACT_NAME != null + # uses: azure/trusted-signing-action@v0.5.11 + # with: + # azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} + # azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} + # azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} + # endpoint: https://weu.codesigning.azure.net/ + # code-signing-account-name: OPENGISch + # certificate-profile-name: OPENGISch + # files-folder: ${{ env.CMAKE_BUILD_DIR }} + # files-folder-filter: exe,msi + # file-digest: SHA256 + # timestamp-rfc3161: http://timestamp.acs.microsoft.com + # timestamp-digest: SHA256 - name: 📦 Upload package if: ${{ env.ARTIFACT_NAME != null }} @@ -191,15 +191,15 @@ jobs: ruby-version: '3.4' # Not needed with a .ruby-version file bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: 🍺 Upload to S3 - if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') - env: - S3_BUCKET: qfieldapks - S3_REGION: ch-dk-2 - S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY}} - S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}} - run: | - bundle exec fastlane windows upload_s3 exe:${{ env.ARTIFACT_PATHNAME }} + # - name: 🍺 Upload to S3 + # if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') + # env: + # S3_BUCKET: qfieldapks + # S3_REGION: ch-dk-2 + # S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY}} + # S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}} + # run: | + # bundle exec fastlane windows upload_s3 exe:${{ env.ARTIFACT_PATHNAME }} - name: 📮 Upload debug symbols if: ${{ env.SENTRY_AUTH_TOKEN != '' }} @@ -213,7 +213,8 @@ jobs: name: deploy (ms store) runs-on: windows-2022 - if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') + if: false + # if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') needs: build From b3f5715f2a223e55496373b7d8c0d8ac8b71a9be Mon Sep 17 00:00:00 2001 From: Roni Lindholm Date: Fri, 31 Oct 2025 15:18:40 +0200 Subject: [PATCH 3/6] feat: customize app name and logo --- export_logo.sh | 39 +++++++++ images/icons/qfield_logo.svg | 75 +++++++++++++----- .../android/res/drawable-hdpi/qfield_logo.png | Bin 2788 -> 12842 bytes .../android/res/drawable-ldpi/qfield_logo.png | Bin 0 -> 5058 bytes .../android/res/drawable-mdpi/qfield_logo.png | Bin 1861 -> 7524 bytes .../res/drawable-xhdpi/qfield_logo.png | Bin 3639 -> 18943 bytes .../res/drawable-xxhdpi/qfield_logo.png | Bin 5637 -> 32124 bytes .../res/drawable-xxxhdpi/qfield_logo.png | Bin 7542 -> 46167 bytes scripts/ci/generate-version-details.sh | 2 +- 9 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 export_logo.sh create mode 100644 platform/android/res/drawable-ldpi/qfield_logo.png diff --git a/export_logo.sh b/export_logo.sh new file mode 100644 index 0000000000..b13b3c126f --- /dev/null +++ b/export_logo.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# Converts one SVG into Android drawable PNGs for all DPI buckets. +# Requires: ImageMagick (convert command) + +set -e + +# === CONFIGURATION === +SRC_SVG="images/icons/qfield_logo.svg" # your source SVG file +BASE_SIZE=48 # mdpi size in px (change for logos) +OUT_DIR="platform/android/res" + +# === Density multipliers === +declare -A DENSITIES=( + [ldpi]=0.75 + [mdpi]=1.0 + [hdpi]=1.5 + [xhdpi]=2.0 + [xxhdpi]=3.0 + [xxxhdpi]=4.0 +) + +# === MAIN === +if [[ ! -f "$SRC_SVG" ]]; then + echo "Error: SVG source '$SRC_SVG' not found!" + exit 1 +fi + +for density in "${!DENSITIES[@]}"; do + scale=${DENSITIES[$density]} + size=$(awk -v base="$BASE_SIZE" -v s="$scale" 'BEGIN { printf "%d", base * s }') + outdir="$OUT_DIR/drawable-$density" + mkdir -p "$outdir" + outfile="$outdir/qfield_logo.png" + + echo "🖼️ Generating $outfile (${size}x${size})" + magick convert -background none -resize "${size}x${size}" "$SRC_SVG" "$outfile" +done + +echo "✅ All drawable sizes generated under $OUT_DIR" diff --git a/images/icons/qfield_logo.svg b/images/icons/qfield_logo.svg index f1fddda553..f4a505906c 100644 --- a/images/icons/qfield_logo.svg +++ b/images/icons/qfield_logo.svg @@ -1,21 +1,23 @@ image/svg+xml + id="grid840" + originx="79.695865" + originy="-14.27453" + spacingy="1" + spacingx="1" + units="px" /> +