From 476a7f63c02da21cbf0ba0b18c0d35f9b8e4343c Mon Sep 17 00:00:00 2001 From: utkarsh patrikar Date: Mon, 1 Jun 2026 22:32:02 +0530 Subject: [PATCH] fix: use quoted heredoc in Homebrew formula generation to preserve Ruby interpolation --- .github/workflows/release.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2e061b9..9945c11 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -203,31 +203,35 @@ jobs: id: generate_formula run: | VERSION="${{ needs.create-release.outputs.version }}" + REPO="${{ github.repository }}" SHA_MAC_AMD64=$(grep "kdc-v${VERSION}-x86_64-apple-darwin.tar.gz" dist/sha256sums.txt | awk '{print $1}') SHA_MAC_ARM64=$(grep "kdc-v${VERSION}-aarch64-apple-darwin.tar.gz" dist/sha256sums.txt | awk '{print $1}') SHA_LINUX_AMD64=$(grep "kdc-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz" dist/sha256sums.txt | awk '{print $1}') SHA_LINUX_ARM64=$(grep "kdc-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz" dist/sha256sums.txt | awk '{print $1}') - cat < dist/kdc.rb + # Use a quoted heredoc (<<'EOF') so the shell does not expand Ruby's + # #{...} interpolation syntax. Shell variables are pre-expanded via + # envsubst after the template is written. + cat <<'FORMULA_TEMPLATE' > /tmp/kdc.rb.tpl class Kdc < Formula desc "Kubernetes Docker Commander, a project-centric DevOps TUI" - homepage "https://github.com/${{ github.repository }}" + homepage "https://github.com/${REPO}" version "${VERSION}" if OS.mac? if Hardware::CPU.arm? - url "https://github.com/${{ github.repository }}/releases/download/v#{version}/kdc-v#{version}-aarch64-apple-darwin.tar.gz" + url "https://github.com/${REPO}/releases/download/v${VERSION}/kdc-v${VERSION}-aarch64-apple-darwin.tar.gz" sha256 "${SHA_MAC_ARM64}" else - url "https://github.com/${{ github.repository }}/releases/download/v#{version}/kdc-v#{version}-x86_64-apple-darwin.tar.gz" + url "https://github.com/${REPO}/releases/download/v${VERSION}/kdc-v${VERSION}-x86_64-apple-darwin.tar.gz" sha256 "${SHA_MAC_AMD64}" end elsif OS.linux? if Hardware::CPU.arm? - url "https://github.com/${{ github.repository }}/releases/download/v#{version}/kdc-v#{version}-aarch64-unknown-linux-gnu.tar.gz" + url "https://github.com/${REPO}/releases/download/v${VERSION}/kdc-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz" sha256 "${SHA_LINUX_ARM64}" else - url "https://github.com/${{ github.repository }}/releases/download/v#{version}/kdc-v#{version}-x86_64-unknown-linux-gnu.tar.gz" + url "https://github.com/${REPO}/releases/download/v${VERSION}/kdc-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz" sha256 "${SHA_LINUX_AMD64}" end end @@ -240,7 +244,15 @@ jobs: system "#{bin}/kdc", "--version" end end - EOF + FORMULA_TEMPLATE + + # Substitute only the shell variables we care about; Ruby's #{...} is + # left untouched because envsubst only replaces $VAR / ${VAR} forms. + VERSION="$VERSION" REPO="$REPO" \ + SHA_MAC_ARM64="$SHA_MAC_ARM64" SHA_MAC_AMD64="$SHA_MAC_AMD64" \ + SHA_LINUX_ARM64="$SHA_LINUX_ARM64" SHA_LINUX_AMD64="$SHA_LINUX_AMD64" \ + envsubst '${VERSION} ${REPO} ${SHA_MAC_ARM64} ${SHA_MAC_AMD64} ${SHA_LINUX_ARM64} ${SHA_LINUX_AMD64}' \ + < /tmp/kdc.rb.tpl > dist/kdc.rb echo "Formula generated:" cat dist/kdc.rb