diff --git a/.circleci/config.yml b/.circleci/config.yml index e227a151..529b4252 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -70,7 +70,7 @@ jobs: working_directory: ~/repo environment: LEIN_ROOT: "true" - GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.1.0 + GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.2.0 BABASHKA_PLATFORM: linux # used in release script BABASHKA_TEST_ENV: native BABASHKA_XMX: "-J-Xmx6500m" @@ -104,9 +104,9 @@ jobs: name: Download GraalVM command: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz fi - run: name: Build binary @@ -126,7 +126,7 @@ jobs: - save_cache: paths: - ~/.m2 - - ~/graalvm-ce-java11-20.1.0 + - ~/graalvm-ce-java11-20.2.0 key: linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }} - store_artifacts: path: /tmp/release @@ -141,7 +141,7 @@ jobs: working_directory: ~/repo environment: LEIN_ROOT: "true" - GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.1.0 + GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.2.0 BABASHKA_PLATFORM: linux-static # used in release script BABASHKA_TEST_ENV: native BABASHKA_STATIC: true @@ -176,9 +176,9 @@ jobs: name: Download GraalVM command: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz fi - run: name: Build binary @@ -198,7 +198,7 @@ jobs: - save_cache: paths: - ~/.m2 - - ~/graalvm-ce-java11-20.1.0 + - ~/graalvm-ce-java11-20.2.0 key: linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }} - store_artifacts: path: /tmp/release @@ -209,9 +209,9 @@ jobs: ./bb .circleci/script/publish_artifact.clj mac: macos: - xcode: "9.4.1" + xcode: "12.0.0" environment: - GRAALVM_HOME: /Users/distiller/graalvm-ce-java11-20.1.0/Contents/Home + GRAALVM_HOME: /Users/distiller/graalvm-ce-java11-20.2.0/Contents/Home BABASHKA_PLATFORM: macos # used in release script BABASHKA_TEST_ENV: native BABASHKA_XMX: "-J-Xmx6500m" @@ -239,9 +239,9 @@ jobs: command: | cd ~ ls -la - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-darwin-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-darwin-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-darwin-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-darwin-amd64-20.2.0.tar.gz fi - run: name: Build binary @@ -263,7 +263,7 @@ jobs: - save_cache: paths: - ~/.m2 - - ~/graalvm-ce-java11-20.1.0 + - ~/graalvm-ce-java11-20.2.0 key: mac-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }} - store_artifacts: path: /tmp/release diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1c14256..1ce38b10 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,17 +44,17 @@ jobs: uses: actions/cache@v1 id: cache-graalvm with: - path: ~/graalvm-ce-java11-20.1.0 - key: ${{ runner.os }}-graalvm-20.1.0 + path: ~/graalvm-ce-java11-20.2.0 + key: ${{ runner.os }}-graalvm-20.2.0 restore-keys: | - ${{ runner.os }}-graalvm-20.1.0 + ${{ runner.os }}-graalvm-20.2.0 - name: Download GraalVM run: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz fi - name: Fetch deps @@ -64,18 +64,18 @@ jobs: - name: Run tests run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" script/test - name: Test libraries run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" sudo script/install-clojure script/run_lib_tests - name: Build uberjar run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" script/uberjar - name: Babashka version @@ -132,17 +132,17 @@ jobs: uses: actions/cache@v1 id: cache-graalvm with: - path: ~/graalvm-ce-java11-20.1.0 - key: ${{ runner.os }}-graalvm-20.1.0 + path: ~/graalvm-ce-java11-20.2.0 + key: ${{ runner.os }}-graalvm-20.2.0 restore-keys: | - ${{ runner.os }}-graalvm-20.1.0 + ${{ runner.os }}-graalvm-20.2.0 - name: Download GraalVM run: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz fi - name: Babashka version @@ -155,13 +155,13 @@ jobs: run: | export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar export BABASHKA_XMX="-J-Xmx6g" - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json script/compile - name: Test binary run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" BABASHKA_TEST_ENV=native script/test - name: Install clojure @@ -170,7 +170,7 @@ jobs: - name: Test libraries run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" BABASHKA_TEST_ENV=native script/run_lib_tests - uses: actions/upload-artifact@v1 @@ -212,17 +212,17 @@ jobs: uses: actions/cache@v1 id: cache-graalvm with: - path: ~/graalvm-ce-java11-20.1.0 - key: ${{ runner.os }}-graalvm-20.1.0 + path: ~/graalvm-ce-java11-20.2.0 + key: ${{ runner.os }}-graalvm-20.2.0 restore-keys: | - ${{ runner.os }}-graalvm-20.1.0 + ${{ runner.os }}-graalvm-20.2.0 - name: Download GraalVM run: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz fi - name: Babashka version @@ -235,7 +235,7 @@ jobs: run: | export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar export BABASHKA_XMX="-J-Xmx6g" - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" export BABASHKA_STATIC=true cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json script/compile @@ -243,7 +243,7 @@ jobs: - name: Test binary run: | ./bb '(+ 1 2 3)' - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" BABASHKA_TEST_ENV=native script/test - name: Install clojure @@ -252,7 +252,7 @@ jobs: - name: Test libraries run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0" BABASHKA_TEST_ENV=native script/run_lib_tests - uses: actions/upload-artifact@v1 @@ -285,17 +285,17 @@ jobs: uses: actions/cache@v1 id: cache-graalvm with: - path: ~/graalvm-ce-java11-20.1.0 - key: ${{ runner.os }}-graalvm-20.1.0 + path: ~/graalvm-ce-java11-20.2.0 + key: ${{ runner.os }}-graalvm-20.2.0 restore-keys: | - ${{ runner.os }}-graalvm-20.1.0 + ${{ runner.os }}-graalvm-20.2.0 - name: Download GraalVM run: | cd ~ - if ! [ -d graalvm-ce-java11-20.1.0 ]; then - curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-darwin-amd64-20.1.0.tar.gz - tar xzf graalvm-ce-java11-darwin-amd64-20.1.0.tar.gz + if ! [ -d graalvm-ce-java11-20.2.0 ]; then + curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-darwin-amd64-20.2.0.tar.gz + tar xzf graalvm-ce-java11-darwin-amd64-20.2.0.tar.gz fi - name: Babashka version @@ -308,19 +308,19 @@ jobs: run: | export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar export BABASHKA_XMX="-J-Xmx6g" - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0/Contents/Home" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0/Contents/Home" cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json script/compile - name: Test binary run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0/Contents/Home" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0/Contents/Home" sudo script/install-leiningen BABASHKA_TEST_ENV=native script/test - name: Test libraries run: | - export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.1.0/Contents/Home" + export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.2.0/Contents/Home" sudo script/install-clojure BABASHKA_TEST_ENV=native script/run_lib_tests diff --git a/Dockerfile b/Dockerfile index 26a9a33a..011f3162 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,11 +4,11 @@ ARG BABASHKA_XMX="-J-Xmx3g" RUN apt update RUN apt install --no-install-recommends -yy curl unzip build-essential zlib1g-dev WORKDIR "/opt" -RUN curl -sLO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz -RUN tar -xzf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz +RUN curl -sLO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz +RUN tar -xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz -ENV GRAALVM_HOME="/opt/graalvm-ce-java11-20.1.0" -ENV JAVA_HOME="/opt/graalvm-ce-java11-20.1.0/bin" +ENV GRAALVM_HOME="/opt/graalvm-ce-java11-20.2.0" +ENV JAVA_HOME="/opt/graalvm-ce-java11-20.2.0/bin" ENV PATH="$JAVA_HOME:$PATH" ENV BABASHKA_STATIC="true" ENV BABASHKA_XMX=$BABASHKA_XMX diff --git a/appveyor.yml b/appveyor.yml index ec3c342a..d628701f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ image: Visual Studio 2017 clone_folder: C:\projects\babashka environment: - GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-ce-java11-20.1.0 + GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-ce-java11-20.2.0 BABASHKA_XMX: "-J-Xmx5g" cache: @@ -44,7 +44,7 @@ build_script: - cmd: >- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" - powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-windows-amd64-20.1.0.zip', 'graalvm.zip') }" + powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-windows-amd64-20.2.0.zip', 'graalvm.zip') }" powershell -Command "if (Test-Path('graalvm')) { return } else { Expand-Archive graalvm.zip graalvm }" diff --git a/deps.edn b/deps.edn index 75b3c3a6..f7c00f52 100644 --- a/deps.edn +++ b/deps.edn @@ -1,6 +1,7 @@ {:paths ["src" "feature-xml" "feature-core-async" "feature-yaml" "feature-csv" "feature-transit" "feature-java-time" "feature-java-nio" + "feature-httpkit-client" "sci/src" "babashka.curl/src" "babashka.pods/src" "babashka.nrepl/src" "depstar/src" @@ -22,7 +23,8 @@ seancorfield/next.jdbc {:mvn/version "1.0.424"} org.postgresql/postgresql {:mvn/version "42.2.12"} org.hsqldb/hsqldb {:mvn/version "2.4.0"} - datascript/datascript {:mvn/version "0.18.11"}} + datascript/datascript {:mvn/version "0.18.11"} + http-kit/http-kit {:mvn/version "2.5.0"}} :aliases {:main {:main-opts ["-m" "babashka.main"]} :profile diff --git a/doc/dev.md b/doc/dev.md index 2a087d91..352e9031 100644 --- a/doc/dev.md +++ b/doc/dev.md @@ -1,6 +1,6 @@ # Developing Babashka -You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use java11-20.1.0. +You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use java11-20.2.0. ## Clone repository diff --git a/feature-httpkit-client/babashka/impl/httpkit_client.clj b/feature-httpkit-client/babashka/impl/httpkit_client.clj new file mode 100644 index 00000000..bf623f6a --- /dev/null +++ b/feature-httpkit-client/babashka/impl/httpkit_client.clj @@ -0,0 +1,44 @@ +(ns babashka.impl.httpkit-client + {:no-doc true} + (:require [org.httpkit.client :as client] + [org.httpkit.sni-client :as sni-client] + [sci.core :as sci :refer [copy-var]])) + +(def sni-client (delay (client/make-client {:ssl-configurer sni-client/ssl-configurer}))) + +(def sns (sci/create-ns 'org.httpkit.server nil)) +(def cns (sci/create-ns 'org.httpkit.client nil)) + +(def default-client (sci/new-dynamic-var '*default-client* sni-client {:ns cns})) + +(defn request + ([req] + (binding [client/*default-client* @default-client] + (client/request req))) + ([req cb] + (binding [client/*default-client* @default-client] + (client/request req cb)))) + +(def httpkit-client-namespace + {'request (sci/new-var 'request request {:doc (:doc (meta #'client/request)) + :ns cns}) + 'get (copy-var client/get cns) + 'options (copy-var client/options cns) + 'put (copy-var client/put cns) + 'lock (copy-var client/lock cns) + 'report (copy-var client/report cns) + 'proppatch (copy-var client/proppatch cns) + 'copy (copy-var client/copy cns) + 'patch (copy-var client/patch cns) + 'make-ssl-engine (copy-var client/make-ssl-engine cns) + 'move (copy-var client/move cns) + 'delete (copy-var client/delete cns) + 'make-client (copy-var client/make-client cns) + 'head (copy-var client/head cns) + 'propfind (copy-var client/propfind cns) + 'max-body-filter (copy-var client/max-body-filter cns) + 'post (copy-var client/post cns) + 'acl (copy-var client/acl cns) + 'unlock (copy-var client/unlock cns) + 'default-client (copy-var client/default-client cns) + '*default-client* default-client}) diff --git a/project.clj b/project.clj index f6c80bda..156d343b 100644 --- a/project.clj +++ b/project.clj @@ -38,6 +38,10 @@ :dependencies [[com.cognitect/transit-clj "1.0.324"]]} :feature/datascript {:source-paths ["feature-datascript"] :dependencies [[datascript "0.18.11"]]} + :feature/httpkit-client {:source-paths ["feature-httpkit-client"] + :dependencies [[http-kit "2.5.0"]]} + :feature/httpkit-server {:source-paths ["feature-httpkit-server"] + :dependencies [[http-kit "2.5.0"]]} :test [:feature/xml :feature/yaml :feature/postgresql @@ -46,6 +50,8 @@ :feature/csv :feature/transit :feature/datascript + :feature/httpkit-client + :feature/httpkit-server {:dependencies [[clj-commons/conch "0.9.2"] [com.clojure-goes-fast/clj-async-profiler "0.4.1"] [com.opentable.components/otj-pg-embedded "0.13.3"]]}] @@ -54,7 +60,7 @@ "-Dclojure.spec.skip-macros=true"] :main babashka.main :aot :all} - :native-image {:dependencies [[borkdude/clj-reflector-graal-java11-fix "0.0.1-graalvm-20.1.0"]]} + :native-image {:dependencies [[borkdude/clj-reflector-graal-java11-fix "0.0.1-graalvm-20.2.0"]]} :reflection {:main babashka.impl.classes/generate-reflection-file}} :aliases {"bb" ["with-profile" "test" "run" "-m" "babashka.main"]} :deploy-repositories [["clojars" {:url "https://clojars.org/repo" diff --git a/script/bump_graal_version.clj b/script/bump_graal_version.clj index eeaf73fd..5e0a0b0b 100755 --- a/script/bump_graal_version.clj +++ b/script/bump_graal_version.clj @@ -41,7 +41,8 @@ "doc/dev.md" ".github/workflows/build.yml" ".circleci/config.yml" - "appveyor.yml"]) + "appveyor.yml" + "project.clj"]) ;; We might have to keep changing these from ;; time to time whenever the version is bumped @@ -51,7 +52,7 @@ ;; We could have them as environment variables (def current-graal-version "20.1.0") (def current-java-version "java11") -(def valid-graal-bumps ["19.3.2" "20.1.0"]) +(def valid-graal-bumps ["19.3.2" "20.1.0" "20.2.0"]) (def valid-java-bumps ["java8" "java11"]) (def cl-options diff --git a/script/compile b/script/compile index 35b14bb5..f13b067d 100755 --- a/script/compile +++ b/script/compile @@ -82,6 +82,7 @@ then export BABAHSKA_FEATURE_TRANSIT=false export BABASHKA_FEATURE_JAVA_TIME=false export BABASHKA_FEATURE_JAVA_NIO=false + export BABASHKA_FEATURE_HTTPKIT_CLIENT=false fi "$GRAALVM_HOME/bin/native-image" "${args[@]}" diff --git a/script/uberjar b/script/uberjar index 4ee17f13..9f19360d 100755 --- a/script/uberjar +++ b/script/uberjar @@ -22,6 +22,7 @@ then export BABAHSKA_FEATURE_TRANSIT=false export BABASHKA_FEATURE_JAVA_TIME=false export BABASHKA_FEATURE_JAVA_NIO=false + export BABASHKA_FEATURE_HTTPKIT_CLIENT=false fi BABASHKA_LEIN_PROFILES="+uberjar" @@ -89,6 +90,13 @@ else BABASHKA_LEIN_PROFILES+=",-feature/datascript" fi +if [ "$BABASHKA_FEATURE_HTTPKIT_CLIENT" != "false" ] +then + BABASHKA_LEIN_PROFILES+=",+feature/httpkit-client" +else + BABASHKA_LEIN_PROFILES+=",-feature/httpkit-client" +fi + if [ -z "$BABASHKA_JAR" ]; then lein with-profiles "$BABASHKA_LEIN_PROFILES,+reflection,-uberjar" do run lein with-profiles "$BABASHKA_LEIN_PROFILES" do clean, uberjar diff --git a/script/uberjar.bat b/script/uberjar.bat index b3b198b4..4866e189 100755 --- a/script/uberjar.bat +++ b/script/uberjar.bat @@ -64,6 +64,12 @@ if "%BABASHKA_FEATURE_DATASCRIPT%"=="true" ( set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/datascript ) +if not "%BABASHKA_FEATURE_HTTPKIT_CLIENT%"=="false" ( +set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,+feature/httpkit-client +) else ( +set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/httpkit-client +) + call lein with-profiles %BABASHKA_LEIN_PROFILES% bb "(+ 1 2 3)" call lein with-profiles %BABASHKA_LEIN_PROFILES%,+reflection,-uberjar do run diff --git a/src/babashka/impl/features.clj b/src/babashka/impl/features.clj index 6f48bff8..5c7c478c 100644 --- a/src/babashka/impl/features.clj +++ b/src/babashka/impl/features.clj @@ -2,13 +2,14 @@ {:no-doc true}) ;; included by default -(def yaml? (not= "false" (System/getenv "BABASHKA_FEATURE_YAML"))) -(def xml? (not= "false" (System/getenv "BABASHKA_FEATURE_XML"))) -(def core-async? (not= "false" (System/getenv "BABASHKA_FEATURE_CORE_ASYNC"))) -(def csv? (not= "false" (System/getenv "BABASHKA_FEATURE_CSV"))) -(def transit? (not= "false" (System/getenv "BABASHKA_FEATURE_TRANSIT"))) -(def java-time? (not= "false" (System/getenv "BABASHKA_FEATURE_JAVA_TIME"))) -(def java-nio? (not= "false" (System/getenv "BABASHKA_FEATURE_JAVA_NIO"))) +(def yaml? (not= "false" (System/getenv "BABASHKA_FEATURE_YAML"))) +(def xml? (not= "false" (System/getenv "BABASHKA_FEATURE_XML"))) +(def core-async? (not= "false" (System/getenv "BABASHKA_FEATURE_CORE_ASYNC"))) +(def csv? (not= "false" (System/getenv "BABASHKA_FEATURE_CSV"))) +(def transit? (not= "false" (System/getenv "BABASHKA_FEATURE_TRANSIT"))) +(def java-time? (not= "false" (System/getenv "BABASHKA_FEATURE_JAVA_TIME"))) +(def java-nio? (not= "false" (System/getenv "BABASHKA_FEATURE_JAVA_NIO"))) +(def httpkit-client? (not= "false" (System/getenv "BABASHKA_FEATURE_HTTPKIT_CLIENT"))) ;; excluded by default (def jdbc? (= "true" (System/getenv "BABASHKA_FEATURE_JDBC"))) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index ed7bc57c..677826ac 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -81,6 +81,9 @@ (when features/datascript? (require '[babashka.impl.datascript])) +(when features/httpkit-client? + (require '[babashka.impl.httpkit-client])) + (sci/alter-var-root sci/in (constantly *in*)) (sci/alter-var-root sci/out (constantly *out*)) (sci/alter-var-root sci/err (constantly *err*)) @@ -282,7 +285,8 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that :feature/yaml %s :feature/jdbc %s :feature/postgresql %s - :feature/hsqldb %s}") + :feature/hsqldb %s + :feature/httpkit-client %s}") version features/core-async? features/csv? @@ -292,7 +296,8 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that features/yaml? features/jdbc? features/postgresql? - features/hsqldb?))) + features/hsqldb? + features/httpkit-client?))) (defn read-file [file] (let [f (io/file file)] @@ -397,7 +402,8 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that 'clojure.core.async.impl.protocols @(resolve 'babashka.impl.async/async-protocols-namespace)) features/csv? (assoc 'clojure.data.csv @(resolve 'babashka.impl.csv/csv-namespace)) features/transit? (assoc 'cognitect.transit @(resolve 'babashka.impl.transit/transit-namespace)) - features/datascript? (assoc 'datascript.core @(resolve 'babashka.impl.datascript/datascript-namespace)))) + features/datascript? (assoc 'datascript.core @(resolve 'babashka.impl.datascript/datascript-namespace)) + features/httpkit-client? (assoc 'org.httpkit.client @(resolve 'babashka.impl.httpkit-client/httpkit-client-namespace)))) (def bindings {'java.lang.System/exit exit ;; override exit, so we have more control