#!/usr/bin/env bash # Bash 3 compatible for Darwin # For getting the latest version of plugins automatically API_URL="https://api.github.com/repos/pulumi" # Version of Pulumi from # https://www.pulumi.com/docs/get-started/install/versions/ VERSION="3.14.0" # A hashmap containing a plugin's name and it's respective repository inside # Pulumi's Github organization declare -A pulumi_repos pulumi_repos=( ["auth0"]="pulumi-auth0" ["aws"]="pulumi-aws" ["azure"]="pulumi-azure" ["cloudflare"]="pulumi-cloudflare" ["consul"]="pulumi-consul" ["datadog"]="pulumi-datadog" ["digitalocean"]="pulumi-digitalocean" ["docker"]="pulumi-docker" ["equinix-metal"]="pulumi-equinix-metal" ["gcp"]="pulumi-gcp" ["github"]="pulumi-github" ["gitlab"]="pulumi-gitlab" ["hcloud"]="pulumi-hcloud" ["kubernetes"]="pulumi-kubernetes" ["linode"]="pulumi-linode" ["mailgun"]="pulumi-mailgun" ["mysql"]="pulumi-mysql" ["openstack"]="pulumi-openstack" ["packet"]="pulumi-packet" ["postgresql"]="pulumi-postgresql" ["random"]="pulumi-random" ["vault"]="pulumi-vault" ["vsphere"]="pulumi-vsphere" ) # Contains latest release ${VERSION} from # https://github.com/pulumi/pulumi-${NAME}/releases # Dynamically builds the plugin array, using the hashmap's key/values and the # API for getting the latest version. plugins=() for key in "${!pulumi_repos[@]}"; do plugins+=("${key}=$(curl -s ${API_URL}/${pulumi_repos[${key}]}/releases/latest | jq -M -r .tag_name | sed 's/v//g')") sleep 1 done function genMainSrc() { local url="https://get.pulumi.com/releases/sdk/pulumi-v${VERSION}-${1}-${2}.tar.gz" local sha256 sha256=$(nix-prefetch-url "$url") echo " {" echo " url = \"${url}\";" echo " sha256 = \"$sha256\";" echo " }" } function genSrcs() { for plugVers in "${plugins[@]}"; do local plug=${plugVers%=*} local version=${plugVers#*=} # url as defined here # https://github.com/pulumi/pulumi/blob/06d4dde8898b2a0de2c3c7ff8e45f97495b89d82/pkg/workspace/plugins.go#L197 local url="https://api.pulumi.com/releases/plugins/pulumi-resource-${plug}-v${version}-${1}-${2}.tar.gz" local sha256 sha256=$(nix-prefetch-url "$url") if [ "$sha256" ]; then # file exists echo " {" echo " url = \"${url}\";" echo " sha256 = \"$sha256\";" echo " }" else echo " # pulumi-resource-${plug} skipped (does not exist on remote)" fi done } { cat < data.nix