[Git][clojure-team/trapperkeeper-webserver-jetty9-clojure][upstream] New upstream version 4.5.2
Jérôme Charaoui (@lavamind)
gitlab at salsa.debian.org
Sun Feb 18 00:57:36 GMT 2024
Jérôme Charaoui pushed to branch upstream at Debian Clojure Maintainers / trapperkeeper-webserver-jetty9-clojure
Commits:
433e198b by Jérôme Charaoui at 2024-02-16T23:48:47-05:00
New upstream version 4.5.2
- - - - -
14 changed files:
- + .github/workflows/lein-test.yaml
- + .github/workflows/mend.yaml
- − .github/workflows/snyk_merge.yaml
- − .travis.yml
- CHANGELOG.md
- README.md
- project.clj
- src/puppetlabs/trapperkeeper/services/webrouting/webrouting_service_core.clj
- + src/puppetlabs/trapperkeeper/services/webserver/jetty9.clj
- src/puppetlabs/trapperkeeper/services/webserver/jetty9_core.clj
- test/clj/puppetlabs/trapperkeeper/services/webrouting/webrouting_service_handlers_test.clj
- test/clj/puppetlabs/trapperkeeper/services/webserver/jetty9_core_test.clj
- test/clj/puppetlabs/trapperkeeper/services/webserver/jetty9_service_test.clj
- test/clj/puppetlabs/trapperkeeper/testutils/webserver.clj
Changes:
=====================================
.github/workflows/lein-test.yaml
=====================================
@@ -0,0 +1,41 @@
+name: lein_test
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+ paths: ['src/**','test/**']
+ pull_request:
+ types: [opened, reopened, edited, synchronize]
+ paths: ['src/**','test/**']
+
+jobs:
+ run-lein-tests:
+ name: lein test - Java ${{ matrix.java }}
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ java: [ '8', '11', '17' ]
+ steps:
+ - name: Check out repository code
+ uses: actions/checkout at v3
+ - name: Setup java
+ uses: actions/setup-java at v3
+ with:
+ distribution: temurin
+ java-version: ${{ matrix.java }}
+ - name: Install Clojure tools
+ uses: DeLaGuardo/setup-clojure at 10.2
+ with:
+ cli: latest # Clojure CLI based on tools.deps
+ lein: latest # Leiningen
+ boot: latest # Boot.clj
+ bb: latest # Babashka
+ clj-kondo: latest # Clj-kondo
+ cljstyle: latest # cljstyle
+ zprint: latest # zprint
+ - name: Run lein tests with dev test profile
+ run: lein with-profile dev test
+ - name: Run lein tests with pseudo-dev, fips profiles
+ run: lein with-profile pseudo-dev,fips test
=====================================
.github/workflows/mend.yaml
=====================================
@@ -0,0 +1,55 @@
+name: mend_scan
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: connect_twingate
+ uses: twingate/github-action at v1
+ with:
+ service-key: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
+ - name: checkout repo content
+ uses: actions/checkout at v2 # checkout the repository content to github runner.
+ with:
+ fetch-depth: 1
+ # install java which is required for mend and clojure
+ - name: setup java
+ uses: actions/setup-java at v3
+ with:
+ distribution: temurin
+ java-version: 17
+ # install clojure tools
+ - name: Install Clojure tools
+ uses: DeLaGuardo/setup-clojure at 10.1
+ with:
+ # Install just one or all simultaneously
+ # The value must indicate a particular version of the tool, or use 'latest'
+ # to always provision the latest version
+ cli: latest # Clojure CLI based on tools.deps
+ lein: latest # Leiningen
+ boot: latest # Boot.clj
+ bb: latest # Babashka
+ clj-kondo: latest # Clj-kondo
+ cljstyle: latest # cljstyle
+ zprint: latest # zprint
+ # run lein gen
+ - name: create pom.xml
+ run: lein pom
+ # download mend
+ - name: download_mend
+ run: curl -o wss-unified-agent.jar https://unified-agent.s3.amazonaws.com/wss-unified-agent.jar
+ - name: run mend
+ run: env WS_INCLUDES=pom.xml java -jar wss-unified-agent.jar
+ env:
+ WS_APIKEY: ${{ secrets.MEND_API_KEY }}
+ WS_WSS_URL: https://saas-eu.whitesourcesoftware.com/agent
+ WS_USERKEY: ${{ secrets.MEND_TOKEN }}
+ WS_PRODUCTNAME: Puppet Enterprise
+ WS_PROJECTNAME: ${{ github.event.repository.name }}
+ WS_FILESYSTEMSCAN: true
+ WS_CHECKPOLICIES: true
+ WS_FORCEUPDATE: true
=====================================
.github/workflows/snyk_merge.yaml deleted
=====================================
@@ -1,29 +0,0 @@
----
-name: Snyk Clojure Merge
-
-on: push
-
-jobs:
- snyk_clojure:
- runs-on: ubuntu-latest
- steps:
- - name: Connect to Twingate
- uses: twingate/github-action at v1
- with:
- service-key: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
- - name: checkout the current HEAD
- uses: actions/checkout at v2
- with:
- fetch-depth: 1
- persist-credentials: false
- - name: Run Clojure Snyk Scan
- id: scan
- uses: puppetlabs/security-snyk-clojure-action at v2
- with:
- snykToken: ${{ secrets.SNYK_PE_TOKEN }}
- snykOrg: 'puppet-enterprise'
- snykProject: 'trapperkeeper-webserver-jetty9'
- snykPolicy: '.snyk'
- - name: Check output
- if: steps.scan.outputs.vulns != ''
- run: echo "Vulnerabilities detected; ${{ steps.scan.outputs.vulns }}" && exit 1
=====================================
.travis.yml deleted
=====================================
@@ -1,29 +0,0 @@
-language: clojure
-lein: 2.9.10
-jobs:
- include:
- - stage: jdk8
- script: lein with-profile dev test
- jdk: openjdk8
- # this env var isn't actually used, but helps with readability
- # in the Travis CI web page
- env:
- - FIPS=false
- - # still jdk8
- script: lein with-profile fips test
- jdk: openjdk8
- env:
- - FIPS=true
-
- - stage: jdk11
- script: lein with-profile dev test
- jdk: openjdk11
- env:
- - FIPS=false
- - # still jdk11
- script: lein with-profile fips test
- jdk: openjdk11
- env:
- - FIPS=true
-notifications:
- email: false
=====================================
CHANGELOG.md
=====================================
@@ -1,3 +1,30 @@
+## 4.5.2
+* update jetty9 to [9.4.53.v20231009](https://github.com/eclipse/jetty.project/releases/tag/jetty-9.4.53.v20231009) to address:
+ * CVE-2023-44487
+ * CVE-2023-36478
+* update clj-parent to 5.6.3
+
+## 4.5.1
+* update jetty9 to [9.4.52.v20230823](https://github.com/eclipse/jetty.project/releases/tag/jetty-9.4.52.v20230823) to address
+ * https://github.com/advisories/GHSA-58qw-p7qm-5rvh
+ * https://github.com/advisories/GHSA-hmr7-m48g-48f6
+ * https://github.com/advisories/GHSA-3gh6-v5v9-6v9j
+ * https://github.com/advisories/GHSA-pwh8-58vv-vw48
+
+## 4.5.0
+
+* Add `:include-response` option to request that the pending response
+ instance be provided to
+ [`add-ring-handler`](./README.md#add-ring-handler) as a second
+ argument.
+ [(PDB-5645)](https://tickets.puppetlabs.com/browse/PDB-5645)
+
+## 4.4.3
+* restore jdk 8 compatiblity
+
+## 4.4.2
+* update jetty to 9.4.51.v20230217 to resolve CVE-2023-26048
+
## 4.4.1
* update clj-parent to 5.2.9, which includes the stylefruits/gniazdo dependency.
=====================================
README.md
=====================================
@@ -87,27 +87,41 @@ You may specify `""` as the value for `path` if you are only registering a singl
handler and do not need to prefix the URL.
There is also a three argument version of this function which takes these arguments:
-`[handler path options]`. `options` is a map containing three optional keys.
-
-The first is
-`:server-id`, which specifies which server you want to add the ring-handler to. If
-`:server-id` is specified, the ring handler will be added to the server with id
-`:server-id`. If no `:server-id` is specified, or the two argument version is called,
-the ring handler will be added to the default server. Calling the two-argument version or
-leaving out `:server-id` will not work in a multiserver set-up if no default server is specified.
-
-The second optional argument is `:redirect-if-no-trailing-slash`. When set to `true`,
-all requests made to the endpoint at which the ring-handler was registered will, if
-no trailing slash is present, return a 302 redirect response to the same URL but with a trailing slash
-added. If the option is set to `false`, no redirect will occur, and the request will be
-routed through to the registered handler. This option defaults to `false`.
-
-The third optional argument is `:normalize-request-uri`. When set to `true`, the
-URI made available to the ring handler request map via the `:uri` key will have
-been "normalized". See the [Request URI Normalization]
-(#request-uri-normalization) section for more information on the
-normalization process. When set to `false` (the default value), the raw path
-component from the HTTP request URI will be the value for the `:uri` key.
+`[handler path options]`. `options` is a map containing optional keys.
+
+* `:server-id`
+
+ This option specifies which server you want to add the ring-handler
+ to. If `:server-id` is specified, the ring handler will be added to
+ the server with id `:server-id`. If no `:server-id` is specified, or
+ the two argument version is called, the ring handler will be added
+ to the default server. Calling the two-argument version or leaving
+ out `:server-id` will not work in a multiserver set-up if no default
+ server is specified.
+
+* `:redirect-if-no-trailing-slash`
+
+ When set to `true`, all requests made to the endpoint at which the
+ ring-handler was registered will, if no trailing slash is present,
+ return a 302 redirect response to the same URL but with a trailing
+ slash added. If the option is set to `false`, no redirect will
+ occur, and the request will be routed through to the registered
+ handler. This option defaults to `false`.
+
+* `:normalize-request-uri`
+
+ When set to `true`, the URI made available to the ring handler
+ request map via the `:uri` key will have been "normalized". See the
+ [Request URI Normalization] (#request-uri-normalization) section for
+ more information on the normalization process. When set to `false`
+ (the default value), the raw path component from the HTTP request
+ URI will be the value for the `:uri` key.
+
+* `:include-response`
+
+ When set to `true`, the request will include the pending jetty
+ [`Response`](https://www.eclipse.org/jetty/javadoc/jetty-9/org/eclipse/jetty/server/Response.html)
+ instance as `:puppetlabs.trapperkeeper.services.webserver.jetty9/response`.
Here's an example of how to use the `:WebserverService`:
=====================================
project.clj
=====================================
@@ -1,6 +1,6 @@
-(def jetty-version "9.4.48.v20220622")
+(def jetty-version "9.4.53.v20231009")
-(defproject puppetlabs/trapperkeeper-webserver-jetty9 "4.4.1"
+(defproject puppetlabs/trapperkeeper-webserver-jetty9 "4.5.2"
:description "A jetty9-based webserver implementation for use with the puppetlabs/trapperkeeper service framework."
:url "https://github.com/puppetlabs/trapperkeeper-webserver-jetty9"
:license {:name "Apache License, Version 2.0"
@@ -8,7 +8,7 @@
:min-lein-version "2.9.1"
- :parent-project {:coords [puppetlabs/clj-parent "5.2.9"]
+ :parent-project {:coords [puppetlabs/clj-parent "5.6.3"]
:inherit [:managed-dependencies]}
;; Abort when version ranges or version conflicts are detected in
@@ -76,22 +76,26 @@
[puppetlabs/trapperkeeper nil :classifier "test"]
[org.clojure/tools.namespace]
[compojure]
- [stylefruits/gniazdo nil :exclusions [org.eclipse.jetty.websocket/websocket-api
- org.eclipse.jetty.websocket/websocket-client
- org.eclipse.jetty/jetty-util]]
[ring/ring-core]]
:resource-paths ["dev-resources"]
:jvm-opts ["-Djava.util.logging.config.file=dev-resources/logging.properties"]}
:dev [:defaults
- {:dependencies [[org.bouncycastle/bcpkix-jdk18on]]}]
+ {:dependencies [[org.bouncycastle/bcpkix-jdk18on]
+ [stylefruits/gniazdo nil :exclusions [org.eclipse.jetty.websocket/websocket-api
+ org.eclipse.jetty.websocket/websocket-client
+ org.eclipse.jetty/jetty-util]]]}]
;; per https://github.com/technomancy/leiningen/issues/1907
;; the provided profile is necessary for lein jar / lein install
:provided {:dependencies [[org.bouncycastle/bcpkix-jdk18on]]
:resource-paths ["dev-resources"]}
-
- :fips [:defaults ; merge in the dev profile
+ ;; a pseudo dev profile that can be combined with the FIPS profiling for testing only
+ :pseudo-dev {:dependencies [
+ [stylefruits/gniazdo nil :exclusions [org.eclipse.jetty.websocket/websocket-api
+ org.eclipse.jetty.websocket/websocket-client
+ org.eclipse.jetty/jetty-util]]]}
+ :fips [:defaults ; merge in the default profile
{:dependencies [[org.bouncycastle/bcpkix-fips]
[org.bouncycastle/bc-fips]
[org.bouncycastle/bctls-fips]]
@@ -101,7 +105,7 @@
;; that sets up the JVM classpaths during installation.
:jvm-opts ~(let [version (System/getProperty "java.version")
[major minor _] (clojure.string/split version #"\.")
- unsupported-ex (ex-info "Unsupported major Java version. Expects 8 or 11."
+ unsupported-ex (ex-info "Unsupported major Java version. Expects 11 or 17."
{:major major
:minor minor})]
(condp = (java.lang.Integer/parseInt major)
@@ -109,6 +113,7 @@
["-Djava.security.properties==dev-resources/jdk8-fips-security"]
(throw unsupported-ex))
11 ["-Djava.security.properties==dev-resources/jdk11-fips-security"]
+ 17 ["-Djava.security.properties==dev-resources/jdk11-fips-security"]
(throw unsupported-ex)))}]
:testutils {:source-paths ^:replace ["test/clj"]
=====================================
src/puppetlabs/trapperkeeper/services/webrouting/webrouting_service_core.clj
=====================================
@@ -26,6 +26,9 @@
(def ContextHandlerOptions
(dissoc (merge jetty9-core/ContextHandlerOptions RouteOption) :server-id))
+(def RingHandlerOptions
+ (dissoc (merge jetty9-core/RingHandlerOptions RouteOption) :server-id))
+
(def ServletHandlerOptions
(dissoc (merge jetty9-core/ServletHandlerOptions RouteOption) :server-id))
@@ -123,7 +126,7 @@
(schema/defn ^:always-validate add-ring-handler!
[context webserver-service
svc :- (schema/protocol tk-services/Service)
- handler options :- CommonOptions]
+ handler options :- RingHandlerOptions]
(let [{:keys [path opts]} (compute-common-elements context svc options)
add-ring-handler (:add-ring-handler webserver-service)]
(add-ring-handler handler path opts)))
=====================================
src/puppetlabs/trapperkeeper/services/webserver/jetty9.clj
=====================================
@@ -0,0 +1,14 @@
+(ns puppetlabs.trapperkeeper.services.webserver.jetty9
+ "Currently only provides support for aliased keyword access for
+ clojure versions without :as-alias (before 1.11)."
+ (:require
+ [clojure.spec.alpha :as s])
+ (:import
+ (org.eclipse.jetty.server Response)))
+
+;; Currently just informational, i.e. not committing to support the
+;; spec alpha declaration publicly for now.
+
+(defn- response? [x] (instance? Response x))
+
+(s/def ::response response?)
=====================================
src/puppetlabs/trapperkeeper/services/webserver/jetty9_core.clj
=====================================
@@ -31,6 +31,7 @@
[ring.util.codec :as codec]
[clojure.string :as str]
[clojure.tools.logging :as log]
+ [puppetlabs.trapperkeeper.services.webserver.jetty9 :as jetty9]
[puppetlabs.trapperkeeper.services.webserver.jetty9-config :as config]
[puppetlabs.trapperkeeper.services.webserver.experimental.jetty9-websockets :as websockets]
[puppetlabs.trapperkeeper.services.webserver.normalized-uri-helpers
@@ -86,6 +87,9 @@
(assoc CommonOptions (schema/optional-key :context-listeners) [ServletContextListener]
(schema/optional-key :follow-links) schema/Bool))
+(def RingHandlerOptions
+ (assoc CommonOptions (schema/optional-key :include-response) schema/Bool))
+
(def ServletHandlerOptions
(assoc CommonOptions (schema/optional-key :servlet-init-params) {schema/Str schema/Str}))
@@ -448,10 +452,11 @@
(defn- ring-handler
"Returns an Jetty Handler implementation for the given Ring handler."
- [handler]
+ [handler include-response]
(proxy [AbstractHandler] []
(handle [_ ^Request base-request request response]
- (let [request-map (servlet/build-request-map request)
+ (let [request-map (cond-> (servlet/build-request-map request)
+ include-response (assoc ::jetty9/response response))
response-map (handler request-map)]
(when response-map
(servlet/update-servlet-response response response-map)
@@ -466,7 +471,7 @@
options :- ProxyOptions]
(let [custom-ssl-ctxt-factory (when (map? (:ssl-config options))
(get-proxy-client-context-factory
- (:ssl-config options)))
+ (:ssl-config options)))
{:keys [request-buffer-size idle-timeout]} options]
(proxy [ProxyServlet] []
(rewriteTarget [req]
@@ -497,7 +502,7 @@
(let [client (if custom-ssl-ctxt-factory
(HttpClient. custom-ssl-ctxt-factory)
(if-let [ssl-ctxt-factory (:ssl-context-factory
- @(:state webserver-context))]
+ @(:state webserver-context))]
(HttpClient. ssl-ctxt-factory)
(HttpClient.)))]
(when request-buffer-size
@@ -519,8 +524,8 @@
(sendProxyRequest [req resp proxy-req]
(if-let [callback-fn (:callback-fn options)]
- (callback-fn proxy-req req))
- (proxy-super sendProxyRequest req resp proxy-req))
+ (callback-fn proxy-req req))
+ (proxy-super sendProxyRequest req resp proxy-req))
;; The implementation of onResponseFailure is duplicated heavily from:
;; https://github.com/eclipse/jetty.project/blob/jetty-9.4.1.v20170120/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AbstractProxyServlet.java#L624-L658
@@ -755,11 +760,11 @@
handler :- (schema/pred ifn? 'ifn?)
path :- schema/Str
enable-trailing-slash-redirect? :- schema/Bool
- normalize-request-uri? :- schema/Bool]
- (let [handler
- (normalized-uri-helpers/handler-maybe-wrapped-with-normalized-uri
- (ring-handler handler)
- normalize-request-uri?)
+ normalize-request-uri? :- schema/Bool
+ include-response :- (schema/maybe schema/Bool)]
+ (let [handler (normalized-uri-helpers/handler-maybe-wrapped-with-normalized-uri
+ (ring-handler handler include-response)
+ normalize-request-uri?)
path (if (= "" path) "/" path)
ctxt-handler (doto (ContextHandler. path)
(.setHandler handler))]
@@ -1060,8 +1065,8 @@
(nil? new-config) (start-server-multiple context config))))
(schema/defn ^:always-validate add-ring-handler!
- [context handler path options :- CommonOptions]
- (let [server-id (:server-id options)
+ [context handler path options :- RingHandlerOptions]
+ (let [{:keys [include-response server-id]} options
s (get-server-context context server-id)
state (:state s)
endpoint-map {:type :ring}
@@ -1069,7 +1074,8 @@
enable-redirect (get options :redirect-if-no-trailing-slash false)
normalize-request-uri (get options :normalize-request-uri false)]
(register-endpoint! state endpoint-map path)
- (add-ring-handler s handler path enable-redirect normalize-request-uri)))
+ (add-ring-handler s handler path enable-redirect normalize-request-uri
+ include-response)))
(schema/defn ^:always-validate add-websocket-handler!
[context
=====================================
test/clj/puppetlabs/trapperkeeper/services/webrouting/webrouting_service_handlers_test.clj
=====================================
@@ -1,15 +1,20 @@
(ns puppetlabs.trapperkeeper.services.webrouting.webrouting-service-handlers-test
- (:import (servlet SimpleServlet))
- (:require [clojure.test :refer :all]
- [schema.test :as schema-test]
- [puppetlabs.trapperkeeper.services :as tk-services]
- [puppetlabs.trapperkeeper.services.webrouting.webrouting-service :refer :all]
- [puppetlabs.trapperkeeper.services.webserver.jetty9-service :refer [jetty9-service]]
- [puppetlabs.trapperkeeper.app :refer [get-service]]
- [puppetlabs.trapperkeeper.testutils.webrouting.common :refer :all]
- [puppetlabs.trapperkeeper.testutils.bootstrap :refer [with-app-with-config]]
- [puppetlabs.trapperkeeper.testutils.logging :refer [with-test-logging]]
- [puppetlabs.trapperkeeper.testutils.webserver :as testutils]))
+ (:require
+ [clojure.test :refer :all]
+ [schema.test :as schema-test]
+ [puppetlabs.trapperkeeper.services :as tk-services]
+ [puppetlabs.trapperkeeper.services.webrouting.webrouting-service :refer :all]
+ [puppetlabs.trapperkeeper.services.webserver.jetty9 :as jetty9]
+ [puppetlabs.trapperkeeper.services.webserver.jetty9-service :refer [jetty9-service]]
+ [puppetlabs.trapperkeeper.app :refer [get-service]]
+ [puppetlabs.trapperkeeper.testutils.webrouting.common
+ :refer [default-options-for-https-client http-get webrouting-plaintext-config]]
+ [puppetlabs.trapperkeeper.testutils.bootstrap :refer [with-app-with-config]]
+ [puppetlabs.trapperkeeper.testutils.logging :refer [with-test-logging]]
+ [puppetlabs.trapperkeeper.testutils.webserver :as testutils])
+ (:import
+ (org.eclipse.jetty.server Response)
+ (servlet SimpleServlet)))
(use-fixtures :once
schema-test/validate-schemas
@@ -215,4 +220,20 @@
(is (logged? #"^\{\"\/foo\" \[\{:type :ring}\]\}$"))
(is (logged? #"^\{\"\/foo\" \[\{:type :ring}\]\}$" :info)))))))
-
+(deftest ring-handler-include-response
+ (with-test-logging
+ (with-app-with-config app
+ [jetty9-service webrouting-service test-dummy]
+ webrouting-plaintext-config
+ (let [handler-args (atom nil)]
+ (add-ring-handler (get-service app :WebroutingService)
+ (get-service app :TestDummy)
+ (fn [& args]
+ (reset! handler-args args)
+ {:status 200 :body "yep"})
+ {:include-response true})
+ (let [{:keys [status body]} (http-get "http://localhost:8080/foo")]
+ (is (= 200 status))
+ (is (= "yep" body))
+ (is (= 1 (count @handler-args)))
+ (is (instance? Response (-> @handler-args first ::jetty9/response))))))))
=====================================
test/clj/puppetlabs/trapperkeeper/services/webserver/jetty9_core_test.clj
=====================================
@@ -37,6 +37,7 @@
:body "I am a handler"})
"/"
true
+ false
false)
(is (= (count (.getHandlers handlers)) 1)))))
=====================================
test/clj/puppetlabs/trapperkeeper/services/webserver/jetty9_service_test.clj
=====================================
@@ -737,7 +737,7 @@
; we have to sleep the thread to avoid a race condition.
(Thread/sleep 10)
(let [list (TestListAppender/list)]
- (is (re-find #"\"GET /hi_world/ HTTP/1.1\" 200 8" (first list))))))
+ (is (re-find #"\"GET /hi_world/ HTTP/1.1\" 200 28" (first list))))))
(testing "Mapped Diagnostic Context values are available to the access logger"
(with-test-access-logging
=====================================
test/clj/puppetlabs/trapperkeeper/testutils/webserver.clj
=====================================
@@ -27,7 +27,7 @@
`(let [srv# (jetty9/start-webserver!
(jetty9/initialize-context)
(assoc ~config :port 0))
- _# (jetty9/add-ring-handler srv# ~app "/" true false)
+ _# (jetty9/add-ring-handler srv# ~app "/" true false false)
~port-var (-> (:server srv#)
(.getConnectors)
(first)
View it on GitLab: https://salsa.debian.org/clojure-team/trapperkeeper-webserver-jetty9-clojure/-/commit/433e198b061bca3ce93726ae5fae57c22f9fa652
--
View it on GitLab: https://salsa.debian.org/clojure-team/trapperkeeper-webserver-jetty9-clojure/-/commit/433e198b061bca3ce93726ae5fae57c22f9fa652
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20240218/1d6375af/attachment.htm>
More information about the pkg-java-commits
mailing list