From f696a6dbe5d966b7aa7436479078870feaa030a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Str=C3=B6mberg?= Date: Mon, 4 Nov 2024 19:11:29 +0100 Subject: [PATCH] Update publish script --- scripts/publish.clj | 90 +++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/scripts/publish.clj b/scripts/publish.clj index 3fe3190..7ac69bf 100755 --- a/scripts/publish.clj +++ b/scripts/publish.clj @@ -5,9 +5,9 @@ (def changelog-filename "CHANGELOG.md") -(defn shell [dry-run? & args] +(defn sh [dry-run? & args] (if dry-run? - (do (println "Would run:" args) + (do (println "Dry run:" (apply pr-str args)) {:exit 0}) (apply p/sh args))) @@ -49,22 +49,22 @@ (defn commit-changelog [file-name message dry-run?] (println "Committing") - (shell dry-run? "git" "add" file-name) - (throw-if-error (shell dry-run? - "git" "commit" - "-m" message - "-o" file-name))) + (sh dry-run? "git" "add" file-name) + (throw-if-error (sh dry-run? + "git" "commit" + "-m" message + "-o" file-name))) (defn tag [version dry-run?] (println "Tagging with version" version) - (throw-if-error (shell dry-run? - "git" "tag" - "-a" (str "v" version) - "-m" (str "Version " version)))) + (throw-if-error (sh dry-run? + "git" "tag" + "-a" (str "v" version) + "-m" (str "Version " version)))) (defn push [dry-run?] (println "Pushing") - (throw-if-error (shell dry-run? "git" "push" "--follow-tags"))) + (throw-if-error (sh dry-run? "git" "push" "--follow-tags"))) (defn git-status [] (println "Checking git status") @@ -78,47 +78,51 @@ (not up-to-date) (conj :not-up-to-date) (not clean) (conj :branch-not-clean)))) -(defn publish [version dry-run?] +(defn tag-and-push! [version dry-run?] (tag version dry-run?) (push dry-run?) (println "Open to follow the progress of the release:") (println " https://github.com/PEZ/paste-replaced/actions")) +(defn publish [unreleased-changelog-text dry-run?] + (let [changelog-text (slurp changelog-filename) + extension-version (-> (slurp "package.json") + json/parse-string + (get "version"))] + (if (empty? unreleased-changelog-text) + (do + (println "Publishing without updating the changelog.") + (tag-and-push! extension-version dry-run?)) + (let [updated-changelog-text (new-changelog-text changelog-text extension-version)] + (println "Updating changelog") + (if-not dry-run? + (spit changelog-filename updated-changelog-text) + (println "Would write to changelog: " changelog-filename (subs updated-changelog-text 0 200) "...")) + (commit-changelog changelog-filename + (str "Add changelog section for v" extension-version " [skip ci]") + dry-run?) + (tag-and-push! extension-version dry-run?))))) + (defn run [& args] (let [dry-run? (= "-d" (first args)) - changelog-text (slurp changelog-filename) unreleased-changelog-text (get-changelog-text-for-version "Unreleased") - extension-version (-> (slurp "package.json") - json/parse-string - (get "version")) + status (git-status)] (println "dry-run?" dry-run?) - (when (or (seq status) - (empty? unreleased-changelog-text)) - (when (seq status) - (println "Git status issues: " status)) - (when (empty? unreleased-changelog-text) - (println "There are no unreleased changes in the changelog.")) - (println "Release anyway? YES/NO: ") - (flush) - (let [answer (str (read))] - (if-not (= "YES" answer) - (println "Aborting publish.") - (if (empty? unreleased-changelog-text) - (do - (println "Publishing without updating the changelog.") - (publish extension-version dry-run?)) - (let [updated-changelog-text (new-changelog-text changelog-text extension-version)] - (println "Updating changelog") - (if-not dry-run? - (spit changelog-filename updated-changelog-text) - (println "Would write to changelog: " changelog-filename (subs updated-changelog-text 0 200) "...")) - (commit-changelog changelog-filename - (str "Add changelog section for v" extension-version "" - (when *command-line-args* - (str "\n\n" (first *command-line-args*)))) - dry-run?) - (publish extension-version dry-run?)))))))) + (if (or (seq status) + (empty? unreleased-changelog-text)) + (do + (when (seq status) + (println "Git status issues: " status)) + (when (empty? unreleased-changelog-text) + (println "There are no unreleased changes in the changelog.")) + (println "Release anyway? YES/NO: ") + (flush) + (let [answer (str (read))] + (if-not (= "YES" answer) + (println "Aborting publish.") + (publish unreleased-changelog-text dry-run?)))) + (publish unreleased-changelog-text dry-run?)))) (when (= *file* (System/getProperty "babashka.file")) (apply run *command-line-args*))