diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh')
-rwxr-xr-x | nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh b/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh new file mode 100755 index 000000000000..fb583e5ad18e --- /dev/null +++ b/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh @@ -0,0 +1,159 @@ +#!/usr/bin/env nix-shell +#!nix-shell update-pulumi-shell.nix -i bash +# shellcheck shell=bash +# Bash 3 compatible for Darwin + +if [ -z "${GITHUB_TOKEN}" ] || [ $# -ne 1 ]; then + echo >&2 "usage: GITHUB_TOKEN=… ./update.sh pulumi-version" + exit 1 +fi + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# Version of Pulumi from +# https://www.pulumi.com/docs/get-started/install/versions/ +VERSION=$1 + +# An array of plugin names. The respective repository inside Pulumi's +# Github organization is called pulumi-$name by convention. + +declare -a pulumi_repos +pulumi_repos=( + "aiven" + "akamai" + "alicloud" + "artifactory" + "auth0" + "aws" + "azure" + "azuread" + "azuredevops" + "cloudflare" + "consul" + "datadog" + "digitalocean" + "docker" + "equinix-metal" + "fastly" + "gcp" + "github" + "gitlab" + "google-native" + "hcloud" + "kubernetes" + "linode" + "mailgun" + "mysql" + "openstack" + "postgresql" + "random" + "snowflake" + "spotinst" + "sumologic" + "tailscale" + "tls" + "vault" + "venafi" + "vsphere" + "wavefront" + "yandex" +) + +# Contains latest release ${VERSION} from +# https://github.com/pulumi/pulumi-${NAME}/releases + +# Dynamically builds the plugin array, using the GitHub API for getting the +# latest version. +plugin_num=1 +plugins=() +for key in "${pulumi_repos[@]}"; do + plugin="${key}=$(gh api "repos/pulumi/pulumi-${key}/releases/latest" --jq '.tag_name | sub("^v"; "")')" + printf "%20s: %s of %s\r" "${plugin}" "${plugin_num}" "${#pulumi_repos[@]}" + plugins+=("${plugin}") + sleep 1 + ((++plugin_num)) +done +printf "\n" + +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 genSrc() { + local url="${1}" + local plug="${2}" + local tmpdir="${3}" + + local sha256 + sha256=$(nix-prefetch-url "$url") + + { + if [ -n "$sha256" ]; then # file exists + echo " {" + echo " url = \"${url}\";" + echo " sha256 = \"$sha256\";" + echo " }" + else + echo " # pulumi-resource-${plug} skipped (does not exist on remote)" + fi + } > "${tmpdir}/${plug}.nix" +} + +function genSrcs() { + local tmpdir + tmpdir="$(mktemp -d)" + + 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" + genSrc "${url}" "${plug}" "${tmpdir}" & + done + + wait + + find "${tmpdir}" -name '*.nix' -print0 | sort -z | xargs -r0 cat + rm -r "${tmpdir}" +} + +{ + cat << EOF +# DO NOT EDIT! This file is generated automatically by update.sh +{ }: +{ + version = "${VERSION}"; + pulumiPkgs = { +EOF + + echo " x86_64-linux = [" + genMainSrc "linux" "x64" + genSrcs "linux" "amd64" + echo " ];" + + echo " x86_64-darwin = [" + genMainSrc "darwin" "x64" + genSrcs "darwin" "amd64" + echo " ];" + + echo " aarch64-linux = [" + genMainSrc "linux" "arm64" + genSrcs "linux" "arm64" + echo " ];" + + echo " aarch64-darwin = [" + genMainSrc "darwin" "arm64" + genSrcs "darwin" "arm64" + echo " ];" + + echo " };" + echo "}" + +} > "${SCRIPT_DIR}/data.nix" |