#!/usr/bin/env bash # list of Conventional Commits types cc_types=("feat" "fix") default_types=("build" "chore" "ci" "docs" "${cc_types[@]}" "perf" "refactor" "revert" "style" "test") types=( "${cc_types[@]}" ) if [ $# -eq 1 ]; then types=( "${default_types[@]}" ) else while [ $# -gt 1 ]; do types+=( "$1" ) shift done fi msg_file="$1" r_types="($(IFS='|'; echo "${types[*]}"))" r_scope="(\([[:alnum:] \/-]+\))?" r_delim='!?:' r_subject=" [[:print:]].+" pattern="^$r_types$r_scope$r_delim$r_subject$" if grep -Eq "$pattern" "$msg_file"; then exit 0 fi echo "[Commit message] $( cat "$msg_file" )" echo " Thank you for your interest in Dragonfly DB. To keep things clean, we ask all commits to meet the following criteria: - Be Signed (git commit -s -m ...) - Valid Conventional Commit https://www.conventionalcommits.org/ Special Commit Words are correlated to versioning. Specifically \"fix\" and \"feat\" - fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning). - feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning). - Breaking changes have a ! before the \":\" Finally, If there is an Issue for this Commit, Please add it to the end of the commit message. - Reference Issue Number at End of Commit Message (Optional) Thank you for helping us label a \`fix\` and \`feat\` properly so that our commits, issues and semantic versioning are all aligned! A Signed Conventional Commit with Issue Number look like: git commit -s -m \"type(scope): description #112\" Valid types: $(IFS=' '; echo "${types[*]}") Example Document Change: docs(readme): Fix Example Links #121 Example Breaking New Feature feat(ingest)!: Add new ingest # 122 This is an example of a fix with an Issue # fix(ingest): Refactor for loop to list comprehension #123 Thank you for your contribution! Sincerely, The Dragonfly DB Contributors " exit 1