|
1 | 1 | #!/bin/sh -l |
2 | 2 |
|
3 | | -set -eu |
| 3 | +set -u |
4 | 4 |
|
5 | 5 | ### VARIABLES ### |
6 | 6 |
|
7 | 7 | # From action env: |
8 | 8 | # REPO_DIR |
9 | 9 | # TAG |
10 | 10 |
|
11 | | -ACT_LOG_PATH=_visualize/LAST_${TAG}_UPDATE.txt |
12 | | -ACT_INPUT_PATH=_visualize |
13 | 11 | ACT_DATA_PATH=visualize/github-data |
| 12 | +ACT_INPUT_PATH=_visualize |
| 13 | +ACT_LOG_PATH=_visualize |
| 14 | +ACT_LOG_FILE=${ACT_LOG_PATH}/LAST_${TAG}_UPDATE.txt |
14 | 15 |
|
15 | 16 | ### VALIDATE UPDATE ### |
16 | 17 |
|
17 | 18 | cd $REPO_DIR |
18 | 19 |
|
19 | | -# TODO creation of new file (from new TAG) should be valid |
20 | | -# # Timestamp log changed |
21 | | -# cat $ACT_LOG_PATH |
22 | | -# if [ $(git diff --name-only HEAD | grep -c "${ACT_LOG_PATH}") -ne "1" ] |
23 | | -# then |
24 | | -# echo "UPDATE FAILED - Timestamp log unchanged" |
25 | | -# exit 1 |
26 | | -# else |
27 | | -# echo "Timestamp log confirmed" |
28 | | -# fi |
29 | | - |
30 | | -# Logged START and END without FAILED |
31 | | -if [ $(cat $ACT_LOG_PATH | grep -c FAILED) -ne "0" ] || [ $(cat $ACT_LOG_PATH | grep -c START) -ne "1" ] || [ $(cat $ACT_LOG_PATH | grep -c END) -ne "1" ] |
| 20 | +# Timestamp log changed |
| 21 | +cat $ACT_LOG_FILE |
| 22 | +if [ $(git diff --name-only HEAD | grep -c "${ACT_LOG_FILE}") -ne "1" ] |
| 23 | + then |
| 24 | + # or is new |
| 25 | + if [ $(git status --porcelain | grep "^?? " | awk '{print $2}' | grep -c "${ACT_LOG_FILE}") -ne "1" ] |
| 26 | + then |
| 27 | + echo "UPDATE FAILED - Timestamp log unchanged" |
| 28 | + exit 1 |
| 29 | + else |
| 30 | + echo "Timestamp log confirmed as new" |
| 31 | + fi |
| 32 | + else |
| 33 | + echo "Timestamp log confirmed as updated" |
| 34 | +fi |
| 35 | + |
| 36 | +# Logged START and END without FAILED |
| 37 | +if [ $(cat $ACT_LOG_FILE | grep -c FAILED) -ne "0" ] || [ $(cat $ACT_LOG_FILE | grep -c START) -ne "1" ] || [ $(cat $ACT_LOG_FILE | grep -c END) -ne "1" ] |
32 | 38 | then |
33 | 39 | echo "UPDATE FAILED - Invalid timestamp log" |
34 | 40 | exit 1 |
35 | 41 | else |
36 | 42 | echo "Timestamp log valid" |
37 | 43 | fi |
38 | 44 |
|
39 | | -# All changes are to valid files only |
| 45 | +# All new files are valid additions ( <ACT_DATA_PATH>/*.json | <ACT_LOG_PATH>/LAST_*_UPDATE.txt ) |
| 46 | +git status --porcelain | grep --color=never "^?? " |
| 47 | +UNTRACKED_COUNT=$(git status --porcelain | grep -c "^?? ") |
| 48 | +VALID_UNTRACKED_COUNT=$(git status --porcelain | grep "^?? " | awk '{print $2}' | grep -c -E "(^${ACT_DATA_PATH}\/\S+\.json$)|(^${ACT_LOG_PATH}\/LAST_\S+\_UPDATE.txt$)") |
| 49 | +if [ "$UNTRACKED_COUNT" -ne "$VALID_UNTRACKED_COUNT" ] |
| 50 | + then |
| 51 | + echo "UPDATE FAILED - Unexpected new files" |
| 52 | + exit 1 |
| 53 | + else |
| 54 | + echo "New files validated" |
| 55 | +fi |
| 56 | + |
| 57 | +# All changes are to expected files only ( <ACT_DATA_PATH>/*.json | <ACT_INPUT_PATH>/input*.json | <ACT_LOG_PATH>/LAST_*_UPDATE.txt ) |
40 | 58 | git diff --name-only HEAD |
41 | 59 | CHANGE_COUNT=$(git diff --name-only HEAD | grep -c -E ".+") |
42 | | -VALID_COUNT=$(git diff --name-only HEAD | grep -c -E "(^${ACT_DATA_PATH}\/\S+\.json$)|(^${ACT_INPUT_PATH}\/input\S+\.json$)|(${ACT_LOG_PATH})") |
43 | | -if [ "$CHANGE_COUNT" -ne "$VALID_COUNT" ] |
| 60 | +VALID_CHANGE_COUNT=$(git diff --name-only HEAD | grep -c -E "(^${ACT_DATA_PATH}\/\S+\.json$)|(^${ACT_INPUT_PATH}\/input\S+\.json$)|(^${ACT_LOG_PATH}\/LAST_\S+\_UPDATE.txt$)") |
| 61 | +if [ "$CHANGE_COUNT" -ne "$VALID_CHANGE_COUNT" ] |
44 | 62 | then |
45 | 63 | echo "UPDATE FAILED - Unexpected file changes" |
46 | 64 | exit 1 |
47 | 65 | else |
48 | 66 | echo "Changed files validated" |
49 | 67 | fi |
50 | 68 |
|
| 69 | +echo "VALIDATION SUCCESSFUL - All checks passed" |
| 70 | + |
51 | 71 | exit 0 |
0 commit comments