Add a babashka script to get authors and changes for a release
diff --git a/bb.edn b/bb.edn
new file mode 100644
index 0000000..f8b09f8
--- /dev/null
+++ b/bb.edn
@@ -0,0 +1,12 @@
+{:paths ["extra"]
+ :tasks
+ {:requires ([tasks :as t])
+
+ latest-release {:doc "Get version number of latest release"
+ :task (println (t/latest-release))}
+
+ authors {:doc "List all authors for current release"
+ :task (println (t/authors))}
+
+ changes {:doc "List all changes for the current release"
+ :task (println (t/changes-since)) }}}
diff --git a/extra/tasks.clj b/extra/tasks.clj
new file mode 100755
index 0000000..eb48512
--- /dev/null
+++ b/extra/tasks.clj
@@ -0,0 +1,34 @@
+(ns tasks
+ (:require
+ [babashka.process :refer [process shell]]
+ [clojure.string :as str]))
+
+;; majorly inspired by the Announce script from git, see
+;; https://github.com/git/git/blob/ecaae0c78185918cb24292407354f58c043b6ca8/Announce
+
+(defn latest-release []
+ (->> "git describe --abbrev=0"
+ (shell {:out :string})
+ :out
+ str/trim))
+
+(defn authors
+ ([] (authors (latest-release)))
+ ([release]
+ (->> release
+ (format "git shortlog -s --no-merges --group=author --group=trailer:co-authored-by %s..")
+ (shell {:out :string})
+ :out
+ str/split-lines
+ (map (fn [line] (-> line (str/split #"\t") second)))
+ (sort-by str/lower-case)
+ (str/join ", "))))
+
+(defn changes-since
+ ([] (changes-since (latest-release)))
+ ([release]
+ (-> (process (format "git log --no-merges %s.." release))
+ (process {:out :string} "git shortlog")
+ deref
+ :out)))
+