Feb 14, 11-12 PM (5)
Feb 14, 12-1 PM (18)
Feb 14, 1-2 PM (15)
Feb 14, 2-3 PM (11)
Feb 14, 3-4 PM (6)
Feb 14, 4-5 PM (18)
Feb 14, 5-6 PM (28)
Feb 14, 6-7 PM (16)
Feb 14, 7-8 PM (5)
Feb 14, 8-9 PM (5)
Feb 14, 9-10 PM (7)
Feb 14, 10-11 PM (23)
Feb 14, 11-12 AM (27)
Feb 15, 12-1 AM (8)
Feb 15, 1-2 AM (4)
Feb 15, 2-3 AM (7)
Feb 15, 3-4 AM (1)
Feb 15, 4-5 AM (1)
Feb 15, 5-6 AM (0)
Feb 15, 6-7 AM (2)
Feb 15, 7-8 AM (1)
Feb 15, 8-9 AM (5)
Feb 15, 9-10 AM (3)
Feb 15, 10-11 AM (2)
Feb 15, 11-12 PM (13)
Feb 15, 12-1 PM (27)
Feb 15, 1-2 PM (6)
Feb 15, 2-3 PM (10)
Feb 15, 3-4 PM (15)
Feb 15, 4-5 PM (6)
Feb 15, 5-6 PM (8)
Feb 15, 6-7 PM (3)
Feb 15, 7-8 PM (20)
Feb 15, 8-9 PM (6)
Feb 15, 9-10 PM (10)
Feb 15, 10-11 PM (21)
Feb 15, 11-12 AM (23)
Feb 16, 12-1 AM (2)
Feb 16, 1-2 AM (8)
Feb 16, 2-3 AM (15)
Feb 16, 3-4 AM (6)
Feb 16, 4-5 AM (1)
Feb 16, 5-6 AM (6)
Feb 16, 6-7 AM (2)
Feb 16, 7-8 AM (14)
Feb 16, 8-9 AM (33)
Feb 16, 9-10 AM (70)
Feb 16, 10-11 AM (52)
Feb 16, 11-12 PM (50)
Feb 16, 12-1 PM (71)
Feb 16, 1-2 PM (91)
Feb 16, 2-3 PM (64)
Feb 16, 3-4 PM (39)
Feb 16, 4-5 PM (30)
Feb 16, 5-6 PM (29)
Feb 16, 6-7 PM (24)
Feb 16, 7-8 PM (23)
Feb 16, 8-9 PM (10)
Feb 16, 9-10 PM (21)
Feb 16, 10-11 PM (33)
Feb 16, 11-12 AM (32)
Feb 17, 12-1 AM (24)
Feb 17, 1-2 AM (3)
Feb 17, 2-3 AM (8)
Feb 17, 3-4 AM (2)
Feb 17, 4-5 AM (4)
Feb 17, 5-6 AM (8)
Feb 17, 6-7 AM (7)
Feb 17, 7-8 AM (18)
Feb 17, 8-9 AM (38)
Feb 17, 9-10 AM (87)
Feb 17, 10-11 AM (36)
Feb 17, 11-12 PM (38)
Feb 17, 12-1 PM (79)
Feb 17, 1-2 PM (39)
Feb 17, 2-3 PM (50)
Feb 17, 3-4 PM (61)
Feb 17, 4-5 PM (43)
Feb 17, 5-6 PM (30)
Feb 17, 6-7 PM (19)
Feb 17, 7-8 PM (13)
Feb 17, 8-9 PM (23)
Feb 17, 9-10 PM (11)
Feb 17, 10-11 PM (59)
Feb 17, 11-12 AM (44)
Feb 18, 12-1 AM (21)
Feb 18, 1-2 AM (13)
Feb 18, 2-3 AM (16)
Feb 18, 3-4 AM (18)
Feb 18, 4-5 AM (16)
Feb 18, 5-6 AM (15)
Feb 18, 6-7 AM (19)
Feb 18, 7-8 AM (53)
Feb 18, 8-9 AM (93)
Feb 18, 9-10 AM (35)
Feb 18, 10-11 AM (36)
Feb 18, 11-12 PM (62)
Feb 18, 12-1 PM (41)
Feb 18, 1-2 PM (118)
Feb 18, 2-3 PM (61)
Feb 18, 3-4 PM (37)
Feb 18, 4-5 PM (16)
Feb 18, 5-6 PM (40)
Feb 18, 6-7 PM (33)
Feb 18, 7-8 PM (37)
Feb 18, 8-9 PM (47)
Feb 18, 9-10 PM (31)
Feb 18, 10-11 PM (44)
Feb 18, 11-12 AM (25)
Feb 19, 12-1 AM (14)
Feb 19, 1-2 AM (6)
Feb 19, 2-3 AM (6)
Feb 19, 3-4 AM (3)
Feb 19, 4-5 AM (3)
Feb 19, 5-6 AM (3)
Feb 19, 6-7 AM (17)
Feb 19, 7-8 AM (83)
Feb 19, 8-9 AM (52)
Feb 19, 9-10 AM (115)
Feb 19, 10-11 AM (99)
Feb 19, 11-12 PM (94)
Feb 19, 12-1 PM (71)
Feb 19, 1-2 PM (50)
Feb 19, 2-3 PM (72)
Feb 19, 3-4 PM (115)
Feb 19, 4-5 PM (36)
Feb 19, 5-6 PM (77)
Feb 19, 6-7 PM (48)
Feb 19, 7-8 PM (11)
Feb 19, 8-9 PM (13)
Feb 19, 9-10 PM (22)
Feb 19, 10-11 PM (37)
Feb 19, 11-12 AM (39)
Feb 20, 12-1 AM (34)
Feb 20, 1-2 AM (18)
Feb 20, 2-3 AM (21)
Feb 20, 3-4 AM (18)
Feb 20, 4-5 AM (19)
Feb 20, 5-6 AM (1)
Feb 20, 6-7 AM (5)
Feb 20, 7-8 AM (26)
Feb 20, 8-9 AM (25)
Feb 20, 9-10 AM (79)
Feb 20, 10-11 AM (91)
Feb 20, 11-12 PM (52)
Feb 20, 12-1 PM (59)
Feb 20, 1-2 PM (44)
Feb 20, 2-3 PM (26)
Feb 20, 3-4 PM (42)
Feb 20, 4-5 PM (42)
Feb 20, 5-6 PM (31)
Feb 20, 6-7 PM (13)
Feb 20, 7-8 PM (16)
Feb 20, 8-9 PM (10)
Feb 20, 9-10 PM (28)
Feb 20, 10-11 PM (43)
Feb 20, 11-12 AM (14)
Feb 21, 12-1 AM (2)
Feb 21, 1-2 AM (0)
Feb 21, 2-3 AM (6)
Feb 21, 3-4 AM (2)
Feb 21, 4-5 AM (3)
Feb 21, 5-6 AM (1)
Feb 21, 6-7 AM (2)
Feb 21, 7-8 AM (9)
Feb 21, 8-9 AM (3)
Feb 21, 9-10 AM (0)
Feb 21, 10-11 AM (1)
Feb 21, 11-12 PM (4)
4,656 commits this week Feb 14, 2026 - Feb 21, 2026
Fix devx container failures: Bash 3.2 rejection and impure path errors (#226)
Two fixes for CI failures when consuming devx containers:

1. Use Nix-provided Bash in shebang instead of /usr/bin/env bash.
   On macOS GitHub Actions runners, /usr/bin/env bash resolves to
   Apple's Bash 3.2 (GPLv2), but nixpkgs' setup.sh requires Bash 5+.
   pkgs.bash is already in the closure via stdenv.

2. Disable NIX_ENFORCE_PURITY before sourcing stdenv/setup.
   The stdenv preHook defaults NIX_ENFORCE_PURITY to 1, causing
   cc-wrapper to reject -I/-L flags outside /nix/store/. This breaks
   cabal builds that use $HOME/.cabal-devx/store/. Setting it to empty
   before sourcing setup.sh matches nix develop behavior.
Fix devx container failures: Bash 3.2 rejection and impure path errors
Two fixes for CI failures when consuming devx containers:

1. Use Nix-provided Bash in shebang instead of /usr/bin/env bash.
   On macOS GitHub Actions runners, /usr/bin/env bash resolves to
   Apple's Bash 3.2 (GPLv2), but nixpkgs' setup.sh requires Bash 5+.
   pkgs.bash is already in the closure via stdenv.

2. Disable NIX_ENFORCE_PURITY before sourcing stdenv/setup.
   The stdenv preHook defaults NIX_ENFORCE_PURITY to 1, causing
   cc-wrapper to reject -I/-L flags outside /nix/store/. This breaks
   cabal builds that use $HOME/.cabal-devx/store/. Setting it to empty
   before sourcing setup.sh matches nix develop behavior.
Update haskell.nix and use nixpkgs-2511 (#220)
* Update to nixpkgs-2511 and bump dependencies

- Switch from nixpkgs-2411 to nixpkgs-2511
- Update cabal-experimental to stable-haskell/feature/cross-compile
- Bump haskell.nix, head.hackage, HLS 2.10→2.11
- Update cabal build configuration to inline constraints
- Fix flake packages attribute naming (dots → dashes)

* Enable all platforms and remove ghc810

- Add aarch64-linux to supportedSystems
- Re-enable macOS and aarch64-linux in CI workflows
- Remove ghc810 from compiler list
- Update lints workflow to use ghc96

* Replace recursive-nix -env jobs with devShellTools

The old -env job generation used recursive-nix to run
`nix print-dev-env` inside a derivation, which is not supported
on remote builders. Replace with pure evaluation-time approach:

- Use devShellTools.unstructuredDerivationInputEnv to extract
  environment variables from mkShell derivations
- Construct PATH via lib.makeBinPath from flattened buildInputs
- Filter internal nix variables, keeping only user-defined ones
- Generate self-contained wrapper scripts at eval time
- Update ghcr-upload.sh to match new -env.sh naming

* Fix nixpkgs-2511 build failures: happy, openssl, postgresql

- happy: disable disallowGhcReference check — happy-2.1.7
  transitively references GHC through happy-lib
- openssl musl: skip flaky OCSP test 82-test_ocsp_cert_chain.t
- postgresql musl: comprehensive fix for pkgsCross.musl64 which
  doesn't set isStatic=true, causing all optional features to
  default on:
  - Disable jitSupport, perlSupport, pythonSupport, tclSupport
  - Override llvmPackages_20 to prevent LLVM stdenv switch
  - Disable LTO (GCC + GNU ld .ltrans failures)
  - Clear outputChecks, disallowedReferences, separateDebugInfo
  - Break dev↔out and lib↔out reference cycles with
    remove-references-to

* Add -env-test Hydra jobs to validate devcontainer environments

Source each -env.sh script in a sandbox and verify that ghc, cabal,
and pkg-config are functional. Optionally checks HLS for non-minimal,
non-JS, non-Windows shells with compiler < 9.11. Catches PATH
construction errors, missing packages, and broken shellHooks that
would produce unusable containers. Not yet in `required` aggregate.

* Fix env wrapper with stdenv/setup, gate GHCR uploads to main

The devShellTools approach only captured Nix-level derivation attributes,
missing hook-computed variables (NIX_CFLAGS_COMPILE, NIX_LDFLAGS,
PKG_CONFIG_PATH, etc.) that stdenv setup hooks produce at shell init
time. This caused downstream "Missing C library" errors.

Fix: export all drvAttrs (including stdenv, buildInputs, initialPath)
then source $stdenv/setup at runtime, exactly like `nix develop` does.
This runs cc-wrapper, pkg-config-wrapper, and all other setup hooks.

Also fix env-tests to save $out before sourcing (setup.sh resets it),
gate GHCR uploads to main branch (prevents PR pushes from overwriting
production images), gate hello.yml to main, and add pr-validate.yml
for PR closure validation via Hydra cache.

* Fix PR validation: paginated API response and devx invocation

gh api --paginate returns multiple JSON objects (one per page).
The old jq heredoc processed each page separately, producing
multiple arrays (some empty []) which GitHub Actions rejected
as invalid output format. Use jq --slurp to merge all pages
into a single array before filtering.

Also fix the validate step: the devx wrapper sources $1 as a
file path, it doesn't support bash-style -c. Write smoke test
commands to a temp file instead.

* Fix devx wrapper: set $out for stdenv/setup outside Nix builds

stdenv's setup.sh calls _assignFirst which requires $out to be set
for output variable assignment. Inside a Nix build the builder sets
$out automatically, but when running the devx wrapper directly
(containers, CI validation) $out is unset and setup.sh fails with:

  error: _assignFirst: could not find a non-empty variable whose
  name to assign to outputDev.

Fix in two places:
- mkEnvScript: wrapper sets $out to a temp dir when unset
- pr-validate.yml: set $out before invoking cached wrappers
  that don't yet include the mkEnvScript fix

* Filter discover to only successfully built check-runs

Hydra posts check-runs at evaluation time before builds complete.
When flake.nix changes cause new derivation hashes, the discover
step would pick up store paths not yet available in any cache,
causing nix-store -r to fail on GH runners.

Filter for conclusion=="success" and valid /nix/store/ paths to
only validate closures that are actually built and cached.

* Set all Nix builder runtime vars for devx wrapper outside builds

setup.sh runs with set -eu and expects NIX_BUILD_TOP, TMPDIR, out,
and other variables that the Nix builder sets at runtime. The
previous fix only set $out; NIX_BUILD_TOP was the next failure.

Set all required builder runtime variables (NIX_BUILD_TOP, TMPDIR,
TMP, TEMP, TEMPDIR, NIX_STORE, out) in both mkEnvScript and the
CI validate step.

Verified locally on hydra: both static (ghc96-static-env) and
dynamic (ghc98-minimal-env) wrappers work correctly.

---------

Co-authored-by: Moritz Angermann <[email protected]>
Add .small GHC derivation variant and fix Hadrian profiling bug
Introduces a .small passthru variant on GHC derivations that opts out of
profiling libraries and Haddock documentation, significantly reducing closure
size for CI, Docker, and cross-compilation toolchain use cases.

Also fixes a pre-existing bug where `enableLibraryProfiling = false` had no
effect on Hadrian builds (GHC 9.4+): the `+no_profiled_libs` flavour
transformer was only applied for GHCJS/Wasm targets, silently ignoring the
parameter for all other platforms.

Changes:
- Add `enableHaddockDocs` parameter (default true, fully backwards-compatible)
- Fix legacy make build: HADDOCK_DOCS=NO now also honours enableHaddockDocs
- Fix Hadrian: +no_profiled_libs applied whenever enableLibraryProfiling=false
- Hadrian: --docs=nothing when enableHaddockDocs=false, no-sphinx otherwise
- Make sphinx and hscolour nativeBuildInputs conditional on enableHaddockDocs
- Add .small passthru variant (enableLibraryProfiling=false, enableHaddockDocs=false)

Usage: pkgs.haskell-nix.compiler.ghc967.small