mirror of
https://github.com/yannh/kubeconform.git
synced 2026-02-19 01:47:02 +00:00
216 lines
5.6 KiB
Bash
Executable file
216 lines
5.6 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# This script was borrowed from https://github.com/quintush/helm-unittest
|
|
|
|
if [ -z "$HELM_PLUGIN_DIR" ]; then
|
|
echo "No HELM_PLUGIN_DIR defined"
|
|
|
|
exit 1
|
|
fi
|
|
|
|
PROJECT_NAME='kubeconform'
|
|
PROJECT_GH="yannh/$PROJECT_NAME"
|
|
PROJECT_CHECKSUM_FILE='CHECKSUMS'
|
|
HELM_PLUGIN_PATH="$HELM_PLUGIN_DIR"
|
|
|
|
# Convert the HELM_PLUGIN_PATH to unix if cygpath is
|
|
# available. This is the case when using MSYS2 or Cygwin
|
|
# on Windows where helm returns a Windows path but we
|
|
# need a Unix path
|
|
if type cygpath >/dev/null 2>&1; then
|
|
echo 'Use Sygpath'
|
|
|
|
HELM_PLUGIN_PATH=$(cygpath -u "$HELM_PLUGIN_PATH")
|
|
fi
|
|
|
|
if [ "$SKIP_BIN_INSTALL" = '1' ]; then
|
|
echo 'Skipping binary install'
|
|
|
|
exit
|
|
fi
|
|
|
|
# fail_trap is executed if an error occurs.
|
|
fail_trap() {
|
|
result=$?
|
|
|
|
if [ "$result" != '0' ]; then
|
|
echo "Failed to install $PROJECT_NAME"
|
|
echo 'For support, go to https://github.com/kubernetes/helm'
|
|
fi
|
|
|
|
exit $result
|
|
}
|
|
|
|
# initArch discovers the architecture for this system.
|
|
initArch() {
|
|
ARCH=$(uname -m)
|
|
|
|
case "$ARCH" in
|
|
armv5*) ARCH='armv5';;
|
|
armv6*) ARCH='armv6';;
|
|
armv7*) ARCH='armv7';;
|
|
aarch64) ARCH='arm64';;
|
|
x86) ARCH='386';;
|
|
x86_64) ARCH='amd64';;
|
|
i686) ARCH='386';;
|
|
i386) ARCH='386';;
|
|
esac
|
|
}
|
|
|
|
# initOS discovers the operating system for this system.
|
|
initOS() {
|
|
OS=$(uname | tr '[:upper:]' '[:lower:]')
|
|
|
|
case "$OS" in
|
|
# Msys support
|
|
msys*) OS='windows';;
|
|
# Minimalist GNU for Windows
|
|
mingw*) OS='windows';;
|
|
# MacOS
|
|
darwin) OS='darwin';;
|
|
esac
|
|
}
|
|
|
|
# verifySupported checks that the os/arch combination is supported for
|
|
# binary builds.
|
|
verifySupported() {
|
|
supported='darwin-arm64,darwin-amd64,linux-amd64,linux-armv6,linux-arm64,linux-386,windows-arm64,windows-armv6,windows-amd64,windows-386'
|
|
|
|
if ! echo "$supported" | grep -q "$OS-$ARCH"; then
|
|
echo "No prebuild binary for $OS-$ARCH"
|
|
|
|
exit 1
|
|
fi
|
|
|
|
if type curl >/dev/null 2>&1; then
|
|
DOWNLOADER='curl'
|
|
elif type wget >/dev/null 2>&1; then
|
|
DOWNLOADER='wget'
|
|
else
|
|
echo 'Either curl or wget is required'
|
|
|
|
exit 1
|
|
fi
|
|
|
|
echo "Support $OS-$ARCH"
|
|
}
|
|
|
|
# getDownloadURL checks the latest available version.
|
|
getDownloadURLs() {
|
|
# Use the GitHub API to find the latest version for this project.
|
|
latest_url="https://api.github.com/repos/$PROJECT_GH/releases/latest"
|
|
|
|
if [ -z "$HELM_PLUGIN_UPDATE" ]; then
|
|
version=$(git describe --tags --exact-match 2>/dev/null || true)
|
|
|
|
if [ -n "$version" ]; then
|
|
latest_url="https://api.github.com/repos/$PROJECT_GH/releases/tags/$version"
|
|
fi
|
|
fi
|
|
|
|
echo "Retrieving $latest_url"
|
|
|
|
if [ $DOWNLOADER = 'curl' ]; then
|
|
DOWNLOAD_URL=$(curl -sL "$latest_url" | grep "$OS-$ARCH" | awk '/\"browser_download_url\":/{gsub(/[,\"]/,"", $2); print $2}' 2>/dev/null)
|
|
PROJECT_CHECKSUM=$(curl -sL "$latest_url" | grep "$PROJECT_CHECKSUM_FILE" | awk '/\"browser_download_url\":/{gsub(/[,\"]/,"", $2); print $2}' 2>/dev/null)
|
|
elif [ $DOWNLOADER = 'wget' ]; then
|
|
DOWNLOAD_URL=$(wget -q -O - "$latest_url" | grep "$OS-$ARCH" | awk '/\"browser_download_url\":/{gsub(/[,\"]/,"", $2); print $2}' 2>/dev/null)
|
|
PROJECT_CHECKSUM=$(wget -q -O - "$latest_url" | grep "$PROJECT_CHECKSUM_FILE" | awk '/\"browser_download_url\":/{gsub(/[,\"]/,"", $2); print $2}' 2>/dev/null)
|
|
fi
|
|
|
|
if [ -z "$DOWNLOAD_URL" ]; then
|
|
echo 'Failed to get DOWNLOAD_URL'
|
|
|
|
exit 1
|
|
elif [ -z "$PROJECT_CHECKSUM" ]; then
|
|
echo 'Failed to get PROJECT_CHECKSUM'
|
|
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# downloadFiles downloads the latest binary package and also the checksum
|
|
# for that binary.
|
|
downloadFiles() {
|
|
PLUGIN_TMP_FOLDER=$(mktemp -d)
|
|
CHECKSUM_FILE_PATH="$PLUGIN_TMP_FOLDER/$PROJECT_CHECKSUM_FILE"
|
|
|
|
echo "Downloading '$DOWNLOAD_URL' and '$PROJECT_CHECKSUM' to location $PLUGIN_TMP_FOLDER"
|
|
|
|
if [ $DOWNLOADER = 'curl' ]; then
|
|
(cd "$PLUGIN_TMP_FOLDER" && curl -sLO "$DOWNLOAD_URL")
|
|
curl -s -L -o "$CHECKSUM_FILE_PATH" "$PROJECT_CHECKSUM"
|
|
elif [ $DOWNLOADER = 'wget' ]; then
|
|
wget -P "$PLUGIN_TMP_FOLDER" "$DOWNLOAD_URL"
|
|
wget -q -O "$CHECKSUM_FILE_PATH" "$PROJECT_CHECKSUM"
|
|
fi
|
|
}
|
|
|
|
# installFile verifies the SHA256 for the file, then unpacks and
|
|
# installs it.
|
|
installFile() {
|
|
echo 'Verifying SHA for the file'
|
|
|
|
DOWNLOAD_FILE=$(find "$PLUGIN_TMP_FOLDER" -name "*.tar.gz")
|
|
|
|
if [ -z "$DOWNLOAD_FILE" ]; then
|
|
DOWNLOAD_FILE=$(find "$PLUGIN_TMP_FOLDER" -name "*.zip")
|
|
fi
|
|
|
|
DOWNLOAD_FILE_NAME=$(basename "$DOWNLOAD_FILE")
|
|
|
|
(
|
|
cd "$PLUGIN_TMP_FOLDER"
|
|
|
|
if type shasum >/dev/null 2>&1; then
|
|
grep "$DOWNLOAD_FILE_NAME" "$CHECKSUM_FILE_PATH" | shasum -a 256 -c -s
|
|
elif type sha256sum >/dev/null 2>&1; then
|
|
if grep -q 'ID=alpine' /etc/os-release; then
|
|
grep "$DOWNLOAD_FILE_NAME" "$CHECKSUM_FILE_PATH" | sha256sum -c -s
|
|
else
|
|
grep "$DOWNLOAD_FILE_NAME" "$CHECKSUM_FILE_PATH" | sha256sum -c --status
|
|
fi
|
|
else
|
|
echo 'No Checksum as there is no shasum or sha256sum found'
|
|
fi
|
|
)
|
|
|
|
HELM_TMP="$PLUGIN_TMP_FOLDER/$PROJECT_NAME"
|
|
mkdir "$HELM_TMP"
|
|
|
|
tar -C "$HELM_TMP" -xf "$DOWNLOAD_FILE"
|
|
|
|
echo "Preparing to install into $HELM_PLUGIN_PATH"
|
|
|
|
HELM_TMP_BIN="$HELM_TMP/$PROJECT_NAME"
|
|
|
|
# Use * to also copy the file with the exe suffix on Windows
|
|
cp "$HELM_TMP_BIN"* "$HELM_PLUGIN_PATH/bin/"
|
|
|
|
rm -r "$HELM_TMP"
|
|
rm -r "$PLUGIN_TMP_FOLDER"
|
|
|
|
echo "$PROJECT_NAME installed into $HELM_PLUGIN_PATH/bin"
|
|
}
|
|
|
|
# testVersion tests the installed client to make sure it is working.
|
|
testVersion() {
|
|
# To avoid to keep track of the Windows suffix,
|
|
# call the plugin assuming it is in the PATH
|
|
PATH="$HELM_PLUGIN_PATH/bin:$PATH"
|
|
|
|
kubeconform -v
|
|
}
|
|
|
|
# Stop execution on any error
|
|
trap "fail_trap" EXIT
|
|
set -e
|
|
|
|
# Execution
|
|
initArch
|
|
initOS
|
|
verifySupported
|
|
getDownloadURLs
|
|
downloadFiles
|
|
installFile
|
|
testVersion
|