From f9f48d11968806db4b055427bb6ef99cd9ef5b22 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sun, 29 Jun 2025 12:40:04 +0200 Subject: [PATCH 1/3] graal meth --- src/babashka/process.cljc | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/babashka/process.cljc b/src/babashka/process.cljc index 295ba0f..ed21360 100644 --- a/src/babashka/process.cljc +++ b/src/babashka/process.cljc @@ -604,16 +604,10 @@ :err :string} opts)] @(process* {:cmd cmd :opts opts :prev prev}))) -(def ^:private has-exec? - (boolean (try (.getMethod ^Class - (resolve 'org.graalvm.nativeimage.ProcessProperties) "exec" - (into-array [java.nio.file.Path (Class/forName "[Ljava.lang.String;") java.util.Map])) - (catch Exception _ false)))) - -(defmacro ^:no-doc - if-has-exec [then else] - (if has-exec? - then else)) +(def ^:private exec-meth + (delay (try (.getMethod (Class/forName "org.graalvm.nativeimage.ProcessProperties") "exec" + (into-array [java.nio.file.Path (Class/forName "[Ljava.lang.String;") java.util.Map])) + (catch Exception _ nil)))) (defn exec "Replaces the current process image with the process image specified @@ -649,10 +643,10 @@ ^java.util.Map env (into (or (as-string-map env) (into {} (System/getenv))) (as-string-map extra-env))] - (if-has-exec - (org.graalvm.nativeimage.ProcessProperties/exec (fs/path program) - (into-array String args) - env) + (if-let [^java.lang.reflect.Method meth @exec-meth] + (.invoke meth nil (into-array Object [(fs/path program) + (into-array String args) + env])) (throw (ex-info "exec is not supported in non-GraalVM environments" {:cmd cmd})))))) (def ^:private default-shell-opts From 30dde710320cfe9f40a55f99152d266b8b04264d Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sun, 29 Jun 2025 14:12:00 +0200 Subject: [PATCH 2/3] native --- deps.edn | 1 + project.clj | 1 + .../native-image/babashka/process/reflect-config.json | 4 ++++ 3 files changed, 6 insertions(+) create mode 100644 resources/META-INF/native-image/babashka/process/reflect-config.json diff --git a/deps.edn b/deps.edn index 85d5c1e..988d879 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,5 @@ {:deps {babashka/fs {:mvn/version "0.4.18"}} + :paths ["src" "resources"] :aliases {:test {:extra-paths ["test"] :extra-deps {io.github.cognitect-labs/test-runner {:git/tag "v0.5.1" :git/sha "dfb30dd"}} :main-opts ["-m" "cognitect.test-runner"]} diff --git a/project.clj b/project.clj index 505546f..f930810 100644 --- a/project.clj +++ b/project.clj @@ -7,6 +7,7 @@ :url "https://www.eclipse.org/legal/epl-1.0/"} :dependencies [[org.clojure/clojure "1.9.0"] [babashka/fs "0.4.18"]] + :source-paths ["src" "resources"] :deploy-repositories [["clojars" {:url "https://clojars.org/repo" :username :env/clojars_user :password :env/clojars_pass diff --git a/resources/META-INF/native-image/babashka/process/reflect-config.json b/resources/META-INF/native-image/babashka/process/reflect-config.json new file mode 100644 index 0000000..b18b59d --- /dev/null +++ b/resources/META-INF/native-image/babashka/process/reflect-config.json @@ -0,0 +1,4 @@ +[ { + "name" : "org.graalvm.nativeimage.ProcessProperties", + "methods": [{"name": "exec"}] +} ] From ae4ca27278744eb0baf6b1a904c334b470cd12ee Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sun, 29 Jun 2025 14:30:44 +0200 Subject: [PATCH 3/3] add dev build --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab75098..c9b6886 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,6 +45,14 @@ jobs: java -version bb --version + - name: 🔧 Install bb from dev build (until next release) + shell: bash + run: | + curl -sLO https://raw.githubusercontent.com/babashka/babashka/master/install + chmod +x ./install + ./install --dev-build --dir /tmp + cp /tmp/bb "$(which bb)" + - name: Run bb tests run: | bb test:bb