github cachix/devenv v2.0.6

7 hours ago

Bug Fixes

  • Fixed task cache initialization failing with "unable to open database file" when the state directory does not yet exist.
  • Fixed cachix daemon log output leaking into and corrupting the TUI display by capturing daemon stderr and forwarding it through the push activity (#2648).
  • Fixed devenv test hanging when a process outputs non-UTF-8 bytes by using lossy UTF-8 decoding instead of closing the pipe, which caused a deadlock between the parent waiting for the child to exit and the child blocking on a full stdout pipe (#2590).
  • Fixed hot reload sometimes picking up stale configuration or crashing due to the old Nix evaluator not being fully cleaned up before creating a new one. Errors during reload are now reported instead of silently breaking subsequent evaluations.
  • Fixed DEVENV_TUI=false and DEVENV_TUI=0 not disabling the TUI (#2646).
  • Migrated certificates and hosts modules to use tasks instead of process.manager.before/process.manager.after for the native process manager (#2569).
  • Fixed stale shell eval cache entries causing devenv shell and direnv activation to ignore changes to devenv.nix config such as languages, env, packages, and scripts (#2643).
  • Fixed services failing to start with E2BIG when the shell environment is large by moving env/cwd/stdio setup from the bash wrapper script to the spawned process directly (#2638).
  • Fixed processes failing to start when exported bash functions are present in the environment (#2587).
  • Fixed eval cache storing inconsistent port allocations across different cached attributes (#2631).
  • Fixed stale eval cache invalidation for devenv up process config changes caused by overlapping evaluations clearing each other's file dependency observers (#2632).
  • Fixed strict port restarts failing with "port already in use" when the kernel hasn't released the socket yet after process shutdown, by distinguishing ownerless transient conflicts from real ones and retrying accordingly (#2647).
  • Fixed false-positive --strict-ports failures on macOS when IPv6 loopback binding returns a benign error after a clean shutdown and cache invalidation (#2640).
  • Fixed child processes being left running on shutdown when using non-native process managers like process-compose (#2586).
  • Fixed devenv update resolving stale revisions when Nix's fetcher cache contains outdated entries by setting tarball-ttl to 0 during update, equivalent to nix --refresh (#2616).
  • Fixed Nix backend initialization crash when impure: true by removing use of nonexistent impure Nix setting; impure mode now works by skipping pure-eval (which defaults to false).
  • Fixed execIfModified glob walker entering gitignored directories, causing extreme slowdowns in repos with large ignored trees (#2588).
  • Fixed devenv up -d not keeping processes running with the native process manager by spawning a daemon via re-exec instead of fork, which is unsafe in multithreaded programs (#2630).
  • Fixed environment variable precedence in process manager: per-process env now correctly wins over global env.
  • Fixed hot reload triggering a fork bomb by ignoring file change events while a build is already in progress, preventing cascading zombie builds.

Improvements

  • The TUI now shows a "stopping" status during graceful process shutdown (#2647).
  • Process stop_all() now stops processes concurrently instead of serially (#2647).
  • --quiet now disables the TUI and suppresses all output except warnings and errors (#2617).
  • Bumped Nix input to fix devenv shell failing with "suspicious ownership or permission" on single user Nix installations where umask causes store outputs to have incorrect permissions (#2585).
  • Containers now report all missing inputs at once instead of one at a time (#2598).
  • Extracted container, search, and gc methods from devenv.rs into separate submodule files for better code organization.
  • Added allowUnsupportedSystem option for devenv.yaml to allow packages not supported on the current system. Can be set at the top level, under nixpkgs, or per platform via nixpkgs.per-platform.<system> (#2639).
  • Added new nixpkgs config options to devenv.yaml: allowNonSource, allowlistedLicenses, blocklistedLicenses, and androidSdk.acceptLicense (#2634).
  • Added allowInsecurePredicate generation from permittedInsecurePackages so insecure package allowlisting works correctly.

Breaking Changes

  • process.manager.before/process.manager.after: These options are no longer supported with the native process manager. Use tasks with before/after dependencies instead. See https://devenv.sh/tasks/

Don't miss a new devenv release

NewReleases is sending notifications on new releases.