diff options
Diffstat (limited to 'pkgs/applications/networking/cluster/terraform-providers/update-provider')
-rwxr-xr-x | pkgs/applications/networking/cluster/terraform-providers/update-provider | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/pkgs/applications/networking/cluster/terraform-providers/update-provider b/pkgs/applications/networking/cluster/terraform-providers/update-provider index 255e82aee1d..4310fcdcc27 100755 --- a/pkgs/applications/networking/cluster/terraform-providers/update-provider +++ b/pkgs/applications/networking/cluster/terraform-providers/update-provider @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#! nix-shell -I nixpkgs=../../../../.. -i bash -p coreutils curl jq moreutils nix nix-prefetch +#! nix-shell -I nixpkgs=../../../../.. -i bash -p coreutils curl git jq moreutils nix nix-prefetch # shellcheck shell=bash # vim: ft=sh # @@ -75,45 +75,46 @@ if [[ -z ${provider} ]]; then exit 1 fi -provider_name=$(basename "${provider}") - # Usage: read_attr <key> read_attr() { - jq -r ".\"${provider_name}\".\"$1\"" providers.json + jq -r ".\"${provider}\".\"$1\"" providers.json } # Usage: update_attr <key> <value> update_attr() { if [[ $2 == "null" ]]; then - jq -S ".\"${provider_name}\".\"$1\" = null" providers.json | sponge providers.json + jq -S ".\"${provider}\".\"$1\" = null" providers.json | sponge providers.json else - jq -S ".\"${provider_name}\".\"$1\" = \"$2\"" providers.json | sponge providers.json + jq -S ".\"${provider}\".\"$1\" = \"$2\"" providers.json | sponge providers.json fi } -prefetch_github() { - # of a given owner, repo and rev, fetch the tarball and return the output of - # `nix-prefetch-url` - local owner=$1 - local repo=$2 - local rev=$3 - nix-prefetch-url --unpack "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz" +repo_root=$(git rev-parse --show-toplevel) + +generate_hash() { + nix-prefetch -I nixpkgs="${repo_root}" \ + "{ sha256 }: (import ${repo_root} {}).terraform-providers.${provider}.$1.overrideAttrs (_: { $2 = sha256; })" } -old_source_address="$(read_attr provider-source-address)" -old_vendor_sha256=$(read_attr vendorSha256) -old_version=$(read_attr version) +echo_provider() { + echo "== terraform-providers.${provider}: $* ==" +} if [[ ${provider} =~ ^[^/]+/[^/]+$ ]]; then + echo_provider "init" source_address=registry.terraform.io/${provider} + provider=$(basename "${provider}") + update_attr "provider-source-address" "${source_address}" + update_attr version "0" + # create empty stings so nix-prefetch works + update_attr sha256 "" + update_attr vendorSha256 "" else - source_address=${old_source_address} -fi -if [[ ${source_address} == "null" ]]; then - echo "Could not find the source address for provider: ${provider}" - exit 1 + source_address="$(read_attr provider-source-address)" fi -update_attr "provider-source-address" "${source_address}" + +old_vendor_sha256=$(read_attr vendorSha256) +old_version=$(read_attr version) # The provider source address (used inside Terraform `required_providers` block) is # used to compute the registry API endpoint @@ -125,8 +126,10 @@ registry_response=$(curl -s https://"${source_address/\///v1/providers/}") version="$(jq -r '.version' <<<"${registry_response}")" if [[ ${old_version} == "${version}" && ${force} != 1 && -z ${vendorSha256} && ${old_vendor_sha256} != "${vendorSha256}" ]]; then - echo "${provider_name} is already at version ${version}" + echo_provider "already at version ${version}" exit +else + echo_provider "updating from ${old_version} to ${version}" fi update_attr version "${version}" @@ -138,28 +141,23 @@ repo="$(echo "${provider_source_url}" | cut -d '/' -f 5)" update_attr repo "${repo}" rev="$(jq -r '.tag' <<<"${registry_response}")" update_attr rev "${rev}" -sha256=$(prefetch_github "${org}" "${repo}" "${rev}") +echo_provider "calculating sha256" +sha256=$(generate_hash src outputHash) update_attr sha256 "${sha256}" if [[ -z ${vendorSha256} ]]; then if [[ ${old_vendor_sha256} == null ]]; then vendorSha256=null - elif [[ -n ${old_vendor_sha256} ]]; then - echo "=== Calculating vendorSha256 ===" - vendorSha256=$(nix-prefetch -I nixpkgs=../../../../.. "{ sha256 }: (import ../../../../.. {}).terraform-providers.${provider_name}.go-modules.overrideAttrs (_: { vendorSha256 = sha256; })") - # Deal with nix unstable - if [[ ${vendorSha256} == sha256-* ]]; then - vendorSha256=$(nix --extra-experimental-features nix-command hash to-base32 "${vendorSha256}") - fi + else + echo_provider "calculating vendorSha256" + vendorSha256=$(generate_hash go-modules vendorSha256) fi fi -if [[ -n ${vendorSha256} ]]; then - update_attr vendorSha256 "${vendorSha256}" -fi +update_attr vendorSha256 "${vendorSha256}" # Check that the provider builds if [[ ${build} == 1 ]]; then - echo "=== Building terraform-providers.${provider_name} ===" - nix-build --no-out-link ../../../../.. -A "terraform-providers.${provider_name}" + echo_provider "building" + nix-build --no-out-link "${repo_root}" -A "terraform-providers.${provider}" fi |