From 3314d6af1747896f78654ac9c635c8c71a9fe997 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sun, 25 Oct 2026 13:21:58 +0100 Subject: [PATCH] Add bb publish --bump --- README.md | 2 +- bb.edn | 26 +++++++++++++++++++++++--- bb/tasks.clj | 13 +++++++++++++ bb/utils.clj | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 bb/tasks.clj create mode 100644 bb/utils.clj diff --git a/README.md b/README.md index 0973ca6..7b00636 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ See [API.md](API.md). Use as a dependency in `deps.edn` or `bb.edn`: ``` clojure -org.babashka/http-client {:mvn/version "0.4.22"} +org.babashka/http-client {:mvn/version "0.4.25"} ``` ## Rationale diff --git a/bb.edn b/bb.edn index 3209bc7..9e9d96c 100644 --- a/bb.edn +++ b/bb.edn @@ -31,8 +31,28 @@ (fn [[_ match]] (str "#_:version " (pr-str version)))))))} - publish {:doc "Build the jar and deploy it to Clojars" + bump-release {:doc "Bump release counter and turn the Unreleased changelog header into the new version" + :requires ([clojure.string :as str] + [utils]) + :task (let [old-version (utils/format-version) + changelog (slurp "CHANGELOG.md")] + (when-not (str/includes? changelog "## Unreleased") + (throw (ex-info "CHANGELOG.md has no ## Unreleased header" {}))) + (utils/bump-version) + (run 'refresh-version) + (let [new-version (utils/format-version)] + (spit "CHANGELOG.md" (str/replace-first changelog + "## Unreleased" + (str "## " new-version))) + (spit "README.md" (str/replace (slurp "README.md") + old-version + new-version)) + (shell "git add deps.edn src/babashka/http_client/internal/version.clj README.md CHANGELOG.md") + (shell "git commit -m" (str "v" new-version)) + (shell "git tag" (str "v" new-version)) + (shell "git push --tags")))} + + publish {:doc "Publish to clojars, then push" :depends [refresh-version] :extra-paths ["."] - :requires ([build]) - :task (build/deploy {})}}} + :exec-fn tasks/publish}}} diff --git a/bb/tasks.clj b/bb/tasks.clj new file mode 100644 index 0000000..79bb06a --- /dev/null +++ b/bb/tasks.clj @@ -0,0 +1,13 @@ +(ns tasks + (:require [babashka.tasks :refer [run shell]])) + +(defn publish + "Publish to clojars, then push." + {:org.babashka/cli {:spec {:bump {:coerce :boolean + :desc "Run bump-release first"}}}} + [{:keys [bump]}] + (when bump + (run 'bump-release)) + ((requiring-resolve 'build/deploy) {}) + ;; bump-release pushes the tag, the commit it points at needs this + (shell "git push")) diff --git a/bb/utils.clj b/bb/utils.clj new file mode 100644 index 0000000..0730e6a --- /dev/null +++ b/bb/utils.clj @@ -0,0 +1,14 @@ +(ns utils + (:require [clojure.edn :as edn] + [clojure.string :as str])) + +(defn format-version [] + (-> (edn/read-string (slurp "deps.edn")) :aliases :neil :project :version)) + +(defn bump-version [] + (let [old-version (format-version) + [major minor release] (str/split old-version #"\.") + new-version (str/join "." [major minor (inc (parse-long release))])] + (spit "deps.edn" (str/replace-first (slurp "deps.edn") + (str ":version " (pr-str old-version)) + (str ":version " (pr-str new-version))))))