diff --git a/devenv.nix b/devenv.nix index e0abf3d1353d70dd6c10c389d803b74eb0ac29b5..fe5dac2d0952595000d8ff7ecea87626afe2e9cb 100644 --- a/devenv.nix +++ b/devenv.nix @@ -225,7 +225,7 @@ builds: ]; scripts.tag-version.exec = '' -!#${pkgs.bash}/bin/bash +#!${pkgs.bash}/bin/bash set -x ${pkgs.git}/bin/git config user.email "''${GITLAB_USER_EMAIL}" ${pkgs.git}/bin/git config user.name "''${GITLAB_USER_NAME:-"Gitlab CI"}" @@ -242,7 +242,7 @@ builds: ''; scripts.update-files.exec = '' -!#${pkgs.bash}/bin/bash +#!${pkgs.bash}/bin/bash update_symlink() { local source_path="$1" local target_path="$2" @@ -282,7 +282,6 @@ builds: scripts.build-app.exec = '' #!${pkgs.bash}/bin/bash - ${pkgs.nix}/bin/nix build .#version ''; @@ -330,431 +329,431 @@ ${pkgs.nix}/bin/nix build .#version # # #''; - - # This scritp is used to deploy the app to the gitlab registry - # It is used by the gitlab-ci.yml file - # The environment variables are set in the gitlab project settings - scripts.deploy-app.exec = '' -#!${pkgs.bash}/bin/bash - -PATH="''${PATH}":${pkgs.coreutils}/bin -PATH="''${PATH}":${pkgs.jq}/bin/ -PATH="''${PATH}":${pkgs.curl}/bin/ -PATH="''${PATH}":${pkgs.moreutils}/bin/ -PATH="''${PATH}":${pkgs.gnutar}/bin -PATH="''${PATH}":${pkgs.gzip}/bin/ -PATH="''${PATH}":${pkgs.eza}/bin/ -PATH="''${PATH}":${pkgs.git}/bin/ -PATH="''${PATH}":${inputs.version.defaultPackage."${builtins.currentSystem}"}/bin/ - -export -f PATH - -if [[ -f .env-gitlab-ci ]]; then - source .env-gitlab-ci - rm .env-gitlab-ci -fi - -set -x -## if $HOME not set, set it to current directory -if [[ -z "''${HOME}" ]]; then - HOME=$(pwd) -fi - -export HOME - -git config user.email "''${GITLAB_USER_EMAIL}" -git config user.name "''${GITLAB_USER_NAME:-"Gitlab CI"}" -git config pull.rebase true -git config http.sslVerify "false" -git remote set-url origin https://pad:''${GITLAB_TOKEN}@''${CI_REPOSITORY_URL#*@} - -git fetch --all --tags --unshallow -git reset --hard origin/master -git checkout $CI_COMMIT_REF_NAME -git pull origin $CI_COMMIT_REF_NAME - - -if [ ! -z "''${CI_PROJECT_DIR}" ]; then - echo "CI_PROJECT_DIR is set, using it as project root." - project_root=$(realpath "''${CI_PROJECT_DIR}")/ -elif [ ! -z "''${DEVENV_ROOT}" ]; then - echo "DEVENV_ROOT is set, using it as project root." - project_root=$(realpath "''${DEVENV_ROOT}")/ -else - echo "Error: DEVENV_ROOT or CI_PROJECT_DIR environment variables are not set." - exit 1 -fi - -if [ ! -d "''${project_root}" ]; then - echo "Error: Project root directory does not seem to be valid." - echo "Check the DEVENV_ROOT or CI_PROJECT_DIR environment variables." - exit 1 -fi - -if [ -z "'CI_JOB_TOKEN" ]; then - echo "Error: CI_JOB_TOKEN variable is not set." - exit 1 -fi - -git --no-pager log --decorate=short --pretty=oneline - -## the version should be the same as in the build task -if ! version auto --git --verbose --exit-code-if-no-bump -then - echo "ERROR: Could not update version." - exit 1 -fi - -git --no-pager log --decorate=short --pretty=oneline - -gitVersion=$(version print --git) - - -for file in $(eza "''${project_root}"dist/*); do - filname=$(basename ''${file}) - curl -v --insecure -H "JOB-TOKEN: ''${CI_JOB_TOKEN}" --upload-file \ - ''${file} \ - https://gitlab.schukai.com/api/v4/projects/''${CI_PROJECT_ID}/packages/generic/${config.env.APP_NAME}/''${gitVersion}/''${filname} -done - -git push -o ci.skip origin ''${CI_COMMIT_REF_NAME} --tags - -echo "done" - - ''; - - scripts.do-git-commit.exec = '' - #!${pkgs.bash}/bin/bash - - # Define colors if the terminal supports it - if [ -t 1 ]; then - RED='\033[0;31m' - GREEN='\033[0;32m' - RESET='\033[0m' - BOLD='\033[1m' - else - RED="" - GREEN="" - RESET="" - fi - - step=1 - - reset - clear - - # create random log file - LOGFILE="$(mktemp)" - if [ $? -ne 0 ]; then - echo -e "''${RED}✖ Could not create temporary log file. Exiting.''${RESET}" - exit 1 - fi - - log_and_display() { - echo -e "''${GREEN}==> $step. $1''${RESET}" | tee -a $LOGFILE - step=$((step + 1)) - } - - log_error_and_display() { - echo -e "''${RED}==> $step. $1''${RESET}" | tee -a $LOGFILE - } - - printLogfileAndExit() { - exit_code=$1 - echo -e "\n\n========================================\n\n\n" - - echo -e "\n\n''${BOLD}Git and GitLab Automation Script''${RESET}\n\nI have performed the following actions:\n\n" - cat "$LOGFILE" - - # Optional: Remove log file - ${pkgs.coreutils}/bin/rm -f "$LOGFILE" - - if [ $exit_code -eq 0 ]; then - echo -e "\n''${GREEN}✔''${RESET} All actions were successful" | tee -a $LOGFILE - elif [ $exit_code -eq -1 ]; then - echo -e "\n''${RED}✖''${RESET} The script was manually cancelled" | tee -a $LOGFILE - exit_code=0 - else - echo -e "\n''${RED}✖''${RESET} Some actions failed" | tee -a $LOGFILE - fi - - exit $exit_code - } - - print_headline() { - local title=$1 - local underline=$(printf '─%.0s' $(seq 1 ''${#title})) - echo -e "\n\n''${BOLD}''${title}\n''${underline}''${RESET}\n" - } - - do_cancel() { - echo -e "''${RED}==> ✖ Cancelled.''${RESET}" | tee -a $LOGFILE - printLogfileAndExit -1 - } - - # Function for unified logging and display - log_action() { - if [ $? -eq 0 ]; then - echo -e " ''${GREEN}✔''${RESET} $1: Successful" | tee -a $LOGFILE - else - echo -e " ''${RED}✖''${RESET} $1: Failed" | tee -a $LOGFILE - printLogfileAndExit 1 - fi - } - - print_what_to_do() { - echo -e "\n\nWhat do you want to do?\n" - } - - git_status=$(git status --porcelain) - if [[ -z "$git_status" ]]; then - log_error_and_display "No changes to commit. Exiting." - printLogfileAndExit 0 - fi - - print_headline "Choose commit type" - selection=$(gum choose "feat: (new feature for the user, not a new feature for build script)" "fix: (bug fix for the user, not a fix to a build script)" "chore: (updating grunt tasks etc.; no production code change)" "docs: (changes to the documentation)" "style: (formatting, missing semi colons, etc; no production code change)" "refactor: (refactoring production code, eg. renaming a variable)" "test: (adding missing tests, refactoring tests; no production code change)" "Cancel") - - commit_type=$(echo "$selection" | awk -F':' '{print $1}') - - if [[ "$commit_type" == "Cancel" ]]; then - do_cancel - fi - - log_and_display "You chose the commit type: $commit_type" - - # NEXT STEP ISSUE HANDLING ############################################################################################################ - #log_and_display "Issue handling" - - gitlabIssues=() - while IFS= read -r line; do - if [[ $line =~ ^# ]]; then - id=$(echo "$line" | awk '{print substr($1, 2)}') - title=$(echo "$line" | awk -F'about' '{print $1}' | awk '{$1=$2=""; print substr($0, 3)}') - gitlabIssues+=("$id > $title") - fi - done < <(gum spin --spinner dot --show-output --title "Ask gitlab ..." -- glab issue list --output-format=details) - - ## if issues are available, ask if user wants to use an existing issue or create a new one - createOption="Create new issue" - existingOption="Use existing issue" - cancelOption="Cancel" - - print_headline "Choose issue handling" - if [ ''${#gitlabIssues[@]} -eq 0 ]; then - log_and_display "There are no issues available." - - print_what_to_do - choice=$(gum choose "$createOption" "$cancelOption") - - else - log_and_display "There are ''${#gitlabIssues[@]} issues available." - print_what_to_do - choice=$(gum choose "$createOption" "$existingOption" "$cancelOption") - fi - - if [[ "$choice" == "$cancelOption" ]]; then - do_cancel - fi - - ## array of issue ids - work_on_issue_ids=() - - issue_text="" - - if [[ "$choice" == "$createOption" ]]; then - print_headline "Create new issue" - issue_text=$(gum input --placeholder "Enter issue title") - echo -e "Enter issue description. ''${RED}End with Ctrl+D''${RESET}\n" - issue_description=$(gum write --placeholder "Enter issue description. End with Ctrl+D") - - if [[ -z "$issue_text" ]]; then - log_error_and_display "Issue title is empty. Exiting." - printLogfileAndExit 1 - fi - - log_and_display "You entered the issue title: $issue_text" - log_and_display "You entered the issue description: $issue_description" - echo -e "\n" - - gum confirm "Do you want to create this issue?" - # gum confirm exits with status 0 if confirmed and status 1 if cancelled. - if [ $? -eq 1 ]; then - do_cancel - fi - - issue_output=$(glab issue create -t"$issue_text" --no-editor --description "$issue_description") - issue_id=$(echo "$issue_output" | grep -oP '(?<=/issues/)\d+') - - work_on_issue_ids+=("$issue_id") - - log_action "glab issue with id $issue_id created" - - else - - print_headline "Use existing issue" - echo -e "Select issue with arrow keys and press tab or space to select. Press enter to confirm.\n" - issue_ids=$(gum choose --no-limit "''${gitlabIssues[@]}") - - # assign issue_ids to work_on_issue_ids. iterate over lines and take integer from beginning of line - while IFS= read -r line; do - work_on_issue_ids+=($(echo "$line" | grep -oP '^\d+')) - done <<<"$issue_ids" - - fi - - if [ ''${#work_on_issue_ids[@]} -eq 0 ]; then - log_and_display "No issue selected. Exiting." - printLogfileAndExit 0 - fi - - # NEXT STEP COMMIT MESSAGE ############################################################################################################ - # print work_on_issue_ids - work_on_issue_ids_string="" - for i in "''${work_on_issue_ids[@]}"; do - work_on_issue_ids_string+="#$i " - done - - log_and_display "You chose to work on the following issues: ''${work_on_issue_ids_string}" - - - print_headline "Check for changes to commit" - - # ' ' = unmodified - # M = modified - # T = file type changed (regular file, symbolic link or submodule) - # A = added - # D = deleted - # R = renamed - # C = copied (if config option status.renames is set to "copies") - # U = updated but unmerged - # https://man.freebsd.org/cgi/man.cgi?query=git-status&sektion=1&manpath=freebsd-release-ports - - count_all_changes=$(echo "$git_status" | wc -l) - count_staged_changes=$(echo "$git_status" | grep -c '^M') - count_new_staged_files=$(echo "$git_status" | grep -c '^A') - count_staged_changes=$((count_staged_changes + count_new_staged_files)) - - git_options_all="All $count_all_changes changes" - git_options_staged="Only the $count_staged_changes staged changes" - git_options_select_files="Select files" - git_options_cancel="Cancel" - - git_options_array=() - if [[ $count_all_changes -gt 0 ]]; then - git_options_array+=("$git_options_all") - fi - - if [[ $count_staged_changes -gt 0 ]]; then - git_options_array+=("$git_options_staged") - fi - - git_options_array+=( "$git_options_select_files" ) - git_options_array+=( "$git_options_cancel" ) - - - selection=$(gum choose "''${git_options_array[@]}") - if [[ "$selection" == "$git_options_cancel" ]]; then - do_cancel - fi - - if [[ "$selection" == "$git_options_all" ]]; then - git add -A - echo "1" - elif [[ "$selection" == "$git_options_select_files" ]]; then - - files=() - while IFS= read -r line; do - files+=("$line") - done <<<"$git_status" - - selected_files=$(gum choose --no-limit "''${files[@]}") - - # no files selected - if [[ -z "$selected_files" ]]; then - log_and_display "No files selected. Exiting." - printLogfileAndExit 0 - fi - - # add selected files - while IFS= read -r line; do - ## git proclimne could have letter, ? or ! at the beginning of the line - file=$(echo "$line" | awk '{print $2}') - if [[ -z "$file" || ! -f "$file" ]]; then - log_and_display "No file found in line: $line" - continue - fi - - git add "$file" - done <<<"$selected_files" - - fi - - ## count staged changes again and print - count_staged_changes=$(echo "$git_status" | grep -c '^M') - count_new_staged_files=$(echo "$git_status" | grep -c '^A') - count_staged_changes=$((count_staged_changes + count_new_staged_files)) - - log_and_display "You have $count_staged_changes staged changes to commit." - - # NEXT STEP COMMIT MESSAGE ############################################################################################################ - - print_headline "Enter commit message" - commit_message=$(gum input --placeholder "Enter commit message" --value "$commit_type: $issue_text $work_on_issue_ids_string") - - if [[ -z "$commit_message" ]]; then - log_error_and_display "Commit message is empty. Exiting." - printLogfileAndExit 1 - fi - - log_and_display "You entered the commit message: $commit_message" - - gum confirm "Do you want to commit with this message?" - if [ $? -eq 1 ]; then - do_cancel - fi - - # NEXT STEP COMMIT #################################################################################################################### - print_headline "Committing changes" - - if ! git commit -m "$commit_message" ; then - log_error_and_display "Commit failed. Exiting." - printLogfileAndExit 1 - fi - - log_and_display "Commit successful." - - # NEXT STEP PUSH ###################################################################################################################### - - print_headline "Pushing changes" - - if ! git push ; then - log_error_and_display "Push failed. Exiting." - printLogfileAndExit 1 - fi - - log_and_display "Push successful." - - # Close issue ###################################################################################################################### - - print_headline "Closing issues" - - for issue_id in "''${work_on_issue_ids[@]}"; do - - gum confirm "Do you want to close issue #$issue_id?" - if [ $? -eq 1 ]; then - continue - fi - - if ! glab issue close "$issue_id" ; then - log_error_and_display "Closing issue $issue_id failed. Exiting." - else - log_and_display "Closing issue $issue_id successful." - fi - done - - printLogfileAndExit 0 - ''; +# +# # This scritp is used to deploy the app to the gitlab registry +# # It is used by the gitlab-ci.yml file +# # The environment variables are set in the gitlab project settings +# scripts.deploy-app.exec = '' +##!${pkgs.bash}/bin/bash +# +#PATH="''${PATH}":${pkgs.coreutils}/bin +#PATH="''${PATH}":${pkgs.jq}/bin/ +#PATH="''${PATH}":${pkgs.curl}/bin/ +#PATH="''${PATH}":${pkgs.moreutils}/bin/ +#PATH="''${PATH}":${pkgs.gnutar}/bin +#PATH="''${PATH}":${pkgs.gzip}/bin/ +#PATH="''${PATH}":${pkgs.eza}/bin/ +#PATH="''${PATH}":${pkgs.git}/bin/ +#PATH="''${PATH}":${inputs.version.defaultPackage."${builtins.currentSystem}"}/bin/ +# +#export -f PATH +# +#if [[ -f .env-gitlab-ci ]]; then +# source .env-gitlab-ci +# rm .env-gitlab-ci +#fi +# +#set -x +### if $HOME not set, set it to current directory +#if [[ -z "''${HOME}" ]]; then +# HOME=$(pwd) +#fi +# +#export HOME +# +#git config user.email "''${GITLAB_USER_EMAIL}" +#git config user.name "''${GITLAB_USER_NAME:-"Gitlab CI"}" +#git config pull.rebase true +#git config http.sslVerify "false" +#git remote set-url origin https://pad:''${GITLAB_TOKEN}@''${CI_REPOSITORY_URL#*@} +# +#git fetch --all --tags --unshallow +#git reset --hard origin/master +#git checkout $CI_COMMIT_REF_NAME +#git pull origin $CI_COMMIT_REF_NAME +# +# +#if [ ! -z "''${CI_PROJECT_DIR}" ]; then +# echo "CI_PROJECT_DIR is set, using it as project root." +# project_root=$(realpath "''${CI_PROJECT_DIR}")/ +#elif [ ! -z "''${DEVENV_ROOT}" ]; then +# echo "DEVENV_ROOT is set, using it as project root." +# project_root=$(realpath "''${DEVENV_ROOT}")/ +#else +# echo "Error: DEVENV_ROOT or CI_PROJECT_DIR environment variables are not set." +# exit 1 +#fi +# +#if [ ! -d "''${project_root}" ]; then +# echo "Error: Project root directory does not seem to be valid." +# echo "Check the DEVENV_ROOT or CI_PROJECT_DIR environment variables." +# exit 1 +#fi +# +#if [ -z "'CI_JOB_TOKEN" ]; then +# echo "Error: CI_JOB_TOKEN variable is not set." +# exit 1 +#fi +# +#git --no-pager log --decorate=short --pretty=oneline +# +### the version should be the same as in the build task +#if ! version auto --git --verbose --exit-code-if-no-bump +#then +# echo "ERROR: Could not update version." +# exit 1 +#fi +# +#git --no-pager log --decorate=short --pretty=oneline +# +#gitVersion=$(version print --git) +# +# +#for file in $(eza "''${project_root}"dist/*); do +# filname=$(basename ''${file}) +# curl -v --insecure -H "JOB-TOKEN: ''${CI_JOB_TOKEN}" --upload-file \ +# ''${file} \ +# https://gitlab.schukai.com/api/v4/projects/''${CI_PROJECT_ID}/packages/generic/${config.env.APP_NAME}/''${gitVersion}/''${filname} +#done +# +#git push -o ci.skip origin ''${CI_COMMIT_REF_NAME} --tags +# +#echo "done" +# +# ''; +# +# scripts.do-git-commit.exec = '' +# #!${pkgs.bash}/bin/bash +# +# # Define colors if the terminal supports it +# if [ -t 1 ]; then +# RED='\033[0;31m' +# GREEN='\033[0;32m' +# RESET='\033[0m' +# BOLD='\033[1m' +# else +# RED="" +# GREEN="" +# RESET="" +# fi +# +# step=1 +# +# reset +# clear +# +# # create random log file +# LOGFILE="$(mktemp)" +# if [ $? -ne 0 ]; then +# echo -e "''${RED}✖ Could not create temporary log file. Exiting.''${RESET}" +# exit 1 +# fi +# +# log_and_display() { +# echo -e "''${GREEN}==> $step. $1''${RESET}" | tee -a $LOGFILE +# step=$((step + 1)) +# } +# +# log_error_and_display() { +# echo -e "''${RED}==> $step. $1''${RESET}" | tee -a $LOGFILE +# } +# +# printLogfileAndExit() { +# exit_code=$1 +# echo -e "\n\n========================================\n\n\n" +# +# echo -e "\n\n''${BOLD}Git and GitLab Automation Script''${RESET}\n\nI have performed the following actions:\n\n" +# cat "$LOGFILE" +# +# # Optional: Remove log file +# ${pkgs.coreutils}/bin/rm -f "$LOGFILE" +# +# if [ $exit_code -eq 0 ]; then +# echo -e "\n''${GREEN}✔''${RESET} All actions were successful" | tee -a $LOGFILE +# elif [ $exit_code -eq -1 ]; then +# echo -e "\n''${RED}✖''${RESET} The script was manually cancelled" | tee -a $LOGFILE +# exit_code=0 +# else +# echo -e "\n''${RED}✖''${RESET} Some actions failed" | tee -a $LOGFILE +# fi +# +# exit $exit_code +# } +# +# print_headline() { +# local title=$1 +# local underline=$(printf '─%.0s' $(seq 1 ''${#title})) +# echo -e "\n\n''${BOLD}''${title}\n''${underline}''${RESET}\n" +# } +# +# do_cancel() { +# echo -e "''${RED}==> ✖ Cancelled.''${RESET}" | tee -a $LOGFILE +# printLogfileAndExit -1 +# } +# +# # Function for unified logging and display +# log_action() { +# if [ $? -eq 0 ]; then +# echo -e " ''${GREEN}✔''${RESET} $1: Successful" | tee -a $LOGFILE +# else +# echo -e " ''${RED}✖''${RESET} $1: Failed" | tee -a $LOGFILE +# printLogfileAndExit 1 +# fi +# } +# +# print_what_to_do() { +# echo -e "\n\nWhat do you want to do?\n" +# } +# +# git_status=$(git status --porcelain) +# if [[ -z "$git_status" ]]; then +# log_error_and_display "No changes to commit. Exiting." +# printLogfileAndExit 0 +# fi +# +# print_headline "Choose commit type" +# selection=$(gum choose "feat: (new feature for the user, not a new feature for build script)" "fix: (bug fix for the user, not a fix to a build script)" "chore: (updating grunt tasks etc.; no production code change)" "docs: (changes to the documentation)" "style: (formatting, missing semi colons, etc; no production code change)" "refactor: (refactoring production code, eg. renaming a variable)" "test: (adding missing tests, refactoring tests; no production code change)" "Cancel") +# +# commit_type=$(echo "$selection" | awk -F':' '{print $1}') +# +# if [[ "$commit_type" == "Cancel" ]]; then +# do_cancel +# fi +# +# log_and_display "You chose the commit type: $commit_type" +# +# # NEXT STEP ISSUE HANDLING ############################################################################################################ +# #log_and_display "Issue handling" +# +# gitlabIssues=() +# while IFS= read -r line; do +# if [[ $line =~ ^# ]]; then +# id=$(echo "$line" | awk '{print substr($1, 2)}') +# title=$(echo "$line" | awk -F'about' '{print $1}' | awk '{$1=$2=""; print substr($0, 3)}') +# gitlabIssues+=("$id > $title") +# fi +# done < <(gum spin --spinner dot --show-output --title "Ask gitlab ..." -- glab issue list --output-format=details) +# +# ## if issues are available, ask if user wants to use an existing issue or create a new one +# createOption="Create new issue" +# existingOption="Use existing issue" +# cancelOption="Cancel" +# +# print_headline "Choose issue handling" +# if [ ''${#gitlabIssues[@]} -eq 0 ]; then +# log_and_display "There are no issues available." +# +# print_what_to_do +# choice=$(gum choose "$createOption" "$cancelOption") +# +# else +# log_and_display "There are ''${#gitlabIssues[@]} issues available." +# print_what_to_do +# choice=$(gum choose "$createOption" "$existingOption" "$cancelOption") +# fi +# +# if [[ "$choice" == "$cancelOption" ]]; then +# do_cancel +# fi +# +# ## array of issue ids +# work_on_issue_ids=() +# +# issue_text="" +# +# if [[ "$choice" == "$createOption" ]]; then +# print_headline "Create new issue" +# issue_text=$(gum input --placeholder "Enter issue title") +# echo -e "Enter issue description. ''${RED}End with Ctrl+D''${RESET}\n" +# issue_description=$(gum write --placeholder "Enter issue description. End with Ctrl+D") +# +# if [[ -z "$issue_text" ]]; then +# log_error_and_display "Issue title is empty. Exiting." +# printLogfileAndExit 1 +# fi +# +# log_and_display "You entered the issue title: $issue_text" +# log_and_display "You entered the issue description: $issue_description" +# echo -e "\n" +# +# gum confirm "Do you want to create this issue?" +# # gum confirm exits with status 0 if confirmed and status 1 if cancelled. +# if [ $? -eq 1 ]; then +# do_cancel +# fi +# +# issue_output=$(glab issue create -t"$issue_text" --no-editor --description "$issue_description") +# issue_id=$(echo "$issue_output" | grep -oP '(?<=/issues/)\d+') +# +# work_on_issue_ids+=("$issue_id") +# +# log_action "glab issue with id $issue_id created" +# +# else +# +# print_headline "Use existing issue" +# echo -e "Select issue with arrow keys and press tab or space to select. Press enter to confirm.\n" +# issue_ids=$(gum choose --no-limit "''${gitlabIssues[@]}") +# +# # assign issue_ids to work_on_issue_ids. iterate over lines and take integer from beginning of line +# while IFS= read -r line; do +# work_on_issue_ids+=($(echo "$line" | grep -oP '^\d+')) +# done <<<"$issue_ids" +# +# fi +# +# if [ ''${#work_on_issue_ids[@]} -eq 0 ]; then +# log_and_display "No issue selected. Exiting." +# printLogfileAndExit 0 +# fi +# +# # NEXT STEP COMMIT MESSAGE ############################################################################################################ +# # print work_on_issue_ids +# work_on_issue_ids_string="" +# for i in "''${work_on_issue_ids[@]}"; do +# work_on_issue_ids_string+="#$i " +# done +# +# log_and_display "You chose to work on the following issues: ''${work_on_issue_ids_string}" +# +# +# print_headline "Check for changes to commit" +# +# # ' ' = unmodified +# # M = modified +# # T = file type changed (regular file, symbolic link or submodule) +# # A = added +# # D = deleted +# # R = renamed +# # C = copied (if config option status.renames is set to "copies") +# # U = updated but unmerged +# # https://man.freebsd.org/cgi/man.cgi?query=git-status&sektion=1&manpath=freebsd-release-ports +# +# count_all_changes=$(echo "$git_status" | wc -l) +# count_staged_changes=$(echo "$git_status" | grep -c '^M') +# count_new_staged_files=$(echo "$git_status" | grep -c '^A') +# count_staged_changes=$((count_staged_changes + count_new_staged_files)) +# +# git_options_all="All $count_all_changes changes" +# git_options_staged="Only the $count_staged_changes staged changes" +# git_options_select_files="Select files" +# git_options_cancel="Cancel" +# +# git_options_array=() +# if [[ $count_all_changes -gt 0 ]]; then +# git_options_array+=("$git_options_all") +# fi +# +# if [[ $count_staged_changes -gt 0 ]]; then +# git_options_array+=("$git_options_staged") +# fi +# +# git_options_array+=( "$git_options_select_files" ) +# git_options_array+=( "$git_options_cancel" ) +# +# +# selection=$(gum choose "''${git_options_array[@]}") +# if [[ "$selection" == "$git_options_cancel" ]]; then +# do_cancel +# fi +# +# if [[ "$selection" == "$git_options_all" ]]; then +# git add -A +# echo "1" +# elif [[ "$selection" == "$git_options_select_files" ]]; then +# +# files=() +# while IFS= read -r line; do +# files+=("$line") +# done <<<"$git_status" +# +# selected_files=$(gum choose --no-limit "''${files[@]}") +# +# # no files selected +# if [[ -z "$selected_files" ]]; then +# log_and_display "No files selected. Exiting." +# printLogfileAndExit 0 +# fi +# +# # add selected files +# while IFS= read -r line; do +# ## git proclimne could have letter, ? or ! at the beginning of the line +# file=$(echo "$line" | awk '{print $2}') +# if [[ -z "$file" || ! -f "$file" ]]; then +# log_and_display "No file found in line: $line" +# continue +# fi +# +# git add "$file" +# done <<<"$selected_files" +# +# fi +# +# ## count staged changes again and print +# count_staged_changes=$(echo "$git_status" | grep -c '^M') +# count_new_staged_files=$(echo "$git_status" | grep -c '^A') +# count_staged_changes=$((count_staged_changes + count_new_staged_files)) +# +# log_and_display "You have $count_staged_changes staged changes to commit." +# +# # NEXT STEP COMMIT MESSAGE ############################################################################################################ +# +# print_headline "Enter commit message" +# commit_message=$(gum input --placeholder "Enter commit message" --value "$commit_type: $issue_text $work_on_issue_ids_string") +# +# if [[ -z "$commit_message" ]]; then +# log_error_and_display "Commit message is empty. Exiting." +# printLogfileAndExit 1 +# fi +# +# log_and_display "You entered the commit message: $commit_message" +# +# gum confirm "Do you want to commit with this message?" +# if [ $? -eq 1 ]; then +# do_cancel +# fi +# +# # NEXT STEP COMMIT #################################################################################################################### +# print_headline "Committing changes" +# +# if ! git commit -m "$commit_message" ; then +# log_error_and_display "Commit failed. Exiting." +# printLogfileAndExit 1 +# fi +# +# log_and_display "Commit successful." +# +# # NEXT STEP PUSH ###################################################################################################################### +# +# print_headline "Pushing changes" +# +# if ! git push ; then +# log_error_and_display "Push failed. Exiting." +# printLogfileAndExit 1 +# fi +# +# log_and_display "Push successful." +# +# # Close issue ###################################################################################################################### +# +# print_headline "Closing issues" +# +# for issue_id in "''${work_on_issue_ids[@]}"; do +# +# gum confirm "Do you want to close issue #$issue_id?" +# if [ $? -eq 1 ]; then +# continue +# fi +# +# if ! glab issue close "$issue_id" ; then +# log_error_and_display "Closing issue $issue_id failed. Exiting." +# else +# log_and_display "Closing issue $issue_id successful." +# fi +# done +# +# printLogfileAndExit 0 +# ''; enterShell = '' update-files