From 7d9d40e2a4bba8489ac1d6471f6d9e6a55e57a57 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 09:52:15 +0200 Subject: [PATCH 01/13] wip Signed-off-by: alperozturk96 --- .github/workflows/qa.yml | 50 +++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 5f545c16f1c3..9885a8e9d1fd 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -37,6 +37,7 @@ jobs: java-version: 21 - name: Build QA + id: build-qa if: ${{ steps.check-secrets.outputs.ok == 'true' }} env: KS_PASS: ${{ secrets.KS_PASS }} @@ -46,40 +47,51 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | mkdir -p "$HOME/.gradle" - echo "org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" > "$HOME/.gradle/gradle.properties" - echo "org.gradle.caching=true; org.gradle.parallel=true; org.gradle.configureondemand=true" >> "$HOME/.gradle/gradle.properties" + { + echo "org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" + echo "org.gradle.caching=true" + echo "org.gradle.parallel=true" + echo "org.gradle.configureondemand=true" + } > "$HOME/.gradle/gradle.properties" [ -e app/build.gradle ] && sed -i "/qa/,/\}/ s/versionCode .*/versionCode ${{github.event.number}} /" "app/build.gradle" [ -e app/build.gradle ] && sed -i "/qa/,/\}/ s/versionName .*/versionName \"${{github.event.number}}\"/" "app/build.gradle" [ -e app/build.gradle.kts ] && sed -i "/qa/,/\}/ s/versionCode .*/versionCode = ${{github.event.number}} /" "app/build.gradle.kts" [ -e app/build.gradle.kts ] && sed -i "/qa/,/\}/ s/versionName .*/versionName = \"${{github.event.number}}\"/" "app/build.gradle.kts" ./gradlew assembleQaDebug $(find /usr/local/lib/android/sdk/build-tools/*/apksigner | sort | tail -n1) sign --ks-pass pass:"$KS_PASS" --key-pass pass:"$KEY_PASS" --ks-key-alias key0 --ks ".github/workflows/QA_keystore.jks" app/build/outputs/apk/qa/debug/*qa-debug*.apk + apk=$(find app/build/outputs/apk/qa/debug -name '*qa-debug*.apk' | head -n1) + echo "apk-path=$apk" >> "$GITHUB_OUTPUT" + echo "apk-name=$(basename "$apk")" >> "$GITHUB_OUTPUT" + echo "apk-size=$(du -h "$apk" | cut -f1)" >> "$GITHUB_OUTPUT" - name: Upload APK id: upload-apk + if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f with: - path: app/build/outputs/apk/qa/debug/*qa-debug*.apk - retention-days: 7 - archive: false - - - name: Create QR Code - run: | - sudo apt-get -y install qrencode - qrencode -o qr.png "${{ steps.upload-apk.outputs.artifact-url }}" - - - name: Upload QR - id: upload-qr - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f - with: - path: qr.png + path: ${{ steps.build-qa.outputs.apk-path }} + if-no-files-found: error retention-days: 7 archive: false - name: Comment PR + if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa with: + comment-tag: qa-apk + mode: upsert message: | - APK file: ${{ steps.upload-apk.outputs.artifact-url }} - To test this change/fix you can simply download above APK file and install and test it in parallel to your existing Nextcloud app. - ![qrcode](${{ steps.upload-qr.outputs.artifact-url }}) (please click on link to get QR code displayed) + ### :iphone: QA build + + | | | + |---|---| + | **Download** | [${{ steps.build-qa.outputs.apk-name }}](${{ steps.upload-apk.outputs.artifact-url }}) (${{ steps.build-qa.outputs.apk-size }}) | + | **Commit** | ${{ github.event.pull_request.head.sha }} | + | **Version** | `${{ github.event.number }}` | + | **Available until** | 7 days after this build | + + The QA build installs alongside a released Nextcloud app, so you can keep + using your existing install while testing. + + Downloading the file requires a GitHub account, so open this link on the + device you want to test on, or transfer the APK to it. From a6a7eb425a1536489e56f2a110141cfc69e32589 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 10:16:09 +0200 Subject: [PATCH 02/13] test upsert Signed-off-by: alperozturk96 --- app/src/main/java/com/owncloud/android/MainApp.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/owncloud/android/MainApp.java b/app/src/main/java/com/owncloud/android/MainApp.java index 2afd5ade94ef..1cf7290919f5 100644 --- a/app/src/main/java/com/owncloud/android/MainApp.java +++ b/app/src/main/java/com/owncloud/android/MainApp.java @@ -139,6 +139,7 @@ public class MainApp extends Application implements HasAndroidInjector, NetworkC private static String storagePath; + private static boolean mOnlyOnDevice; private static boolean mOnlyPersonalFiles; From 933c55057e6e1bfe992fbafab3ca998af58fa671 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 10:25:27 +0200 Subject: [PATCH 03/13] test upsert 2 Signed-off-by: alperozturk96 --- app/src/main/java/com/owncloud/android/MainApp.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/MainApp.java b/app/src/main/java/com/owncloud/android/MainApp.java index 1cf7290919f5..2afd5ade94ef 100644 --- a/app/src/main/java/com/owncloud/android/MainApp.java +++ b/app/src/main/java/com/owncloud/android/MainApp.java @@ -139,7 +139,6 @@ public class MainApp extends Application implements HasAndroidInjector, NetworkC private static String storagePath; - private static boolean mOnlyOnDevice; private static boolean mOnlyPersonalFiles; From 691f2020b98f00f958b047560b16ae7bf4e3ed19 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 11:17:32 +0200 Subject: [PATCH 04/13] create qr code Signed-off-by: alperozturk96 --- .github/workflows/qa.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 9885a8e9d1fd..5342bf0f23e0 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -74,6 +74,15 @@ jobs: retention-days: 7 archive: false + - name: Create QR code + id: qr + if: ${{ steps.check-secrets.outputs.ok == 'true' }} + env: + ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} + run: | + encoded=$(printf '%s' "$ARTIFACT_URL" | jq -sRr @uri) + echo "url=https://api.qrserver.com/v1/create-qr-code/?size=220x220&margin=8&data=$encoded" >> "$GITHUB_OUTPUT" + - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa @@ -90,8 +99,10 @@ jobs: | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | + QR code for the download link + The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. - Downloading the file requires a GitHub account, so open this link on the - device you want to test on, or transfer the APK to it. + Downloading the file requires a GitHub account, so scan the QR code on a + device that is signed in, or transfer the APK to it. From 96cb943f7dfe3ccafb90bcc9ec643579b85c2650 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 11:51:29 +0200 Subject: [PATCH 05/13] Try generating QR locally as UTF8 text Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 5342bf0f23e0..03795badc47e 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -80,9 +80,8 @@ jobs: env: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | - encoded=$(printf '%s' "$ARTIFACT_URL" | jq -sRr @uri) - echo "url=https://api.qrserver.com/v1/create-qr-code/?size=220x220&margin=8&data=$encoded" >> "$GITHUB_OUTPUT" - + sudo apt-get -y install qrencode + qrencode -t UTF8 "$ARTIFACT_URL" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa @@ -99,7 +98,7 @@ jobs: | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | - QR code for the download link + ${{ steps.qr.outputs }} The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. From bbe77bf40eac21e6b6a54ea7d15fcc001329f70d Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 11:56:21 +0200 Subject: [PATCH 06/13] Inverted qr Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 03795badc47e..d793c184a48a 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -81,7 +81,7 @@ jobs: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - qrencode -t UTF8 "$ARTIFACT_URL" >> "$GITHUB_OUTPUT" + qrencode -t UTF8i "$ARTIFACT_URL" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa From 9c07c50e8cd41b994b3d291e99a45cfbd255db62 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 12:37:46 +0200 Subject: [PATCH 07/13] Changed output format Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index d793c184a48a..f3100ec4016a 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -81,7 +81,8 @@ jobs: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - qrencode -t UTF8i "$ARTIFACT_URL" >> "$GITHUB_OUTPUT" + qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL") + echo "qr=$qrencoded" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa @@ -98,7 +99,7 @@ jobs: | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | - ${{ steps.qr.outputs }} + ${{ steps.qr.outputs.qr }} The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. From d4a7c387e46ab3183a9fa43bb05b815672671a1d Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 13:03:50 +0200 Subject: [PATCH 08/13] Passing qr string with parenthesis Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index f3100ec4016a..febf92766428 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -82,7 +82,7 @@ jobs: run: | sudo apt-get -y install qrencode qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL") - echo "qr=$qrencoded" >> "$GITHUB_OUTPUT" + echo "qr=\"$qrencoded\"" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa From 2b9c190be04743557893573346a3a1c62df8a1da Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 14:22:08 +0200 Subject: [PATCH 09/13] Urlencode multiline string Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index febf92766428..eb9d47d784c4 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -81,7 +81,7 @@ jobs: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL") + qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL" | base64) echo "qr=\"$qrencoded\"" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} @@ -99,7 +99,7 @@ jobs: | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | - ${{ steps.qr.outputs.qr }} + ${{ echo "steps.qr.outputs.qr" | base64 --decode }} The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. From ff652fcb6e27c424ef76b5c493298c5ecbedf7c3 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Fri, 11 Sep 2026 14:26:15 +0200 Subject: [PATCH 10/13] Do not wrap encoded string Signed-off-by: daniele-verducci --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index eb9d47d784c4..9a121b7ef99a 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -81,7 +81,7 @@ jobs: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL" | base64) + qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL" | base64 --wrap=0) echo "qr=\"$qrencoded\"" >> "$GITHUB_OUTPUT" - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} From d7696ea07b370cab49d134def62722e03fe49701 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 14:48:49 +0200 Subject: [PATCH 11/13] wip Signed-off-by: alperozturk96 --- .github/workflows/qa.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 9a121b7ef99a..81fcbd93d8dc 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -81,8 +81,12 @@ jobs: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - qrencoded=$(qrencode -t UTF8i "$ARTIFACT_URL" | base64 --wrap=0) - echo "qr=\"$qrencoded\"" >> "$GITHUB_OUTPUT" + { + echo 'text<> "$GITHUB_OUTPUT" + - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa @@ -99,7 +103,9 @@ jobs: | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | - ${{ echo "steps.qr.outputs.qr" | base64 --decode }} + ``` + ${{ steps.qr.outputs.text }} + ``` The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. From 449d1c3545183e6ededfd54bdbd918571af01bae Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 15:12:23 +0200 Subject: [PATCH 12/13] try ASCII Signed-off-by: alperozturk96 --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 81fcbd93d8dc..660d24ced2db 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -83,7 +83,7 @@ jobs: sudo apt-get -y install qrencode { echo 'text<> "$GITHUB_OUTPUT" From 49a99d89fa4d472fd1ef28a35e81625c025cccd3 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 11 Sep 2026 15:39:35 +0200 Subject: [PATCH 13/13] use link for qr code Signed-off-by: alperozturk96 --- .github/workflows/qa.yml | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 660d24ced2db..bbd436439cca 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -75,17 +75,22 @@ jobs: archive: false - name: Create QR code - id: qr if: ${{ steps.check-secrets.outputs.ok == 'true' }} env: ARTIFACT_URL: ${{ steps.upload-apk.outputs.artifact-url }} run: | sudo apt-get -y install qrencode - { - echo 'text<> "$GITHUB_OUTPUT" + qrencode -s 8 -o qr.png "$ARTIFACT_URL" + + - name: Upload QR code + id: upload-qr + if: ${{ steps.check-secrets.outputs.ok == 'true' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f + with: + path: qr.png + if-no-files-found: error + retention-days: 7 + archive: false - name: Comment PR if: ${{ steps.check-secrets.outputs.ok == 'true' }} @@ -99,16 +104,13 @@ jobs: | | | |---|---| | **Download** | [${{ steps.build-qa.outputs.apk-name }}](${{ steps.upload-apk.outputs.artifact-url }}) (${{ steps.build-qa.outputs.apk-size }}) | + | **QR code** | [Open the QR code for this download](${{ steps.upload-qr.outputs.artifact-url }}) | | **Commit** | ${{ github.event.pull_request.head.sha }} | | **Version** | `${{ github.event.number }}` | | **Available until** | 7 days after this build | - ``` - ${{ steps.qr.outputs.text }} - ``` - The QA build installs alongside a released Nextcloud app, so you can keep using your existing install while testing. - Downloading the file requires a GitHub account, so scan the QR code on a - device that is signed in, or transfer the APK to it. + Downloading the file requires a GitHub account, so open this link on the + device you want to test on, or transfer the APK to it.