terraform-providers: add homepage that can be used as provider-source-address

also proper urls in the json
This commit is contained in:
zowoq 2022-11-26 18:42:21 +10:00
parent 70f5922404
commit b18d379a91
4 changed files with 157 additions and 156 deletions

View File

@ -24,10 +24,13 @@ let
, proxyVendor ? false
, mkProviderFetcher ? fetchFromGitHub
, mkProviderGoModule ? buildGoModule
# Looks like "registry.terraform.io/vancluever/acme"
, provider-source-address
# "https://registry.terraform.io/providers/vancluever/acme"
, homepage ? ""
# "registry.terraform.io/vancluever/acme"
, provider-source-address ? lib.replaceStrings [ "https://registry" ".io/providers" ] [ "registry" ".io" ] homepage
, ...
}@attrs:
assert lib.stringLength provider-source-address > 0;
mkProviderGoModule {
pname = repo;
inherit vendorHash version deleteVendor proxyVendor;
@ -42,6 +45,10 @@ let
inherit owner repo rev hash;
};
meta = {
inherit homepage;
};
# Move the provider to libexec
postInstall = ''
dir=$out/libexec/terraform-providers/${provider-source-address}/${version}/''${GOOS}_''${GOARCH}

View File

@ -9,7 +9,7 @@ readarray -t providers < <(
jq -r 'to_entries
| map_values(.value + { alias: .key })
| .[]
| select(."provider-source-address"?)
| select(."homepage"?)
| .alias' providers.json
)

View File

@ -103,27 +103,21 @@ echo_provider() {
pushd "$(dirname "$0")" >/dev/null
if [[ ${provider} =~ ^[^/]+/[^/]+$ ]]; then
echo_provider "init"
source_address=registry.terraform.io/${provider}
homepage="https://registry.terraform.io/providers/${provider}"
provider=$(basename "${provider}")
update_attr "provider-source-address" "${source_address}"
echo_provider "init"
update_attr homepage "${homepage}"
# create empty stings so nix-prefetch works
update_attr hash ""
update_attr vendorHash ""
else
source_address="$(read_attr provider-source-address)"
fi
homepage="$(read_attr homepage)"
old_vendor_hash=$(read_attr vendorHash)
old_rev=$(read_attr rev)
# The provider source address (used inside Terraform `required_providers` block) is
# used to compute the registry API endpoint
#
# registry.terraform.io/hashicorp/aws (provider source address)
# registry.terraform.io/providers/hashicorp/aws (provider URL for the website)
# registry.terraform.io/v1/providers/hashicorp/aws (provider URL for the JSON API)
registry_response=$(curl -s https://"${source_address/\///v1/providers/}")
registry_response=$(curl -s "${homepage//providers/v1/providers}")
rev="$(jq -r '.tag' <<<"${registry_response}")"
if [[ ${old_rev} == "${rev}" && ${force} != 1 && -z ${vendorHash} && ${old_vendor_hash} != "${vendorHash}" ]]; then