feat(web-arm): channel → nixos-26.05 [upgrade 5/6 · bump] #109
Labels
No labels
bug
enhancement
in-progress
needs-info
needs-triage
p0
ready-for-agent
ready-for-human
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/nixos#109
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
▶ Hold until [4/6 · verify] is closed. Then arm: relabel
ready-for-agent.Task: bump
hosts/web-arm/channeltonixos-26.05; open PR.26.05 specifics for web-arm:
secret_keyno longer has a default. web-arm does not currently set it → addservices.grafana.settings.security.secret_key, wired to SOPS, value = the old defaultSW2YcwTIb9zpOOhoPsMmto preserve already-encrypted datasource credentials (a new key would break them). Human must populate the SOPS secret — do not edit secrets files directly; list the key + where in the PR.postgresql_14→ no forced major migration; confirm the attr still exists on 26.05 (eval).22.05.Acceptance: pre-commit eval green; grafana secret_key wired to SOPS (value to be populated by human).
Scope addition: drop promtail on the 26.05 bump (web-arm specifics)
26.05 removed
services.promtail, so this bump must drop web-arm's./utils/modules/promtailCLIENT import (same as nb/nas), with a paused-shipping comment pointing at the separate promtail->alloy migration (#118). Alloy setup is not in scope.web-arm is special: it also runs the Loki server (
modules/loki.nix) -- the receiving end -- withpromtail-nginx-passwordbasic-auth for clients pushing toloki.cloonar.com. That is the server side, not the promtail client: leave Loki and itspromtail-nginx-passwordin place for now (the alloy migration #118 redirects clients to it). Only the client module import comes out here.Also drop web-arm's temporary
docker_29pin and thesa-coredocker redirect (from #123) -- redundant on 26.05.Full agent brief will be posted when this issue is armed.
Agent Brief
Category: enhancement
Summary: Bump web-arm's channel to nixos-26.05 (5/6 of the staged fleet upgrade) and fix what 26.05 surfaces; pre-commit eval must stay green. stateVersion stays 22.05.
Current behavior:
web-arm tracks
https://channels.nixos.org/nixos-25.11, carries two 25.11-era workarounds 26.05 makes obsolete (docker_29 pin, permittedInsecurePackages), uses the pre-rename ACMEcredentialsFileoption, and never sets grafana'ssecret_key(inheriting the 25.11 module default).Desired behavior:
web-arm tracks nixos-26.05, evaluates green under the pre-commit dry-build, and preserves all current runtime behavior (TLS issuance, grafana datasource-secret decryption, docker scanners, PowerSync replication).
26.05 changes to handle:
permittedInsecurePackages → allowInsecurePredicate. 26.05's makePythonWriter interpreter guard force-evaluates the whole pypy2Packages set (via fetch-cargo-vendor-util, pulled in by the users-groups shell-program assertion), tripping the now-insecure pypy2.7-* members. Defining an allowInsecurePredicate disables the permittedInsecurePackages list, so the existing openssl-1.1.1v / openssl-1.1.1w allowances must fold into the same predicate. Mirror nb/nas/fw:
hasPrefix "pypy2.7-"ORelem name ["openssl-1.1.1v" "openssl-1.1.1w"], with thepkg.name or "${pkg.pname}-${pkg.version}"fallback. (If 26.05 flags any other web-arm package insecure/unfree, fold it in minimally; none expected.)Drop the docker_29 pin. PR #123 pinned
virtualisation.docker.package = pkgs.docker_29to dodge the EOL/insecure docker_28 default on 25.11; 26.05's default docker is maintained, so remove the pin + comment. The sa-core (ScanA11y) scanner units redirect theirpaththroughconfig.virtualisation.docker.packageonly to follow that pin — revert to the defaultpkgs.dockerand drop the stale "pinned to docker_29 / 25.11 docker_28" comment.ACME credentialsFile → environmentFile. 26.05 dropped the
credentialsFilerename alias on the acme cert submodule. The shared lego.nix default was already migrated; web-arm additionally setssecurity.acme.certs.<name>.credentialsFileon several per-site certs and in the powersync module. Migrate every such usage toenvironmentFile = …(same sops-secret value).environmentFileis valid on both channels, so it's safe. (GrepcredentialsFileunder hosts/web-arm — ~12 hits across the per-site cert defs and the powersync module.)Grafana secret_key (26.05 asserts it — eval-blocking). 26.05 removed the default for
services.grafana.settings.security.secret_keyand adds a hard assertionsecret_key != null, so the dry-build fails until it's set. web-arm currently inherits the 25.11 module defaultSW2YcwTIb9zpOOhoPsMm, which is the key its grafana DB is already encrypted with — preserve that exact value so no encrypted-at-rest state is orphaned. Wire it via the file-provider (not inline — inline lands world-readable in the store, and the assertion message says use a file-provider), mirroring the existingadmin_passwordusage: setsecurity.secret_key = "$__file{${config.sops.secrets.grafana-secret-key.path}}"and declaresops.secrets.grafana-secret-key.owner = "grafana". Thegrafana-secret-keysecret already exists in web-arm's secrets.yaml (value = the old default), so no secret editing is needed — just declare + reference it. The$__file{}literal is non-null, so the assertion passes at eval; grafana resolves the file at runtime.postgresql_14 pin — confirm, do NOT migrate. web-arm pins
services.postgresql.package = pkgs.postgresql_14deliberately (PowerSync bucket store + every app DB live in it; a major bump is a data migration). Confirm the attr still resolves on 26.05 (PG14 EOL is Nov 2026, so expected present). If it's gone, STOP and escalate — do not auto-bump the major.Acceptance criteria:
Out of scope:
b963e65). No client import to drop. Leave the Loki SERVER (loki.nix) and promtail-nginx-password (server-side basic auth) untouched. This supersedes the 2026-06-07 comment's promtail instruction.