Watch
1
0
Fork
You've already forked souveraine
0
Commit graph souveraine/.gitea/workflows/ci.yml
Author SHA1 Message Date
Fimeg
db593a2036 project the tested ref onto the public forge 2026-08-23 21:21:23 -04:00
Fimeg
57898f8d5f run the gates on the public branch too
The candidate ref never triggered anything, so a push to public produced no
run and therefore no gate proof.
2026-08-23 20:10:44 -04:00
Fimeg
2f685facda keep the packaging half off the public branch
primary still carries the whole workflow; the public projection carries the
three portable gates and nothing that names the build host.
2026-08-23 19:43:14 -04:00
Fimeg
76846feb61 split the public gates from the internal packaging half
The three portable jobs stay; the archdev packaging and archive publish move
to packages.yml, which the public branch does not carry. The handoff document
is operator archaeology and does not travel.
2026-08-23 19:42:58 -04:00
Fimeg
7e6633a290 ci: preserve the staged shell archive
The package step erased its own input before the first copy. Keep the real zstd archive outside scratch and extract its single top-level tree.
2026-08-20 15:42:40 -04:00
Fimeg
3225735a01 souveraine-shell: package the composed quickshell config
CI stages deploy.sh in a scratch HOME and tars the composed tree
dereferenced, then makepkg ships it to /etc/xdg/quickshell/souveraine
on both arches — the shell becomes package-owned, and a writable
~/.config copy keeps shadowing it.
2026-08-19 13:14:20 -04:00
Fimeg
0f8fe22ab6 admit: give an agent her own uid through one writer
souveraine-admit creates or adopts one account via systemd-sysusers, writes
the root-owned mapping health reads, and reports what NSS says afterwards
instead of what it asked for. An account belongs to one agent: handing
annie's to souvie is refused in both directions, as is adopting a uid >=1000.
Binding is by SeedID, not the UUID filename — a mismatch is identity-drift.
2026-08-17 15:16:30 -04:00
Fimeg
af60d9e401 packaging: bring machined's user with it
The development recipe installed the sysusers declaration; the CI package that devices consume quietly dropped it. Ship the machine-tier souveraine account in the prebuilt package and assert the file is present before publishing.\n\nThis account belongs to machined. Souvie gets her own principal through agent admission.
2026-08-17 12:36:53 -04:00
Fimeg
1336960ca5 charge becomes a sensor source
ChargeEvidence was the rule violated four times in one type: a side door
past the gate, the decider probing sysfs on the clock, the driver
interpreting, and nothing leaving tick(). Its comment cited bearer —
another instance of itself.

SensorSource::Charge now enters through sensor_input like every other
source, reported by sensord on a 30s poll off /sys/class/power_supply.
conclude_charge lives on the machine as its one decision; source health,
freshness and Absent/Down come from the gate for free. The 5s clock probe
is gone, the driver type is gone, and sensord ships x86_64 too: the
laptop has a battery.
2026-08-15 11:45:22 -04:00
Fimeg
4a4f0a5a27 package the sessiond pam file
/etc/pam.d/souveraine-sessiond arrived by hand on 2026-07-16 and is owned
by no package on either device — root-owned config can only arrive by
package. Same rail as souveraine-stepup, plus a bsdtar assertion so a
future drop fails the build instead of shipping quietly. TASK-76.
2026-08-15 09:53:26 -04:00
Fimeg
8bc9c9a704 ci: retry system deps through a resolver blip
The runner's ephemeral job containers lost DNS for three minutes and took
four builds down with them on 2026-08-13, none of them for a code reason.

Retries both commands, not just the install: apt-get update exits 0 when
every index fails to fetch, warning that it used the old ones instead.
2026-08-13 20:50:42 -04:00
Fimeg
cc541d1eaa packaging: ship the step-up PAM stack and polkit fallback
SESSION-AUTHORITY-DOCTRINE §3 names /etc/pam.d/souveraine-stepup by path.
Root-owned config can only arrive by package: rootfs-overlay/ reaches a
device on flash and the phone does not flash.

