ci: ship a runnable x86_64-linux archive with each release #361
No reviewers
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis!361
Loading…
Reference in a new issue
No description provided.
Delete branch "release/issue-360-linux-archive"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
felis-x86_64-linux.tar.gz: the package's closure, relocated so a Linux hostwithout Nix unpacks it and runs
bin/felis. It replaces thefelis-x86_64-linux.txtidentity file, which only helped someone who alreadyran Nix. The macOS half of #360 follows in its own pull request; the darwin
.txtand its place in the asset loop are untouched here.What changed
nix/dist.nix+nix/dist-linux.shbuildpackages.felis-dist. Thelaunchers exec a bundled
ld.sowith--library-pathand--argv0, so thebundled libraries win at any prefix without patchelf; the loader sits in
bin/so the sibling lookup that findsfelis-daemonstill lands on alauncher.
XLOCALEDIRis the one export, and only as a default: the clientsnapshots its environment into every session it creates, so
LOCPATHorGCONV_PATHwould reach the user's shells. Host library directories comeafter
lib/, because the GPU stack is host state.list fails the build. The tar is byte-reproducible, so a local
nix build .#felis-distyields the bytes the release attaches.crates/felis-daemon/src/relay.rs: the relay starts the siblingfelis-daemonrather than re-execingcurrent_exe, which under the archiveis the loader. Unit-tested both ways; every layout that ships today is
unchanged, since there the sibling is the file
current_exenames.release.ymlgainslinux-package, which unpacks the archive, checks themanifest and the NEEDED closure, runs it in an
ubuntu:24.04container withno
/nix, and re-runsverify.py --identityagainst the archive's ownbin/felis.releaseattaches the tarball.pr.ymlbuilds.#felis-distso a broken bundler fails before a tag.
is a FUSE mount that unmounts when the runtime's direct child exits, and the
daemon outlives the window that spawned it. The rationale is in the commit
body and the triage plan on #360.
Verified
nix build .#felis-diston x86_64-linux: 21 MB archive, 59 MB unpacked.readelfNEEDED checks by hand on theextracted tree, with the script the job runs.
the CLI runs, the daemon it spawns is the archive's own
(
/proc/<pid>/exeisbin/.ld.so), PTY children inherit noLOCPATH,GCONV_PATH,LD_LIBRARY_PATHorXKB_CONFIG_ROOT, the relay starts a colddaemon that outlives it, the bundled glibc resolves
en_US.UTF-8from thehost's archive,
ja_JP.UTF-8compose tables resolve off Nix, and the clientpaints a frame through Ubuntu's own lavapipe.
just fmt-check lint prose-check docs-links,cargo nextest run -p felis-daemon(590 passed),
shellcheckon the three new scripts,actionlinton bothworkflows (no new findings).
Refs #360