# prepare commit msg #!/usr/bin/env bb (ns prepare_commit_msg (:require [clojure.java.shell :refer [sh]] [clojure.string :refer [includes? split trim trim-newline upper-case]])) (def ^:private branches-to-skip #{"master" "main" "develop" "test"}) (def commit-message-file ".git/COMMIT_EDITMSG") (def commit-message (slurp commit-message-file)) (defn- should-skip-this-branch? [branch] (contains? branches-to-skip branch)) (defn current-git-branch [] (->> (sh "git" "symbolic-ref" "--short" "HEAD") :out trim-newline)) (defn jira-ticket-number [] (when-let [s (->> (split (current-git-branch) #"/") last (re-seq #"^[a-zA-Z]+-[0-9]+") first)] (upper-case s))) (defn github-issue-number [] (when-let [s (->> (split (current-git-branch) #"/") last (re-seq #"#[0-9]+$") last)] (upper-case s))) (defn include-jira-ticket-number? [] (when-let [ticket (jira-ticket-number)] (includes? commit-message ticket))) (defn include-github-issue-number? [] (when-let [ticket (github-issue-number)] (includes? commit-message ticket))) (defn combine-ticket-number-with-message [] (if-let [ticket (or (jira-ticket-number) (github-issue-number))] (format "%s (%s)" (trim commit-message) ticket) commit-message)) (defn skip? [branch] (or (should-skip-this-branch? branch) (include-jira-ticket-number?))) (defn -main [& _args] (->> (if (skip? (current-git-branch)) commit-message (combine-ticket-number-with-message)) (spit commit-message-file)) (System/exit 0))