auth_self, never auth_admin — step-up re-proves the user to themselves, it
does not escalate. The leading '-' on pam_fpc_polkit.so loads the fingerprint
factor only where it is installed, so one file serves phone and laptop.

Inert until a consumer calls it; no src/ path does yet.
2026-08-12 10:39:47 -04:00
Fimeg
c802f7db48 packaging: sessiond ships on both arches, enabled on neither
CI already built the x86_64 daemon and then threw it away — the binary and
its user unit were copied into the package only under aarch64, so the
laptop could never receive the thing every lock, blank and button report
assumes is running.

Both now ship, and the package still neither enables nor starts the unit.
Phone-only reporters and surfaces stay aarch64.
2026-08-09 19:31:33 -04:00
Fimeg
8cd2adb828 usb: build the full KVM composite surface 2026-08-07 14:48:07 -04:00
Fimeg
269c151899 the wry host is optional through the whole pipeline; it must not block sessiond 2026-08-05 21:29:24 -04:00
Fimeg
9ec031c8a8 wry host: sites as apps, the rig as a face; join loads the expression skill 2026-08-05 19:39:50 -04:00
Fimeg
d2a0547d30 ci: build sessiond for x86_64 too
It was skipped with a comment calling it deliberate; it never was — the
laptop hit lock-screen errors once and it stayed phone-only by inertia.
Building is not enabling: the binary ships, the user unit stays
aarch64-only in PKGBUILD.prebuilt, so this cannot wedge a machine by
arriving on it. Verified it compiles.

Not urgent — the laptop is not SouveraineOS yet — but the comment was
wrong and a wrong reason is worse than no reason.
2026-08-02 17:49:47 -04:00
Fimeg
a89556aef7 packaging: ship souveraine-button, the reporter that replaces the policy script
Reports down/up edges to sessiond and decides nothing. Wire it in
hyprland.lua as a bind/bindr pair — reporting only the press leaves the
machine believing the button is held forever.
2026-07-31 21:48:08 -04:00
Fimeg
b5ee87da0f ci: sessiond clippy is advisory until its 9 pre-existing warnings are burned down 2026-07-31 19:14:27 -04:00
Fimeg
539df90b95 sessiond: peer pid via getsockopt, and put sessiond under test
UnixStream::peer_cred is still unstable, so it only failed at the aarch64
build after rust-test had gone green. Use the same getsockopt machined
uses.

