#!/bin/bash if [[ -n "$DEBUG" ]]; then set -x fi set -euo pipefail ARCHIVE_EXT='tar.gz' ARCHIVE_CMD='tar -xf' GIT_CLIFF_BIN='git-cliff' case "${RUNNER_OS}" in macOS) OS=apple-darwin ;; Windows) OS=pc-windows-msvc ARCHIVE_EXT='zip' ARCHIVE_CMD='7z x -aoa' GIT_CLIFF_BIN="${GIT_CLIFF_BIN}.exe" ;; *) OS=unknown-linux-gnu ;; esac case "${RUNNER_ARCH}" in ARM64) ARCH=aarch64 ;; ARM) ARCH=pc-windows-msvc ;; X86) ARCH=i686 ;; *) ARCH=x86_64 ;; esac INSTALL_DIR="$RUNNER_TEMP/git-cliff" mkdir -p "$INSTALL_DIR" cd "$INSTALL_DIR" echo "git-cliff-${ARCH}-${OS}.${ARCHIVE_EXT}" RELEASE_URL='https://api.github.com/repos/orhun/git-cliff/releases/latest' if [[ "${VERSION}" != 'latest' ]]; then RELEASE_URL="https://api.github.com/repos/orhun/git-cliff/releases/tags/${VERSION}" fi echo "Getting git-cliff ${VERSION} from ${RELEASE_URL}" # Caching is disabled in order not to receive stale responses from Varnish cache fronting GitHub API. if [[ -z "${GITHUB_API_TOKEN}" ]]; then RELEASE_INFO="$(curl --silent --show-error --fail \ --header 'Cache-Control: no-cache, must-revalidate' \ "${RELEASE_URL}")" else # Although releases endpoint is available without authentication, the current github.token is still passed # in order to increase the limit of 60 requests per hour per IP address to a higher value that's also counted # per GitHub account. RELEASE_INFO="$(curl --silent --show-error --fail \ --header "authorization: Bearer ${GITHUB_API_TOKEN}" \ --header 'Cache-Control: no-cache, must-revalidate' \ "${RELEASE_URL}")" fi TAG_NAME="$(echo "${RELEASE_INFO}" | jq --raw-output ".tag_name")" TARGET="git-cliff-${TAG_NAME:1}-${ARCH}-${OS}.${ARCHIVE_EXT}" LOCATION="$(echo "${RELEASE_INFO}" | jq --raw-output ".assets[].browser_download_url" | grep "${TARGET}$")" echo "Found release: ${LOCATION}" # Create bin directory mkdir -p ./bin # Skip downloading release if downloaded already, e.g. when the action is used multiple times. if [[ ! -e "$TARGET" ]]; then echo "Downloading ${TARGET}..." curl --silent --show-error --fail --location --output "$TARGET" "$LOCATION" echo "Unpacking ${TARGET}..." ${ARCHIVE_CMD} "$TARGET" mv git-cliff-${TAG_NAME:1}/${GIT_CLIFF_BIN} "./bin/$GIT_CLIFF_BIN" else echo "Using cached git-cliff binary." fi echo "git-cliff is ready to use!"