Home / Input Output / cardano-haskell-action
Feb 22, 12-1 PM (0)
Feb 22, 1-2 PM (0)
Feb 22, 2-3 PM (0)
Feb 22, 3-4 PM (0)
Feb 22, 4-5 PM (0)
Feb 22, 5-6 PM (0)
Feb 22, 6-7 PM (0)
Feb 22, 7-8 PM (0)
Feb 22, 8-9 PM (0)
Feb 22, 9-10 PM (0)
Feb 22, 10-11 PM (0)
Feb 22, 11-12 AM (2)
Feb 23, 12-1 AM (1)
Feb 23, 1-2 AM (1)
Feb 23, 2-3 AM (1)
Feb 23, 3-4 AM (0)
Feb 23, 4-5 AM (0)
Feb 23, 5-6 AM (1)
Feb 23, 6-7 AM (0)
Feb 23, 7-8 AM (0)
Feb 23, 8-9 AM (0)
Feb 23, 9-10 AM (0)
Feb 23, 10-11 AM (0)
Feb 23, 11-12 PM (0)
Feb 23, 12-1 PM (0)
Feb 23, 1-2 PM (0)
Feb 23, 2-3 PM (0)
Feb 23, 3-4 PM (0)
Feb 23, 4-5 PM (0)
Feb 23, 5-6 PM (0)
Feb 23, 6-7 PM (0)
Feb 23, 7-8 PM (0)
Feb 23, 8-9 PM (0)
Feb 23, 9-10 PM (0)
Feb 23, 10-11 PM (0)
Feb 23, 11-12 AM (0)
Feb 24, 12-1 AM (0)
Feb 24, 1-2 AM (0)
Feb 24, 2-3 AM (0)
Feb 24, 3-4 AM (0)
Feb 24, 4-5 AM (0)
Feb 24, 5-6 AM (0)
Feb 24, 6-7 AM (0)
Feb 24, 7-8 AM (0)
Feb 24, 8-9 AM (0)
Feb 24, 9-10 AM (0)
Feb 24, 10-11 AM (0)
Feb 24, 11-12 PM (0)
Feb 24, 12-1 PM (0)
Feb 24, 1-2 PM (0)
Feb 24, 2-3 PM (0)
Feb 24, 3-4 PM (0)
Feb 24, 4-5 PM (0)
Feb 24, 5-6 PM (0)
Feb 24, 6-7 PM (0)
Feb 24, 7-8 PM (0)
Feb 24, 8-9 PM (0)
Feb 24, 9-10 PM (0)
Feb 24, 10-11 PM (0)
Feb 24, 11-12 AM (0)
Feb 25, 12-1 AM (1)
Feb 25, 1-2 AM (0)
Feb 25, 2-3 AM (1)
Feb 25, 3-4 AM (2)
Feb 25, 4-5 AM (0)
Feb 25, 5-6 AM (2)
Feb 25, 6-7 AM (0)
Feb 25, 7-8 AM (0)
Feb 25, 8-9 AM (0)
Feb 25, 9-10 AM (0)
Feb 25, 10-11 AM (0)
Feb 25, 11-12 PM (2)
Feb 25, 12-1 PM (0)
Feb 25, 1-2 PM (0)
Feb 25, 2-3 PM (0)
Feb 25, 3-4 PM (0)
Feb 25, 4-5 PM (0)
Feb 25, 5-6 PM (0)
Feb 25, 6-7 PM (0)
Feb 25, 7-8 PM (0)
Feb 25, 8-9 PM (0)
Feb 25, 9-10 PM (0)
Feb 25, 10-11 PM (0)
Feb 25, 11-12 AM (0)
Feb 26, 12-1 AM (0)
Feb 26, 1-2 AM (0)
Feb 26, 2-3 AM (0)
Feb 26, 3-4 AM (0)
Feb 26, 4-5 AM (0)
Feb 26, 5-6 AM (0)
Feb 26, 6-7 AM (3)
Feb 26, 7-8 AM (0)
Feb 26, 8-9 AM (0)
Feb 26, 9-10 AM (0)
Feb 26, 10-11 AM (0)
Feb 26, 11-12 PM (0)
Feb 26, 12-1 PM (0)
Feb 26, 1-2 PM (0)
Feb 26, 2-3 PM (0)
Feb 26, 3-4 PM (0)
Feb 26, 4-5 PM (0)
Feb 26, 5-6 PM (0)
Feb 26, 6-7 PM (0)
Feb 26, 7-8 PM (0)
Feb 26, 8-9 PM (0)
Feb 26, 9-10 PM (0)
Feb 26, 10-11 PM (0)
Feb 26, 11-12 AM (0)
Feb 27, 12-1 AM (2)
Feb 27, 1-2 AM (0)
Feb 27, 2-3 AM (0)
Feb 27, 3-4 AM (0)
Feb 27, 4-5 AM (0)
Feb 27, 5-6 AM (0)
Feb 27, 6-7 AM (1)
Feb 27, 7-8 AM (1)
Feb 27, 8-9 AM (0)
Feb 27, 9-10 AM (0)
Feb 27, 10-11 AM (0)
Feb 27, 11-12 PM (0)
Feb 27, 12-1 PM (0)
Feb 27, 1-2 PM (0)
Feb 27, 2-3 PM (0)
Feb 27, 3-4 PM (0)
Feb 27, 4-5 PM (0)
Feb 27, 5-6 PM (0)
Feb 27, 6-7 PM (0)
Feb 27, 7-8 PM (0)
Feb 27, 8-9 PM (0)
Feb 27, 9-10 PM (0)
Feb 27, 10-11 PM (0)
Feb 27, 11-12 AM (1)
Feb 28, 12-1 AM (0)
Feb 28, 1-2 AM (0)
Feb 28, 2-3 AM (2)
Feb 28, 3-4 AM (0)
Feb 28, 4-5 AM (0)
Feb 28, 5-6 AM (1)
Feb 28, 6-7 AM (1)
Feb 28, 7-8 AM (1)
Feb 28, 8-9 AM (1)
Feb 28, 9-10 AM (0)
Feb 28, 10-11 AM (0)
Feb 28, 11-12 PM (0)
Feb 28, 12-1 PM (0)
Feb 28, 1-2 PM (0)
Feb 28, 2-3 PM (0)
Feb 28, 3-4 PM (0)
Feb 28, 4-5 PM (0)
Feb 28, 5-6 PM (0)
Feb 28, 6-7 PM (0)
Feb 28, 7-8 PM (0)
Feb 28, 8-9 PM (0)
Feb 28, 9-10 PM (0)
Feb 28, 10-11 PM (0)
Feb 28, 11-12 AM (0)
Mar 01, 12-1 AM (0)
Mar 01, 1-2 AM (0)
Mar 01, 2-3 AM (0)
Mar 01, 3-4 AM (0)
Mar 01, 4-5 AM (0)
Mar 01, 5-6 AM (0)
Mar 01, 6-7 AM (0)
Mar 01, 7-8 AM (0)
Mar 01, 8-9 AM (0)
Mar 01, 9-10 AM (0)
Mar 01, 10-11 AM (0)
Mar 01, 11-12 PM (0)
Mar 01, 12-1 PM (0)
28 commits this week Feb 22, 2026 - Mar 01, 2026
Add nix eval fallback to -env closure discovery
When Hydra resolves builds from cache, it creates only aggregate
"required" check-runs but not individual per-build check-runs.
This causes the GHA upload workflow to discover zero -env closures
and skip all container uploads.

