Skip to content

Commit

Permalink
writers: make babashka interpreter and check configurable (NixOS#354760)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lassulus authored Nov 16, 2024
2 parents e6914ee + 5647f09 commit 386b156
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 40 deletions.
84 changes: 46 additions & 38 deletions pkgs/build-support/writers/scripts.nix
Original file line number Diff line number Diff line change
Expand Up @@ -523,15 +523,17 @@ rec {
writeFishBin = name: writeFish "/bin/${name}";

/**
Like writeScript but the first line is a shebang to babashka
writeBabashka takes a name, an attrset with babashka interpreter and linting check (both optional)
and some babashka source code and returns an executable.
Can be called with or without extra arguments.
`pkgs.babashka-unwrapped` is used as default interpreter for small closure size. If dependencies needed, use `pkgs.babashka` instead. Pass empty string to check to disable the default clj-kondo linting.
# Examples
:::{.example}
## `pkgs.writers.writeBabashka` without arguments
## `pkgs.writers.writeBabashka` with empty arguments
```nix
writeBabashka "example" ''
writeBabashka "example" { } ''
(println "hello world")
''
```
Expand All @@ -553,55 +555,61 @@ rec {
''
```
:::
*/
writeBabashka =
name: argsOrScript:
if lib.isAttrs argsOrScript && !lib.isDerivation argsOrScript then
makeScriptWriter (
argsOrScript
// {
interpreter = "${lib.getExe pkgs.babashka}";
check = "${lib.getExe pkgs.clj-kondo} --lint";
}
) name
else
makeScriptWriter {
interpreter = "${lib.getExe pkgs.babashka}";
check = "${lib.getExe pkgs.clj-kondo} --lint";
} name argsOrScript;

/**
Like writeScriptBin but the first line is a shebang to babashka
Can be called with or without extra arguments.
:::{.note}
Babashka needs Java for fetching dependencies. Wrapped babashka contains jdk,
pass wrapped version `pkgs.babashka` to babashka if dependencies are required.
# Examples
:::{.example}
## `pkgs.writers.writeBabashkaBin` without arguments
For example:
```nix
writeBabashkaBin "example" ''
(println "hello world")
writeBabashka "example"
{
babashka = pkgs.babashka;
}
''
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {medley/medley {:mvn/version "1.3.0"}}})
(require '[medley.core :as m])
(prn (m/index-by :id [{:id 1} {:id 2}]))
''
```
:::
:::{.example}
## `pkgs.writers.writeBabashkaBin` with arguments
:::{.note}
Disable clj-kondo linting:
```nix
writeBabashkaBin "example"
writeBabashka "example"
{
makeWrapperArgs = [
"--prefix" "PATH" ":" "${lib.makeBinPath [ pkgs.hello ]}"
];
check = "";
}
''
(require '[babashka.tasks :as tasks])
(tasks/shell "hello" "-g" "Hello babashka!")
(println "hello world")
''
```
:::
```
*/
writeBabashka =
name:
{
makeWrapperArgs ? [ ],
babashka ? pkgs.babashka-unwrapped,
check ? "${lib.getExe pkgs.clj-kondo} --lint",
...
}@args:
makeScriptWriter (
(builtins.removeAttrs args [
"babashka"
])
// {
interpreter = "${lib.getExe babashka}";
}
) name;

/**
writeBabashkaBin takes the same arguments as writeBabashka but outputs a directory
(like writeScriptBin)
*/
writeBabashkaBin = name: writeBabashka "/bin/${name}";

Expand Down
4 changes: 2 additions & 2 deletions pkgs/build-support/writers/test.nix
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ recurseIntoAttrs {
end
'');

babashka = expectSuccessBin (writeBabashkaBin "test-writers-babashka-bin" ''
babashka = expectSuccessBin (writeBabashkaBin "test-writers-babashka-bin" { } ''
(println "success")
'');

Expand Down Expand Up @@ -205,7 +205,7 @@ recurseIntoAttrs {
echo "success"
'');

babashka = expectSuccess (writeBabashka "test-writers-babashka" ''
babashka = expectSuccess (writeBabashka "test-writers-babashka" { } ''
(println "success")
'');

Expand Down

0 comments on commit 386b156

Please sign in to comment.