Last active
October 21, 2022 07:27
-
-
Save dio/e13341b4d82ec61721ac9f9f8da7028f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Envoy < Formula | |
desc "Cloud-native high-performance edge/middle/service proxy" | |
homepage "https://www.envoyproxy.io/index.html" | |
url "https://github.com/envoyproxy/envoy/archive/refs/tags/v1.23.2.tar.gz" | |
sha256 "d4bef9f8c6f0307a0c18968109754771a0040867c8f42d2105e08b7fbd69c5e1" | |
license "Apache-2.0" | |
head "https://github.com/envoyproxy/envoy.git", branch: "main" | |
livecheck do | |
url :stable | |
strategy :github_latest | |
end | |
bottle do | |
sha256 cellar: :any_skip_relocation, arm64_monterey: "e7bf1c8a8edd41908a662bcf5f4d12fe097635c16a5274de321e5e632a72ec4f" | |
sha256 cellar: :any_skip_relocation, arm64_big_sur: "f63c8c45373a38df81fe854f6064c0c4bcecd0c8b5cadf0bf5408999b29e6aac" | |
sha256 cellar: :any_skip_relocation, monterey: "3aaa744a59e5ed4dd1b316ec020fdaaa03ea267b7aa33d3a7ce25b0031d1c6a5" | |
sha256 cellar: :any_skip_relocation, big_sur: "dd38a660c9d1623b968e7c13d9f250b885488381a3cf866358a9d960d4dceb01" | |
sha256 cellar: :any_skip_relocation, catalina: "e2240ae23e6351058022840344b0c30aee820977eec71acd29a641338ea4991d" | |
sha256 cellar: :any_skip_relocation, x86_64_linux: "9ce1642222af2cb38ea97a5da78b71b8d1ea0ad1aa4930284b07d23252db247e" | |
end | |
depends_on "automake" => :build | |
depends_on "bazelisk" => :build | |
depends_on "cmake" => :build | |
depends_on "coreutils" => :build | |
depends_on "libtool" => :build | |
depends_on "ninja" => :build | |
# Starting with 1.21, envoy requires a full Xcode installation, not just | |
# command-line tools. See envoyproxy/envoy#16482 | |
depends_on xcode: :build | |
depends_on macos: :catalina | |
on_linux do | |
depends_on "[email protected]" => :build | |
depends_on "gcc@9" => [:build, :test] # Use host/Homebrew GCC runtime libraries. | |
end | |
# https://github.com/envoyproxy/envoy/tree/main/bazel#supported-compiler-versions | |
fails_with :gcc do | |
version "8" | |
cause "C++17 support and tcmalloc requirement" | |
end | |
# GCC 10 build fails at external/com_google_absl/absl/container/internal/inlined_vector.h:448:5: | |
# error: '<anonymous>.absl::inlined_vector_internal::Storage<char, 128, std::allocator<char> >::data_' | |
# is used uninitialized in this function [-Werror=uninitialized] | |
fails_with gcc: "10" | |
# GCC 11 build fails at external/org_brotli/c/dec/decode.c:2036:41: | |
# error: argument 2 of type 'const uint8_t *' declared as a pointer [-Werror=vla-parameter] | |
# Brotli upstream ref: https://github.com/google/brotli/pull/893 | |
fails_with gcc: "11" | |
def install | |
env_path = if OS.mac? | |
"#{HOMEBREW_PREFIX}/bin:/usr/bin:/bin" | |
else | |
"#{Formula["[email protected]"].opt_bin}:#{HOMEBREW_PREFIX}/bin:/usr/bin:/bin" | |
end | |
args = %W[ | |
--compilation_mode=opt | |
--curses=no | |
--verbose_failures | |
--action_env=PATH=#{env_path} | |
--host_action_env=PATH=#{env_path} | |
] | |
if OS.linux? | |
# Disable extension `tcp_stats` which requires Linux headers >= 4.6 | |
# It's a directive with absolute path `#include </usr/include/linux/tcp.h>` | |
args << "--//source/extensions/transport_sockets/tcp_stats:enabled=false" | |
else | |
# Consider range-loop-analysis warnings as non-errors. | |
args << "--cxxopt=\"-Wno-error=range-loop-analysis\"" | |
end | |
# Write the current version SOURCE_VERSION. PR in-flight: https://github.com/envoyproxy/envoy/pull/23577. | |
system "curl", "-sSLO", "https://gist.githubusercontent.com/dio/8ede9b8909d417b3d15e24b16c75401b/raw/d67e42a92d5c3b79a329e588fb153d3cc441b5ff/write_current_source_version.py" | |
system "python3", "write_current_source_version.py" | |
rm "write_current_source_version.py" | |
system Formula["bazelisk"].opt_bin/"bazelisk", "build", *args, "//source/exe:envoy-static.stripped" | |
bin.install "bazel-bin/source/exe/envoy-static.stripped" => "envoy" | |
pkgshare.install "configs", "examples" | |
end | |
test do | |
port = free_port | |
cp pkgshare/"configs/envoyproxy_io_proxy.yaml", testpath/"envoy.yaml" | |
inreplace "envoy.yaml" do |s| | |
s.gsub! "port_value: 9901", "port_value: #{port}" | |
s.gsub! "port_value: 10000", "port_value: #{free_port}" | |
end | |
fork do | |
exec bin/"envoy", "-c", "envoy.yaml" | |
end | |
sleep 10 | |
assert_match "HEALTHY", shell_output("curl -s 127.0.0.1:#{port}/clusters?format=json") | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment