From 6b48d15d46bf707583ae58b8ed8f8b24340cb412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Wed, 29 Jul 2026 14:23:41 +0200 Subject: [PATCH 1/9] Upload debug symbols to Sentry in its own re-runnable job --- .github/workflows/flutter-deploy.yml | 75 +++++++++++++++++++++------ .github/workflows/flutter-release.yml | 75 +++++++++++++++++++++------ 2 files changed, 120 insertions(+), 30 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 5450051..50ff1ca 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -123,15 +123,16 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: android-apk + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt @@ -168,15 +169,16 @@ jobs: build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} continue-on-error: true - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: ios + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} @@ -218,15 +220,16 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: android-aab + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt @@ -240,6 +243,48 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} name-suffix: ${{ needs.android-name-suffix-generation.outputs.name-suffix }} artifact-path: ${{ steps.flutter-build.outputs.artifact-path }} + + upload-sentry: + name: Upload debug symbols to Sentry + runs-on: default-k8s-runner + needs: [generate-build-number, android-publish, ios-publish, android-bundle] + # Runs as soon as at least one build succeeded, so it can be re-run on its own. + if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} + steps: + - name: Check Sentry configuration + id: sentry + env: + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + run: | + if [[ -z "$SENTRY_PROJECT" ]]; then + echo "::notice::No SENTRY_PROJECT secret set - nothing to upload" + echo "configured=false" >> $GITHUB_OUTPUT + else + echo "configured=true" >> $GITHUB_OUTPUT + fi + - uses: QuickBirdEng/actions/checkout-ssh@main + if: ${{ steps.sentry.outputs.configured == 'true' }} + with: + ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} + - name: Restore debug symbols + id: symbols + if: ${{ steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/restore-debug-symbols@main + with: + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + - name: Upload debug symbols to Sentry + if: ${{ steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + with: + url: ${{ secrets.SENTRY_URL }} + organization: ${{ secrets.SENTRY_ORG }} + project: ${{ secrets.SENTRY_PROJECT }} + auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} + release: ${{ steps.symbols.outputs.release }} + dependency-reports: if: ${{ inputs.dependency-reports }} uses: QuickBirdEng/workflows/.github/workflows/vulnerability-and-outdated-packages-report.yml@main diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 9aa5d2a..b665784 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -189,15 +189,16 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: android-apk + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt @@ -233,15 +234,16 @@ jobs: submit-for-review: ${{ inputs.submit-ios-build-for-review }} build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: ios + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} @@ -284,15 +286,16 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@main env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - url: ${{ secrets.SENTRY_URL }} - organization: ${{ secrets.SENTRY_ORG }} - project: ${{ secrets.SENTRY_PROJECT }} - auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + platform: android-aab + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt @@ -306,6 +309,48 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} name-suffix: ${{ needs.android-name-suffix-generation.outputs.name-suffix }} artifact-path: ${{ steps.flutter-build.outputs.artifact-path }} + + upload-sentry: + name: Upload debug symbols to Sentry + runs-on: default-k8s-runner + needs: [generate-build-number, android-publish, ios-publish, android-bundle] + # Runs as soon as at least one build succeeded, so it can be re-run on its own. + if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} + steps: + - name: Check Sentry configuration + id: sentry + env: + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + run: | + if [[ -z "$SENTRY_PROJECT" ]]; then + echo "::notice::No SENTRY_PROJECT secret set - nothing to upload" + echo "configured=false" >> $GITHUB_OUTPUT + else + echo "configured=true" >> $GITHUB_OUTPUT + fi + - uses: QuickBirdEng/actions/checkout-ssh@main + if: ${{ steps.sentry.outputs.configured == 'true' }} + with: + ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} + - name: Restore debug symbols + id: symbols + if: ${{ steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/restore-debug-symbols@main + with: + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + - name: Upload debug symbols to Sentry + if: ${{ steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + with: + url: ${{ secrets.SENTRY_URL }} + organization: ${{ secrets.SENTRY_ORG }} + project: ${{ secrets.SENTRY_PROJECT }} + auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} + release: ${{ steps.symbols.outputs.release }} + dependency-reports: if: ${{ inputs.dependency-reports }} uses: QuickBirdEng/workflows/.github/workflows/vulnerability-and-outdated-packages-report.yml@main From db4284d876f6f2b6f967cf2ddb6b244b4984f49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Wed, 29 Jul 2026 14:34:00 +0200 Subject: [PATCH 2/9] Pass platform list to restore-debug-symbols --- .github/workflows/flutter-deploy.yml | 1 + .github/workflows/flutter-release.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 50ff1ca..20bb972 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -272,6 +272,7 @@ jobs: uses: QuickBirdEng/actions/restore-debug-symbols@main with: build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab access-key: ${{ secrets.DO_ACCESS_KEY }} secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index b665784..922f0aa 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -338,6 +338,7 @@ jobs: uses: QuickBirdEng/actions/restore-debug-symbols@main with: build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab access-key: ${{ secrets.DO_ACCESS_KEY }} secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry From a86653fa5caa6210f03f788153e8e36625aface3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Wed, 29 Jul 2026 14:55:53 +0200 Subject: [PATCH 3/9] Check out full history for the Sentry commit association --- .github/workflows/flutter-deploy.yml | 2 +- .github/workflows/flutter-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 20bb972..0fb2364 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -248,7 +248,6 @@ jobs: name: Upload debug symbols to Sentry runs-on: default-k8s-runner needs: [generate-build-number, android-publish, ios-publish, android-bundle] - # Runs as soon as at least one build succeeded, so it can be re-run on its own. if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -266,6 +265,7 @@ jobs: if: ${{ steps.sentry.outputs.configured == 'true' }} with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} + fetch-depth: 0 - name: Restore debug symbols id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 922f0aa..e2dea3a 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -314,7 +314,6 @@ jobs: name: Upload debug symbols to Sentry runs-on: default-k8s-runner needs: [generate-build-number, android-publish, ios-publish, android-bundle] - # Runs as soon as at least one build succeeded, so it can be re-run on its own. if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -332,6 +331,7 @@ jobs: if: ${{ steps.sentry.outputs.configured == 'true' }} with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} + fetch-depth: 0 - name: Restore debug symbols id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} From b757369715589c3cf6636c5fe08da4c30c5eec08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Thu, 30 Jul 2026 08:52:35 +0200 Subject: [PATCH 4/9] Temporarily point the sentry actions at the action branch for testing --- .github/workflows/flutter-deploy.yml | 12 ++++++------ .github/workflows/flutter-release.yml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 0fb2364..8874b36 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -124,7 +124,7 @@ jobs: upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -170,7 +170,7 @@ jobs: obfuscate: ${{ inputs.obfuscate }} continue-on-error: true - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -221,7 +221,7 @@ jobs: working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -261,7 +261,7 @@ jobs: else echo "configured=true" >> $GITHUB_OUTPUT fi - - uses: QuickBirdEng/actions/checkout-ssh@main + - uses: QuickBirdEng/actions/checkout-ssh@feat/sentry-symbols-separate-job if: ${{ steps.sentry.outputs.configured == 'true' }} with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} @@ -269,7 +269,7 @@ jobs: - name: Restore debug symbols id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/restore-debug-symbols@main + uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job with: build-number: ${{ needs.generate-build-number.outputs.build-number }} platforms: ios android-apk android-aab @@ -277,7 +277,7 @@ jobs: secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job with: url: ${{ secrets.SENTRY_URL }} organization: ${{ secrets.SENTRY_ORG }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index e2dea3a..26360c4 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -190,7 +190,7 @@ jobs: upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -235,7 +235,7 @@ jobs: build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -287,7 +287,7 @@ jobs: working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@main + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} @@ -327,7 +327,7 @@ jobs: else echo "configured=true" >> $GITHUB_OUTPUT fi - - uses: QuickBirdEng/actions/checkout-ssh@main + - uses: QuickBirdEng/actions/checkout-ssh@feat/sentry-symbols-separate-job if: ${{ steps.sentry.outputs.configured == 'true' }} with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} @@ -335,7 +335,7 @@ jobs: - name: Restore debug symbols id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/restore-debug-symbols@main + uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job with: build-number: ${{ needs.generate-build-number.outputs.build-number }} platforms: ios android-apk android-aab @@ -343,7 +343,7 @@ jobs: secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@main + uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job with: url: ${{ secrets.SENTRY_URL }} organization: ${{ secrets.SENTRY_ORG }} From eb7c0c263ed1e69996ed0c48a4a37b99a0ba324c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Fri, 31 Jul 2026 12:48:41 +0200 Subject: [PATCH 5/9] Hand debug symbols to the Sentry job as build artifacts --- .github/workflows/flutter-deploy.yml | 77 +++++++++++++-------------- .github/workflows/flutter-release.yml | 77 +++++++++++++-------------- 2 files changed, 74 insertions(+), 80 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 8874b36..23dbd7b 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -102,6 +102,8 @@ jobs: android-publish: runs-on: [self-hosted] needs: [generate-build-number] + outputs: + release: ${{ steps.publish-android.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -123,20 +125,18 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: android-apk - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} - proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - release: ${{ inputs.finalize-sentry-release == true && steps.publish-android.outputs.version-and-build-number || '' }} + name: debug-symbols-android-apk + path: | + ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true ios-publish: @@ -144,6 +144,8 @@ jobs: needs: [generate-build-number, ios-name-suffix-generation] env: ONESIGNAL_DISABLE_LOCATION: ${{ !inputs.enable-onesignal-location && 'true' || '' }} + outputs: + release: ${{ steps.publish-ios.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -169,20 +171,18 @@ jobs: build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} continue-on-error: true - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: ios - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} - dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} - release: ${{ inputs.finalize-sentry-release == true && steps.publish-ios.outputs.version-and-build-number || '' }} + name: debug-symbols-ios + path: | + ${{ steps.publish-ios.outputs.artifact-dsyms-path }} + ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces if: contains(inputs.android-build-arguments, 'PRODUCTION') @@ -197,6 +197,8 @@ jobs: android-bundle: runs-on: [self-hosted, macOS] needs: [generate-build-number, android-name-suffix-generation] + outputs: + release: ${{ steps.flutter-build.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -220,20 +222,18 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: android-aab - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} - proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - release: ${{ inputs.finalize-sentry-release == true && steps.flutter-build.outputs.version-and-build-number || '' }} + name: debug-symbols-android-aab + path: | + ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -247,7 +247,7 @@ jobs: upload-sentry: name: Upload debug symbols to Sentry runs-on: default-k8s-runner - needs: [generate-build-number, android-publish, ios-publish, android-bundle] + needs: [android-publish, ios-publish, android-bundle] if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -266,15 +266,12 @@ jobs: with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} fetch-depth: 0 - - name: Restore debug symbols - id: symbols + - name: Download debug symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job + uses: actions/download-artifact@v4 with: - build-number: ${{ needs.generate-build-number.outputs.build-number }} - platforms: ios android-apk android-aab - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} + pattern: debug-symbols-* + path: debug-symbols - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job @@ -283,8 +280,8 @@ jobs: organization: ${{ secrets.SENTRY_ORG }} project: ${{ secrets.SENTRY_PROJECT }} auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} - symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} - release: ${{ steps.symbols.outputs.release }} + symbols-dir: debug-symbols + release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} dependency-reports: if: ${{ inputs.dependency-reports }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 26360c4..05cbd14 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -167,6 +167,8 @@ jobs: android-publish: runs-on: [self-hosted] needs: [generate-build-number, lint, test] + outputs: + release: ${{ steps.publish-android.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -189,20 +191,18 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: android-apk - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} - proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - release: ${{ inputs.finalize-sentry-release == true && steps.publish-android.outputs.version-and-build-number || '' }} + name: debug-symbols-android-apk + path: | + ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true ios-publish: @@ -210,6 +210,8 @@ jobs: needs: [generate-build-number, lint, test, ios-name-suffix-generation] env: ONESIGNAL_DISABLE_LOCATION: ${{ !inputs.enable-onesignal-location && 'true' || '' }} + outputs: + release: ${{ steps.publish-ios.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -234,20 +236,18 @@ jobs: submit-for-review: ${{ inputs.submit-ios-build-for-review }} build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: ios - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} - dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} - release: ${{ inputs.finalize-sentry-release == true && steps.publish-ios.outputs.version-and-build-number || '' }} + name: debug-symbols-ios + path: | + ${{ steps.publish-ios.outputs.artifact-dsyms-path }} + ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -262,6 +262,8 @@ jobs: runs-on: [self-hosted] needs: [generate-build-number, lint, test, android-name-suffix-generation] if: ${{ github.ref_type == 'tag' }} + outputs: + release: ${{ steps.flutter-build.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -286,20 +288,18 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - name: Store debug symbols for Sentry - uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job + - name: Upload debug symbols for Sentry + uses: actions/upload-artifact@v4 env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - platform: android-aab - build-number: ${{ needs.generate-build-number.outputs.build-number }} - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} - dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} - dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} - proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - release: ${{ inputs.finalize-sentry-release == true && steps.flutter-build.outputs.version-and-build-number || '' }} + name: debug-symbols-android-aab + path: | + ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} + if-no-files-found: warn + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -313,7 +313,7 @@ jobs: upload-sentry: name: Upload debug symbols to Sentry runs-on: default-k8s-runner - needs: [generate-build-number, android-publish, ios-publish, android-bundle] + needs: [android-publish, ios-publish, android-bundle] if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -332,15 +332,12 @@ jobs: with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} fetch-depth: 0 - - name: Restore debug symbols - id: symbols + - name: Download debug symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job + uses: actions/download-artifact@v4 with: - build-number: ${{ needs.generate-build-number.outputs.build-number }} - platforms: ios android-apk android-aab - access-key: ${{ secrets.DO_ACCESS_KEY }} - secret-key: ${{ secrets.DO_SECRET_KEY }} + pattern: debug-symbols-* + path: debug-symbols - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job @@ -349,8 +346,8 @@ jobs: organization: ${{ secrets.SENTRY_ORG }} project: ${{ secrets.SENTRY_PROJECT }} auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} - symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} - release: ${{ steps.symbols.outputs.release }} + symbols-dir: debug-symbols + release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} dependency-reports: if: ${{ inputs.dependency-reports }} From 34e3d6580e096893a5a09c904ce59bd451816fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Fri, 31 Jul 2026 13:29:26 +0200 Subject: [PATCH 6/9] Delete the symbol artifacts once Sentry has them --- .github/workflows/flutter-deploy.yml | 13 ++++++++++--- .github/workflows/flutter-release.yml | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 23dbd7b..fabd3e4 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -136,7 +136,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true ios-publish: @@ -182,7 +182,7 @@ jobs: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces if: contains(inputs.android-build-arguments, 'PRODUCTION') @@ -233,7 +233,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -282,6 +282,13 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: debug-symbols release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} + - name: Delete the symbol artifacts + if: ${{ success() && steps.sentry.outputs.configured == 'true' }} + uses: GeekyEggo/delete-artifact@v5 + with: + name: debug-symbols-* + useGlob: true + failOnError: false dependency-reports: if: ${{ inputs.dependency-reports }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 05cbd14..4d82be5 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -202,7 +202,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true ios-publish: @@ -247,7 +247,7 @@ jobs: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -299,7 +299,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 14 + retention-days: 1 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -348,6 +348,13 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: debug-symbols release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} + - name: Delete the symbol artifacts + if: ${{ success() && steps.sentry.outputs.configured == 'true' }} + uses: GeekyEggo/delete-artifact@v5 + with: + name: debug-symbols-* + useGlob: true + failOnError: false dependency-reports: if: ${{ inputs.dependency-reports }} From 71d6c1b5e59f407ffaa4edac1bc62ff3d01c0d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Tue, 4 Aug 2026 16:37:23 +0200 Subject: [PATCH 7/9] Revert "Delete the symbol artifacts once Sentry has them" This reverts commit 34e3d6580e096893a5a09c904ce59bd451816fbc. --- .github/workflows/flutter-deploy.yml | 13 +++---------- .github/workflows/flutter-release.yml | 13 +++---------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index fabd3e4..23dbd7b 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -136,7 +136,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true ios-publish: @@ -182,7 +182,7 @@ jobs: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces if: contains(inputs.android-build-arguments, 'PRODUCTION') @@ -233,7 +233,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -282,13 +282,6 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: debug-symbols release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} - - name: Delete the symbol artifacts - if: ${{ success() && steps.sentry.outputs.configured == 'true' }} - uses: GeekyEggo/delete-artifact@v5 - with: - name: debug-symbols-* - useGlob: true - failOnError: false dependency-reports: if: ${{ inputs.dependency-reports }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 4d82be5..05cbd14 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -202,7 +202,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true ios-publish: @@ -247,7 +247,7 @@ jobs: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -299,7 +299,7 @@ jobs: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} if-no-files-found: warn - retention-days: 1 + retention-days: 14 continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -348,13 +348,6 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: debug-symbols release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} - - name: Delete the symbol artifacts - if: ${{ success() && steps.sentry.outputs.configured == 'true' }} - uses: GeekyEggo/delete-artifact@v5 - with: - name: debug-symbols-* - useGlob: true - failOnError: false dependency-reports: if: ${{ inputs.dependency-reports }} From cc2cfe268a254a5d97e51cddb33a7193edb75866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Tue, 4 Aug 2026 16:37:23 +0200 Subject: [PATCH 8/9] Revert "Hand debug symbols to the Sentry job as build artifacts" This reverts commit eb7c0c263ed1e69996ed0c48a4a37b99a0ba324c. --- .github/workflows/flutter-deploy.yml | 77 ++++++++++++++------------- .github/workflows/flutter-release.yml | 77 ++++++++++++++------------- 2 files changed, 80 insertions(+), 74 deletions(-) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 23dbd7b..8874b36 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -102,8 +102,6 @@ jobs: android-publish: runs-on: [self-hosted] needs: [generate-build-number] - outputs: - release: ${{ steps.publish-android.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -125,18 +123,20 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-android-apk - path: | - ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: android-apk + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} + proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + release: ${{ inputs.finalize-sentry-release == true && steps.publish-android.outputs.version-and-build-number || '' }} continue-on-error: true ios-publish: @@ -144,8 +144,6 @@ jobs: needs: [generate-build-number, ios-name-suffix-generation] env: ONESIGNAL_DISABLE_LOCATION: ${{ !inputs.enable-onesignal-location && 'true' || '' }} - outputs: - release: ${{ steps.publish-ios.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -171,18 +169,20 @@ jobs: build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} continue-on-error: true - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-ios - path: | - ${{ steps.publish-ios.outputs.artifact-dsyms-path }} - ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: ios + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} + dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} + release: ${{ inputs.finalize-sentry-release == true && steps.publish-ios.outputs.version-and-build-number || '' }} continue-on-error: true - name: Compress & Upload Artifact to QB Spaces if: contains(inputs.android-build-arguments, 'PRODUCTION') @@ -197,8 +197,6 @@ jobs: android-bundle: runs-on: [self-hosted, macOS] needs: [generate-build-number, android-name-suffix-generation] - outputs: - release: ${{ steps.flutter-build.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -222,18 +220,20 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-android-aab - path: | - ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: android-aab + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} + proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + release: ${{ inputs.finalize-sentry-release == true && steps.flutter-build.outputs.version-and-build-number || '' }} continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -247,7 +247,7 @@ jobs: upload-sentry: name: Upload debug symbols to Sentry runs-on: default-k8s-runner - needs: [android-publish, ios-publish, android-bundle] + needs: [generate-build-number, android-publish, ios-publish, android-bundle] if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -266,12 +266,15 @@ jobs: with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} fetch-depth: 0 - - name: Download debug symbols + - name: Restore debug symbols + id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: actions/download-artifact@v4 + uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job with: - pattern: debug-symbols-* - path: debug-symbols + build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job @@ -280,8 +283,8 @@ jobs: organization: ${{ secrets.SENTRY_ORG }} project: ${{ secrets.SENTRY_PROJECT }} auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} - symbols-dir: debug-symbols - release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} + symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} + release: ${{ steps.symbols.outputs.release }} dependency-reports: if: ${{ inputs.dependency-reports }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 05cbd14..26360c4 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -167,8 +167,6 @@ jobs: android-publish: runs-on: [self-hosted] needs: [generate-build-number, lint, test] - outputs: - release: ${{ steps.publish-android.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -191,18 +189,20 @@ jobs: qbs-maven-password: ${{ secrets.QBS_DEV_MAVEN_PASSWORD }} upload-key: ${{ secrets.UPLOAD_KEY }} obfuscate: ${{ inputs.obfuscate }} - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-android-apk - path: | - ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: android-apk + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.publish-android.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.publish-android.outputs.artifact-dart-obfuscation-map-file-path }} + proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + release: ${{ inputs.finalize-sentry-release == true && steps.publish-android.outputs.version-and-build-number || '' }} continue-on-error: true ios-publish: @@ -210,8 +210,6 @@ jobs: needs: [generate-build-number, lint, test, ios-name-suffix-generation] env: ONESIGNAL_DISABLE_LOCATION: ${{ !inputs.enable-onesignal-location && 'true' || '' }} - outputs: - release: ${{ steps.publish-ios.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -236,18 +234,20 @@ jobs: submit-for-review: ${{ inputs.submit-ios-build-for-review }} build-arguments: ${{ inputs.ios-build-arguments }} obfuscate: ${{ inputs.obfuscate }} - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-ios - path: | - ${{ steps.publish-ios.outputs.artifact-dsyms-path }} - ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: ios + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.publish-ios.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.publish-ios.outputs.artifact-dart-obfuscation-map-file-path }} + dsyms-path: ${{ steps.publish-ios.outputs.artifact-dsyms-path }} + release: ${{ inputs.finalize-sentry-release == true && steps.publish-ios.outputs.version-and-build-number || '' }} continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -262,8 +262,6 @@ jobs: runs-on: [self-hosted] needs: [generate-build-number, lint, test, android-name-suffix-generation] if: ${{ github.ref_type == 'tag' }} - outputs: - release: ${{ steps.flutter-build.outputs.version-and-build-number }} steps: - uses: QuickBirdEng/actions/checkout-ssh@main with: @@ -288,18 +286,20 @@ jobs: build-arguments: ${{ inputs.android-build-arguments }} working-directory: ${{ inputs.working-directory }} obfuscate: ${{ inputs.obfuscate }} - - name: Upload debug symbols for Sentry - uses: actions/upload-artifact@v4 + - name: Store debug symbols for Sentry + uses: QuickBirdEng/actions/store-debug-symbols@feat/sentry-symbols-separate-job env: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} if: ${{ env.SENTRY_PROJECT != '' }} with: - name: debug-symbols-android-aab - path: | - ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt - ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} - if-no-files-found: warn - retention-days: 14 + platform: android-aab + build-number: ${{ needs.generate-build-number.outputs.build-number }} + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} + dart-symbols-file-path: ${{ steps.flutter-build.outputs.artifact-dart-symbols-file-path }} + dart-obfuscation-map-file-path: ${{ steps.flutter-build.outputs.artifact-dart-obfuscation-map-file-path }} + proguard-mapping-file-path: ${{ inputs.working-directory }}/build/app/outputs/mapping/release/mapping.txt + release: ${{ inputs.finalize-sentry-release == true && steps.flutter-build.outputs.version-and-build-number || '' }} continue-on-error: true - name: Compress & Upload Artifact to QB Spaces uses: QuickBirdEng/actions/compress-and-upload-artifact-qb@main @@ -313,7 +313,7 @@ jobs: upload-sentry: name: Upload debug symbols to Sentry runs-on: default-k8s-runner - needs: [android-publish, ios-publish, android-bundle] + needs: [generate-build-number, android-publish, ios-publish, android-bundle] if: ${{ !cancelled() && (needs.android-publish.result == 'success' || needs.ios-publish.result == 'success' || needs.android-bundle.result == 'success') }} steps: - name: Check Sentry configuration @@ -332,12 +332,15 @@ jobs: with: ssh-private-key: ${{ secrets.CI_SSH_PRIVATE_KEY_FOR_GITHUB_PRIVATE_REPOS }} fetch-depth: 0 - - name: Download debug symbols + - name: Restore debug symbols + id: symbols if: ${{ steps.sentry.outputs.configured == 'true' }} - uses: actions/download-artifact@v4 + uses: QuickBirdEng/actions/restore-debug-symbols@feat/sentry-symbols-separate-job with: - pattern: debug-symbols-* - path: debug-symbols + build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} - name: Upload debug symbols to Sentry if: ${{ steps.sentry.outputs.configured == 'true' }} uses: QuickBirdEng/actions/upload-debug-symbols-to-sentry@feat/sentry-symbols-separate-job @@ -346,8 +349,8 @@ jobs: organization: ${{ secrets.SENTRY_ORG }} project: ${{ secrets.SENTRY_PROJECT }} auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} - symbols-dir: debug-symbols - release: ${{ inputs.finalize-sentry-release == true && (needs.ios-publish.outputs.release || needs.android-publish.outputs.release || needs.android-bundle.outputs.release) || '' }} + symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} + release: ${{ steps.symbols.outputs.release }} dependency-reports: if: ${{ inputs.dependency-reports }} From 2f4995ebbcce3ea4d73285b502f91bcbb1098432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20M=C3=A4rz?= Date: Tue, 4 Aug 2026 16:46:54 +0200 Subject: [PATCH 9/9] Delete the stored symbols once Sentry has them --- .github/workflows/flutter-deploy.yml | 8 ++++++++ .github/workflows/flutter-release.yml | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml index 8874b36..88af9ea 100644 --- a/.github/workflows/flutter-deploy.yml +++ b/.github/workflows/flutter-deploy.yml @@ -285,6 +285,14 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} release: ${{ steps.symbols.outputs.release }} + - name: Delete the stored debug symbols + if: ${{ success() && steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/delete-debug-symbols@feat/sentry-symbols-separate-job + with: + build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dependency-reports: if: ${{ inputs.dependency-reports }} diff --git a/.github/workflows/flutter-release.yml b/.github/workflows/flutter-release.yml index 26360c4..d19a394 100644 --- a/.github/workflows/flutter-release.yml +++ b/.github/workflows/flutter-release.yml @@ -351,6 +351,14 @@ jobs: auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }} symbols-dir: ${{ steps.symbols.outputs.symbols-dir }} release: ${{ steps.symbols.outputs.release }} + - name: Delete the stored debug symbols + if: ${{ success() && steps.sentry.outputs.configured == 'true' }} + uses: QuickBirdEng/actions/delete-debug-symbols@feat/sentry-symbols-separate-job + with: + build-number: ${{ needs.generate-build-number.outputs.build-number }} + platforms: ios android-apk android-aab + access-key: ${{ secrets.DO_ACCESS_KEY }} + secret-key: ${{ secrets.DO_SECRET_KEY }} dependency-reports: if: ${{ inputs.dependency-reports }}