137 lines
3.9 KiB
Fish
137 lines
3.9 KiB
Fish
#!/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
|