[Git][clojure-team/typesafe-config-clojure][upstream] New upstream version 1.0.4

Thomas Goirand (@zigo) gitlab at salsa.debian.org
Sun Jul 19 18:33:47 BST 2026



Thomas Goirand pushed to branch upstream at Debian Clojure Maintainers / typesafe-config-clojure


Commits:
0e8f0e6e by Thomas Goirand at 2026-07-19T19:31:01+02:00
New upstream version 1.0.4
- - - - -


13 changed files:

- + .github/dependabot.yml
- + .github/release.yml
- + .github/workflows/pr-testing.yaml
- + .github/workflows/release.yaml
- − .travis.yml
- − CONTRIBUTING.md
- README.md
- − ext/travisci/test.sh
- − jenkins/deploy.sh
- project.clj
- + renovate.json
- src/puppetlabs/config/typesafe.clj
- test/puppetlabs/config/typesafe_test.clj


Changes:

=====================================
.github/dependabot.yml
=====================================
@@ -0,0 +1,17 @@
+version: 2
+updates:
+  # raise PRs for gem updates
+  - package-ecosystem: bundler
+    directory: "/"
+    schedule:
+      interval: daily
+      time: "13:00"
+    open-pull-requests-limit: 10
+
+  # Maintain dependencies for GitHub Actions
+  - package-ecosystem: github-actions
+    directory: "/"
+    schedule:
+      interval: daily
+      time: "13:00"
+    open-pull-requests-limit: 10


=====================================
.github/release.yml
=====================================
@@ -0,0 +1,39 @@
+---
+# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
+
+changelog:
+  exclude:
+    labels:
+      - duplicate
+      - invalid
+      - modulesync
+      - question
+      - skip-changelog
+      - wont-fix
+      - wontfix
+
+  categories:
+    - title: Breaking Changes 🛠
+      labels:
+        - backwards-incompatible
+
+    - title: New Features 🎉
+      labels:
+        - enhancement
+
+    - title: Bug Fixes 🐛
+      labels:
+        - bug
+
+    - title: Documentation Updates 📚
+      labels:
+        - documentation
+        - docs
+
+    - title: Dependency Updates ⬆️
+      labels:
+        - dependencies
+
+    - title: Other Changes
+      labels:
+        - "*"


=====================================
.github/workflows/pr-testing.yaml
=====================================
@@ -0,0 +1,61 @@
+---
+name: lein_test
+
+on:
+  pull_request: {}
+  push:
+    branches:
+      - main
+
+# minimal permissions
+permissions:
+  contents: read
+
+jobs:
+  run-lein-tests:
+    name: lein test - Java ${{ matrix.java }}
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        java:
+          - '25'
+          - '21'
+          - '17'
+    steps:
+      - name: Check out repository code
+        uses: actions/checkout at v6
+      - name: Setup java
+        uses: actions/setup-java at v5
+        with:
+          distribution: temurin
+          java-version: ${{ matrix.java }}
+      - name: Install Clojure tools
+        uses: DeLaGuardo/setup-clojure at 13.5
+        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 update profile
+        run: |
+          set -x
+          set -e
+          lein version
+          echo "Running tests"
+          lein -U test
+
+  tests:
+    if: always()
+    needs:
+      - run-lein-tests
+    runs-on: ubuntu-24.04
+    name: Test suite
+    steps:
+      - name: Decide whether the needed jobs succeeded or failed
+        uses: re-actors/alls-green at release/v1
+        with:
+          jobs: ${{ toJSON(needs) }}


=====================================
.github/workflows/release.yaml
=====================================
@@ -0,0 +1,18 @@
+---
+name: Release and publish package to clojars.org
+
+permissions:
+  contents: write
+  packages: write
+
+on:
+  workflow_dispatch:
+
+jobs:
+  release:
+    uses: 'openvoxproject/shared-actions/.github/workflows/clojure_release.yml at main'
+    secrets:
+      github_pat: ${{ secrets.OPENVOXBOT_COMMIT_AND_PRS }}
+      ssh_private_key: ${{ secrets.OPENVOXBOT_SSH_PRIVATE_KEY }}
+      clojars_username: ${{ secrets.CLOJARS_USERNAME }}
+      clojars_password: ${{ secrets.CLOJARS_PASSWORD }}


=====================================
.travis.yml deleted
=====================================
@@ -1,9 +0,0 @@
-language: clojure
-lein: lein2
-jdk:
-  - oraclejdk7
-  - openjdk7
-script: ./ext/travisci/test.sh
-notifications:
-  email: false
-


