diff --git a/Makefile.core.mk b/Makefile.core.mk index 60709804..ba73de92 100644 --- a/Makefile.core.mk +++ b/Makefile.core.mk @@ -206,6 +206,10 @@ test_release_centos: push_release: build export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -d "$(RELEASE_GCS_PATH)" -p +push_release_simple: build + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -p + + push_release_centos: export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS) $(CENTOS_BUILD_ARGS)" BUILD_ENVOY_BINARY_ONLY=1 BASE_BINARY_NAME=envoy-centos && ./scripts/release-binary.sh -c -d "$(RELEASE_GCS_PATH)" diff --git a/WORKSPACE b/WORKSPACE index 0455bd98..0d248bed 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -49,11 +49,16 @@ ENVOY_REPO = "envoy" # To override with local envoy, just pass `--override_repository=envoy=/PATH/TO/ENVOY` to Bazel or # persist the option in `user.bazelrc`. -http_archive( +# http_archive( +# name = "envoy", +# sha256 = ENVOY_SHA256, +# strip_prefix = ENVOY_REPO + "-" + ENVOY_SHA, +# url = "https://github.com/" + ENVOY_ORG + "/" + ENVOY_REPO + "/archive/" + ENVOY_SHA + ".tar.gz", +# ) + +local_repository( name = "envoy", - sha256 = ENVOY_SHA256, - strip_prefix = ENVOY_REPO + "-" + ENVOY_SHA, - url = "https://github.com/" + ENVOY_ORG + "/" + ENVOY_REPO + "/archive/" + ENVOY_SHA + ".tar.gz", + path = "../envoy", ) load("@envoy//bazel:api_binding.bzl", "envoy_api_binding") diff --git a/bazel/extension_config/extensions_build_config.bzl b/bazel/extension_config/extensions_build_config.bzl index 07003785..f0a56715 100644 --- a/bazel/extension_config/extensions_build_config.bzl +++ b/bazel/extension_config/extensions_build_config.bzl @@ -342,6 +342,11 @@ ENVOY_CONTRIB_EXTENSIONS = { # "envoy.bootstrap.vcl": "//contrib/vcl/source:config", + + # waf extension + + # Custom cluster plugins + "envoy.router.cluster_specifier_plugin.cluster_fallback": "//contrib/custom_cluster_plugins/cluster_fallback/source:config", } @@ -362,6 +367,7 @@ ISTIO_ENABLED_CONTRIB_EXTENSIONS = [ "envoy.filters.network.sip_proxy", "envoy.filters.sip.router", "envoy.tls.key_providers.cryptomb", + "envoy.router.cluster_specifier_plugin.cluster_fallback", ] EXTENSIONS = dict([(k,v) for k,v in ENVOY_EXTENSIONS.items() if not k in ISTIO_DISABLED_EXTENSIONS] + diff --git a/common/scripts/run.sh b/common/scripts/run.sh index 271fe77a..79e43d7b 100755 --- a/common/scripts/run.sh +++ b/common/scripts/run.sh @@ -36,6 +36,10 @@ export REPO_ROOT=/work MOUNT_SOURCE="${MOUNT_SOURCE:-${PWD}}" MOUNT_DEST="${MOUNT_DEST:-/work}" +CONTAINER_OPTIONS="${CONTAINER_OPTIONS:---net=host}" +MOUNT_ENVOY_SOURCE="${MOUNT_ENVOY_SOURCE:-`cd $MOUNT_SOURCE/../envoy;pwd`}" +MOUNT_PACKAGE_SOURCE="${MOUNT_PACKAGE_SOURCE:-`cd $MOUNT_SOURCE/../package;pwd`}" +MOUNT_ROOT_SOURCE="${MOUNT_ROOT_SOURCE:-`cd $MOUNT_SOURCE/..;pwd`}" read -ra DOCKER_RUN_OPTIONS <<< "${DOCKER_RUN_OPTIONS:-}" @@ -55,7 +59,11 @@ read -ra DOCKER_RUN_OPTIONS <<< "${DOCKER_RUN_OPTIONS:-}" --env-file <(env | grep -v ${ENV_BLOCKLIST}) \ -e IN_BUILD_CONTAINER=1 \ -e TZ="${TIMEZONE:-$TZ}" \ + --mount "type=bind,source=${MOUNT_PACKAGE_SOURCE},destination=/home/package" \ + --mount "type=bind,source=${HOME}/.docker,destination=/home/.docker" \ --mount "type=bind,source=${MOUNT_SOURCE},destination=/work" \ + --mount "type=bind,source=${MOUNT_ROOT_SOURCE}/..,destination=/parent" \ + --mount "type=bind,source=${MOUNT_ENVOY_SOURCE},destination=/envoy" \ --mount "type=volume,source=go,destination=/go" \ --mount "type=volume,source=gocache,destination=/gocache" \ --mount "type=volume,source=cache,destination=/home/.cache" \ diff --git a/common/scripts/setup_env.sh b/common/scripts/setup_env.sh index 4a5e80bb..f6174941 100755 --- a/common/scripts/setup_env.sh +++ b/common/scripts/setup_env.sh @@ -84,7 +84,8 @@ export TARGET_OUT_LINUX="${TARGET_OUT_LINUX:-$(pwd)/out/linux_${TARGET_ARCH}}" export CONTAINER_TARGET_OUT="${CONTAINER_TARGET_OUT:-/work/out/${TARGET_OS}_${TARGET_ARCH}}" export CONTAINER_TARGET_OUT_LINUX="${CONTAINER_TARGET_OUT_LINUX:-/work/out/linux_${TARGET_ARCH}}" -export IMG="${IMG:-gcr.io/istio-testing/${IMAGE_NAME}:${IMAGE_VERSION}}" +#export IMG="${IMG:-gcr.io/istio-testing/${IMAGE_NAME}:${IMAGE_VERSION}}" +export IMG="${IMG:-higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/${IMAGE_NAME}:${IMAGE_VERSION}}" export CONTAINER_CLI="${CONTAINER_CLI:-docker}" diff --git a/scripts/release-binary.sh b/scripts/release-binary.sh index 7059f5c1..8673b982 100755 --- a/scripts/release-binary.sh +++ b/scripts/release-binary.sh @@ -19,7 +19,7 @@ set -ex # Use clang for the release builds. -export PATH=/usr/lib/llvm-10/bin:$PATH +export PATH=/usr/lib/llvm/bin:$PATH export CC=${CC:-clang} export CXX=${CXX:-clang++} @@ -98,25 +98,26 @@ fi # The proxy binary name. SHA="$(git rev-parse --verify HEAD)" -if [ -n "${DST}" ]; then - # If binary already exists skip. - # Use the name of the last artifact to make sure that everything was uploaded. - BINARY_NAME="${HOME}/istio-proxy-debug-${SHA}.deb" - gsutil stat "${DST}/${BINARY_NAME}" \ - && { echo 'Binary already exists'; exit 0; } \ - || echo 'Building a new binary.' -fi +# if [ -n "${DST}" ]; then +# # If binary already exists skip. +# # Use the name of the last artifact to make sure that everything was uploaded. +# BINARY_NAME="${HOME}/istio-proxy-debug-${SHA}.deb" +# gsutil stat "${DST}/${BINARY_NAME}" \ +# && { echo 'Binary already exists'; exit 0; } \ +# || echo 'Building a new binary.' +# fi # BAZEL_OUT: Symlinks don't work, use full path as a temporary workaround. # See: https://github.com/istio/istio/issues/15714 for details. # k8-opt is the output directory for x86_64 optimized builds (-c opt, so --config=release-symbol and --config=release). # k8-dbg is the output directory for -c dbg builds. -for config in release release-symbol debug +#for config in release release-symbol debug +for config in release do case $config in "release" ) CONFIG_PARAMS="--config=release" - BINARY_BASE_NAME="${BASE_BINARY_NAME}-alpha" + BINARY_BASE_NAME="${BASE_BINARY_NAME}" PACKAGE_BASE_NAME="istio-proxy" # shellcheck disable=SC2086 BAZEL_OUT="$(bazel info ${BAZEL_BUILD_ARGS} output_path)/k8-opt/bin" @@ -149,7 +150,7 @@ do export BUILD_CONFIG=${config} echo "Building ${config} proxy" - BINARY_NAME="${HOME}/${BINARY_BASE_NAME}-${SHA}.tar.gz" + BINARY_NAME="${HOME}/package/${BINARY_BASE_NAME}.tar.gz" SHA256_NAME="${HOME}/${BINARY_BASE_NAME}-${SHA}.sha256" # All cores are used by com_googlesource_chromium_v8:build within. # Prebuild this target to avoid stacking this ram intensive task with others. @@ -174,14 +175,12 @@ do echo "Building ${config} docker image" # shellcheck disable=SC2086 bazel build ${BAZEL_BUILD_ARGS} ${CONFIG_PARAMS} \ - //tools/docker:envoy_distroless \ //tools/docker:envoy_ubuntu if [ "${PUSH_DOCKER_IMAGE}" -eq 1 ]; then echo "Pushing ${config} docker image" # shellcheck disable=SC2086 bazel run ${BAZEL_BUILD_ARGS} ${CONFIG_PARAMS} \ - //tools/docker:push_envoy_distroless \ //tools/docker:push_envoy_ubuntu fi @@ -209,36 +208,36 @@ if [ "${BUILD_ENVOY_BINARY_ONLY}" -eq 1 ]; then fi # Build and publish Wasm plugins -extensions=(stats metadata_exchange attributegen) -TMP_WASM=$(mktemp -d -t wasm-plugins-XXXXXXXXXX) -trap 'rm -rf ${TMP_WASM}' EXIT -make build_wasm -if [ -n "${DST}" ]; then - for extension in "${extensions[@]}"; do - # Rename the plugin file and generate sha256 for it - WASM_NAME="${extension}-${SHA}.wasm" - WASM_COMPILED_NAME="${extension}-${SHA}.compiled.wasm" - WASM_PATH="${TMP_WASM}/${WASM_NAME}" - WASM_COMPILED_PATH="${TMP_WASM}/${WASM_COMPILED_NAME}" - SHA256_PATH="${WASM_PATH}.sha256" - SHA256_COMPILED_PATH="${WASM_COMPILED_PATH}.sha256" - # shellcheck disable=SC2086 - BAZEL_TARGET=$(bazel info ${BAZEL_BUILD_ARGS} output_path)/k8-opt/bin/extensions/${extension}.wasm - # shellcheck disable=SC2086 - BAZEL_COMPILED_TARGET=$(bazel info ${BAZEL_BUILD_ARGS} output_path)/k8-opt/bin/extensions/${extension}.compiled.wasm - cp "${BAZEL_TARGET}" "${WASM_PATH}" - cp "${BAZEL_COMPILED_TARGET}" "${WASM_COMPILED_PATH}" - sha256sum "${WASM_PATH}" > "${SHA256_PATH}" - sha256sum "${WASM_COMPILED_PATH}" > "${SHA256_COMPILED_PATH}" +# extensions=(stats metadata_exchange attributegen) +# TMP_WASM=$(mktemp -d -t wasm-plugins-XXXXXXXXXX) +# trap 'rm -rf ${TMP_WASM}' EXIT +# make build_wasm +# if [ -n "${DST}" ]; then +# for extension in "${extensions[@]}"; do +# # Rename the plugin file and generate sha256 for it +# WASM_NAME="${extension}-${SHA}.wasm" +# WASM_COMPILED_NAME="${extension}-${SHA}.compiled.wasm" +# WASM_PATH="${TMP_WASM}/${WASM_NAME}" +# WASM_COMPILED_PATH="${TMP_WASM}/${WASM_COMPILED_NAME}" +# SHA256_PATH="${WASM_PATH}.sha256" +# SHA256_COMPILED_PATH="${WASM_COMPILED_PATH}.sha256" +# # shellcheck disable=SC2086 +# BAZEL_TARGET=$(bazel info ${BAZEL_BUILD_ARGS} output_path)/k8-opt/bin/extensions/${extension}.wasm +# # shellcheck disable=SC2086 +# BAZEL_COMPILED_TARGET=$(bazel info ${BAZEL_BUILD_ARGS} output_path)/k8-opt/bin/extensions/${extension}.compiled.wasm +# cp "${BAZEL_TARGET}" "${WASM_PATH}" +# cp "${BAZEL_COMPILED_TARGET}" "${WASM_COMPILED_PATH}" +# sha256sum "${WASM_PATH}" > "${SHA256_PATH}" +# sha256sum "${WASM_COMPILED_PATH}" > "${SHA256_COMPILED_PATH}" - # push wasm files and sha to the given bucket - gsutil stat "${DST}/${WASM_NAME}" \ - && { echo "WASM file ${WASM_NAME} already exist"; continue; } \ - || echo "Pushing the WASM file ${WASM_NAME}" - gsutil stat "${DST}/${WASM_COMPILED_NAME}" \ - && { echo "WASM file ${WASM_COMPILED_NAME} already exist"; continue; } \ - || echo "Pushing the WASM file ${WASM_COMPILED_NAME}" - gsutil cp "${WASM_PATH}" "${SHA256_PATH}" "${DST}" - gsutil cp "${WASM_COMPILED_PATH}" "${SHA256_COMPILED_PATH}" "${DST}" - done -fi +# # push wasm files and sha to the given bucket +# gsutil stat "${DST}/${WASM_NAME}" \ +# && { echo "WASM file ${WASM_NAME} already exist"; continue; } \ +# || echo "Pushing the WASM file ${WASM_NAME}" +# gsutil stat "${DST}/${WASM_COMPILED_NAME}" \ +# && { echo "WASM file ${WASM_COMPILED_NAME} already exist"; continue; } \ +# || echo "Pushing the WASM file ${WASM_COMPILED_NAME}" +# gsutil cp "${WASM_PATH}" "${SHA256_PATH}" "${DST}" +# gsutil cp "${WASM_COMPILED_PATH}" "${SHA256_COMPILED_PATH}" "${DST}" +# done +# fi diff --git a/src/envoy/BUILD b/src/envoy/BUILD index 5f35b0f7..671640cb 100644 --- a/src/envoy/BUILD +++ b/src/envoy/BUILD @@ -18,6 +18,15 @@ load("@rules_pkg//:pkg.bzl", "pkg_tar") load( "@envoy//bazel:envoy_build_system.bzl", "envoy_cc_binary", + "envoy_cc_contrib_extension", + "envoy_cc_library", + "envoy_contrib_package", +) +load( + "@envoy//contrib:all_contrib_extensions.bzl", + "ARM64_SKIP_CONTRIB_TARGETS", + "PPC_SKIP_CONTRIB_TARGETS", + "envoy_all_contrib_extensions", ) envoy_cc_binary( @@ -37,6 +46,18 @@ envoy_cc_binary( "//src/envoy/tcp/sni_verifier:config_lib", "//src/envoy/tcp/tcp_cluster_rewrite:config_lib", "@envoy//source/exe:envoy_main_entry_lib", + ] + [ + "@envoy//contrib/custom_cluster_plugins/cluster_fallback/source:config", + "@envoy//contrib/http_dubbo_transcoder/filters/http/source:config", + "@envoy//contrib/kafka/filters/network/source:kafka_broker_config_lib", + "@envoy//contrib/kafka/filters/network/source/mesh:config_lib", + "@envoy//contrib/mysql_proxy/filters/network/source:config", + "@envoy//contrib/postgres_proxy/filters/network/source:config", + "@envoy//contrib/rocketmq_proxy/filters/network/source:config", + "@envoy//contrib/sip_proxy/filters/network/source:config", + "@envoy//contrib/sip_proxy/filters/network/source/router:config", + "@envoy//contrib/squash/filters/http/source:config", + "@envoy//contrib/upstreams/http/dubbo_tcp/source:config" ], ) diff --git a/tools/docker/BUILD b/tools/docker/BUILD index d5a6e5fd..f949c13f 100644 --- a/tools/docker/BUILD +++ b/tools/docker/BUILD @@ -36,7 +36,7 @@ container_push( name = "push_envoy_distroless", format = "Docker", image = ":envoy_distroless", - registry = "gcr.io", + registry = "registry.cn-hangzhou.aliyuncs.com", repository = "{DOCKER_REPOSITORY}", tag = "{BUILD_CONFIG}-{BUILD_SCM_REVISION}", ) @@ -45,7 +45,7 @@ container_push( name = "push_envoy_ubuntu", format = "Docker", image = ":envoy_ubuntu", - registry = "gcr.io", + registry = "registry.cn-hangzhou.aliyuncs.com", repository = "{DOCKER_REPOSITORY}", tag = "ubuntu-{BUILD_CONFIG}-{BUILD_SCM_REVISION}", )