author | eyeokg <k.galczynski@eyeo.com> |
Mon, 11 Nov 2024 14:48:38 +0100 | |
changeset 25710 | b3dddcc5f208 |
parent 25709 | ca5e4f738e57 |
child 25711 | 2bb339143f01 |
permissions | -rwxr-xr-x |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
1 |
#!/bin/bash |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
2 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
3 |
# Improve error handling, option e is not picked because it's expected for functions |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
4 |
# to return non-0 statuses. |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
5 |
set -Eeuo pipefail |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
6 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
7 |
# Allow user input during commit |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
8 |
exec < /dev/tty |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
9 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
10 |
templates_content='{}' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
11 |
templates_names=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
12 |
unique_json_files=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
13 |
unique_filterlists_to_include=() |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
14 |
all_domains_variables_in_json_files='[]' |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
15 |
all_domains_variables_names='{}' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
16 |
all_json_files_contents='{}' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
17 |
variables_in_json_files='{}' |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
18 |
variables_in_included_filterlists='{}' |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
19 |
all_domain_variables_matches_in_filterlists='[]' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
20 |
last_error='' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
21 |
testing=false |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
22 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
23 |
error_handler() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
24 |
local exit_code=$? |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
25 |
local line_number=$1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
26 |
echo "Error: Script failed with exit code $exit_code at line $line_number" |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
27 |
if [ "${BASH_COMMAND:-}" = "return 1" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
28 |
echo -e "Last error message:\n$last_error" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
29 |
else |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
30 |
echo -e "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
31 |
echo "THIS ERROR SHOULDN'T HAPPEN, PLEASE REPORT IT TO AFB TEAM OR KRIS" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
32 |
echo -e "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n" |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
33 |
echo "Last executed command: ${BASH_COMMAND:-}" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
34 |
fi |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
35 |
if [ "$testing" = true ] && [ "${BASH_COMMAND:-}" = "return 1" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
36 |
exit 0 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
37 |
else |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
38 |
exit $exit_code |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
39 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
40 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
41 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
42 |
# Set up trap to catch errors and invoke the error handler |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
43 |
trap 'error_handler $LINENO' ERR |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
44 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
45 |
check_git_status() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
46 |
local status=$(git status) |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
47 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
48 |
local git_status=$(grep -s "Changes not staged for commit" <<< $status || grep -s "Untracked files" <<< $status || echo '') |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
49 |
if ! [ -z "$git_status" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
50 |
read -p "There are changes not staged for commit. The script will check only the staged version. Do you want to continue? (y/n): " choice |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
51 |
case "$choice" in |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
52 |
y|Y ) echo "";; |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
53 |
n|N ) echo "Aborting."; exit 1;; |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
54 |
* ) echo "Invalid choice. Aborting."; exit 1;; |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
55 |
esac |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
56 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
57 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
58 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
59 |
check_if_jq_is_installed() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
60 |
if ! command -v jq &>/dev/null; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
61 |
last_error="ERROR: jq is not installed. Please install jq to continue." |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
62 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
63 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
64 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
65 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
66 |
check_if_file_exists() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
67 |
local file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
68 |
if ! [ -f "$file_path" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
69 |
last_error="ERROR: File $file_path does not exist" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
70 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
71 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
72 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
73 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
74 |
get_staged_version_of_a_file() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
75 |
local file_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
76 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
77 |
# Using name reference in order to not create subshells for each assignment and allow to use global variables |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
78 |
# and global error handling |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
79 |
local -n staged_file_content_nameref=$2 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
80 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
81 |
check_if_file_exists "$file_name" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
82 |
if git show :"$file_name" >/dev/null 2>&1; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
83 |
staged_file_content_nameref="$(git show :"$file_name")" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
84 |
else |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
85 |
last_error="ERROR: File $file_name was requested by a template but it's not tracked neither staged." |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
86 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
87 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
88 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
89 |
parse_template_data() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
90 |
local template="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
91 |
local -n file_data_nameref=$2 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
92 |
local staged_template |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
93 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
94 |
get_staged_version_of_a_file "$template" staged_template |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
95 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
96 |
# Extract lines starting with %domainsVariables exceptionrules: and process them with jq |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
97 |
local json_files_in_template=$(grep "^%domainsVariables exceptionrules:" <<< $staged_template | sed 's/^%domainsVariables exceptionrules://; s/%$//' | jq -R -s 'split("\n") | map(select(length > 0))' || echo '[]') |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
98 |
# Extract lines starting with %include exceptionrules: and process them with jq |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
99 |
local included_filterlists_files_in_template=$(grep "^%include exceptionrules:" <<< $staged_template | sed 's/^%include exceptionrules://; s/%$//' | jq -R -s 'split("\n") | map(select(length > 0))' || echo '[]') |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
100 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
101 |
if [ "$included_filterlists_files_in_template" = "[]" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
102 |
last_error="ERROR: There is no list included in template $template_name" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
103 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
104 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
105 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
106 |
# Create a JSON object with the template name as the key and the extracted domainsVariables and include data as values |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
107 |
file_data_nameref=$(jq -n --arg template "$template" --argjson json_files_in_template "$json_files_in_template" --argjson included_filterlists_files_in_template "$included_filterlists_files_in_template" ' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
108 |
{ |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
109 |
$template: { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
110 |
"domainsVariables": $json_files_in_template, |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
111 |
"include": $included_filterlists_files_in_template |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
112 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
113 |
}') |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
114 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
115 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
116 |
update_templates_content() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
117 |
local file_template="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
118 |
# Merge the new template data into the existing templates_content JSON |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
119 |
templates_content=$(jq -n --argjson templates_content "$templates_content" --argjson file_template "$file_template" '$templates_content + $file_template') |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
120 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
121 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
122 |
update_unique_json_files() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
123 |
local template_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
124 |
local file_data="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
125 |
# Extract the list of domainsVariables files from the template data |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
126 |
local json_files_list=$(jq -r --arg template_name "$template_name" '.[$template_name].domainsVariables[]' <<< $file_data) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
127 |
for json_file in $json_files_list; do |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
128 |
local matches_in_unique_json_files=$(grep -swF "$json_file" <<< ${unique_json_files[@]} || echo '') |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
129 |
if [ -z "$matches_in_unique_json_files" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
130 |
unique_json_files+=("$json_file") |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
131 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
132 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
133 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
134 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
135 |
update_unique_includes() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
136 |
local template_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
137 |
local file_data="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
138 |
# Extract the list of included files from the template data |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
139 |
local included_files_list=$(jq -r --arg file "$template_name" '.[$file].include[]' <<< $file_data) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
140 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
141 |
for included_filterlist in $included_files_list; do |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
142 |
local matches_in_unique_filterlists=$(grep -swF "$included_filterlist" <<< ${unique_filterlists_to_include[@]} || echo '') |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
143 |
if [ -z "$matches_in_unique_filterlists" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
144 |
unique_filterlists_to_include+=("$included_filterlist") |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
145 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
146 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
147 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
148 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
149 |
check_if_valid_json() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
150 |
local json_file_path="$1" |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
151 |
if ! jq -e . >/dev/null 2>&1 <<< $(cat "$json_file_path"); then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
152 |
last_error="ERROR: Invalid JSON content in $json_file_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
153 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
154 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
155 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
156 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
157 |
get_domains_variables_names_incl_duplicates() { |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
158 |
local json_file_content="$1" |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
159 |
local -n domains_variables_names_incl_duplicated_nameref=$2 |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
160 |
|
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
161 |
# If jq would be used the duplicates would be automatically removed, therefore I used perl |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
162 |
domains_variables_names_incl_duplicated_nameref=$(perl -0777 -ne 'print "$1\n" while /"([^"]+?)"(?=[\s\r\n]*:)/g' <<< $json_file_content) |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
163 |
} |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
164 |
check_if_correct_domains_variables_json_structure() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
165 |
local json_file_content="$1" |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
166 |
local json_file_path="$2" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
167 |
# Check if the JSON structure is valid and matches the expected format: |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
168 |
# { "variable1": ["domain1", "domain2" (...)], "variable2": ["domain1", "domain3" (...)], (...)} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
169 |
if ! echo $json_file_content | jq -e ' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
170 |
type == "object" and |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
171 |
([keys[] as $k | .[$k] | type == "array" and all(.[]; type == "string")] | all) |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
172 |
' >/dev/null 2>&1; |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
173 |
then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
174 |
last_error="ERROR: JSON structure is invalid in $json_file_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
175 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
176 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
177 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
178 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
179 |
check_if_duplicated_domains_variable_name_in_single_file() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
180 |
local json_file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
181 |
local domains_variables_names="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
182 |
if [ "$(echo "$domains_variables_names" | sort | uniq -d)" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
183 |
last_error="ERROR: Duplicate domains_variables_names found in $json_file_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
184 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
185 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
186 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
187 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
188 |
check_if_valid_domains_variable_name() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
189 |
local domains_variable_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
190 |
if ! [[ "$domains_variable_name" =~ ^[[:alnum:]_]+$ ]]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
191 |
last_error="ERROR: Invalid domains variable name: $domains_variable_name, only alphanumeric characters and underscores are allowed" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
192 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
193 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
194 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
195 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
196 |
check_if_duplicated_domains() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
197 |
local json_file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
198 |
local key="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
199 |
local value="$3" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
200 |
# Value of domainsVariable is an array of strings representing domains, |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
201 |
# therefore the error message mentions domains. |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
202 |
if [ -n "$(echo "$value" | sort | uniq -di)" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
203 |
last_error="ERROR: There are duplicated domains in $key in file $json_file_path:\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
204 |
last_error+="$(echo "$value" | sort | uniq -di)" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
205 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
206 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
207 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
208 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
209 |
check_if_correct_domain() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
210 |
local json_file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
211 |
local domains_variable_name="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
212 |
local domains="$3" |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
213 |
# Preselect candidates for invalid domains, then check them |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
214 |
local candidates=$(grep -vP "^[a-zA-Z0-9]{1,63}\.[a-zA-Z]{2,24}$" <<< $domains || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
215 |
local strong_candidates=$(grep -vP "^((([A-Za-z0-9][A-Za-z0-9-]{0,61})?[A-Za-z0-9]\.)+([A-Za-z]{2,63}|\*|xn--[a-zA-Z0-9-]{1,59}) )+$" <<< $candidates || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
216 |
if [ -n "$strong_candidates" ]; then |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
217 |
for domain in $strong_candidates; do |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
218 |
# Check if the domain matches the expected pattern |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
219 |
if ! [[ $domain =~ ^(([A-Za-z0-9][A-Za-z0-9-]{0,61})?[A-Za-z0-9]\.)+([A-Za-z]{2,63}|\*|xn--[a-zA-Z0-9-]{1,59})$ ]]; then |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
220 |
last_error="ERROR: Invalid domain in $domains_variable_name: $domain in file $json_file_path" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
221 |
return 1 |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
222 |
fi |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
223 |
done |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
224 |
fi |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
225 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
226 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
227 |
check_if_correct_domains_variables() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
228 |
local json_file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
229 |
local domains_variables_names="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
230 |
local json_file_content="$3" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
231 |
check_if_duplicated_domains_variable_name_in_single_file "$json_file_path" "$domains_variables_names" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
232 |
for domains_variable_name in $domains_variables_names; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
233 |
check_if_valid_domains_variable_name "$domains_variable_name" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
234 |
# Extract the value associated with the domains variable name from the JSON file |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
235 |
local domains=$(jq -r --arg key "$domains_variable_name" '.[$key][]' <<< $json_file_content) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
236 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
237 |
check_if_duplicated_domains "$json_file_path" "$domains_variable_name" "$domains" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
238 |
check_if_correct_domain "$json_file_path" "$domains_variable_name" "$domains" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
239 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
240 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
241 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
242 |
update_domains_variables_data() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
243 |
local domains_variables_names="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
244 |
local json_file_path="$2" |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
245 |
local json_file_content="$3" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
246 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
247 |
# Merge the new domains variables into the existing all_domains_variables_in_json_files array |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
248 |
all_domains_variables_in_json_files=$(jq -n --argjson all_domains_variables_in_json_files "$all_domains_variables_in_json_files" --argjson domains_variables_names "$(echo "$domains_variables_names" | jq -R -s 'split("\n") | map(select(length > 0))')" '$all_domains_variables_in_json_files + $domains_variables_names | unique') |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
249 |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
250 |
# Adding all the json files content to the variable was causing "Too big variable" error |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
251 |
# Therefore, the content is saved to a temporary file and then loaded back to the variable |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
252 |
|
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
253 |
all_json_files_temp_file=$(mktemp) |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
254 |
echo "$all_json_files_contents" > "$all_json_files_temp_file" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
255 |
json_file_content_temp=$(mktemp) |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
256 |
echo "$json_file_content" > "$json_file_content_temp" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
257 |
|
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
258 |
all_json_files_contents=$(jq --arg json_file_path "$json_file_path" --slurpfile json_file_content "$json_file_content_temp" '.[$json_file_path] = $json_file_content[0]' "$all_json_files_temp_file") |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
259 |
|
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
260 |
rm "$json_file_content_temp" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
261 |
rm "$all_json_files_temp_file" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
262 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
263 |
# Update the variables_in_json_files object with the keys from the JSON file |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
264 |
variables_in_json_files=$(echo "$variables_in_json_files" | jq --arg key "$json_file_path" --argjson value "$(echo "$all_json_files_contents" | jq 'to_entries | map({key: .key, value: (.value | keys)}) | from_entries' | jq --arg key "$json_file_path" '.[$key]')" '. * {($key): $value}') |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
265 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
266 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
267 |
check_if_duplicated_domains_variable_name_between_files() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
268 |
local json_file_path="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
269 |
local domains_variables_names="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
270 |
for domains_variable_name in $domains_variables_names; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
271 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
272 |
# Check if the domains variable name exists in the all_domains_variables_in_json_files array |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
273 |
if jq -e --arg name "$domains_variable_name" 'index($name) != null' <<< $all_domains_variables_in_json_files >/dev/null 2>&1; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
274 |
# If a duplicate is found, identify the file containing the duplicate and report an error |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
275 |
local file_with_duplicate=$(jq -r --arg name "$domains_variable_name" ' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
276 |
to_entries | map(select(.value | has($name))) | .[0].key |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
277 |
' <<< $all_json_files_contents) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
278 |
last_error="ERROR: Duplicate domains variable found in $json_file_path and $file_with_duplicate file: $domains_variable_name" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
279 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
280 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
281 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
282 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
283 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
284 |
find_domain_variables_syntax_in_filterlist() { |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
285 |
local filterlist_content="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
286 |
local filterlist_path="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
287 |
local -n all_lines_with_domain_variables_in_filterlist_nameref=$3 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
288 |
# Find lines containing domain variables in the filterlist |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
289 |
# The regex to find them is simpler than in filterlist delivery to also catch domains variables in the wrong place |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
290 |
# without starting with a complex regex. The full regex is in one of the next steps |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
291 |
all_lines_with_domain_variables_in_filterlist_nameref=$(grep -P '%<\{.*\}>%' <<< $filterlist_content || echo '') |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
292 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
293 |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
294 |
check_for_similar_to_domain_variable() { |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
295 |
local filterlist_content="$1" |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
296 |
local filterlist_path="$2" |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
297 |
|
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
298 |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
299 |
# Precheck to quickly gather only the potentiall candidates for the full check |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
300 |
local weak_candidates=$(grep -P "[%{}<>].\w+.[%{}<>]" <<< $filterlist_content || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
301 |
local candidates=$(grep -P "[%{}<>].?[%{}<>].*[%{}<>].?[%{}<>]" <<< $weak_candidates || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
302 |
local strong_candidates=$(grep -oP "([^%{}<>]|^)[%{}<>]+.?[%{}<>]+.*[%{}<>]+.?[%{}<>]+([^%{}<>]|$)" <<< $candidates || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
303 |
if [ -n "$strong_candidates" ]; then |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
304 |
local lines_with_similar_to_domain_variable=$(grep -vP "([|,=]|^)%<\{\w+\}>%([,|#]|$)" <<< $candidates || echo '') |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
305 |
if [ -n "$lines_with_similar_to_domain_variable" ]; then |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
306 |
last_error="ERROR: Found a line in $filterlist_path that is similar to a domain variable, but it's not a domain variable:\n\n" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
307 |
last_error+="$lines_with_similar_to_domain_variable" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
308 |
return 1 |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
309 |
fi |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
310 |
fi |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
311 |
} |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
312 |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
313 |
process_filters() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
314 |
local all_lines_with_domain_variables_in_filterlist="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
315 |
local -n domains_variables_collected_from_filterlist_nameref="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
316 |
domains_variables_collected_from_filterlist_nameref='[]' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
317 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
318 |
for filter in $all_lines_with_domain_variables_in_filterlist; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
319 |
# Extract the domain variable from the filter |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
320 |
local domains_variable_match=$(grep -oP '(?<=%<\{).*?(?=\}>%)' <<< $filter) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
321 |
if [ "$(echo "$domains_variable_match" | wc -l)" -gt 1 ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
322 |
last_error="ERROR: More than 2 domain variables found in filter: $filter" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
323 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
324 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
325 |
# Ensure the domain variable is correctly formatted in the filter |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
326 |
local true_matches |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
327 |
true_matches=$(grep -P '(%<{(\w+)}>%(?:,~?[a-zA-Z0-9*.~-]+)*#[?@$]?#)|([,$]domain=(?:[a-zA-Z0-9*.~-]+\|)*%<{(\w+)}>%)' <<< $filter) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
328 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
329 |
if [ -z "$true_matches" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
330 |
last_error="ERROR: Domain variable added in a wrong way in filter: $filter" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
331 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
332 |
fi |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
333 |
domains_variables_collected_from_filterlist_nameref=$(jq --arg domains_variable_match "$domains_variable_match" '. + [$domains_variable_match]' <<< $domains_variables_collected_from_filterlist_nameref) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
334 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
335 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
336 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
337 |
update_matches_and_variables() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
338 |
local domains_variables_collected_from_filterlist="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
339 |
local file_path="$2" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
340 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
341 |
# Update the list of all domain variable matches in filterlists |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
342 |
all_domain_variables_matches_in_filterlists=$(jq -n --argjson all_domain_variables_matches_in_filterlists "$all_domain_variables_matches_in_filterlists" --argjson matches "$domains_variables_collected_from_filterlist" '$all_domain_variables_matches_in_filterlists + $matches | unique') |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
343 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
344 |
# Update the variables_in_included_filterlists object with the matches from the current filterlist |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
345 |
variables_in_included_filterlists=$(jq --arg key "$file_path" --argjson value "$domains_variables_collected_from_filterlist" '.[$key] = $value' <<< $variables_in_included_filterlists) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
346 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
347 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
348 |
extract_domains_variables_in_included_filterlists() { |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
349 |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
350 |
local template_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
351 |
local -n domains_variables_in_included_filterlists_nameref=$2 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
352 |
# Extract the list of included filterlists from the template |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
353 |
local included_filterlists=$(jq -r --arg template_name "$template_name" '.[$template_name].include[]' <<< $templates_content) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
354 |
domains_variables_in_included_filterlists_nameref=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
355 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
356 |
for included_filterlist in $included_filterlists; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
357 |
# Extract the domain variables from each included filterlist |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
358 |
local domains_variables=$(jq -r --arg key "$included_filterlist" '.[$key][]' <<< $variables_in_included_filterlists) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
359 |
for domain_variable in $domains_variables; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
360 |
domains_variables_in_included_filterlists_nameref+=("$domain_variable") |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
361 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
362 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
363 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
364 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
365 |
extract_domains_variables_in_included_json_files() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
366 |
local template_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
367 |
local -n domains_variables_in_included_json_files_nameref=$2 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
368 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
369 |
# Extract the list of included JSON files from the template |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
370 |
local included_json_files=$(jq -r --arg template_name "$template_name" '.[$template_name].domainsVariables[]' <<< $templates_content) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
371 |
domains_variables_in_included_json_files_nameref=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
372 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
373 |
for included_json_file in $included_json_files; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
374 |
# Extract the domain variables from each included JSON file |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
375 |
local domains_variables=$(jq -r --arg key "$included_json_file" '.[$key][]' <<< $variables_in_json_files) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
376 |
for domain_variable in $domains_variables; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
377 |
domains_variables_in_included_json_files_nameref+=("$domain_variable") |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
378 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
379 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
380 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
381 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
382 |
check_domain_variables_in_filterlists() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
383 |
local template_name="$1" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
384 |
local domains_variables_in_included_filterlists=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
385 |
local domains_variables_in_included_json_files=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
386 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
387 |
# When for example $2 was empty, then the array had one element with empty string |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
388 |
if [ -n "$2" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
389 |
domains_variables_in_included_filterlists=($2) |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
390 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
391 |
if [ -n "$3" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
392 |
domains_variables_in_included_json_files=($3) |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
393 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
394 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
395 |
# Extract the list of included filterlists and JSON files from the template |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
396 |
local included_filterlists=$(jq -r --arg template_name "$template_name" '.[$template_name].include[]' <<< $templates_content) |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
397 |
local included_json_files=$(jq -r --arg template_name "$template_name" '.[$template_name].domainsVariables[]' <<< $templates_content) |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
398 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
399 |
for domain_variable_in_filterlist in ${domains_variables_in_included_filterlists[@]}; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
400 |
local found=false |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
401 |
for domain_variable_in_json_file in ${domains_variables_in_included_json_files[@]}; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
402 |
if [ "$domain_variable_in_filterlist" = "$domain_variable_in_json_file" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
403 |
found=true |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
404 |
break |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
405 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
406 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
407 |
if ! $found; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
408 |
last_error="Error: One of the filterlists:\n\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
409 |
last_error+="$included_filterlists\n\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
410 |
last_error+="included in the template $template_name contain a domain variable $domain_variable_in_filterlist " |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
411 |
last_error+="which wasn't found in any of the domains variables files included in that template:\n\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
412 |
last_error+="$included_json_files" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
413 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
414 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
415 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
416 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
417 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
418 |
check_if_domains_variables_are_identical_in_lists_and_jsons() { |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
419 |
if [ "$all_domains_variables_in_json_files" != "$all_domain_variables_matches_in_filterlists" ]; then |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
420 |
last_error="Error: the domain variables in domain-variables file and the filter list are not the same\n" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
421 |
last_error+="Extra variables in domain-variables files:\n" |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
422 |
last_error+="$(jq -n --argjson all_domains_variables_in_json_files "$all_domains_variables_in_json_files" --argjson all_domain_variables_matches_in_filterlists "$all_domain_variables_matches_in_filterlists" '$all_domains_variables_in_json_files - $all_domain_variables_matches_in_filterlists')\n" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
423 |
last_error+="Extra variables in filter lists:\n" |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
424 |
last_error+=$(jq -n --argjson all_domains_variables_in_json_files "$all_domains_variables_in_json_files" --argjson all_domain_variables_matches_in_filterlists "$all_domain_variables_matches_in_filterlists" '$all_domain_variables_matches_in_filterlists - $all_domains_variables_in_json_files') |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
425 |
return 1 |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
426 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
427 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
428 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
429 |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
430 |
main() { |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
431 |
check_git_status |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
432 |
check_if_jq_is_installed |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
433 |
for template_name in *.txt; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
434 |
templates_names+=("$template_name") |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
435 |
# To avoid creating a subshell, the variable is passed as a reference to parse_template_data function |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
436 |
# That helps with the error handling and allows to use global variables |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
437 |
local file_data |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
438 |
# Parse data from the template |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
439 |
parse_template_data "$template_name" file_data |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
440 |
# Update the templates_content JSON with the data from the file |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
441 |
update_templates_content "$file_data" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
442 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
443 |
update_unique_json_files "$template_name" "$file_data" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
444 |
update_unique_includes "$template_name" "$file_data" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
445 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
446 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
447 |
for domains_variables_path in ${unique_json_files[@]}; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
448 |
check_if_file_exists "$domains_variables_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
449 |
local staged_domains_variables_file |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
450 |
get_staged_version_of_a_file "$domains_variables_path" staged_domains_variables_file |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
451 |
check_if_correct_domains_variables_json_structure "$staged_domains_variables_file" "$domains_variables_path" |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
452 |
local domains_variables_names_incl_duplicates |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
453 |
get_domains_variables_names_incl_duplicates "$staged_domains_variables_file" domains_variables_names_incl_duplicates |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
454 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
455 |
check_if_correct_domains_variables "$domains_variables_path" "$domains_variables_names_incl_duplicates" "$staged_domains_variables_file" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
456 |
|
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
457 |
check_if_duplicated_domains_variable_name_between_files "$domains_variables_path" "$domains_variables_names_incl_duplicates" |
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
458 |
update_domains_variables_data "$domains_variables_names_incl_duplicates" "$domains_variables_path" "$staged_domains_variables_file" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
459 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
460 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
461 |
for filterlist_path in ${unique_filterlists_to_include[@]}; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
462 |
check_if_file_exists "$filterlist_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
463 |
local filterlist_content |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
464 |
get_staged_version_of_a_file "$filterlist_path" filterlist_content |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
465 |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
466 |
check_for_similar_to_domain_variable "$filterlist_content" "$filterlist_path" |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
467 |
local all_lines_with_domain_variables_in_filterlist |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
468 |
find_domain_variables_syntax_in_filterlist "$filterlist_content" "$filterlist_path" all_lines_with_domain_variables_in_filterlist |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
469 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
470 |
if [ -z "$all_lines_with_domain_variables_in_filterlist" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
471 |
# In case of lack of matches, the value of all_lines_with_domain_variables_in_filterlist should have just |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
472 |
# a message to show. |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
473 |
local domains_variables_collected_from_filterlist='[]' |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
474 |
else |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
475 |
local domains_variables_collected_from_filterlist |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
476 |
process_filters "$all_lines_with_domain_variables_in_filterlist" domains_variables_collected_from_filterlist |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
477 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
478 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
479 |
update_matches_and_variables "$domains_variables_collected_from_filterlist" "$filterlist_path" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
480 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
481 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
482 |
local domains_variables_in_included_filterlists=() |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
483 |
for template_name in ${templates_names[@]}; do |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
484 |
extract_domains_variables_in_included_filterlists "$template_name" domains_variables_in_included_filterlists |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
485 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
486 |
local domains_variables_in_included_json_files |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
487 |
extract_domains_variables_in_included_json_files "$template_name" domains_variables_in_included_json_files |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
488 |
check_domain_variables_in_filterlists "$template_name" "$(echo ${domains_variables_in_included_filterlists[@]})" "$(echo ${domains_variables_in_included_json_files[@]})" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
489 |
done |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
490 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
491 |
check_if_domains_variables_are_identical_in_lists_and_jsons |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
492 |
} |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
493 |
|
25708 | 494 |
check_unit_tests() { |
495 |
local exit_status=0 |
|
496 |
||
497 |
||
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
498 |
./pre-commit-src/tests/pre-commit-tests.sh '--no-verbose' || exit_status=1 |
25708 | 499 |
function_exit_code=$? |
500 |
if [ $exit_status -ne 1 ]; then |
|
501 |
exit_status=$function_exit_code |
|
502 |
fi |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
503 |
|
25708 | 504 |
if [ $exit_status -ne 0 ]; then |
505 |
last_error="Unit tests failed with exit code $exit_status" |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
506 |
last_error+="\nPlease fix the issues before continuing" |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
507 |
last_error+="To check the details run 'pre-commit-src/tests/pre-commit-tests.sh'" |
25708 | 508 |
return $exit_status |
509 |
else |
|
510 |
last_error="Unit tests passed successfully" |
|
511 |
fi |
|
512 |
} |
|
513 |
||
514 |
check_pre_commit_files() { |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
515 |
pre_commit_git_status=$(git status :pre-commit-src/pre-commit) |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
516 |
logs_for_unstaged_changes_in_pre_commit=$(grep -s "Changes not staged for commit" <<< $pre_commit_git_status || grep -s "Untracked files" <<< $pre_commit_git_status || echo '') |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
517 |
if ! [ -z "$logs_for_unstaged_changes_in_pre_commit" ]; then |
25708 | 518 |
last_error="Unstaged changes detected in pre-commit file. Stage pre-commit changes before continuing." |
519 |
return 1 |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
520 |
fi |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
521 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
522 |
pre_commit_tests_git_status=$(git status :pre-commit-src/tests/pre-commit-tests.sh) |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
523 |
logs_for_unstaged_changes_in_pre_commit_tests=$(grep -s "Changes not staged for commit" <<< $pre_commit_tests_git_status || grep -s "Untracked files" <<< $pre_commit_tests_git_status || echo '') |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
524 |
if ! [ -z "$logs_for_unstaged_changes_in_pre_commit_tests" ]; then |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
525 |
last_error="Unstaged changes detected in pre-commit-tests file. Stage pre-commit tests changes before continuing." |
25708 | 526 |
return 1 |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
527 |
fi |
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
528 |
|
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
529 |
# Only if something changed in pre commit or pre commit tests the unit tests should be run |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
530 |
logs_for_commited_changes_in_pre_commit_or_test=$(grep -s "Changes to be committed" <<< $pre_commit_tests_git_status || grep -s "Changes to be committed" <<< $pre_commit_git_status || echo '') |
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
531 |
if ! [ -z "$logs_for_commited_changes_in_pre_commit_or_test" ]; then |
25708 | 532 |
check_unit_tests |
533 |
fi |
|
534 |
} |
|
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
535 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
536 |
|
25708 | 537 |
# For testing purposes only if the script has no arguments or the argument is main the process should run |
538 |
# thanks to that the script can be tested without running the main function |
|
25710
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
539 |
if [ -z "${1:-}" ]; then |
b3dddcc5f208
Improved performance, messaging, fix bugs and tests
eyeokg <k.galczynski@eyeo.com>
parents:
25709
diff
changeset
|
540 |
echo 'Running pre-commit checks...' |
25708 | 541 |
main |
542 |
check_pre_commit_files |
|
543 |
||
25709
ca5e4f738e57
Improved pre_commit and tests, removed old pre-commit
eyeokg <k.galczynski@eyeo.com>
parents:
25708
diff
changeset
|
544 |
echo "Pre-commit checks passed successfully. Double check if there were no error messages above this message before pushing" |
25708 | 545 |
exit 0 |
25707
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
546 |
|
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
547 |
elif [ "$1" = "--load-only" ]; then |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
548 |
testing=true |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
549 |
echo "Script loaded successfully" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
550 |
else |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
551 |
"$@" |
2a19e3a985b6
Moved pre-commit files and added first test
eyeokg <k.galczynski@eyeo.com>
parents:
diff
changeset
|
552 |
fi |