-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathfind_changed_files.sh
executable file
·62 lines (57 loc) · 2.04 KB
/
find_changed_files.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
# Find changed files in a build either via pull request API or compare API
set -x
function set_output_files {
local JSON=$1
local OUTPUT_VAR=$2
local EXCLUDE_STATUS=$3
if [[ -z $JSON || -z $OUTPUT_VAR || -z EXCLUDE_STATUS ]]
then
echo "missing some parameters: $JSON $OUTPUT_VAR $EXCLUDE_STATUS"
exit 1
fi
FILES=$(echo $JSON | jq --arg excludedStatus $EXCLUDED_STATUS -r '.[] | select(.status != "$excludedStatus") | .filename' | tr '\r\n' ' ')
echo "::set-output name=${OUTPUT_VAR}::$FILES"
}
cat $GITHUB_EVENT_PATH
COMPARE=$(jq '.compare' $GITHUB_EVENT_PATH)
PR=$(jq -r '.pull_request._links.self.href' $GITHUB_EVENT_PATH)
echo "-----"
echo "compare: |$COMPARE|"
echo "PR: |$PR|"
echo "------"
if [[ -z "${GITHUB_TOKEN}" ]]; then
TOKEN_HEADER=""
else
TOKEN_HEADER="Authorization: token $GITHUB_TOKEN"
fi
FORMAT_HEADER="Accept: application/vnd.github.v3+json"
if [[ $COMPARE != null ]]
then
# compare might be a compare url or a commit url (single commit case)
if [[ $COMPARE == *"/commit/"* ]]
then
COMPARE_API=$(echo $COMPARE | sed 's/github.com\//api.github.com\/repos\//g'| sed 's/commit/commits/'| sed 's/"//g')
elif [[ $COMPARE == *"/compare/"* ]]
then
#compare url is set, using it from the API
COMPARE_API=$(echo $COMPARE | sed 's/github.com\//api.github.com\/repos\//g'| sed 's/"//g')
else
echo "unknown compare format: $COMPARE"
exit 1
fi
# TODO paginate to support more than 100 files
COMPARE_RESPONSE=$(curl -H $FORMAT_HEADER -H "$TOKEN_HEADER" "$COMPARE_API?per_page=100")
FILES_JSON=$(echo $COMPARE_RESPONSE | jq -r '.files')
elif [[ $PR != null ]]
then
#this is a PR, using its files API
PR_FILES_API="$PR/files"
# TODO paginate to support more than 100 files
FILES_JSON=$(curl -H $FORMAT_HEADER -H "$TOKEN_HEADER" "$PR_FILES_API?per_page=100")
else
echo "CANNOT FIND CHANGED FILES"
exit 1
fi
set_output_files "$FILES_JSON" "files" "removed"
set_output_files "$FILES_JSON" "files_including_removals" ""