Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions Formula/buf.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,45 @@
class Buf < Formula
desc "The best way of working with Protocol Buffers."
homepage "https://buf.build"
head "https://github.com/bufbuild/buf.git", branch: "main"
url "https://github.com/bufbuild/buf/archive/v1.70.0.tar.gz"
sha256 "7da0f12d42d00a4a4fabf89af37e2e02ad5958bc7e977a713e4bc01b2a232899"
version "1.70.0"

depends_on "go" => :build
# sha256 of the prebuilt release archive for each Homebrew-supported platform,
# keyed by "#{OS.kernel_name}-#{Hardware::CPU.arch}". Each archive unpacks to
# the same layout as a source build (bin/, etc/, share/, LICENSE), so the two
# install paths below are equivalent.
SHA256S = {
"Darwin-arm64" => "9cec23658df093d50f3318580e17f1e309d45b817927f22e9de30f78f3d4d45b",
"Darwin-x86_64" => "ebeed1af15bcb145c35c5e51eadc8fe0bdba9311e08fd6abca8c23294929d20b",
"Linux-arm64" => "ff3c79a6bb44c41a8053ec0d863234cee82378ea4c29ed5292c852dbf829fec0",
"Linux-x86_64" => "18498bdadbdce80792ce08c2c59e0c49f157aa3f5d9b0f9c6e3db795be208b9d",
}.freeze

if (sha = SHA256S["#{OS.kernel_name}-#{Hardware::CPU.arch}"])
# Homebrew reports 64-bit ARM as "arm64"; the Linux asset is named "aarch64".
asset_arch = Hardware::CPU.arch.to_s
asset_arch = "aarch64" if OS.linux? && Hardware::CPU.arm?
url "https://github.com/bufbuild/buf/releases/download/v#{version}/buf-#{OS.kernel_name}-#{asset_arch}.tar.gz"
sha256 sha
else
# No prebuilt binary for this platform: fall back to building from source.
url "https://github.com/bufbuild/buf/archive/v#{version}.tar.gz"
sha256 "7da0f12d42d00a4a4fabf89af37e2e02ad5958bc7e977a713e4bc01b2a232899"
depends_on "go" => :build
end

head do
url "https://github.com/bufbuild/buf.git", branch: "main"
depends_on "go" => :build
end

def install
ENV["GOPATH"] = HOMEBREW_CACHE/"go_cache"
system "sh", "make/buf/scripts/brew.sh", ".build/brew"
prefix.install Dir[".build/brew/*"]
if build.head? || !SHA256S.key?("#{OS.kernel_name}-#{Hardware::CPU.arch}")
ENV["GOPATH"] = HOMEBREW_CACHE/"go_cache"
system "sh", "make/buf/scripts/brew.sh", ".build/brew"
prefix.install Dir[".build/brew/*"]
else
prefix.install Dir["*"]
end
end

test do
Expand Down
66 changes: 57 additions & 9 deletions update.bash
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,74 @@ if [ -z "${1}" ]; then
fi

VERSION="${1}"
URL="https://github.com/bufbuild/buf/archive/v${VERSION}.tar.gz"
SHA256=$(curl -sSL "${URL}" | sha256 | cut -f 1 -d ' ')
RELEASE="https://github.com/bufbuild/buf/releases/download/v${VERSION}"

# Source archive checksum, used by the build-from-source fallback.
SOURCE_URL="https://github.com/bufbuild/buf/archive/v${VERSION}.tar.gz"
SOURCE_SHA256=$(curl -sSL "${SOURCE_URL}" | sha256 | cut -f 1 -d ' ')

# Prebuilt archive checksums, sourced in one fetch from the release sha256.txt.
SHA256_TXT=$(curl -sSL "${RELEASE}/sha256.txt")
binary_sha256() {
echo "${SHA256_TXT}" | awk -v f="${1}" '$2 == f { print $1 }'
}
DARWIN_ARM64_SHA256=$(binary_sha256 "buf-Darwin-arm64.tar.gz")
DARWIN_X86_64_SHA256=$(binary_sha256 "buf-Darwin-x86_64.tar.gz")
LINUX_ARM64_SHA256=$(binary_sha256 "buf-Linux-aarch64.tar.gz")
LINUX_X86_64_SHA256=$(binary_sha256 "buf-Linux-x86_64.tar.gz")

for name in SOURCE_SHA256 DARWIN_ARM64_SHA256 DARWIN_X86_64_SHA256 LINUX_ARM64_SHA256 LINUX_X86_64_SHA256; do
if [ -z "${!name}" ]; then
echo "error: could not determine ${name} for v${VERSION}" >&2
exit 1
fi
done

rm -rf Formula
mkdir -p Formula
cat <<EOF >Formula/buf.rb
class Buf < Formula
desc "The best way of working with Protocol Buffers."
homepage "https://buf.build"
head "https://github.com/bufbuild/buf.git", branch: "main"
url "${URL}"
sha256 "${SHA256}"
version "${VERSION}"

depends_on "go" => :build
# sha256 of the prebuilt release archive for each Homebrew-supported platform,
# keyed by "#{OS.kernel_name}-#{Hardware::CPU.arch}". Each archive unpacks to
# the same layout as a source build (bin/, etc/, share/, LICENSE), so the two
# install paths below are equivalent.
SHA256S = {
"Darwin-arm64" => "${DARWIN_ARM64_SHA256}",
"Darwin-x86_64" => "${DARWIN_X86_64_SHA256}",
"Linux-arm64" => "${LINUX_ARM64_SHA256}",
"Linux-x86_64" => "${LINUX_X86_64_SHA256}",
}.freeze

if (sha = SHA256S["#{OS.kernel_name}-#{Hardware::CPU.arch}"])
# Homebrew reports 64-bit ARM as "arm64"; the Linux asset is named "aarch64".
asset_arch = Hardware::CPU.arch.to_s
asset_arch = "aarch64" if OS.linux? && Hardware::CPU.arm?
url "https://github.com/bufbuild/buf/releases/download/v#{version}/buf-#{OS.kernel_name}-#{asset_arch}.tar.gz"
sha256 sha
else
# No prebuilt binary for this platform: fall back to building from source.
url "https://github.com/bufbuild/buf/archive/v#{version}.tar.gz"
sha256 "${SOURCE_SHA256}"
depends_on "go" => :build
end

head do
url "https://github.com/bufbuild/buf.git", branch: "main"
depends_on "go" => :build
end

def install
ENV["GOPATH"] = HOMEBREW_CACHE/"go_cache"
system "sh", "make/buf/scripts/brew.sh", ".build/brew"
prefix.install Dir[".build/brew/*"]
if build.head? || !SHA256S.key?("#{OS.kernel_name}-#{Hardware::CPU.arch}")
ENV["GOPATH"] = HOMEBREW_CACHE/"go_cache"
system "sh", "make/buf/scripts/brew.sh", ".build/brew"
prefix.install Dir[".build/brew/*"]
else
prefix.install Dir["*"]
end
end

test do
Expand Down