=====================================
CONTRIBUTING.md deleted
=====================================
@@ -1,9 +0,0 @@
-# How to contribute
-
-Third-party patches are essential for keeping Puppet Labs open-source projects
-great. We want to keep it as easy as possible to contribute changes that
-allow you to get the most out of our projects. There are a few guidelines
-that we need contributors to follow so that we can have a chance of keeping on
-top of things.  For more info, see our canonical guide to contributing:
-
-[https://github.com/puppetlabs/puppet/blob/master/CONTRIBUTING.md](https://github.com/puppetlabs/puppet/blob/master/CONTRIBUTING.md)


=====================================
README.md
=====================================
@@ -1,5 +1,3 @@
-[![Build Status](https://travis-ci.org/puppetlabs/clj-typesafe-config.png?branch=master)](https://travis-ci.org/puppetlabs/clj-typesafe-config)
-
 clj-typesafe-config
 ===================
 
@@ -9,8 +7,4 @@ A thin clojure wrapper around the [Typesafe Config](https://github.com/typesafeh
 
 Add the following dependency to your `project.clj` file:
 
-[![Clojars Project](http://clojars.org/puppetlabs/typesafe-config/latest-version.svg)](http://clojars.org/puppetlabs/typesafe-config)
-
-## Support
-
-Please log tickets and issues at our [Jira Tracker](https://tickets.puppetlabs.com/issues/?jql=project%20%3D%20Trapperkeeper).
+[![Clojars Project](http://clojars.org/org.openvoxproject/typesafe-config/latest-version.svg)](http://clojars.org/org.openvoxproject/typesafe-config)


=====================================
ext/travisci/test.sh deleted
=====================================
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-lein2 test


=====================================
jenkins/deploy.sh deleted
=====================================
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-set -x
-
-git fetch --tags
-
-lein test
-echo "Tests passed!"
-
-lein release
-echo "Release plugin successful, pushing changes to git"
-
-git push origin --tags HEAD:$TYPESAFE_CONFIG_BRANCH
-
-echo "git push successful."


=====================================
project.clj
=====================================
@@ -1,4 +1,4 @@
-(defproject puppetlabs/typesafe-config "0.1.5"
+(defproject org.openvoxproject/typesafe-config "1.0.4"
   :description "Thin Clojure wrapper around Typesafe Config library"
   :license {:name "Apache License, Version 2.0"
             :url "http://www.apache.org/licenses/LICENSE-2.0.html"}
@@ -8,16 +8,13 @@
   ;; requires lein 2.2.0+.
   :pedantic? :abort
 
-  :dependencies [[org.clojure/clojure "1.5.1"]
-                 [com.typesafe/config "1.2.0"]]
-
-  :plugins [[lein-release "1.0.5"]]
+  :dependencies [[org.clojure/clojure "1.12.5"]
+                 [com.typesafe/config "1.4.9"]]
 
   :lein-release        {:scm          :git
                         :deploy-via   :lein-deploy}
 
   :deploy-repositories [["releases" {:url "https://clojars.org/repo"
-                                     :username :env/clojars_jenkins_username
-                                     :password :env/clojars_jenkins_password
-                                     :sign-releases false}]
-                        ["snapshots" "http://nexus.delivery.puppetlabs.net/content/repositories/snapshots/"]])
+                                     :username :env/CLOJARS_USERNAME
+                                     :password :env/CLOJARS_PASSWORD
+                                     :sign-releases false}]])


=====================================
renovate.json
=====================================
@@ -0,0 +1,9 @@
+{
+  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+  "addLabels": ["renovate", "dependencies"],
+  "assigneesFromCodeOwners": true,
+  "automerge": true,
+  "automergeType": "pr",
+  "dependencyDashboard": true,
+  "enabledManagers": ["leiningen"]
+}


=====================================
src/puppetlabs/config/typesafe.clj
=====================================
@@ -1,8 +1,9 @@
 (ns puppetlabs.config.typesafe
   (:import (java.util Map List)
            (com.typesafe.config ConfigFactory ConfigParseOptions ConfigSyntax
-                                Config))
-  (:require [clojure.java.io :as io]))
+                                Config ConfigValueFactory))
+  (:require [clojure.java.io :as io]
+            [clojure.walk :as walk]))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Private
@@ -12,7 +13,7 @@
 (defn strip-quotes
   "Given a string read from a config file, check to see if it begins and ends with
   double-quotes, and if so, remove them."
-  [s]
+  [^String s]
   {:pre [(string? s)]
    :post [(string? %)
           (not (and (.startsWith % "\"")
@@ -45,7 +46,7 @@
 (defn nested-java-map->map
   "Given a (potentially nested) java Map object read from a config file,
   convert it (potentially recursively) to a clojure map with keywordized keys."
-  [m]
+  [^Map m]
   {:pre [(instance? Map m)]
    :post [(map? %)
           (every? keyword? (keys %))]}
@@ -77,7 +78,7 @@
 
 (defn config->map
   "Converts an instance of `Config` to a more user-friendly clojure map"
-  [config]
+  [^Config config]
   {:pre [(instance? Config config)]
    :post [(map? %)]}
   (-> config
@@ -91,7 +92,8 @@
 
 (defn config-file->map
   "Given the path to a configuration file (of type .conf, .json, or .properties),
-  parse the file and return a clojure map representation of the data."
+  parse the file and return a clojure map representation of the data.
+  Returns empty map for non-existing file."
   [file-path]
   {:pre [(string? file-path)]
    :post [(map? %)]}
@@ -122,3 +124,12 @@
          (ConfigFactory/parseReader parse-options)
          config->map))))
 
+(defn map->string
+  "Serialize the clojure data structure `m` to string using the
+  typesafe config format. `m` is typically the result of a
+  `config-file->map` or `reader-map` with some modifications."
+  [m]
+  (-> m
+      walk/stringify-keys
+      ConfigValueFactory/fromAnyRef
+      .render))


=====================================
test/puppetlabs/config/typesafe_test.clj
=====================================
@@ -1,5 +1,5 @@
 (ns puppetlabs.config.typesafe_test
-  (:import (java.io FileInputStream))
+  (:import (java.io FileInputStream StringReader))
   (:require [puppetlabs.config.typesafe :as ts]
             [clojure.test :refer :all]))
 
@@ -33,8 +33,20 @@
     (let [cfg (ts/config-file->map (str test-files-dir "substitution.conf"))]
       (is (= {:top {:henry "text"
                     :bob "text"}}
+             cfg))))
+  (testing "returns empty result for non-existing file"
+    (let [cfg (ts/config-file->map (str test-files-dir "non-existing-file.conf"))]
+      (is (= {}
              cfg)))))
 
+(defn round-trip-config
+  "Converts cfg (clojure representation of a config) to a string, then
+  back to clojure data structures"
+  [cfg]
+  (-> cfg
+      ts/map->string
+      StringReader.
+      ts/reader->map))
 
 (deftest reader->map-test
   (testing "can parse .properties stream with nested data structures"
@@ -45,7 +57,8 @@
                     :baz "bazbaz"
                     :bam 42
                     :bap {:boozle "boozleboozle"}}}
-             cfg))))
+             cfg))
+      (is (= cfg (round-trip-config cfg)))))
   (testing "can parse .json stream with nested data structures"
     (let [cfg (ts/reader->map
                 (FileInputStream. (str test-files-dir "config.json"))
@@ -55,7 +68,8 @@
                     :bam 42
                     :bap {:boozle "boozleboozle"
                           :bip [1 2 {:hi "there"} 3]}}}
-             cfg))))
+             cfg))
+      (is (= cfg (round-trip-config cfg)))))
   (testing "can parse .conf stream with nested data structures"
     (let [cfg (ts/reader->map
                 (FileInputStream. (str test-files-dir "config.conf"))
@@ -65,13 +79,13 @@
                     :bam 42
                     :bap {:boozle "boozleboozle"
                           :bip [1 2 {:hi "there"} 3]}}}
-             cfg))))
+             cfg))
+      (is (= cfg (round-trip-config cfg)))))
   (testing "can parse .conf file with substitution variables"
     (let [cfg (ts/reader->map
                 (FileInputStream. (str test-files-dir "substitution.conf"))
                 :conf)]
       (is (= {:top {:henry "text"
                     :bob "text"}}
-             cfg)))))
-
-
+             cfg))
+      (is (= cfg (round-trip-config cfg))))))



View it on GitLab: https://salsa.debian.org/clojure-team/typesafe-config-clojure/-/commit/0e8f0e6ef1367bff019e50badaa1336cda7a5a8e

-- 
View it on GitLab: https://salsa.debian.org/clojure-team/typesafe-config-clojure/-/commit/0e8f0e6ef1367bff019e50badaa1336cda7a5a8e
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20260719/56d03f40/attachment.htm>


More information about the pkg-java-commits mailing list