#!/usr/bin/env fish set -l msg_file $argv[1] set -l commit_type $(string trim $argv[2]) set -l commit_sha $(string trim $argv[3]) # Rebasing || cherry-picking. if test "$commit_type" = messageg || test "$commit_type" = message exit 0 end if test -n "$commit_sha" gum confirm "Create a new commit message?" || exit 0 end # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set -l gitmojis $(curl -s https://gitmoji.dev/api/gitmojis | jello -rl '\ result = [] for entry in _.gitmojis: item = entry.emoji + " - " + entry.description if entry.semver is not None: item += " \033[91;3m(" + entry.semver + ")\033[0m" result.append(item) result ') set -l types \ "build: Changes that affect the build system or external dependencies" \ "ci: Changes to the CI configuration files and scripts" \ "docs: Documentation only changes" \ "feat: A new feature" \ "fix: A bug fix" \ "perf: A code change that improves performance" \ "refactor: A code change that neither fixes a bug nor adds a feature" \ "style: Changes that do not affect the meaning of the code" \ "test: Adding missing tests or correcting existing tests" \ "chore: Update dependencies; bump version numbers; etc" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # HAS to be global so the function has access to it. set -g gitmoji "$(gum filter --height=10 $gitmojis)" # Abort if no emoji was selected if ! test -n "$gitmoji" exit 1 end set -l emoji $(string sub --length 1 $gitmoji) function breaking string match -rq '\(major\)' "$gitmoji" end # function minor # string match -rq '\(minor\)' "$gitmoji" # end # # function patch # string match -r '\(patch\)' "$gitmoji" # end # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set -l type $(gum filter --height=10 $types) set type $(string match --regex '^[a-z]+' $type) set -l scope $(gum input --placeholder "scope") test -n "$scope" && set scope "($scope)" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set -l summary "$type$scope: " breaking && set summary "$type$scope!: " set summary $(gum input --value "$summary" --placeholder "Summary of this change") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set -l footer "" breaking && set footer $(gum input --value "BREAKING CHANGE: " --placeholder "The breaking change being introduced") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # if breaking && test "$(git_current_branch)" = "$(git_main_branch)" # set -l msg "You are commiting a breaking change on to the main branch. Continue commit?\n(Selecting no will save your commit message to the clipboard)" # # gum confirm $msg || begin # copyq copy "$emoji $summary\n$description$footer" # exit # end # end # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set -l msg "$(cat $msg_file)" set -l new_msg "$emoji $summary\n\n" if test ! -z "$footer" set new_msg "$new_msg$footer\n\n" end set new_msg "$new_msg$msg" echo -e "$new_msg" >"$msg_file" # function tag # if breaking || minor || patch # if test "$(git_current_branch)" = "$(git_main_branch)" # gum confirm "Bump version number and tag commit?" || return # # set -f last $(git describe --tags --abbrev=0 || 'v0.0.0') # set last $(string replace v '' $last | string split .) # # set -f i 0 # if breaking # set i 1 # else if minor # set i 2 # else if patch # set i 3 # end # # if test $i -gt 0 # set last[$i] $(math $last[$i] + 1) # end # # set -f new "$last[1].$last[2].$last[3]" # git tag -a "v$new" -m "Version $new" # end # end # end