this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move that to scripts

+169
+169
scripts/get-egctl.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + : "${BINARY_NAME:="egctl"}" 4 + : "${EGCTL_INSTALL_DIR:="/usr/local/bin"}" 5 + 6 + export VERSION 7 + 8 + HAS_CURL="$(type "curl" &> /dev/null && echo true || echo false)" 9 + HAS_WGET="$(type "wget" &> /dev/null && echo true || echo false)" 10 + HAS_GIT="$(type "git" &> /dev/null && echo true || echo false)" 11 + 12 + # initArch discovers the architecture for this system. 13 + initArch() { 14 + ARCH=$(uname -m) 15 + case $ARCH in 16 + armv5*) ARCH="armv5";; 17 + armv6*) ARCH="armv6";; 18 + armv7*) ARCH="arm";; 19 + aarch64) ARCH="arm64";; 20 + x86) ARCH="386";; 21 + x86_64) ARCH="amd64";; 22 + i686) ARCH="386";; 23 + i386) ARCH="386";; 24 + esac 25 + } 26 + 27 + # initOS discovers the operating system for this system. 28 + initOS() { 29 + OS="$(uname|tr '[:upper:]' '[:lower:]')" 30 + 31 + case "$OS" in 32 + # Minimalist GNU for Windows 33 + mingw*|cygwin*) OS='windows';; 34 + esac 35 + } 36 + 37 + # runs the given command as root (detects if we are root already) 38 + runAsRoot() { 39 + if [ $EUID -ne 0 ]; then 40 + sudo "${@}" 41 + else 42 + "${@}" 43 + fi 44 + } 45 + 46 + # verifySupported checks that the os/arch combination is supported for 47 + # binary builds, as well whether or not necessary tools are present. 48 + verifySupported() { 49 + local supported="darwin-amd64\ndarwin-arm64\nlinux-amd64\nlinux-arm64\n" 50 + if ! echo "${supported}" | grep -q "${OS}-${ARCH}"; then 51 + echo "No prebuilt binary for ${OS}-${ARCH}." 52 + echo "To build from source, go to https://github.com/envoyproxy/gateway" 53 + exit 1 54 + fi 55 + 56 + if [ "${HAS_CURL}" != "true" ] && [ "${HAS_WGET}" != "true" ]; then 57 + echo "Either curl or wget is required" 58 + exit 1 59 + fi 60 + 61 + if [ "${HAS_GIT}" != "true" ]; then 62 + echo "[WARNING] Could not find git. It is required for plugin installation." 63 + fi 64 + } 65 + 66 + # checkDesiredVersion checks if the desired version is available. 67 + checkDesiredVersion() { 68 + if [ "$VERSION" == "" ]; then 69 + # Get tag from release URL 70 + local latest_release_url="https://github.com/envoyproxy/gateway/releases" 71 + if [ "${HAS_CURL}" == "true" ]; then 72 + VERSION=$(curl -Ls $latest_release_url | grep 'href="/envoyproxy/gateway/releases/tag/v[0-9]*.[0-9]*.[0-9]*\"' | sed -E 's/.*\/envoyproxy\/gateway\/releases\/tag\/(v[0-9\.]+)".*/\1/g' | head -1) 73 + elif [ "${HAS_WGET}" == "true" ]; then 74 + VERSION=$(wget $latest_release_url -O - 2>&1 | grep 'href="/envoyproxy/gateway/releases/tag/v[0-9]*.[0-9]*.[0-9]*\"' | sed -E 's/.*\/envoyproxy\/gateway\/releases\/tag\/(v[0-9\.]+)".*/\1/g' | head -1) 75 + fi 76 + fi 77 + } 78 + 79 + # checkEGCTLInstalledVersion checks which version of egctl is installed and 80 + # if it needs to be changed. 81 + checkEGCTLInstalledVersion() { 82 + if [[ -f "${EGCTL_INSTALL_DIR}/${BINARY_NAME}" ]]; then 83 + version=$("${EGCTL_INSTALL_DIR}/${BINARY_NAME}" version --remote=false | grep -Eo "v[0-9]+\.[0-9]+.*" ) 84 + if [[ "$version" == "$VERSION" ]]; then 85 + echo "egctl ${version} is already ${VERSION:-latest}" 86 + return 0 87 + else 88 + echo "egctl ${VERSION} is available. Changing from version ${version}." 89 + return 1 90 + fi 91 + else 92 + return 1 93 + fi 94 + } 95 + 96 + # downloadFile downloads the latest binary package 97 + # for that binary. 98 + downloadFile() { 99 + EGCTL_DIST="egctl_${VERSION}_${OS}_${ARCH}.tar.gz" 100 + DOWNLOAD_URL="https://github.com/envoyproxy/gateway/releases/download/$VERSION/$EGCTL_DIST" 101 + EGCTL_TMP_ROOT="$(mktemp -dt egctl-installer-XXXXXX)" 102 + EGCTL_TMP_FILE="$EGCTL_TMP_ROOT/$EGCTL_DIST" 103 + echo "Downloading $DOWNLOAD_URL" 104 + if [ "${HAS_CURL}" == "true" ]; then 105 + curl -SsL "$DOWNLOAD_URL" -o "$EGCTL_TMP_FILE" 106 + elif [ "${HAS_WGET}" == "true" ]; then 107 + wget -q -O "$EGCTL_TMP_FILE" "$DOWNLOAD_URL" 108 + fi 109 + } 110 + 111 + # installFile installs the egctl binary. 112 + installFile() { 113 + EGCTL_TMP="$EGCTL_TMP_ROOT/$BINARY_NAME" 114 + mkdir -p "$EGCTL_TMP" 115 + tar xf "$EGCTL_TMP_FILE" -C "$EGCTL_TMP" 116 + EGCTL_TMP_BIN="$EGCTL_TMP/bin/$OS/$ARCH/egctl" 117 + echo "Preparing to install $BINARY_NAME into ${EGCTL_INSTALL_DIR}" 118 + runAsRoot cp "$EGCTL_TMP_BIN" "$EGCTL_INSTALL_DIR/$BINARY_NAME" 119 + echo "$BINARY_NAME installed into $EGCTL_INSTALL_DIR/$BINARY_NAME" 120 + } 121 + 122 + # fail_trap is executed if an error occurs. 123 + fail_trap() { 124 + result=$? 125 + if [ "$result" != "0" ]; then 126 + if [[ -n "$INPUT_ARGUMENTS" ]]; then 127 + echo "Failed to install $BINARY_NAME with the arguments provided: $INPUT_ARGUMENTS" 128 + else 129 + echo "Failed to install $BINARY_NAME" 130 + fi 131 + echo -e "\tFor support, go to https://github.com/envoyproxy/gateway." 132 + fi 133 + cleanup 134 + exit $result 135 + } 136 + 137 + # testVersion tests the installed client to make sure it is working. 138 + testVersion() { 139 + set +e 140 + if ! [ "$(command -v $BINARY_NAME)" ]; then 141 + echo "$BINARY_NAME not found. Is $EGCTL_INSTALL_DIR on your PATH?" 142 + exit 1 143 + fi 144 + set -e 145 + } 146 + 147 + # cleanup temporary files. 148 + cleanup() { 149 + if [[ -d "${EGCTL_TMP_ROOT:-}" ]]; then 150 + rm -rf "$EGCTL_TMP_ROOT" 151 + fi 152 + } 153 + 154 + # Execution 155 + 156 + #Stop execution on any error 157 + trap "fail_trap" EXIT 158 + set -e 159 + 160 + initArch 161 + initOS 162 + verifySupported 163 + checkDesiredVersion 164 + if ! checkEGCTLInstalledVersion; then 165 + downloadFile 166 + installFile 167 + fi 168 + testVersion 169 + cleanup