Skip to content

ci: statically link MinGW runtimes in Windows GUI builds#204

Merged
javi11 merged 7 commits intomainfrom
fix/windows-gui-static-linking
Apr 11, 2026
Merged

ci: statically link MinGW runtimes in Windows GUI builds#204
javi11 merged 7 commits intomainfrom
fix/windows-gui-static-linking

Conversation

@javi11
Copy link
Copy Markdown
Owner

@javi11 javi11 commented Apr 11, 2026

Summary

  • Add MSYS2 setup with mingw-w64-x86_64-gcc to the Windows GUI build jobs in both release.yml and dev-build.yml
  • Set CC and CGO_LDFLAGS environment variables to statically link libgcc, libstdc++, and libpthread — matching the CLI build configuration
  • Eliminates the need to place libgcc_s_seh-1.dll, libstdc++-6.dll, and libwinpthread-1.dll alongside the Windows GUI executable

Test plan

  • Merge to main and verify dev-build workflow passes
  • Download postie-gui-windows-amd64 artifact
  • Run on a clean Windows machine (no MinGW installed) and confirm it launches without DLL errors
  • Optionally verify with dumpbin /dependents postie.exe that no MinGW DLLs are referenced

🤖 Generated with Claude Code

javi11 and others added 7 commits April 11, 2026 18:46
When Postie processes a watched folder (SingleNzbPerFolder or explicit
folder upload), generated NZB and PAR2 files are now placed inside a
dedicated <outputDir>/<folderName>/ subdirectory instead of directly in
the output root.

Before this fix, postFolder() used:
  nzbPath = filepath.Join(outputDir, folderName+".nzb")
  par2OutputDir = outputDir

Both paths now use folderOutputDir = filepath.Join(outputDir, folderName),
so the layout becomes:
  <outputDir>/Movie_A/Movie_A.nzb
  <outputDir>/Movie_A/*.par2   (when maintain_par2_files=true)

This fixes the cross-volume case (watch folder and output folder on
different mount points) where files were previously scattered in the
output root. The fix covers both the sequential (WaitForPar2=true) and
parallel (WaitForPar2=false) code paths.

Also bumps Node.js to v22 in CI workflows and adds tests covering:
- Sequential and parallel paths with maintain_par2_files=false
- Sequential and parallel paths with maintain_par2_files=true (peer files)
- Explicit cross-volume path separation scenario
Bump docker/setup-buildx-action v3→v4, docker/login-action v3→v4,
docker/build-push-action v5→v6, docker/metadata-action v5→v6, and
Zig compiler 0.14.1→0.15.1 across dev-build.yml and release.yml.
ubuntu-latest (Ubuntu 24.04) installs chromium-browser as a snap
wrapper which fails in CI due to snap store timeouts. The GitHub
Actions runner already ships google-chrome-stable, which the e2e
helpers already prefer as the first candidate.
…ration race

openSettingsTab was using WaitReady(body)+Sleep(300ms) before clicking
the target tab. In CI, the Svelte config fetch + {#if enabled} render
cycle can exceed 300ms, leaving the tab-panel content un-rendered when
WaitVisible polls for elements inside it.

Replace the fixed sleep with WaitVisible(tabSelector) which blocks
until the page has fully hydrated and the tab input itself is in the
DOM — a reliable signal that all tab-panel content is rendered.
The Windows GUI (Wails) build was missing MSYS2 setup and CGO_LDFLAGS,
causing the executable to depend on libgcc_s_seh-1.dll, libstdc++-6.dll,
and libwinpthread-1.dll at runtime. Add the same static linking flags
already used by the CLI build to both release.yml and dev-build.yml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@javi11 javi11 merged commit b2a3167 into main Apr 11, 2026
3 checks passed
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