rust-test never built souveraine-sessiond at all — it is
required-features and the feature is not default. Build and test it.
2026-07-31 18:52:43 -04:00
Fimeg
b5fc48eef1 ci: one branch. primary builds and ships; public and the dead codeberg mirror are gone 2026-07-31 14:36:46 -04:00
Fimeg
3bc363a903 mirror souveraine + upower-souveraine into the Gitea Arch registry
Best-effort mirror step after the edge publish: PUT each built pkg to
/api/packages/Fimeg/arch/edge so the Packages page stays current. Never
fails the publish; 409 = bump to republish. Runs only on public (same
gate as the publish job).
2026-07-30 14:24:08 -04:00
Fimeg
21b602a7d2 ci: repin rust-toolchain to a master commit, not a moved stable tip
29eef336 was the tip of dtolnay's stable branch when pinned. That branch
force-moves each Rust release, orphaning the commit — reachable from no
ref, so act resolves 'reference not found' and rust-test dies before
compiling. That skipped aarch64-artifact and stopped edge publishing
with nothing saying why. master is append-only.
2026-07-28 14:50:52 -04:00
Fimeg
684d1f9fd5 upower: remove the emptied parents after relocating, not just the subtree
An empty home/casey still ships and still trips the stray check. Runs 1234
and 1248 were both this guard, not the build.
2026-07-27 14:54:04 -04:00
Fimeg
25d1e19246 upower: var/ is a legitimate prefix, not a leak
Run 1234 failed because the new stray check omitted var/lib/upower.
2026-07-27 13:46:48 -04:00
Fimeg
7eb2135906 upower: relocate the cross-install udev leak, and assert it stays gone
udev rules and hwdb installed under the sysroot prefix, so none of the
fork's quirks were ever active on the phone.
2026-07-27 10:11:14 -04:00
Fimeg
83fab1a1b6 sensord: one reporter for every sensor, replacing the per-sensor scripts
blueline-proximity-lock is 113 lines of shell implementing a subtle contract
(heartbeat inside SOURCE_DOWN_AFTER, seed from the probe banner, report both
edges) that would have been hand-copied for light and again for accel. One
binary, one contract, shipped in the package instead of the rootfs overlay.
2026-07-26 18:46:27 -04:00
Fimeg
3174e7813c ship souveraine-verify-trail in the package that writes the trail 2026-07-26 14:58:48 -04:00
Fimeg
044c373cad ci: publish into edge additively
edge is a shared archive but ci.yml deleted and recreated it each push, erasing
other producers. publish-edge.sh merges into the live db under a flock and
removes only its own superseded builds. Verifies the merge kept every foreign
entry, and reads the db back before trusting it.
2026-07-25 17:50:30 -04:00
Fimeg
155288d96e upower version: .r not + (a + in a gitea asset name 404s) 2026-07-25 06:05:24 -04:00
Fimeg
62a3f0b0a8 don't claim gnome-keyring's dbus file; version upower from upstream
Two install blockers found on the phone:
- the package shipped org.freedesktop.secrets.service, which gnome-keyring
  owns. souveraine-secrets holds the bus name at runtime already.
- upower reused souveraine's 0.1.rN version, which sorts below the
  hand-built 1.91.3+sha, so -Syu saw a downgrade and skipped it. Now
  built from upstream version + fork sha (verified vercmp = 1).
2026-07-24 21:56:43 -04:00
Fimeg
07d45c10bc package secrets and machined too
All four repo binaries were hand-copied to the phone and owned by no
package. secrets/machined ship on both arches; sessiond stays aarch64.
secrets unit repointed /usr/local/bin -> /usr/bin.
2026-07-24 21:36:31 -04:00
Fimeg
261d74672f package sessiond (aarch64 only)
It was hand-copied to /usr/local/bin, owned by no package, so it never
updated. Not built for x86_64 — the laptop hits lock-screen errors with
it. Verified both packages assemble correctly.
2026-07-24 21:31:14 -04:00
Fimeg
f620a5d5f9 ci: upower package check greps libexec, not lib
Seventh instance of the same wrong path: the package-content assertion
looked for usr/lib/upowerd. upower installs to usr/libexec/upowerd — the
copy already on the phone confirms it — so the check failed after a
successful build and sign.

Verified on the runner with the fixed pkg-config wrapper: 32 targets,
aarch64 upowerd installed to usr/libexec.
2026-07-24 21:14:30 -04:00
Fimeg
a799bf1cde ci: make the upower cross build actually work
The upower steps were added after the last green release and had never
run successfully — the Jul 13 edge release contains no upower package at
all. Six defects, each hiding the next, found by reproducing the steps on
the runner:

- SOUVERAINE_AARCH64_SYSROOT was exported in the binaries step, not this
  one; steps do not share environment, so the pkg-config wrapper fell back
  to /usr/aarch64-linux-gnu and glib was not found.
- c_link_args had --sysroot but no -L, so ld could not resolve the bare
  paths inside the sysroot linker scripts (libm, libmvec).
- PKG_CONFIG_LIBDIR covered only lib/pkgconfig; udev.pc lives in
  share/pkgconfig. Fixed in the wrapper, which overrides the caller.
