git.iko.soy/typeable/nixpkgs
on master help sign in
terraform-providers: refactor scripts

- improve script output - use sri hashes, same as recent versions of `nix`

commitc32a688f82fbc01f489eeeb078621f7301e1e740 authorzowoq <59103226+zowoq@users.noreply.github.com> dateSun 13 Mar 2022, 12:21 (5 years ago) parent07f23cc
2 files changed+42−41
pkgs/applications/networking/cluster/terraform-providers/update-all-providers+8−5 pkgs/applications/networking/cluster/terraform-providers/update-provider+34−36
pkgs/applications/networking/cluster/terraform-providers/update-all-providers+8−5
@@ -5,7 +5,7 @@
55# Update all providers which have specified provider source address
66set -euo pipefail
77
8−providers=$(
8+readarray -t providers < <(
99 jq -r 'to_entries
1010 | map_values(.value + { alias: .key })
1111 | .[]
@@ -13,10 +13,13 @@ providers=$(
1313 | .alias' providers.json
1414)
1515
16−echo "Will update providers:"
17−echo "${providers}"
16+cat <<EOF
17+Will update ${#providers[@]} providers:
1818
19−for provider in ${providers}; do
20− echo "Updating ${provider}"
19+${providers[*]}
20+
21+EOF
22+
23+for provider in "${providers[@]}"; do
2124 ./update-provider "$@" "${provider}"
2225done
pkgs/applications/networking/cluster/terraform-providers/update-provider+34−36
@@ -1,5 +1,5 @@
11#!/usr/bin/env nix-shell
2−#! nix-shell -I nixpkgs=../../../../.. -i bash -p coreutils curl jq moreutils nix nix-prefetch
2+#! nix-shell -I nixpkgs=../../../../.. -i bash -p coreutils curl git jq moreutils nix nix-prefetch
33# shellcheck shell=bash
44# vim: ft=sh
55#
@@ -75,45 +75,46 @@ if [[ -z ${provider} ]]; then
7575 exit 1
7676fi
7777
78−provider_name=$(basename "${provider}")
79−
8078# Usage: read_attr <key>
8179read_attr() {
82− jq -r ".\"${provider_name}\".\"$1\"" providers.json
80+ jq -r ".\"${provider}\".\"$1\"" providers.json
8381}
8482
8583# Usage: update_attr <key> <value>
8684update_attr() {
8785 if [[ $2 == "null" ]]; then
88− jq -S ".\"${provider_name}\".\"$1\" = null" providers.json | sponge providers.json
86+ jq -S ".\"${provider}\".\"$1\" = null" providers.json | sponge providers.json
8987 else
90− jq -S ".\"${provider_name}\".\"$1\" = \"$2\"" providers.json | sponge providers.json
88+ jq -S ".\"${provider}\".\"$1\" = \"$2\"" providers.json | sponge providers.json
9189 fi
9290}
9391
94−prefetch_github() {
95− # of a given owner, repo and rev, fetch the tarball and return the output of
96− # `nix-prefetch-url`
97− local owner=$1
98− local repo=$2
99− local rev=$3
100− nix-prefetch-url --unpack "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"
92+repo_root=$(git rev-parse --show-toplevel)
93+
94+generate_hash() {
95+ nix-prefetch -I nixpkgs="${repo_root}" \
96+ "{ sha256 }: (import ${repo_root} {}).terraform-providers.${provider}.$1.overrideAttrs (_: { $2 = sha256; })"
10197}
10298
103−old_source_address="$(read_attr provider-source-address)"
104−old_vendor_sha256=$(read_attr vendorSha256)
105−old_version=$(read_attr version)
99+echo_provider() {
100+ echo "== terraform-providers.${provider}: $* =="
101+}
106102
107103if [[ ${provider} =~ ^[^/]+/[^/]+$ ]]; then
104+ echo_provider "init"
108105 source_address=registry.terraform.io/${provider}
106+ provider=$(basename "${provider}")
107+ update_attr "provider-source-address" "${source_address}"
108+ update_attr version "0"
109+ # create empty stings so nix-prefetch works
110+ update_attr sha256 ""
111+ update_attr vendorSha256 ""
109112else
110− source_address=${old_source_address}
111−fi
112−if [[ ${source_address} == "null" ]]; then
113− echo "Could not find the source address for provider: ${provider}"
114− exit 1
113+ source_address="$(read_attr provider-source-address)"
115114fi
116−update_attr "provider-source-address" "${source_address}"
115+
116+old_vendor_sha256=$(read_attr vendorSha256)
117+old_version=$(read_attr version)
117118
118119# The provider source address (used inside Terraform `required_providers` block) is
119120# used to compute the registry API endpoint
@@ -125,8 +126,10 @@ registry_response=$(curl -s https://"${source_address/\///v1/providers/}")
125126
126127version="$(jq -r '.version' <<<"${registry_response}")"
127128if [[ ${old_version} == "${version}" && ${force} != 1 && -z ${vendorSha256} && ${old_vendor_sha256} != "${vendorSha256}" ]]; then
128− echo "${provider_name} is already at version ${version}"
129+ echo_provider "already at version ${version}"
129130 exit
131+else
132+ echo_provider "updating from ${old_version} to ${version}"
130133fi
131134update_attr version "${version}"
132135
@@ -138,28 +141,23 @@ repo="$(echo "${provider_source_url}" | cut -d '/' -f 5)"
138141update_attr repo "${repo}"
139142rev="$(jq -r '.tag' <<<"${registry_response}")"
140143update_attr rev "${rev}"
141−sha256=$(prefetch_github "${org}" "${repo}" "${rev}")
144+echo_provider "calculating sha256"
145+sha256=$(generate_hash src outputHash)
142146update_attr sha256 "${sha256}"
143147
144148if [[ -z ${vendorSha256} ]]; then
145149 if [[ ${old_vendor_sha256} == null ]]; then
146150 vendorSha256=null
147− elif [[ -n ${old_vendor_sha256} ]]; then
148− echo "=== Calculating vendorSha256 ==="
149− vendorSha256=$(nix-prefetch -I nixpkgs=../../../../.. "{ sha256 }: (import ../../../../.. {}).terraform-providers.${provider_name}.go-modules.overrideAttrs (_: { vendorSha256 = sha256; })")
150− # Deal with nix unstable
151− if [[ ${vendorSha256} == sha256-* ]]; then
152− vendorSha256=$(nix --extra-experimental-features nix-command hash to-base32 "${vendorSha256}")
153− fi
151+ else
152+ echo_provider "calculating vendorSha256"
153+ vendorSha256=$(generate_hash go-modules vendorSha256)
154154 fi
155155fi
156156
157−if [[ -n ${vendorSha256} ]]; then
158− update_attr vendorSha256 "${vendorSha256}"
159−fi
157+update_attr vendorSha256 "${vendorSha256}"
160158
161159# Check that the provider builds
162160if [[ ${build} == 1 ]]; then
163− echo "=== Building terraform-providers.${provider_name} ==="
164− nix-build --no-out-link ../../../../.. -A "terraform-providers.${provider_name}"
161+ echo_provider "building"
162+ nix-build --no-out-link "${repo_root}" -A "terraform-providers.${provider}"
165163fi