Skip to content

fix(release): stop an AUR outage failing the whole package submission - #38

Merged
ralyodio merged 2 commits into
masterfrom
fix/aur-release-resilience
Aug 6, 2026
Merged

fix(release): stop an AUR outage failing the whole package submission#38
ralyodio merged 2 commits into
masterfrom
fix/aur-release-resilience

Conversation

@ralyodio

@ralyodio ralyodio commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The v0.9.45 release job went red with "Failed: 1" even though 7 of the 8 package managers published fine. The one failure was AUR:

aur: AUR submission failed: Command failed: git push origin master
Connection closed by 209.126.35.78 port 22

That address is aur.archlinux.org. The key was never the problem: the clone in the same run succeeded seconds earlier, and the package is still ours at 0.9.44-1. AUR simply drops into maintenance without notice, and while it does it still accepts the SSH connection but refuses the git operation.

Three changes:

  • Retry a git command that failed because AUR was unreachable, three times, 15s apart. A short maintenance window no longer needs a human.
  • Report an exhausted retry as skipped rather than failed, so a third-party outage stops failing a release that otherwise published everywhere. A real error, such as a rejected key, still fails.
  • Stop swallowing the clone error. A failed clone was treated as "the package does not exist yet", so an outage quietly built an empty repo and pushed a fresh history over the real package once AUR returned.

execSync hides stderr behind "Command failed: git push origin master" when stdio is piped, which is why the original failure said so little. The error now carries the stderr that explains it.

The v0.9.45 release job went red with "Failed: 1" even though 7 of the 8
package managers published fine. The one failure was AUR:

  aur: AUR submission failed: Command failed: git push origin master
  Connection closed by 209.126.35.78 port 22

That address is aur.archlinux.org. The key was never the problem: the
clone in the same run succeeded seconds earlier, and the package is
still ours at 0.9.44-1. AUR simply drops into maintenance without
notice, and while it does it still accepts the SSH connection but
refuses the git operation.

Three changes:

- Retry a git command that failed because AUR was unreachable, three
  times, 15s apart. A short maintenance window no longer needs a human.
- Report an exhausted retry as skipped rather than failed, so a
  third-party outage stops failing a release that otherwise published
  everywhere. A real error, such as a rejected key, still fails.
- Stop swallowing the clone error. A failed clone was treated as "the
  package does not exist yet", so an outage quietly built an empty repo
  and pushed a fresh history over the real package once AUR returned.

execSync hides stderr behind "Command failed: git push origin master"
when stdio is piped, which is why the original failure said so little.
The error now carries the stderr that explains it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

159 finding(s)

HIGH/CRITICAL: 111 | MEDIUM: 48

Severity Rule Location
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:18
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:19
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:51
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:52
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:66
HIGH secret-generic-credential apps/desktop/src/main/ipc/auth.test.ts:170
HIGH secret-generic-credential apps/desktop/src/main/ipc/chat.test.ts:16
HIGH secret-generic-credential apps/desktop/src/main/ipc/chat.test.ts:17
HIGH secret-generic-credential apps/desktop/src/main/ipc/session.test.ts:16
HIGH secret-generic-credential apps/desktop/src/main/ipc/session.test.ts:17
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useRTMPStreaming.test.ts:159
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCHostAPI.test.ts:14
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCHostSFUAPI.test.ts:42
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCHostSFUAPI.test.ts:137
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCViewerAPI.test.ts:13
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCViewerSFUAPI.test.ts:37
HIGH secret-generic-credential apps/desktop/src/renderer/hooks/useWebRTCViewerSFUAPI.test.ts:127
HIGH secret-generic-credential apps/livekit/fly.toml:12
HIGH manifest-typosquat apps/mobile/package.json:43
HIGH secret-generic-credential apps/mobile/src/hooks/useWebRTCHost.test.ts:13
HIGH secret-generic-credential apps/mobile/src/hooks/useWebRTCViewer.test.ts:13
HIGH secret-generic-credential apps/mobile/src/lib/api.test.ts:11
HIGH secret-generic-credential apps/mobile/src/lib/api.test.ts:12
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:18
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:19
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:34
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:37
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:38
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:42
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:73
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:83
HIGH secret-generic-credential apps/mobile/src/lib/api/auth.test.ts:99
HIGH secret-generic-credential apps/mobile/src/lib/api/chat.test.ts:11
HIGH secret-generic-credential apps/mobile/src/lib/api/sessions.test.ts:11
HIGH secret-generic-credential apps/mobile/src/lib/secure-storage.test.ts:12
HIGH secret-generic-credential apps/mobile/src/lib/secure-storage.test.ts:13
HIGH secret-generic-credential apps/turn/fly.toml:11
HIGH secret-generic-credential apps/web/src/app/api/auth/login/route.test.ts:26
HIGH secret-generic-credential apps/web/src/app/api/auth/login/route.test.ts:54
HIGH secret-generic-credential apps/web/src/app/api/auth/login/route.test.ts:74
HIGH secret-generic-credential apps/web/src/app/api/auth/login/route.test.ts:121
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:44
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:45
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:56
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:65
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:82
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:83
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:99
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:100
HIGH secret-generic-credential apps/web/src/app/api/auth/reset-password/route.test.ts:117

…and 109 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

…udit

The security workflow gates on critical advisories only, and two had
appeared, so `pnpm audit --prod --audit-level critical` exited 1 on
every run. This fails on master too; it is not specific to this branch.

Both reach us transitively, and neither ships to users:

  form-data 2.3.3  GHSA-fjxv-7rqg-78g4  unsafe random boundary
    remote-input > dbus-next > usocket > node-gyp@7 > request > form-data

  tar 6.2.1        GHSA-23hp-3jrh-7fpw  decompression/parse DoS
    remote-input > dbus-next > usocket > node-gyp@7 > tar
    mobile > expo > @expo/cli > (cacache >) tar

form-data is a patch bump inside its own major, so `form-data@2` moves
to ^2.5.4 and resolves to 2.5.6.

tar has no fix on the 6.x line: 6.2.1 is the last 6.x ever published and
the advisory patches at >=7.5.19. `tar@6` is therefore overridden to
^7.5.19 alongside the existing `tar@7` pin, which was still sitting on a
vulnerable 7.5.16. Everything now resolves to a single tar 7.5.22 and
no 6.x copy remains.

Criticals go to zero and the gate passes; the remaining 77 advisories
are the low/moderate/high tooling noise the workflow deliberately does
not gate on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio merged commit 8e19210 into master Aug 6, 2026
13 checks passed
@ralyodio
ralyodio deleted the fix/aur-release-resilience branch August 6, 2026 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant