| #!/bin/bash | |
| # Copyright 2022 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # Helper functions for other scripts. Should be broken into multiple files if | |
| # we end up with a lot. | |
| # This file should be sourced, not executed. | |
| ############################## Utility functions ############################### | |
| # Tests if the first argument is contained in the array in the second argument. | |
| # Usage `is_contained "element" "${array[@]}"` | |
| is_contained() { | |
| local e; | |
| local match="$1" | |
| shift | |
| for e in "$@"; do | |
| if [[ "${e}" == "${match}" ]]; then | |
| return 0 | |
| fi | |
| done | |
| return 1 | |
| } | |
| nice_curl() { | |
| curl --silent --fail --show-error --location "$@" | |
| } | |
| ################################################################################ | |
| ############################## Instance metadata ############################### | |
| get_metadata() { | |
| local url="http://metadata.google.internal/computeMetadata/v1/${1}" | |
| ret=0 | |
| nice_curl --header "Metadata-Flavor: Google" "${url}" || ret=$? | |
| if [[ "${ret}" != 0 ]]; then | |
| echo "Failed fetching ${url}" >&2 | |
| return "${ret}" | |
| fi | |
| } | |
| get_os_info() { | |
| get_metadata "instance/guest-attributes/guestInventory/${1}" | |
| } | |
| get_attribute() { | |
| get_metadata "instance/attributes/${1}" | |
| } | |
| ################################################################################ | |
| # Retrieves the specified token to control the self-hosted runner. | |
| function get_runner_token() { | |
| local method=$1 | |
| local runner_scope=$2 | |
| local token_proxy_url="$(get_attribute github-token-proxy-url)" | |
| local cloud_run_id_token=$(get_metadata "instance/service-accounts/default/identity?audience=${token_proxy_url}") | |
| nice_curl \ | |
| "${token_proxy_url}/${method}" \ | |
| --header "Authorization: Bearer ${cloud_run_id_token}" \ | |
| --data-binary "{\"scope\": \"${runner_scope}\"}" \ | |
| | jq -r ".token" | |
| } |