Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,26 @@
inventory = self.lib.derivationsInventory "development environment" false;
};

devShellSchema = {
version = 1;
doc = ''
The `devShell` flake output contains a derivation that provides a development environment for `nix develop`.
'';
roles.nix-develop = { };
appendSystem = true;
defaultAttrPath = [ ];
inventory = output:
self.lib.mkChildren (
builtins.mapAttrs (systemType: devShellForSystem: {
forSystems = [ systemType ];
shortDescription = devShellForSystem.meta.description or "";
derivationAttrPath = [ ];
what = "development environment";
isFlakeCheck = false;
}) output
);
};

formatterSchema = {
version = 1;
doc = ''
Expand Down Expand Up @@ -427,6 +447,7 @@
schemas.packages = packagesSchema;
schemas.legacyPackages = legacyPackagesSchema;
schemas.checks = checksSchema;
schemas.devShell = devShellSchema;
schemas.devShells = devShellsSchema;
schemas.formatter = formatterSchema;
schemas.templates = templatesSchema;
Expand Down
18 changes: 18 additions & 0 deletions tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Adding a test case:

Create a directory in the tests directory with a flake.nix and flake.lock.
Do not have any external dependencies or flake inputs.
Construct your test and then capture the output with `add-test.sh`:

```
./add-test.sh directoryName
```

like:

```
./add-test.sh devShellWithDevShellsAndPackages
```

This will create a `directoryName.json` and `directoryName.check-err` file.
If the test is not specific to the error output handling, delete the check-err file.
11 changes: 11 additions & 0 deletions tests/add-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh

flake=$1

nix flake show --offline --json --legacy --default-flake-schemas "../" "./$flake" \
| jq \
| tee "$flake.json"

nix flake check --offline --no-build --default-flake-schemas "../" "./$flake" --no-eval-cache 2>&1 \
| (grep -v '^evaluating ' || true) \
| tee "$flake.check-err"
18 changes: 18 additions & 0 deletions tests/devShell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"inventory": {
"devShell": {
"doc": "The `devShell` flake output contains a derivation that provides a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"lib": {
"unknown": true
}
},
"version": 2
}
7 changes: 7 additions & 0 deletions tests/devShell/flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions tests/devShell/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
outputs = { self, ... }:
{
lib.makeShellTestCase = name: derivation {
inherit name;
system = "x86_64-linux";
builder = "/bin/bash";
args = [ "-c" "echo $name; echo $name; echo $name; echo $name; echo $name; " ];
};

devShell.x86_64-linux = self.lib.makeShellTestCase "devShell-legacy";
};
}
28 changes: 28 additions & 0 deletions tests/devShellWithDevShells.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"inventory": {
"devShell": {
"doc": "The `devShell` flake output contains a derivation that provides a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"devShells": {
"doc": "The `devShells` flake output contains derivations that provide a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"lib": {
"unknown": true
}
},
"version": 2
}
7 changes: 7 additions & 0 deletions tests/devShellWithDevShells/flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions tests/devShellWithDevShells/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
outputs = { self, ... }:
{
lib.makeShellTestCase = name: derivation {
inherit name;
system = "x86_64-linux";
builder = "/bin/bash";
args = [ "-c" "echo $name; echo $name; echo $name; echo $name; echo $name; " ];
};

devShell.x86_64-linux = self.lib.makeShellTestCase "devShell-legacy";
devShells.x86_64-linux.default = self.lib.makeShellTestCase "devShells-preferred-over-legacy";
};
}
38 changes: 38 additions & 0 deletions tests/devShellWithDevShellsAndPackages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"inventory": {
"devShell": {
"doc": "The `devShell` flake output contains a derivation that provides a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"devShells": {
"doc": "The `devShells` flake output contains derivations that provide a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"lib": {
"unknown": true
},
"packages": {
"doc": "The `packages` flake output contains packages that can be added to a shell using `nix shell`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
}
},
"version": 2
}
7 changes: 7 additions & 0 deletions tests/devShellWithDevShellsAndPackages/flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions tests/devShellWithDevShellsAndPackages/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
outputs = { self, ... }:
{
lib.makeShellTestCase = name: derivation {
inherit name;
system = "x86_64-linux";
builder = "/bin/bash";
args = [ "-c" "echo $name; echo $name; echo $name; echo $name; echo $name; " ];
};

devShell.x86_64-linux = self.lib.makeShellTestCase "devShell-legacy";
devShells.x86_64-linux.default = self.lib.makeShellTestCase "devShells-preferred-over-legacy-and-packages";
packages.x86_64-linux.default = self.lib.makeShellTestCase "packages";
};
}
28 changes: 28 additions & 0 deletions tests/devShellWithPackages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"inventory": {
"devShell": {
"doc": "The `devShell` flake output contains a derivation that provides a development environment for `nix develop`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
},
"lib": {
"unknown": true
},
"packages": {
"doc": "The `packages` flake output contains packages that can be added to a shell using `nix shell`.\n",
"output": {
"children": {
"x86_64-linux": {
"filtered": true
}
}
}
}
},
"version": 2
}
7 changes: 7 additions & 0 deletions tests/devShellWithPackages/flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions tests/devShellWithPackages/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
outputs = { self, ... }:
{
lib.makeShellTestCase = name: derivation {
inherit name;
system = "x86_64-linux";
builder = "/bin/bash";
args = [ "-c" "echo $name; echo $name; echo $name; echo $name; echo $name; " ];
};

devShell.x86_64-linux = self.lib.makeShellTestCase "devShell-legacy-preferred-over-packages";
packages.x86_64-linux.default = self.lib.makeShellTestCase "packages";
};
}
14 changes: 14 additions & 0 deletions tests/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,20 @@
fi
done

if [ $system = "x86_64-linux" ]; then
# Check that `nix develop` reads devShell.system if no other option is available
nix develop --system x86_64-linux --offline --default-flake-schemas "$src" "$src/tests/devShell" --no-eval-cache 2>&1 | tee /dev/stderr | grep -q "devShell-legacy"

# Check that `nix develop` reads devShells.system.default over devShell.system
nix develop --system x86_64-linux --offline --default-flake-schemas "$src" "$src/tests/devShellWithDevShells" --no-eval-cache 2>&1 | tee /dev/stderr | grep -q "devShells-preferred-over-legacy"

# Check that `nix develop` reads devShell.system when packages.system.default is also available
nix develop --system x86_64-linux --offline --default-flake-schemas "$src" "$src/tests/devShellWithPackages" --no-eval-cache 2>&1 | tee /dev/stderr | grep -q "devShell-legacy-preferred-over-packages"

# Check that `nix develop` reads devShells.system.default over devShell.system and packages.
nix develop --system x86_64-linux --offline --default-flake-schemas "$src" "$src/tests/devShellWithDevShellsAndPackages" --no-eval-cache 2>&1 | tee /dev/stderr | grep -q "devShells-preferred-over-legacy-and-packages"
fi

mkdir "$out"
'';
}
Expand Down
Loading