writers: make babashka interpreter and check configurable (#354760)

This commit is contained in:
lassulus 2024-11-16 21:09:31 +01:00 committed by GitHub
commit 386b1568f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 45 deletions

View File

@ -523,15 +523,17 @@ rec {
writeFishBin = name: writeFish "/bin/${name}"; 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} :::{.example}
## `pkgs.writers.writeBabashka` without arguments ## `pkgs.writers.writeBabashka` with empty arguments
```nix ```nix
writeBabashka "example" '' writeBabashka "example" { } ''
(println "hello world") (println "hello world")
'' ''
``` ```
@ -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;
/** :::{.note}
Like writeScriptBin but the first line is a shebang to babashka Babashka needs Java for fetching dependencies. Wrapped babashka contains jdk,
pass wrapped version `pkgs.babashka` to babashka if dependencies are required.
Can be called with or without extra arguments. For example:
# Examples
:::{.example}
## `pkgs.writers.writeBabashkaBin` without arguments
```nix ```nix
writeBabashkaBin "example" '' 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}]))
''
```
:::
:::{.note}
Disable clj-kondo linting:
```nix
writeBabashka "example"
{
check = "";
}
''
(println "hello world") (println "hello world")
'' ''
```
::: :::
```
:::{.example} */
## `pkgs.writers.writeBabashkaBin` with arguments writeBabashka =
name:
```nix
writeBabashkaBin "example"
{ {
makeWrapperArgs = [ makeWrapperArgs ? [ ],
"--prefix" "PATH" ":" "${lib.makeBinPath [ pkgs.hello ]}" babashka ? pkgs.babashka-unwrapped,
]; check ? "${lib.getExe pkgs.clj-kondo} --lint",
...
}@args:
makeScriptWriter (
(builtins.removeAttrs args [
"babashka"
])
// {
interpreter = "${lib.getExe babashka}";
} }
'' ) name;
(require '[babashka.tasks :as tasks])
(tasks/shell "hello" "-g" "Hello babashka!") /**
'' writeBabashkaBin takes the same arguments as writeBabashka but outputs a directory
``` (like writeScriptBin)
:::
*/ */
writeBabashkaBin = name: writeBabashka "/bin/${name}"; writeBabashkaBin = name: writeBabashka "/bin/${name}";

View File

@ -89,7 +89,7 @@ recurseIntoAttrs {
end end
''); '');
babashka = expectSuccessBin (writeBabashkaBin "test-writers-babashka-bin" '' babashka = expectSuccessBin (writeBabashkaBin "test-writers-babashka-bin" { } ''
(println "success") (println "success")
''); '');
@ -205,7 +205,7 @@ recurseIntoAttrs {
echo "success" echo "success"
''); '');
babashka = expectSuccess (writeBabashka "test-writers-babashka" '' babashka = expectSuccess (writeBabashka "test-writers-babashka" { } ''
(println "success") (println "success")
''); '');