blob: 4d380a141b8f370f956bc36826382c9d52f9185a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p coreutils curl git jq moreutils nix nurl
# shellcheck shell=bash
# vim: ft=sh
#
# Update a terraform provider to the latest version advertised at the
# provider source address.
#
set -euo pipefail
shopt -s inherit_errexit
show_usage() {
cat <<DOC
Usage: ./update-provider [--force] [--no-build] [<owner>/]<provider>
Update a single provider in the providers.json inventory file.
For example to update 'terraform-providers.aws' run:
./update-provider aws
If the provider is not in the list already, use the form '<owner>/<provider>'
to add the provider to the list:
./update-provider hetznercloud/hcloud
Options:
* --force: Force the update even if the version matches.
* --no-build: Don't build provider
DOC
}
build=1
force=
provider=
spdx=1
while [[ $# -gt 0 ]]; do
case "$1" in
-h | --help)
show_usage
exit
;;
--force)
force=1
shift
;;
--no-build)
build=0
shift
;;
--no-spdx)
spdx=0
shift
;;
*)
if [[ -n ${provider} ]]; then
echo "ERROR: provider name was passed two times: '${provider}' and '$1'"
echo "Use --help for more info"
exit 1
fi
provider=$1
shift
;;
esac
done
if [[ -z ${provider} ]]; then
echo "ERROR: No providers specified!"
echo
show_usage
exit 1
fi
# Usage: read_attr <key>
read_attr() {
jq -r ".\"${provider}\".\"$1\"" providers.json
}
# Usage: update_attr <key> <value>
update_attr() {
if [[ $2 == "null" ]]; then
jq -S ".\"${provider}\".\"$1\" = null" providers.json | sponge providers.json
else
jq -S ".\"${provider}\".\"$1\" = \"$2\"" providers.json | sponge providers.json
fi
}
repo_root=$(git rev-parse --show-toplevel)
generate_hash() {
nurl --expr "(import ${repo_root} {}).terraform-providers.${provider}.$1"
}
echo_provider() {
echo "== terraform-providers.${provider}: $* =="
}
pushd "$(dirname "$0")" >/dev/null
if [[ ${provider} =~ ^[^/]+/[^/]+$ ]]; then
homepage="https://registry.terraform.io/providers/${provider}"
provider=$(basename "${provider}")
echo_provider "init"
update_attr homepage "${homepage}"
# create empty stings so nix-prefetch works
update_attr hash ""
update_attr vendorHash ""
update_attr spdx ""
fi
homepage="$(read_attr homepage)"
registry_response=$(curl -s "${homepage//providers/v1/providers}")
old_rev="$(read_attr rev)"
rev="$(jq -r '.tag' <<<"${registry_response}")"
if [[ ${force} != 1 ]]; then
if [[ ${old_rev} == "${rev}" ]]; then
echo_provider "already at version ${rev}"
exit
fi
if [[ ${rev//v/} =~ [[:alpha:]] ]]; then
echo_provider "not updating to unstable version ${rev}"
exit
fi
fi
echo_provider "updating from ${old_rev} to ${rev}"
update_attr rev "${rev}"
provider_source_url="$(jq -r '.source' <<<"${registry_response}")"
org="$(echo "${provider_source_url}" | cut -d '/' -f 4)"
update_attr owner "${org}"
repo="$(echo "${provider_source_url}" | cut -d '/' -f 5)"
update_attr repo "${repo}"
if [[ ${spdx} == 1 ]]; then
old_spdx="$(read_attr spdx)"
if [[ ${old_spdx} != null ]]; then
spdx="$(curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/${org}/${repo}/license" | jq -r '.license.spdx_id')"
update_attr spdx "${spdx}"
fi
fi
echo_provider "calculating hash"
hash=$(generate_hash src)
update_attr hash "${hash}"
old_vendor_hash="$(read_attr vendorHash)"
if [[ ${old_vendor_hash} != null ]]; then
echo_provider "calculating vendorHash"
vendorHash=$(generate_hash goModules)
update_attr vendorHash "${vendorHash}"
fi
# Check that the provider builds
if [[ ${build} == 1 ]]; then
echo_provider "building"
nix-build --no-out-link "${repo_root}" -A "terraform-providers.${provider}"
fi
popd >/dev/null
|