Skip to content

CI: cross-platform-actions 1.5.0, re-add haiku (r1beta6) - #10249

Open
ThomasWaldmann wants to merge 12 commits into
borgbackup:masterfrom
ThomasWaldmann:ci-cpa-1.5.0-haiku-beta6
Open

CI: cross-platform-actions 1.5.0, re-add haiku (r1beta6)#10249
ThomasWaldmann wants to merge 12 commits into
borgbackup:masterfrom
ThomasWaldmann:ci-cpa-1.5.0-haiku-beta6

Conversation

@ThomasWaldmann

Copy link
Copy Markdown
Member

Bumps cross-platform-actions/action to v1.5.0 (pinned to faa0c61, resolved from the annotated v1.5.0 tag) and brings Haiku back into the vm_tests matrix at r1beta6, which 1.5.0 adds support for.

Haiku was removed in 30ed2bc because r1beta5 (from 2024) was too much pain: system python only 3.10, HaikuPorts python 3.11 without ssl, venv creation failing, plus rust toolchain and TLS issues (#9463). The haiku) script block was kept in the workflow and is unchanged here, so its beta5-era pkgman install lines (python3.11, openssl3, rust_bin, lz4_devel) get re-tested against beta6 for the first time in this run.

1.5.0 also brings smaller NetBSD images, faster boots, and an opt-in microvm variant for NetBSD x86-64 (not enabled here — it changes the guest's virtual hardware).

🤖 Generated with Claude Code

@codecov

codecov Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 29.82456% with 40 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.34%. Comparing base (6299333) to head (742987d).
⚠️ Report is 31 commits behind head on master.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/borg/legacy/remote.py 11.11% 32 Missing ⚠️
src/borg/fslocking.py 0.00% 4 Missing ⚠️
src/borg/helpers/fs.py 20.00% 4 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master   #10249      +/-   ##
==========================================
- Coverage   87.47%   87.34%   -0.14%     
==========================================
  Files         103      103              
  Lines       18534    18575      +41     
  Branches     2843     2849       +6     
==========================================
+ Hits        16213    16224      +11     
- Misses       1623     1653      +30     
  Partials      698      698              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

@ThomasWaldmann
ThomasWaldmann force-pushed the ci-cpa-1.5.0-haiku-beta6 branch from cf7ccd3 to f8592fa Compare August 28, 2026 20:55
1.5.0 adds support for Haiku R1/beta6, so bring haiku back into the
vm_tests matrix - it was removed in 30ed2bc because r1beta5 (2024) was
too painful to work with, see borgbackup#9463.

Also: build blake3 outside /tmp, one rustc at a time

rustc 1.94.1 ICEd while compiling the blake3 crate ("assertion failed:
bytes[len] == STR_SENTINEL"), reading back metadata that does not match
what it wrote. Try building outside /boot/system/cache/tmp with a single
rustc at a time, in case that corruption comes from disk or memory
pressure there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ThomasWaldmann
ThomasWaldmann force-pushed the ci-cpa-1.5.0-haiku-beta6 branch from f8592fa to d95bdc8 Compare August 28, 2026 21:29
ThomasWaldmann and others added 7 commits August 29, 2026 00:10
zoneinfo finds no tz database on haiku, so every "date:" pattern with a
named timezone fails with ZoneInfoNotFoundError. Same situation as on
windows, so pull in the tzdata package there, too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
haiku's python has no time.tzset either, so the local-timezone tests
failed there (and their teardown errored). Skip on the actual reason
rather than on the platform.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SpecialFileReader relies on os.read() returning b"" while no writer has
opened the fifo yet. On haiku that read fails with ENOMEM instead, which
propagated as a backup error, so --read-special never reached its
timeout and the fifo tests failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reading the lock directory while another process replaces it via
rename() fails with EBUSY on haiku. kill_stale_lock() only expected
ENOENT and EACCES, so the exception escaped ExclusiveLock.acquire() and
the lock race test saw it as unclean concurrency handling.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
haiku puts the pipes to the borg 1.x serve process into select()'s
exceptional set although nothing is wrong, and LegacyRemoteRepository
turned that into "FD exception occurred", so transferring from a borg
1.x ssh:// repository failed right at the version negotiation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The default backlog of 5 connections is small for a server whose every
response closes the connection. On haiku, connecting to a server with a
full backlog fails with EWOULDBLOCK rather than waiting for a slot, which
made webdav tests fail there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
When the borg serve process closes its stdout, call_many() raised
ConnectionClosed right away, discarding whatever the remote had written
to stderr in the same select() round, so the user only got "Is borg
working on the server?" without the reason. Log the remote's stderr and
exit status before giving up.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ThomasWaldmann and others added 4 commits August 29, 2026 11:28
In serve mode all log records go to borg_serve_log_queue and are sent to
the client from RepositoryServer.serve(). If borg serve fails before or
while serving, whatever is still queued - including the error that made
it exit - is silently dropped, so the client only sees the connection
being closed. Write the rest of the queue to stderr when exiting; the
client logs the remote's stderr.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
haiku fails connecting to the test webdav server with EWOULDBLOCK rather
than waiting for it to accept, so the webdav tests failed there whenever
the VM was slow. The bigger listen backlog alone did not stop it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A dying remote may write its error message slightly after we notice that
its stdout is gone, so drain_stderr() gave up before the message showed
up. Wait up to a second for it instead of only doing one read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The borg 1.x ssh:// transfer test fails there because its "borg serve"
child exits with rc 2 and says nothing the client can see. Run it
directly in the job so its output ends up in the CI log.

This commit is a diagnostic aid and is meant to be dropped again.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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