@@ -28,7 +28,9 @@ function check_repo_release() {
28
28
# download the GPG signature from the given provider release
29
29
gh release download --repo " ${owner} /${repo} " " ${release} " -p " *SHA256*"
30
30
# verify the signatures
31
+ # shellcheck disable=SC2312
31
32
sigfile=$( find . -name " *SHA256SUMS.sig" -print | head -1)
33
+ # shellcheck disable=SC2312
32
34
shafile=$( find . -name " *SHA256SUMS" -print | head -1)
33
35
if gpg --verify " ${sigfile} " " ${shafile} " > /dev/null 2>&1
34
36
then
@@ -44,6 +46,8 @@ function check_repo_release() {
44
46
function check_repo_versions() {
45
47
local owner=" ${1} "
46
48
local repo=" ${2} "
49
+ local releases
50
+ releases=" $( gh release list --exclude-drafts --exclude-pre-releases --repo " ${owner} /${repo} " -L 3 -O desc --json name -q ' .[].name' ) "
47
51
# check recent releases of the owner's repo (3 releases checked)
48
52
while IFS= read -r release; do
49
53
if check_repo_release " ${owner} " " ${repo} " " ${release} "
@@ -52,14 +56,15 @@ function check_repo_versions() {
52
56
return 0
53
57
fi
54
58
# list the latest 100 releases of the repository and get only the release names
55
- done <<< " $(gh release list --exclude-drafts --exclude-pre-releases --repo " ${owner} / ${repo} " -L 3 -O desc --json name -q '.[].name') "
59
+ done <<< " ${releases} "
56
60
# if no release is matching the signature, return error
57
61
return 1
58
62
}
59
63
60
64
function check_owner_repos() {
61
65
local owner=" ${1} "
62
66
# list first 100 repos of the owner and get all the terraform-provider-* repos to check their releases
67
+ local repos
63
68
repos=" $( gh repo list " ${owner} " --no-archived --source -L 100 --json name -q ' .[].name | select(. | contains("terraform-provider-"))' ) "
64
69
while IFS= read -r repo; do
65
70
if check_repo_versions " ${owner} " " ${repo} " " ${release} "
@@ -75,6 +80,7 @@ apt update && apt install -y gpg
75
80
# import the submitted key
76
81
gpg --import " ${keyfile} " 2> /dev/null
77
82
# trust the newly imported key
83
+ # shellcheck disable=SC2312
78
84
for fpr in $( gpg --list-keys --with-colons | grep " pub:" | awk -F: ' {print $5}' | sort -u) ; do echo -e " 5\ny\n" | gpg -q --command-fd 0 --expert --edit-key " ${fpr} " trust; done
79
85
80
86
if [[ -n " ${provider_name} " ]]; then
@@ -83,20 +89,19 @@ if [[ -n "${provider_name}" ]]; then
83
89
if ! check_repo_versions " ${owner} " " ${repo} "
84
90
then
85
91
gh issue comment " ${NUMBER} " -b " Key is matching no recent release of ${owner} /${repo} "
86
- echo " Key is matching no recent release of ${owner} /${repo} "
87
92
exit 0
88
93
fi
89
94
else
90
95
# if no provider name is given, will check the key against any terraform-provider-* repo of the owner
91
96
if ! check_owner_repos " ${owner} "
92
97
then
93
98
gh issue comment " ${NUMBER} " -b " Key is matching no recent release from any 'terraform-provider-*' of ${owner} "
94
- echo " Key is matching no recent release from any 'terraform-provider-*' of ${owner} "
95
99
exit 0
96
100
fi
97
101
fi
98
102
gh issue comment " ${NUMBER} " -b " Key provider signatures validation succeeded!"
99
103
100
104
# cleanup keys
105
+ # shellcheck disable=SC2312
101
106
for fpr in $( gpg --list-keys --with-colons -q | grep " pub:" | awk -F: ' {print $5}' | sort -u) ; do echo -e " y\n" | gpg --command-fd 0 --expert --delete-keys " ${fpr} " ; done
102
107
0 commit comments