Add a fallback path: when no Hydra check-runs ending in "-env"
are found, evaluate the store paths directly from the flake using
nix eval with extra/discover-env.nix. This ensures containers are
always uploaded regardless of Hydra's check-run behavior.

Also install Nix and checkout the repo in the Discover step to
support the fallback evaluation.
Centralize IOG library lists in iog-libs.nix
Extract the duplicated IOG dependency lists from dynamic.nix,
static.nix, cross-js.nix, and cross-windows.nix into a single
iog-libs.nix file. This eliminates manual synchronization when
adding new libraries (e.g., lmdb was previously missing from
cross-compilation targets) and provides a canonical source of
truth for IOG-specific dependencies.

The centralized file categorizes dependencies into:
- crypto: libblst, libsodium-vrf, secp256k1 (all shell types)
- data: lmdb (dynamic/static only)
- tools: cbor-diag, cddl, gh, icu, jq, yq-go (dynamic/static)
- cross-tools: cbor-diag, cddl (cross-compilation targets)

Each consumer imports iog-libs.nix and transforms as needed
(e.g., static.nix passes static=true to resolve static-* variants).

Addresses #56
Add lmdb to IOG profiles (#238)
ouroboros-consensus depends on cardano-lmdb which requires the lmdb
system library (pkg-config: lmdb>=0.9 && <0.10). Since UTxO-HD was
integrated in Cardano Node 10.4.1, lmdb is required for all Cardano
development.

Adds lmdb to dynamic shells and static-lmdb (static-only build via
Makefile ILIBS patching, matching nixpkgs isStatic pattern) to static
shells. The wrapped-cabal in static.nix gets the corresponding -L flag
so GHC finds the static library.

Closes #218
Supersedes #221
Add lmdb to IOG profiles
ouroboros-consensus depends on cardano-lmdb which requires the lmdb
system library (pkg-config: lmdb>=0.9 && <0.10). Since UTxO-HD was
integrated in Cardano Node 10.4.1, lmdb is required for all Cardano
development.

Adds lmdb to dynamic shells and static-lmdb (static-only build via
Makefile ILIBS patching, matching nixpkgs isStatic pattern) to static
shells. The wrapped-cabal in static.nix gets the corresponding -L flag
so GHC finds the static library.

Closes #218
Supersedes #221
Suppress cc-wrapper --target mismatch warning on aarch64-darwin (#237)
GNU config.sub normalises to "aarch64-apple-darwin" while Apple's
LLVM toolchain (and nix cc-wrapper's @defaultTarget@) uses
"arm64-apple-darwin". Older GHC versions pass --target=aarch64-apple-darwin
which triggers a noisy warning from the cc-wrapper's
add-clang-cc-cflags-before hook on every compiler invocation.

The warning is harmless — clang handles both triples identically — but
it pollutes stderr and causes thousands of GHC testsuite failures due
to unexpected compiler output.

Set NIX_CC_WRAPPER_SUPPRESS_TARGET_WARNING=1 in the env script before
sourcing stdenv/setup to suppress this warning.
Set TERM=dumb fallback in devx env script for CI/container environments
GHC's Makefile unconditionally calls `tput bold` and `tput sgr0`
(lines 217-218) which fail with "No value for $TERM and no -T
specified" when TERM is unset. This happens in CI runners and
containers where no terminal is attached.

Set TERM to "dumb" as a fallback after sourcing setup.sh so ncurses
tools like tput degrade gracefully instead of erroring.
Fix: use buildCommand instead of postInstall for nix-support file
writeTextFile sets `buildCommand` in the derivation, which causes
stdenv's genericBuild to skip the entire phase system — installPhase,
postInstall, fixupPhase — none of them execute. The previous commit
used postInstall which was silently ignored, leaving the wrapper
output without nix-support/propagated-native-build-inputs.

Append the file creation directly to buildCommand, which is the only
code path the builder actually runs.
Fix: write nix-support/propagated-native-build-inputs file
writeShellApplication uses writeTextFile internally, which does NOT
run stdenv.mkDerivation's fixupPhase. Setting propagatedNativeBuildInputs
via overrideAttrs only adds the attribute to the derivation but never
materializes the $out/nix-support/propagated-native-build-inputs file
that setup.sh's findInputs actually reads at runtime.

Without this file, curl was invisible to the shell environment despite
being set as a propagated dep — the wrapper script itself had curl on
its internal PATH, but other programs (like GHC's stage0 cabal) could
not find it.

Fix: explicitly create the nix-support file in postInstall.
Propagate writeShellApplication runtimeInputs via propagatedNativeBuildInputs
The switch from nix-print-dev-env to devShellTools (a354771) broke
runtimeInputs visibility in -env container scripts. writeShellApplication
embeds runtimeInputs in the wrapper's own PATH, but $stdenv/setup (which
the -env scripts source) only walks buildInputs/nativeBuildInputs — not
the internal PATH of wrappers within those inputs.

The previous fix (76d6b37) added curl explicitly to buildInputs, but
this is fragile: any future runtimeInputs change requires a parallel
edit in the shell's input lists.

Instead, use propagatedNativeBuildInputs on the wrapper derivation.
When $stdenv/setup processes wrapped-cabal from nativeBuildInputs, it
transitively follows propagatedNativeBuildInputs and adds curl (and
cabal-install) to PATH for the whole environment. This is the standard
Nix mechanism for transitive dependency propagation.

Applies to all four shell definitions: dynamic, static, cross-js,
cross-windows. Removes the explicit curl additions from 76d6b37.
Fix curl/HTTPS transport, update head.hackage hash, rename check-run step (#229)
* Update workflow step name for prefix-less check-runs

The hydra-github-bridge no longer prefixes check-run names with
"ci/hydra-build:" for zw3rk CI. Update the step name to match.
The JQ filters and wait-for-hydra action (check: required) now
work correctly with the bare job names.

* Update head.hackage FOD hash

The head.hackage index is a rolling target — upstream published new
packages, invalidating the previous hash.

  specified: sha256-nFFut7+8NzUps+4MsmnAo2bLp1EE2Dx4eWqTeZ2aYqI=
  got:       sha256-P0hOiQyh54Y5Pyl9rjpEE5Er/u83aeXIKBygzniRZtk=

* Add curl to shell buildInputs for HTTPS transport

The wrapped-cabal writeShellApplication includes curl as a
runtimeInput, but that only puts curl on PATH when the wrapper
script itself runs. In the -env container scripts (which source
$stdenv/setup to construct PATH from buildInputs/nativeBuildInputs),
curl is NOT on PATH for other programs.

This breaks GHC CI builds: GHC's Makefile bootstraps its own
stage0 cabal (debug build, no native TLS) which then needs curl
on PATH to download packages from Hackage over HTTPS. Without
curl available, it fails with Cabal-7113.

Fix: add curl directly to buildInputs/nativeBuildInputs in
dynamic.nix, static.nix, and cross-js.nix so it's always
available on PATH regardless of how the environment is sourced.
Drop cabal-experimental input (#228)
* Drop cabal-experimental input, use regular cabal for all shells

The cabal-experimental input (stable-haskell/cabal cross-compile branch)
was used for withGHCTooling shells. The pinned version (Apr 2025) has
hackage-security bounds incompatible with GHC 9.10+/9.12+ (ghc-prim
>= 0.12), causing IFD plan resolution failures. The newer version
(Aug 2025) fixes that but regresses shared library handling, breaking
downstream CI.

Simplify by using the regular cabal input for all shell variants.

* Update haskell.nix to fix head.hackage FOD hash mismatch

The head.hackage upstream content changed after Feb 21, making the
fixed-output derivation hash stale. With the cached outputs GC'd,
all JS backend IFD evaluations fail with hash mismatch, blocking
the entire Hydra eval (no jobsetevals entry produced).

Update haskell.nix from 7e7550c (Dec 9 2025) to cc939d0 (Feb 23 2026)
which includes the daily "Update Hackage and Stackage" with the
current head.hackage hash.

* Update head.hackage FOD hash and haskell.nix input

The head.hackage upstream content changed (upstream index grew),
making the fixed-output derivation hash in tool-map.nix stale.
With the cached outputs GC'd from hydra builders, all JS backend
IFD evaluations fail with hash mismatch, blocking the entire
Hydra eval (no jobsetevals produced).

Update the head.hackage sha256 from
  sha256-AO/vHIMSIBwjbp5GY561SmnPr5qTTyBt9ruy8D3lKZI=
to
  sha256-nFFut7+8NzUps+4MsmnAo2bLp1EE2Dx4eWqTeZ2aYqI=

Also update haskell.nix from 7e7550c (Dec 2025) to cc939d0
(Feb 23 2026) to pick up latest Hackage/Stackage indexes.
Update head.hackage FOD hash and haskell.nix input
The head.hackage upstream content changed (upstream index grew),
making the fixed-output derivation hash in tool-map.nix stale.
With the cached outputs GC'd from hydra builders, all JS backend
IFD evaluations fail with hash mismatch, blocking the entire
Hydra eval (no jobsetevals produced).

Update the head.hackage sha256 from
  sha256-AO/vHIMSIBwjbp5GY561SmnPr5qTTyBt9ruy8D3lKZI=
to
  sha256-nFFut7+8NzUps+4MsmnAo2bLp1EE2Dx4eWqTeZ2aYqI=

Also update haskell.nix from 7e7550c (Dec 2025) to cc939d0
(Feb 23 2026) to pick up latest Hackage/Stackage indexes.
Update haskell.nix to fix head.hackage FOD hash mismatch
The head.hackage upstream content changed after Feb 21, making the
fixed-output derivation hash stale. With the cached outputs GC'd,
all JS backend IFD evaluations fail with hash mismatch, blocking
the entire Hydra eval (no jobsetevals entry produced).

Update haskell.nix from 7e7550c (Dec 9 2025) to cc939d0 (Feb 23 2026)
which includes the daily "Update Hackage and Stackage" with the
current head.hackage hash.