diff --git a/.github/workflows/WindowsInstall.yml b/.github/workflows/WindowsInstall.yml
index 8e589fee..d4dfa288 100644
--- a/.github/workflows/WindowsInstall.yml
+++ b/.github/workflows/WindowsInstall.yml
@@ -317,7 +317,6 @@ jobs:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_ORG: berry-studios
- SENTRY_PROJECT: loop-pdf
SENTRY_URL: https://de.sentry.io
run: |
.\scripts\ci\upload_sentry_debug_files.ps1 -BuildDir "${env:GITHUB_WORKSPACE}\loop\build"
diff --git a/.github/workflows/reusable-windows.yml b/.github/workflows/reusable-windows.yml
index a15c3ac6..ed28a289 100644
--- a/.github/workflows/reusable-windows.yml
+++ b/.github/workflows/reusable-windows.yml
@@ -406,7 +406,6 @@ jobs:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_ORG: berry-studios
- SENTRY_PROJECT: loop-pdf
SENTRY_URL: https://de.sentry.io
run: |
.\scripts\ci\upload_sentry_debug_files.ps1 -BuildDir "${env:GITHUB_WORKSPACE}\loop\build"
diff --git a/Desktop/io.github.mberrys.Loop-pdf.appdata.xml b/Desktop/io.github.mberrys.Loop-pdf.appdata.xml
index f753da24..e8746b31 100644
--- a/Desktop/io.github.mberrys.Loop-pdf.appdata.xml
+++ b/Desktop/io.github.mberrys.Loop-pdf.appdata.xml
@@ -16,9 +16,9 @@
Utility
Michael Berry
- https://github.com/mberrys/Loop-pdf
- https://github.com/mberrys/Loop-pdf/issues
- https://github.com/mberrys/Loop-pdf
+ https://github.com/studio-berry/loop
+ https://github.com/studio-berry/loop/issues
+ https://github.com/studio-berry/loop
io.github.mberrys.Loop-pdf.desktop
diff --git a/changes/cursor-fix-appstream-urls-8f37.md b/changes/cursor-fix-appstream-urls-8f37.md
new file mode 100644
index 00000000..6580e274
--- /dev/null
+++ b/changes/cursor-fix-appstream-urls-8f37.md
@@ -0,0 +1,4 @@
+Category: fixed
+Audience: developers
+Breaking-Change: no
+Summary: Point AppStream metainfo URLs at studio-berry/loop for Linux AppImage packaging, and resolve Windows Sentry debug-file upload from LOOP_SENTRY_DSN in CMakeLists.txt so MSI packaging is not blocked by a stale project slug.
diff --git a/docs/CI.md b/docs/CI.md
index c4972b24..8da773f9 100644
--- a/docs/CI.md
+++ b/docs/CI.md
@@ -111,7 +111,7 @@ the signing step refuses to run against an unpinned toolchain.
Windows Release builds with `LOOP_ENABLE_SENTRY` emit PDBs (`/Zi` +
`/DEBUG:FULL`) so crashpad minidumps can be symbolicated. After the Windows
CI and MSI packaging jobs, `scripts/ci/upload_sentry_debug_files.ps1`
-uploads Loop PDBs to `berry-studios/loop-pdf` on the EU region
+uploads Loop PDBs to the `berry-studios` EU project id encoded in `LOOP_SENTRY_DSN`
(`https://de.sentry.io`) using the pinned `sentryCli` binary. GitHub
Actions cannot reference `secrets` in `if:` conditionals, so the workflow
always runs the step; `upload_sentry_debug_files.ps1` no-ops when
diff --git a/docs/PRODUCTION_RUNBOOK.md b/docs/PRODUCTION_RUNBOOK.md
index 35b7c8b2..7cc4d52a 100644
--- a/docs/PRODUCTION_RUNBOOK.md
+++ b/docs/PRODUCTION_RUNBOOK.md
@@ -111,7 +111,7 @@ Debug Files — they are not Issues or traces.
**Privacy:** Desktop sentry-native 0.15.x does not send default PII (`send_default_pii` is NX-only in that pin). Crashes may still include OS-level paths and PDF bytes in minidumps — set `SENTRY_DSN=off` in high-classification environments. CI sets `SENTRY_DSN=off` so test runs do not flood the project.
-**Debug files:** Windows CI uploads Loop PDBs to `berry-studios/loop-pdf` (EU) when `SENTRY_AUTH_TOKEN` is set. Without those files, crash stacks stay unsymbolicated. Store the token as a GitHub Actions secret with `project:releases` (or broader) scope; do not commit it.
+**Debug files:** Windows CI uploads Loop PDBs to the `berry-studios` EU project id encoded in `LOOP_SENTRY_DSN` when `SENTRY_AUTH_TOKEN` is set. Without those files, crash stacks stay unsymbolicated. Store the token as a GitHub Actions secret with `project:releases` (or broader) scope; do not commit it.
**Verify (Windows, Sentry-enabled build):**
diff --git a/scripts/ci/upload_sentry_debug_files.ps1 b/scripts/ci/upload_sentry_debug_files.ps1
index 6f4ae1c2..bff0e017 100644
--- a/scripts/ci/upload_sentry_debug_files.ps1
+++ b/scripts/ci/upload_sentry_debug_files.ps1
@@ -34,9 +34,28 @@ if (-not $cli -or -not $cli.assetId -or -not $cli.sha256 -or -not $cli.upstream)
}
$org = if ($env:SENTRY_ORG) { $env:SENTRY_ORG } else { "berry-studios" }
-$project = if ($env:SENTRY_PROJECT) { $env:SENTRY_PROJECT } else { "loop-pdf" }
$url = if ($env:SENTRY_URL) { $env:SENTRY_URL } else { "https://de.sentry.io" }
+function Resolve-SentryProject([string]$Root) {
+ if ($env:SENTRY_PROJECT) {
+ return [string]$env:SENTRY_PROJECT
+ }
+ $cmakePath = Join-Path $Root "CMakeLists.txt"
+ if (-not (Test-Path -LiteralPath $cmakePath)) {
+ throw "upload_sentry_debug_files.ps1: CMakeLists.txt not found; cannot resolve Sentry project id."
+ }
+ $dsnMatch = [regex]::Match(
+ (Get-Content -LiteralPath $cmakePath -Raw),
+ 'ingest\.de\.sentry\.io/(\d+)'
+ )
+ if (-not $dsnMatch.Success) {
+ throw "upload_sentry_debug_files.ps1: LOOP_SENTRY_DSN in CMakeLists.txt has no ingest project id."
+ }
+ return $dsnMatch.Groups[1].Value
+}
+
+$project = Resolve-SentryProject $repoRoot
+
$cliPath = Join-Path $env:RUNNER_TEMP "sentry-cli-Windows-x86_64.exe"
if ([string]::IsNullOrWhiteSpace($env:RUNNER_TEMP)) {
$cliPath = Join-Path ([System.IO.Path]::GetTempPath()) "sentry-cli-Windows-x86_64.exe"