By: Tom Sydney Kerckhove <syd@cs-syd.eu>
Release to Hackage from CI, and update the flake inputs Same shape as autodocodec and sydtest: a 'nix-ci.nix' with a 'deploy.release-to-hackage' step, running from master only, taking HACKAGE_API_KEY from the repository's Secrets overview on NixCI. The script uploads exactly those packages whose version is not on Hackage yet, so a push that bumps no version releases nothing. Adding the file moves the whole NixCI configuration into it. NixCI falls back to the flake's 'nix-ci' output only when no such file exists, so 'auto-update' and 'cachix' had to come along or they would have been dropped without any error saying so. The now-unreachable 'nix-ci' output is gone from flake.nix rather than left as a second place to look; that also removes the "unknown flake output" warning from every 'nix flake check'. Only 'ical' and 'ical-recurrence' are released. The two '-gen' packages and 'ical-interop-test' are excluded because they sit at 0.0.0.0 and none of them has ever had a version bump or a changelog entry, so releasing the whole package set would have published three 0.0.0.0 packages on the next push to master. A Hackage upload cannot be taken back, while adding a package here later is one line. Checked against the built script rather than the expression: it references ical-0.3.0.0 and ical-recurrence-0.2.0.0 and nothing else. 'nix flake update' along with it, which moves nixpkgs from 2026-05-31 to 2026-08-25 and nixpkgs-25_11 to 2026-06-30. 'nix flake check' passes on the result, so the eight checks all build against the newer package sets without any change to the Haskell code.
| Time to Start | Worker time | Duration | Time to finish | Idle | |
| Config | 0s | 0s | 0s | 1s | 0s |
| Eval | 0s | 39s | 39s | 40s | 0s |
| Build | 39s | 4m40s | 2m11s | 2m50s | 0s |
| Suite | 0s | 5m20s | 2m50s | 2m50s | 0s |