- introspection ran g-ir-scanner against an aarch64 build and failed;
  disabled for the cross build only (the phone ships no UPowerGlib
  typelib and quickshell's UPower module is native Qt).
- gtk-doc/man default on, but gtkdoc-scan is absent from the runner, so
  the x86_64 native build would have failed at the same point.
- the aarch64 sanity check tested usr/lib/upowerd; it installs to
  usr/libexec/upowerd, so the check failed even on a good build.

Verified on archdev: aarch64 56/56 targets, upowerd is aarch64, built
from 628283f with the charge-type fix; x86_64 58/58 native.
2026-07-24 20:55:33 -04:00
Fimeg
63a39ab5d0 upower fork: submodule, prebuilt packaging, CI build, lock-surface charge state
- packaging/upower-souveraine submodule pinned at fork head (f18b1a4,
  souveraine/charge-type): ChargeType + PercentageTrusted on Device
- PKGBUILD.upower.prebuilt: prebuilt meson install tree, provides/
  conflicts upower, replaces stock (IgnorePkg=upower on the phone)
- ci.yml: build the fork per-arch against the aarch64 sysroot, assert
  binary arch, fold into the souveraine-{arch} pacman db
- LockSurfaceHost: charge line driven by device state, not onBattery —
  no more eternal 'Charging N%' on a topped-off pack
- docs/tasks/power-indication.md force-added past the docs/ gitignore
2026-07-17 16:33:37 -04:00
Fimeg
c8c72ecbf2 ci: split signed pacman databases by architecture 2026-07-12 22:19:44 -04:00
Fimeg
4427389d9c ci: authenticate ArchDev source clone 2026-07-12 21:45:46 -04:00
Fimeg
f52edd402b ci: use local Gitea token for tuie 2026-07-12 21:28:58 -04:00
Fimeg
e0d742d797 ci: authenticate pinned tuie clones 2026-07-12 21:26:08 -04:00
Fimeg
3a83666ef5 ci: sign multi-architecture package repository 2026-07-12 21:11:34 -04:00
Fimeg
e0c8128832 ci: publish aarch64 pacman package artifacts 2026-07-12 20:57:00 -04:00
Fimeg
ffa8b498a3 build: make aarch64 linker sysroot-safe 2026-07-12 18:00:31 -04:00
Fimeg
419312b65f ci: pin tuie to fork sha + aarch64 artifact job
tuie now cloned from Fimeg/tuie (rgb patch committed) at a pinned SHA
instead of upstream HEAD — no floating ref decides if we build.

aarch64-artifact job runs on the new archdev host-mode runner, cross-
builds against ~/aarch64-sysroot (linker --sysroot flag proven to find
aarch64 libmvec), publishes the binary to a rolling edge prerelease
when CI is green. Phone updates itself from there.
2026-07-12 14:54:43 -04:00
Fimeg
e170678df1 ci: pin rust to 1.94, matches Cargo.toml rust-version 2026-06-19 13:47:31 -04:00
Fimeg
1b373cf1e5 ci: add libchafa-dev 2026-06-19 13:31:14 -04:00
Fimeg
047eeb7a27 ci: install system deps (alsa, openssl) 2026-06-19 13:22:11 -04:00
Fimeg
488a35006a ci: clone tuie from github for path deps
cargo can't resolve path = '../tuie' on the runner without it.
also apply the one-line rgb visibility patch souveraine needs.
2026-06-19 12:52:27 -04:00
Fimeg
45d25b25a4 pin CI to rust 1.94, fix agents detail pane + settings test
agents: wire the rest of the detail widgets into the section children so
PRIMARY badge etc actually render; drop the HARDCODED debug text.
settings: test needs a provider in the map before navigating to Providers
cat.
clippy: pin CI to rust 1.94 per Cargo.toml rust-version; also apply what
cargo clippy --fix could auto-fix for 1.96 compat.
2026-06-19 12:02:54 -04:00
Fimeg
71d3418f0b ci: add Gitea Actions pipeline (rust test/clippy + codeberg sync) 2026-06-13 16:15:35 -04:00