Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
98e496a
Update Envoy dependency to b6e7e12ed (Sep 04, 2026)
fei-deng Sep 14, 2026
b058ae7
Fix Bzlmod include paths and reuse Envoy QUIC headers directly
fei-deng Sep 14, 2026
b627447
Fix Bzlmod libevent registry checksum in MODULE.bazel.lock and update…
fei-deng Sep 14, 2026
71f46a3
Fix flake8 docstring requirement in utility.py and update MODULE.baze…
fei-deng Sep 15, 2026
7dfb74c
Document MODULE.bazel.lock update procedure in updating_envoy_depende…
fei-deng Sep 15, 2026
b4d4146
Fix BES stream hang in CI by setting nowait_for_upload_complete
fei-deng Sep 15, 2026
4d1e07e
Enable live Bazel action progress streaming in CI console
fei-deng Sep 15, 2026
f9e3c40
Restore quiche_platform_impl headers required by Envoy QUIC server st…
fei-deng Sep 15, 2026
496c985
Convert quiche_mem_slice_impl.h to forwarding headers that reuse Envo…
fei-deng Sep 15, 2026
5517c53
Trigger GitHub Actions CI presubmit matrix run
fei-deng Sep 15, 2026
34da140
Restore bes_upload_mode=nowait_for_upload_complete in repo.bazelrc fo…
fei-deng Sep 15, 2026
352292e
Clean up BAZEL_BUILD_EXTRA_OPTIONS in _ci.yml
fei-deng Sep 15, 2026
156b11d
Clean up _ci.yml repo.bazelrc settings for clean CI execution
fei-deng Sep 15, 2026
c870f32
Clean up CI workflow and update PR #1613 to latest verified commit
fei-deng Sep 15, 2026
bbc6afa
Set --remote_download_outputs=all in _ci.yml so RBE artifact copying …
fei-deng Sep 15, 2026
8018d4d
Trigger fresh CI run with --remote_download_outputs=all
fei-deng Sep 15, 2026
530c160
Update forwarding headers to use external/envoy path for RBE include …
fei-deng Sep 15, 2026
1a9fcc8
Add //:quiche_platform_impl_headers dependency to nighthawk_client_li…
fei-deng Sep 15, 2026
ddfd5c8
Use copt=-Iexternal/envoy/source/common/quic/platform in .bazelrc for…
fei-deng Sep 15, 2026
560ee69
Add forwarding headers and quiche_platform_impl_headers deps to sourc…
fei-deng Sep 15, 2026
9965bc7
Update forwarding headers to use external/envoy+ canonical path for B…
fei-deng Sep 15, 2026
aaf3112
Add @envoy//source/common/quic/platform:quiche_mem_slice_impl_lib to …
fei-deng Sep 15, 2026
3f27397
Add @quiche dependencies to quiche_platform_impl_headers for transiti…
fei-deng Sep 15, 2026
36db887
Fix Bazel 8 workspace root include error by removing '.' from quiche_…
fei-deng Sep 15, 2026
faad50f
Trigger fresh CI presubmit run for PR #1613
fei-deng Sep 15, 2026
083ba88
Re-export Envoy quiche_mem_slice_impl_lib directly and remove local f…
fei-deng Sep 15, 2026
9d3cd8a
Strip include prefix for Envoy QUIC mem slice platform headers in qui…
fei-deng Sep 15, 2026
d0e08f4
Depend on Envoy quiche_mem_slice_impl_lib_with_external_headers for c…
fei-deng Sep 15, 2026
78f9232
Add include/quiche_platform_impl forwarding header with includes=['in…
fei-deng Sep 15, 2026
89fed95
Provide self-contained QuicheMemSliceImpl header in include/quiche_pl…
fei-deng Sep 15, 2026
977bc1f
Add buffer_lib_with_external_headers to quiche_platform_impl_headers …
fei-deng Sep 15, 2026
4e0426d
Add canonical Bzlmod external envoy quic platform include flags to .b…
fei-deng Sep 15, 2026
6e35ad7
Patch Envoy QUIC platform BUILD target to expose quiche_mem_slice_imp…
fei-deng Sep 15, 2026
9058f8c
Update Envoy patch to declare quiche_mem_slice_impl_lib dependency in…
fei-deng Sep 15, 2026
0cfce80
Clean up stale quiche_platform_impl_headers dependencies from client,…
fei-deng Sep 15, 2026
235a582
Restore default fast remote download outputs setting in reusable CI w…
fei-deng Sep 16, 2026
c0bc298
Expose envoy_toolshed and llvm_toolchain_llvm in MODULE.bazel for ASA…
fei-deng Sep 16, 2026
4d57265
bazel: suppress nullability-completeness warning as error in CXXFLAGS
fei-deng Sep 16, 2026
58c55cc
Scope nullability completeness flags to Clang, add --no-keep-memory t…
fei-deng Sep 16, 2026
0ebb6bc
Fix Envoy include paths in options_impl.cc
fei-deng Sep 17, 2026
48aceeb
Fix CI runner memory starvation by restricting Bazel concurrency to -…
fei-deng Sep 17, 2026
a3f1756
Set --local_ram_resources=5120 and jobs=2 in repo.bazelrc to guarante…
fei-deng Sep 17, 2026
894ffe1
Use modern --local_resources=memory=5120 flag and retry CI build
fei-deng Sep 17, 2026
a7de335
Optimize Bazel concurrency to jobs=4 with memory=6144 limit and local…
fei-deng Sep 17, 2026
e4e6779
Configure task-specific memory limits for TSAN/ASAN tasks to prevent …
fei-deng Sep 17, 2026
ff29081
ci: enforce LLD single-threading for sanitizer link actions to preven…
fei-deng Sep 17, 2026
a6a7163
ci: guard LLD thread flag from GCC builds
fei-deng Sep 17, 2026
5f7d523
ci: set jobs=1 and memory=6144 for tsan/asan to prevent concurrent ll…
fei-deng Sep 17, 2026
7a5be8b
ci: set jobs=2 for tsan to prevent 60min timeout; fix service_test as…
fei-deng Sep 17, 2026
aa31fe8
ci: add experimental_reuse_sandbox_directories=true to prevent disk e…
fei-deng Sep 17, 2026
27ce4fd
ci: tune memory=3500 for tsan/asan to prevent kernel SIGKILL OOM duri…
fei-deng Sep 17, 2026
ffc0322
ci: set jobs=1 for tsan to avoid disk space exhaustion during paralle…
fei-deng Sep 17, 2026
3f4624a
ci: reduce debug symbol size by 95% with --copt=-g1 to eliminate disk…
fei-deng Sep 18, 2026
bbadbb5
ci: set jobs=1 and strip=always to guarantee sequential linking and z…
fei-deng Sep 18, 2026
0edfb94
ci: suppress GCC 13 stringop-overread false positive in V8 and update…
fei-deng Sep 18, 2026
a0d624b
ci: use common --jobs=2 to double compilation throughput while keepin…
fei-deng Sep 19, 2026
a23c023
ci: set memory=3000 to enforce single-threaded linkers and prevent ke…
fei-deng Sep 19, 2026
c92dbf4
ci: use bfd linker for gcc host tools to prevent Rust ld.gold depreca…
fei-deng Sep 19, 2026
9db35f8
ci: scope jobs=1 to gcc and jobs=2 to clang for safe single-threaded …
fei-deng Sep 19, 2026
5c7c8b1
ci: set jobs=2 and memory=3000 for fast compilation and safe single-t…
fei-deng Sep 19, 2026
e350ae0
ci: use -g0 for gcc build and timeout-minutes: 180 to eliminate link …
fei-deng Sep 19, 2026
ca9179c
ci: add timeout-minutes: 180 to caller jobs in nighthawk.yml
fei-deng Sep 20, 2026
61c60dc
ci: revert invalid timeout-minutes on reusable caller jobs
fei-deng Sep 20, 2026
44166ba
ci: set jobs=4 for gcc to utilize all 4 vCPUs for 3x faster compilation
fei-deng Sep 20, 2026
8601909
ci: optimize test_gcc with -c opt --copt=-g0 --strip=always for 10-mi…
fei-deng Sep 20, 2026
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
49 changes: 39 additions & 10 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,26 @@ startup --host_jvm_args="-DBAZEL_TRACK_SOURCE_DIRECTORIES=1"
# global
#############################################################################

common --noenable_bzlmod
common --enable_workspace
# common --@envoy//bazel:enable_bzlmod=True
# common --enable_bzlmod
common --remote_executor=
build --remote_executor=
build --modify_execution_info=.*=+no-remote-exec
common --registry=https://bcr.bazel.build/
common --registry=https://raw.githubusercontent.com/envoyproxy/bazel-registry/main
common --copt=-Iinclude
common --cxxopt=-Iinclude
# quiche
build --@quiche//:zlib=@envoy//bazel:zlib
build --@quiche//:ssl_lib=@envoy//bazel:ssl
build --@quiche//:quic_base_impl_lib=@envoy//source/common/quic/platform:quic_base_impl_lib
build --@quiche//:quiche_export_impl_lib=@envoy//source/common/quic/platform:quiche_export_impl_lib
build --@quiche//:quiche_flags_impl_lib=@envoy//source/common/quic/platform:quiche_flags_impl_lib
build --@quiche//:quiche_logging_impl_lib=@envoy//source/common/quic/platform:quiche_logging_impl_lib
build --@quiche//:quiche_lower_case_string_impl_lib=@envoy//source/common/quic/platform:quiche_lower_case_string_impl_lib
build --@quiche//:quiche_platform_iovec_impl_lib=@envoy//source/common/quic/platform:quiche_platform_iovec_impl_lib
build --@quiche//:quiche_stack_trace_impl_lib=@envoy//source/common/quic/platform:quiche_stack_trace_impl_lib
build --@quiche//:quiche_time_utils_impl_lib=@envoy//source/common/quic/platform:quiche_time_utils_impl_lib

common --noincompatible_disallow_empty_glob
common --noincompatible_disallow_ctx_resolve_tools
common --legacy_external_runfiles
Expand All @@ -48,7 +65,7 @@ run --color=yes
build --color=yes

common --registry=https://bcr.bazel.build/
common --registry=https://raw.githubusercontent.com/envoyproxy/bazel-registry/49547ce72253df5c694b153604ed2bd0c1dd8891
common --registry=https://raw.githubusercontent.com/envoyproxy/bazel-registry/b6e15c00b1c0493cd194b1b248c562bd8bc46648
# common --registry=file:///bazel-registry
# this can be useful for dev
# common --lockfile_mode=off
Expand Down Expand Up @@ -100,7 +117,7 @@ common --@rules_python//python/config_settings:bootstrap_impl=script
build --incompatible_default_to_explicit_init_py

# Protobuf
common --@protobuf//bazel/flags:prefer_prebuilt_protoc=true
common --@protobuf//bazel/toolchains:prefer_prebuilt_protoc
common --incompatible_enable_proto_toolchain_resolution

# We already have absl in the build, define absl=1 to tell googletest to use absl for backtrace.
Expand Down Expand Up @@ -147,16 +164,19 @@ common --per_file_copt=bazel-out/.*/bin/external/protobuf.*/protoc@--THIS_CC_TOO
# proxy-wasm-cpp-host
common --@proxy-wasm-cpp-host//bazel:crypto_lib=@envoy//bazel:crypto

# libsxg
build --@libsxg//:crypto_lib=@envoy//bazel:crypto

# quiche
build --@quiche//:zlib=@envoy//bazel:zlib
build --@quiche//:ssl_lib=@envoy//bazel:ssl

# quiche — non-test platform impls
build --@quiche//:quic_base_impl_lib=@envoy//source/common/quic/platform:quic_base_impl_lib
build --@quiche//:quiche_export_impl_lib=@envoy//source/common/quic/platform:quiche_export_impl_lib
build --@quiche//:quiche_flags_impl_lib=@envoy//source/common/quic/platform:quiche_flags_impl_lib
build --@quiche//:quiche_logging_impl_lib=@envoy//source/common/quic/platform:quiche_logging_impl_lib
build --@quiche//:quiche_lower_case_string_impl_lib=@envoy//source/common/quic/platform:quiche_lower_case_string_impl_lib
build --@quiche//:quiche_mem_slice_impl_lib=@envoy//source/common/quic/platform:quiche_mem_slice_impl_lib
build --@quiche//:quiche_platform_iovec_impl_lib=@envoy//source/common/quic/platform:quiche_platform_iovec_impl_lib
build --@quiche//:quiche_stack_trace_impl_lib=@envoy//source/common/quic/platform:quiche_stack_trace_impl_lib
build --@quiche//:quiche_time_utils_impl_lib=@envoy//source/common/quic/platform:quiche_time_utils_impl_lib
Expand Down Expand Up @@ -197,14 +217,15 @@ build:macos --@toolchains_llvm//toolchain/config:libunwind=false

# Common flags for Clang (shared between all clang variants)
common:clang-common --linkopt=-fuse-ld=lld
common:clang-common --linkopt=-Wl,--no-keep-memory
common:clang-common --cxxopt=-Wno-nullability-completeness
common:clang-common --cxxopt=-Wno-error=nullability-completeness
common:clang-common --@toolchains_llvm//toolchain/config:compiler-rt=false
common:clang-common --@toolchains_llvm//toolchain/config:libunwind=false

# Clang with libc++ (default)
common:clang --config=clang-common
common:clang --config=libc++
common:clang --host_platform=@clang_platform
common:clang --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1

# Clang installed to non-standard location (ie not /opt/llvm/)
Expand All @@ -225,6 +246,7 @@ build:gcc --copt=-fno-debug-types-section
# And in all cases the reports appear to be clear false positives.
build:gcc --copt=-Wno-error=restrict
build:gcc --copt=-Wno-error=uninitialized
build:gcc --copt=-Wno-error=stringop-overread
build:gcc --cxxopt=-Wno-missing-requires
build:gcc --cxxopt=-Wno-dangling-reference
build:gcc --cxxopt=-Wno-nonnull-compare
Expand Down Expand Up @@ -317,14 +339,24 @@ common:fips-common --@envoy//bazel:fips=True
common:boringssl-fips --config=fips-common
common:boringssl-fips --@envoy//bazel:ssl=@boringssl-fips//:ssl
common:boringssl-fips --@envoy//bazel:crypto=@boringssl-fips//:crypto
common:boringssl-fips --@quiche//:ssl_lib=@boringssl-fips//:ssl

# OpenSSL
common:openssl --@envoy//bazel:openssl=True
common:openssl --@envoy//bazel:ssl=@envoy//compat/openssl:ssl
common:openssl --@envoy//bazel:crypto=@envoy//compat/openssl:crypto
# Route QUICHE's SSL to the OpenSSL compat layer too. QUICHE is still linked in
# OpenSSL builds via non-QUIC features (e.g. HTTP datagram / CONNECT-UDP capsule
# support), and must use the same SSL implementation as the rest of the binary
# to avoid linking BoringSSL and OpenSSL together (symbol/ABI collisions).
common:openssl --@quiche//:ssl_lib=@envoy//compat/openssl:ssl
common:openssl --copt=-DENVOY_SSL_OPENSSL
common:openssl --host_copt=-DENVOY_SSL_OPENSSL
common:openssl --@envoy//bazel:http3=False
# Exclude QUIC/HTTP3 sources from the quiche module overlay when HTTP/3 is
# disabled. This keeps QUIC code that depends on BoringSSL-only primitives
# (e.g. SIPHASH_24) out of the OpenSSL build.
common:openssl --define=quiche_disable_http3=true
common:openssl --test_tag_filters=-nofips,-quiche
common:openssl --build_tag_filters=-nofips

Expand Down Expand Up @@ -508,9 +540,6 @@ build:remote --strategy=Closure=remote,sandboxed,local
build:remote --strategy=Genrule=remote,sandboxed,local
build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
# This flag may be more generally useful - it sets foreign_cc builds -jauto.
# It is only set here because if it were the default it risks OOMing on local builds.
build:remote --@envoy//bazel/foreign_cc:parallel_builds
build:remote --@openssl//:parallel_builds

## RBE (Engflow Envoy)

Expand Down
17 changes: 13 additions & 4 deletions .github/workflows/_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,28 @@ jobs:
contents: read
packages: read
runs-on: ubuntu-22.04
timeout-minutes: 180
steps:
- uses: actions/checkout@v7.0.1
- name: Set gcc
run: |
if [[ "${{ inputs.task }}" == *"gcc"* ]]; then
echo "build --config=gcc" >> repo.bazelrc
echo "build:gcc --copt=-g0" >> repo.bazelrc
echo "common --jobs=4" >> repo.bazelrc
else
echo "common --config=clang" >> repo.bazelrc
echo "build --copt=-g1" >> repo.bazelrc
echo "common --jobs=2" >> repo.bazelrc
fi
- name: Configure repo Bazel settings
run: |
echo "common --jobs=200" >> repo.bazelrc
echo "test --local_test_jobs=4" >> repo.bazelrc
echo "common --local_resources=memory=3000" >> repo.bazelrc
echo "test --local_test_jobs=1" >> repo.bazelrc
if [[ "${{ inputs.task }}" != *"gcc"* ]]; then
echo "build --linkopt=-Wl,--threads=1" >> repo.bazelrc
fi
echo "build --strip=always" >> repo.bazelrc
echo "build --config=bes" >> repo.bazelrc
echo "build --experimental_reuse_sandbox_directories=true" >> repo.bazelrc
- name: Bind mount spare disk for build artifacts
uses: envoyproxy/toolshed/actions/bind-mounts@actions-v0.4.25
with:
Expand All @@ -58,6 +66,7 @@ jobs:
target: /tmp/bazel-shared
chown: runner:runner
- name: Run CI script
timeout-minutes: 180
run: |
./ci/run_envoy_docker.sh './ci/do_ci.sh ${{ inputs.task }}'
env:
Expand Down
123 changes: 123 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Envoy commit to use
ENVOY_COMMIT = "b6e7e12ed27300f21f4436ec6e6c119c128edb0f"

module(
name = "nighthawk",
version = "1.0.0-dev",
)

####################################################################################
# deps: Module
####################################################################################

bazel_dep(name = "envoy", version = "1.40.0-dev")
bazel_dep(name = "envoy_api", version = "1.40.0-dev")
bazel_dep(name = "rules_python", version = "2.2.0")
bazel_dep(name = "protobuf", version = "35.1.bcr.envoy")
bazel_dep(name = "proxy-wasm-cpp-host", version = "0.0.0-260704-f2db56a.envoy")
bazel_dep(name = "googleurl", version = "0.0.0-221103-dd4080f.envoy")
bazel_dep(name = "rules_rust", version = "0.69.0.envoy")
bazel_dep(name = "grpc", version = "1.83.0.envoy")
bazel_dep(name = "librdkafka", version = "2.6.0.envoy")
bazel_dep(name = "quiche", version = "0.0.0-260831-5c9cc6b.envoy")
bazel_dep(name = "toolchains_llvm", version = "1.9.0.envoy")
bazel_dep(name = "envoy_toolshed", version = "0.4.13.envoy")
bazel_dep(name = "zlib-ng", version = "2.3.2.envoy")
bazel_dep(name = "googletest", version = "1.17.0.bcr.2")
bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf")
bazel_dep(name = "protoc-gen-validate", version = "1.3.3.envoy")
bazel_dep(name = "re2", version = "2025-08-12.bcr.1")
bazel_dep(name = "libsxg", version = "0.0.0-210708-beaa393.envoy")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "abseil-cpp", version = "20260107.1", repo_name = "com_google_absl")
bazel_dep(name = "bazel_skylib", version = "1.9.0")

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
name = "dep_hdrhistogram_c",
build_file_content = """
cc_library(
name = "hdrhistogram_c",
srcs = [
"src/hdr_encoding.c",
"src/hdr_histogram.c",
"src/hdr_histogram_log.c",
"src/hdr_interval_recorder.c",
"src/hdr_malloc.h",
"src/hdr_thread.c",
"src/hdr_time.c",
"src/hdr_writer_reader_phaser.c",
],
hdrs = [
"src/hdr_atomic.h",
"src/hdr_encoding.h",
"src/hdr_endian.h",
"include/hdr/hdr_histogram.h",
"include/hdr/hdr_histogram_log.h",
"include/hdr/hdr_interval_recorder.h",
"include/hdr/hdr_writer_reader_phaser.h",
"src/hdr_tests.h",
"include/hdr/hdr_thread.h",
"include/hdr/hdr_time.h",
],
includes = ["include"],
copts = [
"-std=gnu99",
"-Wno-implicit-function-declaration",
"-Wno-error",
],
deps = ["@zlib-ng"],
visibility = ["//visibility:public"],
)
""",
sha256 = "bb95351a6a8b242dc9be1f28562761a84d4cf0a874ffc90a9b630770a6468e94",
strip_prefix = "HdrHistogram_c-0.11.8",
url = "https://github.com/HdrHistogram/HdrHistogram_c/archive/0.11.8.tar.gz",
)

####################################################################################
# deps: Overrides - Use constant for commit
####################################################################################

git_override(
module_name = "envoy",
commit = ENVOY_COMMIT,
patch_strip = 1,
patches = ["//patches:envoy_quiche_mem_slice.patch"],
remote = "https://github.com/envoyproxy/envoy.git",
)

git_override(
module_name = "envoy_api",
commit = ENVOY_COMMIT,
remote = "https://github.com/envoyproxy/envoy.git",
strip_prefix = "api",
)

####################################################################################
# setup: Languages - Python
####################################################################################

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
is_default = True,
python_version = "3.12",
)
use_repo(python, "python_3_12", python = "python_versions")

pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
hub_name = "nh_pip3",
python_version = "3.12",
requirements_lock = "//tools/base:requirements.txt",
)
use_repo(pip, "nh_pip3")

llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm")
use_repo(llvm, "llvm_toolchain")

llvm_toolchain_alias_ext = use_extension("@envoy_toolshed//compile:extensions.bzl", "llvm_toolchain_alias_extension")
use_repo(llvm_toolchain_alias_ext, "llvm_toolchain_llvm")


Loading
Loading