sonr/.github/scripts/new_issue.sh

110 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
ROOT_DIR=$(git rev-parse --show-toplevel)
select_scope() {
cat "$ROOT_DIR/.github/scopes.json" | jq -r '.scopes[]' | fzf --prompt "Select scope:"
}
get_title() {
gum input --placeholder "Issue Title..."
}
add_requirement() {
requirement=$(gum input --placeholder "Add a requirement...")
if [ -n "$requirement" ]; then
REQUIREMENTS="$REQUIREMENTS
$requirement"
return 0
fi
return 1
}
collect_requirements() {
REQUIREMENTS=""
req_count=0
while true; do
if add_requirement; then
req_count=$((req_count + 1))
if [ $req_count -ge 2 ] && ! gum confirm "Do you want to add another requirement?"; then
break
fi
else
if [ $req_count -ge 2 ]; then
break
else
echo "Requirement cannot be empty. Please enter a valid requirement."
fi
fi
done
}
get_docs() {
docs=$(cat "$ROOT_DIR/.github/scopes.json" | jq -c '.docs')
mods --role "determine-issue-docs" "$SCOPE" "$TITLE" "$docs"
}
get_goal() {
mods --role "determine-issue-goal" "$SCOPE $TITLE"
}
format_requirements() {
i=1
echo "$REQUIREMENTS" | while IFS= read -r req; do
if [ -n "$req" ]; then
echo "$i. $req"
i=$((i + 1))
fi
done
}
create_body() {
goal=$(get_goal)
docs=$(get_docs)
echo "### Goal(s):"
echo "$goal"
echo
echo "### Requirements:"
format_requirements
echo
echo "### Resources:"
echo "$docs"
}
preview_issue() {
echo "# ($SCOPE) $TITLE"
echo "$ISSUE_BODY"
}
create_github_issue() {
draft_flag=""
if gum confirm "Assign this issue to yourself?"; then
draft_flag="-a @me"
fi
gh issue create \
--repo onsonr/sonr \
--title "[$SCOPE] $TITLE" \
--body "$ISSUE_BODY" \
$draft_flag
}
main() {
SCOPE=$(select_scope)
TITLE=$(get_title)
collect_requirements
ISSUE_BODY=$(create_body)
preview_issue | gum format
if gum confirm "Do you want to create a new GitHub issue with this information?"; then
create_github_issue
else
exit 1
fi
}
main