|
| 1 | +#!/usr/bin/env bb |
| 2 | +(ns release-next-readme+changelog |
| 3 | + (:require [clojure.string :as str])) |
| 4 | + |
| 5 | +(defn get-project-version [] |
| 6 | + {:post [(string? %) |
| 7 | + (seq %)]} |
| 8 | + (let [project-version-prefix "(defproject clojure.java-time \"" |
| 9 | + project-version-suffix "\""] |
| 10 | + (some #(when (and (str/starts-with? % project-version-prefix) |
| 11 | + (str/ends-with? % project-version-suffix)) |
| 12 | + (subs % (count project-version-prefix) (- (count %) (count project-version-suffix)))) |
| 13 | + (str/split-lines (slurp "project.clj"))))) |
| 14 | + |
| 15 | +(defn update-readme [project-version slurped-readme] |
| 16 | + (let [replace-version-around (volatile! |
| 17 | + #{{:prefix "clojure.java-time/clojure.java-time {:mvn/version \"" |
| 18 | + :suffix "\"}"} |
| 19 | + {:prefix "[clojure.java-time \"" |
| 20 | + :suffix "\"]"}}) |
| 21 | + res (str/join "\n" |
| 22 | + (map (fn [s] |
| 23 | + (if-some [matching (first (filter #(and (str/starts-with? s (:prefix %)) |
| 24 | + (str/ends-with? s (:suffix %))) |
| 25 | + @replace-version-around))] |
| 26 | + (do (vswap! replace-version-around disj matching) |
| 27 | + (str (:prefix matching) project-version (:suffix matching))) |
| 28 | + s)) |
| 29 | + (str/split-lines slurped-readme)))] |
| 30 | + (assert (empty? @replace-version-around) |
| 31 | + (str "Failed to replace: " @replace-version-around)) |
| 32 | + res)) |
| 33 | + |
| 34 | +(assert (= "# Readme\n\n## Dependency\n\nclojure.java-time/clojure.java-time {:mvn/version \"1.0.0\"}\n\n[clojure.java-time \"1.0.0\"]" |
| 35 | + (update-readme "1.0.0" |
| 36 | + "# Readme\n\n## Dependency\n\nclojure.java-time/clojure.java-time {:mvn/version \"0.5.0\"}\n\n[clojure.java-time \"0.5.0\"]"))) |
| 37 | + |
| 38 | +(defn update-changelog [project-version slurped-changelog] |
| 39 | + (str/replace slurped-changelog "## NEXT\n" (format "## NEXT\n\n## %s\n" project-version))) |
| 40 | + |
| 41 | +(assert (= "# Changelog\n\n## NEXT\n\n## 1.0.0\n\n- a release note" |
| 42 | + (update-changelog "1.0.0" "# Changelog\n\n## NEXT\n\n- a release note"))) |
| 43 | + |
| 44 | +(defn -main [] |
| 45 | + (let [project-version (get-project-version)] |
| 46 | + (spit "README.md" (update-readme project-version (slurp "README.md"))) |
| 47 | + (spit "CHANGELOG.md" (update-changelog project-version (slurp "CHANGELOG.md"))))) |
| 48 | + |
| 49 | +(when (= *file* (System/getProperty "babashka.file")) |
| 50 | + (apply -main *command-line-args*)) |
0 commit comments