-
Notifications
You must be signed in to change notification settings - Fork 2
/
Setup Development Environment.bash
executable file
·149 lines (128 loc) · 4.24 KB
/
Setup Development Environment.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/usr/bin/env bash
#shellcheck disable=SC2034
## Makes debuggers' life easier - Unofficial Bash Strict Mode
## BASHDOC: Shell Builtin Commands - Modifying Shell Behavior - The Set Builtin
set -o errexit
set -o errtrace
set -o nounset
set -o pipefail
## Non-overridable Primitive Variables
## BASHDOC: Shell Variables » Bash Variables
## BASHDOC: Basic Shell Features » Shell Parameters » Special Parameters
if [ -v "BASH_SOURCE[0]" ]; then
RUNTIME_EXECUTABLE_PATH="$(realpath --strip "${BASH_SOURCE[0]}")"
RUNTIME_EXECUTABLE_FILENAME="$(basename "${RUNTIME_EXECUTABLE_PATH}")"
RUNTIME_EXECUTABLE_NAME="${RUNTIME_EXECUTABLE_FILENAME%.*}"
RUNTIME_EXECUTABLE_DIRECTORY="$(dirname "${RUNTIME_EXECUTABLE_PATH}")"
RUNTIME_COMMANDLINE_BASECOMMAND="${0}"
declare -r\
RUNTIME_EXECUTABLE_FILENAME\
RUNTIME_EXECUTABLE_DIRECTORY\
RUNTIME_EXECUTABLE_PATHABSOLUTE\
RUNTIME_COMMANDLINE_BASECOMMAND
fi
declare -ar RUNTIME_COMMANDLINE_PARAMETERS=("${@}")
## init function: entrypoint of main program
## This function is called near the end of the file,
## with the script's command-line parameters as arguments
init(){
if ! process_commandline_parameters; then
printf\
'Error: %s: Invalid command-line parameters.\n'\
"${FUNCNAME[0]}"\
1>&2
print_help
exit 1
fi
export GIT_DIR="${RUNTIME_EXECUTABLE_DIRECTORY}/.git"
export GIT_WORK_TREE="${RUNTIME_EXECUTABLE_DIRECTORY}"
cd "${GIT_WORK_TREE}"
printf 'Fetching submodules..'
git submodule init 'Clean Filter for GNU Bash Scripts'
git submodule update --depth=30
(
unset GIT_DIR GIT_WORK_TREE
cd 'Clean Filter for GNU Bash Scripts'
git submodule init 'Code Formatters and Beautifiers/the Bash Script Beautifier'
git submodule update --depth=30
)
printf 'Setting Project-specific Git configuration...'
git config include.path ../.gitconfig\
&& printf 'done\n'
printf 'Setting Git Hooks...'
if ! command -v pre-commit &>/dev/null; then
printf -- \
'%s: Warning: pre-commit(https://pre-commit.com) is not installed, skipping setup.\n' \
"${RUNTIME_EXECUTABLE_NAME}"
else
pre-commit install
fi
exit 0
}; declare -fr init
## Traps: Functions that are triggered when certain condition occurred
## Shell Builtin Commands » Bourne Shell Builtins » trap
trap_errexit(){
printf 'An error occurred and the script is prematurely aborted\n' 1>&2
return 0
}; declare -fr trap_errexit; trap trap_errexit ERR
trap_exit(){
return 0
}; declare -fr trap_exit; trap trap_exit EXIT
trap_return(){
local returning_function="${1}"
printf 'DEBUG: %s: returning from %s\n' "${FUNCNAME[0]}" "${returning_function}" 1>&2
}; declare -fr trap_return
trap_interrupt(){
printf 'Recieved SIGINT, script is interrupted.\n' 1>&2
return 0
}; declare -fr trap_interrupt; trap trap_interrupt INT
print_help(){
printf 'Currently no help messages are available for this program\n' 1>&2
return 0
}; declare -fr print_help;
process_commandline_parameters() {
if [ "${#RUNTIME_COMMANDLINE_PARAMETERS[@]}" -eq 0 ]; then
return 0
fi
# modifyable parameters for parsing by consuming
local -a parameters=("${RUNTIME_COMMANDLINE_PARAMETERS[@]}")
# Normally we won't want debug traces to appear during parameter parsing, so we add this flag and defer it activation till returning(Y: Do debug)
local enable_debug=N
while true; do
if [ "${#parameters[@]}" -eq 0 ]; then
break
else
case "${parameters[0]}" in
"--help"\
|"-h")
print_help;
exit 0
;;
"--debug"\
|"-d")
enable_debug="Y"
;;
*)
printf 'ERROR: Unknown command-line argument "%s"\n' "${parameters[0]}" >&2
return 1
;;
esac
# shift array by 1 = unset 1st then repack
unset "parameters[0]"
if [ "${#parameters[@]}" -ne 0 ]; then
parameters=("${parameters[@]}")
fi
fi
done
if [ "${enable_debug}" = "Y" ]; then
trap 'trap_return "${FUNCNAME[0]}"' RETURN
set -o xtrace
fi
return 0
}; declare -fr process_commandline_parameters;
init "${@}"
## This script is based on the GNU Bash Shell Script Template project
## https://github.com/Lin-Buo-Ren/GNU-Bash-Shell-Script-Template
## and is based on the following version:
declare -r META_BASED_ON_GNU_BASH_SHELL_SCRIPT_TEMPLATE_VERSION='v1.26.0-32-g317af27-dirty'
## You may rebase your script to incorporate new features and fixes from the template