From 707746273ea8b5e334b9f2fbed7a613d2675baba Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:36:44 +0200 Subject: [PATCH 01/13] Fix *e integration test regex to handle jline control characters The jline terminal echoes input with control characters (backspace, cursor movement) between the prompt and output, so the regex needs dotall mode and a wildcard to match across them. --- test/reply/integration_test.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/reply/integration_test.clj b/test/reply/integration_test.clj index ed12611..4fc47e5 100644 --- a/test/reply/integration_test.clj +++ b/test/reply/integration_test.clj @@ -77,7 +77,7 @@ :output-stream out}) (t/is (= "" (str err))) (t/is (re-find #"Unmatched delimiter" (str out))) - (t/is (re-find #"user=> #error" (str out))))) + (t/is (re-find #"(?s)user=>.*#error" (str out))))) (with-out-err [out err] (t/testing "does not print an error when given empty input lines" From 6bde7047c8d3a1da4b78c9e687e8945eb2c0245b Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:54:07 +0200 Subject: [PATCH 02/13] Bump minimum Clojure to 1.8 and add version profiles for CI matrix Add Lein profiles for Clojure 1.8-1.12 to support testing across multiple versions. --- project.clj | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/project.clj b/project.clj index dd784e8..9be919c 100644 --- a/project.clj +++ b/project.clj @@ -1,10 +1,9 @@ (defproject reply "0.6.0-SNAPSHOT" :description "REPL-y: A fitter, happier, more productive REPL for Clojure." - :dependencies [[org.clojure/clojure "1.7.0"] + :dependencies [[org.clojure/clojure "1.8.0"] [jline "2.14.6"] [clj-stacktrace "0.2.8"] [nrepl "0.8.3"] - ;; tools.cli 1.0 requires Clojure 1.8 [org.clojure/tools.cli "0.3.1"] [nrepl/drawbridge "0.2.1"] [trptcolin/versioneer "0.1.1"] @@ -18,7 +17,14 @@ :url "http://www.eclipse.org/legal/epl-v10.html"} :url "https://github.com/trptcolin/reply" :profiles {:dev {:dependencies [[classlojure "0.6.6"]]} - :base {:dependencies []}} + :base {:dependencies []} + ;; Clojure versions matrix + :provided {:dependencies [[org.clojure/clojure "1.12.4"]]} + :1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]} + :1.9 {:dependencies [[org.clojure/clojure "1.9.0"]]} + :1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]} + :1.11 {:dependencies [[org.clojure/clojure "1.11.4"]]} + :1.12 {:dependencies [[org.clojure/clojure "1.12.4"]]}} :javac-options ["-target" "8" "-source" "8" "-Xlint:-options"] ;; :jvm-opts ["-Djline.internal.Log.trace=true"] :aot [reply.reader.jline.JlineInputReader] From c78dd407695857f5b44ad62d52d51cd05b3c1926 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:54:27 +0200 Subject: [PATCH 03/13] Switch CI from CircleCI to GitHub Actions Test across JDK 8, 11, 17, 21, 25 with Clojure 1.8-1.12 on JDK 8 and 1.10-1.12 on JDK 25. --- .circleci/config.yml | 54 -------------------------------------- .github/workflows/test.yml | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 54 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/test.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 137bc41..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,54 +0,0 @@ -# -*- js -*- -{ - "version": 2.1, - "executors": { - "clojure": { - "docker": [{"image": "clojure:<< parameters.java_version >>"}], - "parameters": { - "java_version": { - "description": "Java version", - "default": "temurin-25-lein", - "type": "string" - } - }, - "working_directory": "~/leiningen" - } - }, - "jobs": { - "build": { - "executor": "clojure", - "parameters": { - "java_version": { - "description": "Java version", - "default": "<< parameters.java_version >>", - "type": "string" - } - }, - "steps": [ - "checkout", - { - "restore_cache": { - "key": "reply-{{ checksum \"project.clj\" }}" - } - }, - { - "run": "lein test" - }, - { - "save_cache": { - "paths": ["~/.m2/repository"], - "key": "reply-{{ checksum \"project.clj\" }}" - } - } - ] - } - }, - "workflows": { - "test-with-matrix": { - "jobs": [ - {"build": {"name": "openjdk8", "java_version": "openjdk-8-lein"}}, - {"build": {"name": "temurin", "java_version": "temurin-25-lein"}}, - ] - } - } -} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..50d5947 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,49 @@ +name: Tests + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + java-version: [8, 11, 17, 21, 25] + clojure-version: ["1.12"] + include: + - java-version: 8 + clojure-version: "1.8" + - java-version: 8 + clojure-version: "1.9" + - java-version: 8 + clojure-version: "1.10" + - java-version: 8 + clojure-version: "1.11" + - java-version: 25 + clojure-version: "1.10" + - java-version: 25 + clojure-version: "1.11" + name: JDK ${{ matrix.java-version }}, Clojure ${{ matrix.clojure-version }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{ matrix.java-version }} + + - uses: DeLaGuardo/setup-clojure@13.4 + with: + lein: 2.11.2 + + - uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: m2-${{ matrix.java-version }}-${{ matrix.clojure-version }}-${{ hashFiles('project.clj') }} + restore-keys: m2-${{ matrix.java-version }}-${{ matrix.clojure-version }}- + + - run: lein with-profile +${{ matrix.clojure-version }} test From c7aecf146bcb1f1f1c73fe8c2efe3d44e3b7113a Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:58:12 +0200 Subject: [PATCH 04/13] Bump nrepl from 0.8.3 to 1.5.2 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 9be919c..0fa10e4 100644 --- a/project.clj +++ b/project.clj @@ -3,7 +3,7 @@ :dependencies [[org.clojure/clojure "1.8.0"] [jline "2.14.6"] [clj-stacktrace "0.2.8"] - [nrepl "0.8.3"] + [nrepl "1.5.2"] [org.clojure/tools.cli "0.3.1"] [nrepl/drawbridge "0.2.1"] [trptcolin/versioneer "0.1.1"] From 586cf53c507a35b366d72d87b8c9779f21d06fd5 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:58:27 +0200 Subject: [PATCH 05/13] Bump tools.cli from 0.3.1 to 1.3.250 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 0fa10e4..7452e23 100644 --- a/project.clj +++ b/project.clj @@ -4,7 +4,7 @@ [jline "2.14.6"] [clj-stacktrace "0.2.8"] [nrepl "1.5.2"] - [org.clojure/tools.cli "0.3.1"] + [org.clojure/tools.cli "1.3.250"] [nrepl/drawbridge "0.2.1"] [trptcolin/versioneer "0.1.1"] [org.nrepl/incomplete "0.1.0"] From 3fa2ff1e8674364534f9df11117d2fec1007abfd Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:58:45 +0200 Subject: [PATCH 06/13] Bump drawbridge from 0.2.1 to 0.3.0 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 7452e23..a11d0f8 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ [clj-stacktrace "0.2.8"] [nrepl "1.5.2"] [org.clojure/tools.cli "1.3.250"] - [nrepl/drawbridge "0.2.1"] + [nrepl/drawbridge "0.3.0"] [trptcolin/versioneer "0.1.1"] [org.nrepl/incomplete "0.1.0"] [org.clojars.trptcolin/sjacket "0.1.1.1" From 3454c472d5ff342e39347daa224588c87ee5c28c Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:59:04 +0200 Subject: [PATCH 07/13] Bump versioneer from 0.1.1 to 0.2.0 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index a11d0f8..7c5ad9a 100644 --- a/project.clj +++ b/project.clj @@ -6,7 +6,7 @@ [nrepl "1.5.2"] [org.clojure/tools.cli "1.3.250"] [nrepl/drawbridge "0.3.0"] - [trptcolin/versioneer "0.1.1"] + [trptcolin/versioneer "0.2.0"] [org.nrepl/incomplete "0.1.0"] [org.clojars.trptcolin/sjacket "0.1.1.1" :exclusions [org.clojure/clojure]] From 45c2824100e46994144b2f531034182c3da2fd29 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 08:59:23 +0200 Subject: [PATCH 08/13] Bump sjacket from 0.1.1.1 to 0.1.4 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 7c5ad9a..68b4ae3 100644 --- a/project.clj +++ b/project.clj @@ -8,7 +8,7 @@ [nrepl/drawbridge "0.3.0"] [trptcolin/versioneer "0.2.0"] [org.nrepl/incomplete "0.1.0"] - [org.clojars.trptcolin/sjacket "0.1.1.1" + [org.clojars.trptcolin/sjacket "0.1.4" :exclusions [org.clojure/clojure]] ;; bump transitive dep to avoid compatibility warning [net.cgrand/parsley "0.9.3" :exclusions [org.clojure/clojure]]] From b02129fe40f1625952d661403fdc3efc8f93463e Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 09:10:48 +0200 Subject: [PATCH 09/13] Remove javac-options since there are no more Java sources --- project.clj | 1 - 1 file changed, 1 deletion(-) diff --git a/project.clj b/project.clj index 68b4ae3..ff52ca4 100644 --- a/project.clj +++ b/project.clj @@ -25,7 +25,6 @@ :1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]} :1.11 {:dependencies [[org.clojure/clojure "1.11.4"]]} :1.12 {:dependencies [[org.clojure/clojure "1.12.4"]]}} - :javac-options ["-target" "8" "-source" "8" "-Xlint:-options"] ;; :jvm-opts ["-Djline.internal.Log.trace=true"] :aot [reply.reader.jline.JlineInputReader] :main ^{:skip-aot true} reply.main From ffb2cd939c6ef493fc0f2c3834a327ceb963a010 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 09:11:09 +0200 Subject: [PATCH 10/13] Update integration test jars to nREPL 1.5.2 and Clojure 1.8.0 --- test/reply/integration_test.clj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/reply/integration_test.clj b/test/reply/integration_test.clj index 4fc47e5..bc859f1 100644 --- a/test/reply/integration_test.clj +++ b/test/reply/integration_test.clj @@ -14,12 +14,12 @@ ;; TODO: this is easy but seems like wasted effort ;; probably better to use pomegranate (def nrepl - {:local-path "spec/nrepl-0.8.3.jar" - :remote-url "https://clojars.org/repo/nrepl/nrepl/0.8.3/nrepl-0.8.3.jar"}) + {:local-path "spec/nrepl-1.5.2.jar" + :remote-url "https://clojars.org/repo/nrepl/nrepl/1.5.2/nrepl-1.5.2.jar"}) (def clojure - {:local-path "spec/clojure-1.7.0.jar" - :remote-url "https://repo1.maven.org/maven2/org/clojure/clojure/1.7.0/clojure-1.7.0.jar"}) + {:local-path "spec/clojure-1.8.0.jar" + :remote-url "https://repo1.maven.org/maven2/org/clojure/clojure/1.8.0/clojure-1.8.0.jar"}) (defn ensure-test-jar [{:keys [local-path remote-url]}] (let [file (java.io.File. local-path)] From 7ca8fa364558ae777f3ad4b2fd4d175faa49a771 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 09:11:32 +0200 Subject: [PATCH 11/13] Remove pre-1.2 clojure.repl compatibility check pst, doc, and find-doc are guaranteed to be in clojure.repl since well before our minimum Clojure 1.8. --- src/reply/initialization.clj | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/reply/initialization.clj b/src/reply/initialization.clj index 20c8bf4..21fd19c 100644 --- a/src/reply/initialization.clj +++ b/src/reply/initialization.clj @@ -114,10 +114,7 @@ `(do ~@prelude - (use '[clojure.repl :only ~'[source apropos dir]]) - ; doc and find-doc live in clojure.core in 1.2 - (when (ns-resolve '~'clojure.repl '~'pst) - (refer 'clojure.repl :only '~'[pst doc find-doc])) + (use '[clojure.repl :only ~'[source apropos dir pst doc find-doc]]) (use '[clojure.java.javadoc :only ~'[javadoc]]) (use '[clojure.pprint :only ~'[pp pprint]]) From ad78fbf3bc87f7e95c4c620b35f207dbf869d2da Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 09:11:48 +0200 Subject: [PATCH 12/13] Update README CI badge to GitHub Actions and copyright year --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1362536..cf891f2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![CircleCI](https://circleci.com/gh/trptcolin/reply/tree/main.svg?style=svg)](https://circleci.com/gh/trptcolin/reply/tree/main) +[![Tests](https://github.com/trptcolin/reply/actions/workflows/test.yml/badge.svg)](https://github.com/trptcolin/reply/actions/workflows/test.yml) [![Clojars Project](https://img.shields.io/clojars/v/reply/reply.svg)](https://clojars.org/reply/reply) [![cljdoc badge](https://cljdoc.org/badge/reply/reply)](https://cljdoc.org/d/reply/reply/CURRENT) [![downloads badge](https://versions.deps.co/reply/reply/downloads.svg)](https://clojars.org/reply/reply) @@ -102,7 +102,7 @@ this during our open-source Friday afternoons. ## License -Copyright (C) 2011-2021 Colin Jones +Copyright (C) 2011-2026 Colin Jones Distributed under the Eclipse Public License, the same as Clojure. See the LICENSE file for details. From 4e53fddedeec5085de08f582ff6c2726db73c795 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 23 Feb 2026 09:12:03 +0200 Subject: [PATCH 13/13] Bump min-lein-version from 2.0.0 to 2.9.1 --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index ff52ca4..6215a10 100644 --- a/project.clj +++ b/project.clj @@ -12,7 +12,7 @@ :exclusions [org.clojure/clojure]] ;; bump transitive dep to avoid compatibility warning [net.cgrand/parsley "0.9.3" :exclusions [org.clojure/clojure]]] - :min-lein-version "2.0.0" + :min-lein-version "2.9.1" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :url "https://github.com/trptcolin/reply"