From fa48b570723ebbee2c686caad9f065bf304bd272 Mon Sep 17 00:00:00 2001 From: nextcloud-android-bot Date: Tue, 26 Aug 2025 02:33:20 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'.github/workfl?= =?UTF-8?q?ows/'=20with=20remote=20'config/workflows/'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nextcloud-android-bot --- .github/workflows/QA_keystore.jks | Bin 0 -> 2236 bytes .github/workflows/QA_keystore.jks.license | 2 + .github/workflows/lib.sh | 27 +++++++++++ .github/workflows/lib.sh.license | 2 + .github/workflows/qa.yml | 55 ++++++++++++++++++++++ .github/workflows/uploadArtifact.sh | 44 +++++++++++++++++ 6 files changed, 130 insertions(+) create mode 100644 .github/workflows/QA_keystore.jks create mode 100644 .github/workflows/QA_keystore.jks.license create mode 100644 .github/workflows/lib.sh create mode 100644 .github/workflows/lib.sh.license create mode 100644 .github/workflows/qa.yml create mode 100755 .github/workflows/uploadArtifact.sh diff --git a/.github/workflows/QA_keystore.jks b/.github/workflows/QA_keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..2b8fb9bc231219ab7954a6e0a5fea47b5f4c61f8 GIT binary patch literal 2236 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 UT$x~>$nZXtB6{SH*t-|@7tCJSiU0rr literal 0 HcmV?d00001 diff --git a/.github/workflows/QA_keystore.jks.license b/.github/workflows/QA_keystore.jks.license new file mode 100644 index 00000000..7ec21443 --- /dev/null +++ b/.github/workflows/QA_keystore.jks.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors +SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only diff --git a/.github/workflows/lib.sh b/.github/workflows/lib.sh new file mode 100644 index 00000000..42f4b55b --- /dev/null +++ b/.github/workflows/lib.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2022 Álvaro Brey +# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only +# + +## This file is intended to be sourced by other scripts + + +function err() { + echo >&2 "$@" +} + + +function curl_gh() { + if [[ -n "$GITHUB_TOKEN" ]] + then + curl \ + --silent \ + --header "Authorization: token $GITHUB_TOKEN" \ + "$@" + else + err "WARNING: No GITHUB_TOKEN found. Skipping API call" + fi + +} diff --git a/.github/workflows/lib.sh.license b/.github/workflows/lib.sh.license new file mode 100644 index 00000000..162c9615 --- /dev/null +++ b/.github/workflows/lib.sh.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019-2025 Nextcloud GmbH and Nextcloud contributors +SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml new file mode 100644 index 00000000..e71aecea --- /dev/null +++ b/.github/workflows/qa.yml @@ -0,0 +1,55 @@ +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2023 Andy Scherzinger +# SPDX-License-Identifier: MIT +name: "QA" + +on: + pull_request: + branches: [ main, master, stable-* ] + +permissions: + pull-requests: write + contents: read + +concurrency: + group: qa-build-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + qa: + runs-on: ubuntu-latest + steps: + - name: Check if secrets are available + run: echo "ok=${{ secrets.KS_PASS != '' }}" >> "$GITHUB_OUTPUT" + id: check-secrets + + - name: Checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + if: ${{ steps.check-secrets.outputs.ok == 'true' }} + with: + persist-credentials: false + + - name: set up JDK 17 + uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 + if: ${{ steps.check-secrets.outputs.ok == 'true' }} + with: + distribution: "temurin" + java-version: 17 + + - name: Build QA + if: ${{ steps.check-secrets.outputs.ok == 'true' }} + env: + KS_PASS: ${{ secrets.KS_PASS }} + KEY_PASS: ${{ secrets.KEY_PASS }} + LOG_USERNAME: ${{ secrets.LOG_USERNAME }} + LOG_PASSWORD: ${{ secrets.LOG_PASSWORD }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mkdir -p "$HOME/.gradle" + echo "org.gradle.jvmargs=-Xmx6g -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; kapt.incremental.apt=true" >> "$HOME/.gradle/gradle.properties" + sed -i "/qa/,/\}/ s/versionCode .*/versionCode ${{github.event.number}} /" "app/build.gradle" + sed -i "/qa/,/\}/ s/versionName .*/versionName \"${{github.event.number}}\"/" "app/build.gradle" + ./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 + .github/workflows/uploadArtifact.sh "$LOG_USERNAME" "$LOG_PASSWORD" "${{github.event.number}}" "${{github.event.number}}" "$GITHUB_TOKEN" diff --git a/.github/workflows/uploadArtifact.sh b/.github/workflows/uploadArtifact.sh new file mode 100755 index 00000000..fa263064 --- /dev/null +++ b/.github/workflows/uploadArtifact.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# +# SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2019-2022 Tobias Kaminsky +# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only +# + +#1: LOG_USERNAME +#2: LOG_PASSWORD +#3: DRONE_BUILD_NUMBER +#4: DRONE_PULL_REQUEST + + +PUBLIC_URL=https://www.kaminsky.me/nc-dev/android-artifacts +USER=$1 +PASS=$2 +BUILD=$3 +PR=$4 +GITHUB_TOKEN=$5 +DAV_URL=https://nextcloud.kaminsky.me/remote.php/dav/files/$USER/android-artifacts/ + +source .github/workflows/lib.sh +REPO=$(cat scripts/repo) + +if ! test -e app/build/outputs/apk/qa/debug/*qa-debug*.apk ; then + exit 1 +fi +echo "Uploaded artifact to $DAV_URL/$BUILD.apk" + +# delete all old comments, starting with "APK file:" +oldComments=$(curl_gh -X GET https://api.github.com/repos/nextcloud/$REPO/issues/$PR/comments | jq '.[] | (.id |tostring) + "|" + (.user.login | test("github-actions") | tostring) + "|" + (.body | test("APK file:.*") | tostring)' | grep "true|true" | tr -d "\"" | cut -f1 -d"|") + +echo $oldComments | while read comment ; do + curl_gh -X DELETE https://api.github.com/repos/nextcloud/$REPO/issues/comments/$comment +done + +sudo apt-get -y install qrencode + +qrencode -o $PR.png "$PUBLIC_URL/$BUILD.apk" + +curl -u $USER:$PASS -X PUT $DAV_URL/$BUILD.apk --upload-file app/build/outputs/apk/qa/debug/*qa-debug*.apk +curl -u $USER:$PASS -X PUT $DAV_URL/$BUILD.png --upload-file $PR.png +curl_gh -X POST https://api.github.com/repos/nextcloud/$REPO/issues/$PR/comments -d "{ \"body\" : \"APK file: $PUBLIC_URL/$BUILD.apk

![qrcode]($PUBLIC_URL/$BUILD.png)

To test this change/fix you can simply download above APK file and install and test it in parallel to your existing Nextcloud app. \" }"