#!/usr/bin/env bash # Renders Homebrew Formula + Scoop manifest files for this release and # pushes them into the shared tap repo (see .gitea/workflows/release.yml). # Other tools publishing into the same tap repo can copy this script # verbatim — only SRC_HOMEPAGE/BIN_NAME/DESC below need to change. set -euo pipefail : "${VERSION:?VERSION (e.g. v1.2.3) is required}" : "${TAP_TOKEN:?TAP_TOKEN secret is required}" TAP_REPO_URL="https://tap:${TAP_TOKEN}@git.morlana.online/f.weber/homebrew-tap.git" TAP_BRANCH="main" BIN_NAME="vault-tui" DESC="Terminal UI and CLI for HashiCorp Vault" SRC_HOMEPAGE="https://git.morlana.online/f.weber/vault-tui" RELEASE_BASE="${SRC_HOMEPAGE}/releases/download/${VERSION}" DIST="dist" VER_NUM="${VERSION#v}" # Formula/manifest "version" fields conventionally omit the leading v sha() { # sha grep " $2\$" "$1" | awk '{print $1}' } CK="${DIST}/checksums-${BIN_NAME}-${VERSION}.txt" CK_CLOUD="${DIST}/checksums-${BIN_NAME}-cloud-${VERSION}.txt" SHA_LINUX_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-linux-amd64.tar.gz") SHA_LINUX_ARM64=$(sha "$CK" "${BIN_NAME}-${VERSION}-linux-arm64.tar.gz") SHA_DARWIN_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-darwin-amd64.tar.gz") SHA_DARWIN_ARM64=$(sha "$CK" "${BIN_NAME}-${VERSION}-darwin-arm64.tar.gz") SHA_WINDOWS_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-windows-amd64.zip") SHA_CLOUD_LINUX_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-linux-amd64.tar.gz") SHA_CLOUD_LINUX_ARM64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-linux-arm64.tar.gz") SHA_CLOUD_DARWIN_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-darwin-amd64.tar.gz") SHA_CLOUD_DARWIN_ARM64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-darwin-arm64.tar.gz") SHA_CLOUD_WINDOWS_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-windows-amd64.zip") WORKDIR=$(mktemp -d) trap 'rm -rf "$WORKDIR"' EXIT git clone --depth 1 --branch "$TAP_BRANCH" "$TAP_REPO_URL" "$WORKDIR" cd "$WORKDIR" mkdir -p Formula bucket render_formula() { # render_formula local class="$1" prefix="$2" install_name="$3" local sha_l_amd sha_l_arm sha_d_amd sha_d_arm if [ "$prefix" = "${BIN_NAME}-cloud" ]; then sha_l_amd="$SHA_CLOUD_LINUX_AMD64"; sha_l_arm="$SHA_CLOUD_LINUX_ARM64" sha_d_amd="$SHA_CLOUD_DARWIN_AMD64"; sha_d_arm="$SHA_CLOUD_DARWIN_ARM64" else sha_l_amd="$SHA_LINUX_AMD64"; sha_l_arm="$SHA_LINUX_ARM64" sha_d_amd="$SHA_DARWIN_AMD64"; sha_d_arm="$SHA_DARWIN_ARM64" fi cat < "${install_name}" } end test do assert_match version.to_s, shell_output("#{bin}/${install_name} version") end end EOF } render_scoop() { # render_scoop local prefix="$1" exe_name="$2" sha="$3" cat <Formula/vault-tui.rb render_formula "VaultTuiCloud" "${BIN_NAME}-cloud" "${BIN_NAME}-cloud" >Formula/vault-tui-cloud.rb render_scoop "${BIN_NAME}" "vault-tui" "${SHA_WINDOWS_AMD64}" >bucket/vault-tui.json render_scoop "${BIN_NAME}-cloud" "vault-tui-cloud" "${SHA_CLOUD_WINDOWS_AMD64}" >bucket/vault-tui-cloud.json git config user.name "vault-tui-release" git config user.email "vault-tui-bot@users.noreply.git.morlana.online" git add Formula/vault-tui.rb Formula/vault-tui-cloud.rb bucket/vault-tui.json bucket/vault-tui-cloud.json if git diff --cached --quiet; then echo "tap already up to date with ${VERSION}, nothing to push" exit 0 fi git commit -m "vault-tui ${VERSION}" git push origin "HEAD:${TAP_BRANCH}" echo "pushed vault-tui ${VERSION} to the tap"