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

nixos/nextcloud: fix eval of tests #393063

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Ma27
Copy link
Member

@Ma27 Ma27 commented Mar 25, 2025

Currently failing with

error: cannot coerce a set to a string: { __functionArgs = «thunk»; __functor = «thunk»; }

This comes from the extraTests option I added to the test modules to compose certain tests a little nicer. It's of type

either (functionTo ...) str

and it seems like the functionTo part now returns a functor (i.e. an attr-set that can be invoked as function). This is caught by lib.isFunction, but builtins.isFunction returns false.

Hence, switching to the former fixes this.

ccing lib maintainers @hsjobeki @roberth @infinisil: while I don't care enough about this change on lib-side, I figured it's still reasonable to let you know of this fallout given the stability requirements that lib has (IIRC).

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.

Currently failing with

    error: cannot coerce a set to a string: { __functionArgs = «thunk»; __functor = «thunk»; }

This comes from the `extraTests` option I added to the test modules to
compose certain tests a little nicer. It's of type

    either (functionTo ...) str

and it seems like the `functionTo` part now returns a functor (i.e. an
attr-set that can be invoked as function). This is caught by
`lib.isFunction`, but `builtins.isFunction` returns `false`.

Hence, switching to the former fixes this.
@Ma27 Ma27 requested review from britter and dotlambda March 25, 2025 12:22
@github-actions github-actions bot added the 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS label Mar 25, 2025
@github-actions github-actions bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux labels Mar 25, 2025
@@ -1,6 +1,7 @@
{ system ? builtins.currentSystem
, config ? { }
, pkgs ? import ../../.. { inherit system config; }
, lib ? pkgs.lib
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
, lib ? pkgs.lib

lib is already in scope through with pkgs.lib ?

@hsjobeki
Copy link
Contributor

hsjobeki commented Mar 25, 2025

This breakage seems unfortunate.

From a language perspective:

An attributeSet with __functor is polymorphic. So builtins.isFunction should return true because it is a function
builtins.isAttrs should also return true (since it is polymorphic).

I expect this regression where introduced by: #386208

Previously it returned a lambda function now returns a functor, both of which are arguably functions.

@roberth Should we revert #386208 ?

Revert no:

  • So far seems the only breakage ?
  • A value produced by with lib.types; either function str should be checked with lib arguably. We can't expect builtins to know about what lib.types returns.
  • This might be an arguably small regression which might be ok, if we add it to the lib breaking release notes?

Revert yes:

  • lib must guarantee stability and could cause more breakage if people don't expect their options value to get tranformed into a _functor by .merge

@wegank wegank added the 12.approvals: 1 This PR was reviewed and approved by one reputable person label Mar 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux 12.approvals: 1 This PR was reviewed and approved by one reputable person
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants