writers: make babashka interpreter and check configurable

This commit is contained in:
無名氏 2024-11-09 20:15:03 +08:00
parent 99d3107b49
commit 5647f0905b
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"
(println "hello world")
''
```
:::
:::{.example}
## `pkgs.writers.writeBabashkaBin` with arguments
```nix
writeBabashkaBin "example"
{ {
makeWrapperArgs = [ babashka = pkgs.babashka;
"--prefix" "PATH" ":" "${lib.makeBinPath [ pkgs.hello ]}"
];
} }
'' ''
(require '[babashka.tasks :as tasks]) (require '[babashka.deps :as deps])
(tasks/shell "hello" "-g" "Hello babashka!") (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")
''
:::
```
*/
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}"; 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")
''); '');