Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

runPhase subshell and exit status #363423

Draft
wants to merge 1 commit into
base: staging
Choose a base branch
from

Conversation

mitchallain
Copy link

@mitchallain mitchallain commented Dec 9, 2024

This PR follows up on #330751, modifying the runPhase function to be more useful for command chaining and scripting in devshells. I will restate the context below so this PR is self-sufficient, but newcomers are encouraged to review that PR and comment thread for additional context.

The relatively new runPhase function in stdenv seems to be the best practice for building packages within a devshell, rather than manually executing sub-commands (e.g., cmake .. && make). This creates better consistency between dev workflow and the eventual realized derivation created by nix build.

However, the runPhase command obscures any failures which take place within the individual build phases. To fix that problem, this PR sets the errexit / set -e shell option so that errors within simple commands, lists, or compound commands in the individual build phases will cause the phase to exit immediately, and cause runPhase to return non-zero. This is consistent with the behavior of the stdenv builder which uses the set -e option.

A subshell is used to prevent setting the errexit option in the devshell, causing the devshell to exit on failure, which is generally not preferred.

This allows workflows like chaining commands in lists (e.g., runPhase configurePhase && runPhase buildPhase) or scripting phases in the devshell (trivial example: runPhase buildPhase && echo "Succeeded" || echo "Failure").

Caveat: using a subshell means that phases cannot modify variables in the devshell, which could be breaking or could (?) be beneficial. I'll convert this PR to "Ready for Review" once this is better understood.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@github-actions github-actions bot added the 6.topic: stdenv Standard environment label Dec 9, 2024
@mitchallain mitchallain marked this pull request as draft December 9, 2024 00:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: stdenv Standard environment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant