feat(apisix): add Cloudron package
- Implements Apache APISIX packaging for Cloudron platform. - Includes Dockerfile, CloudronManifest.json, and start.sh. - Configured to use Cloudron's etcd addon. 🤖 Generated with Gemini CLI Co-Authored-By: Gemini <noreply@google.com>
This commit is contained in:
217
CloudronPackages/APISIX/apisix-source/ci/common.sh
Normal file
217
CloudronPackages/APISIX/apisix-source/ci/common.sh
Normal file
@@ -0,0 +1,217 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
set -ex
|
||||
|
||||
export_version_info() {
|
||||
source ./.requirements
|
||||
}
|
||||
|
||||
export_or_prefix() {
|
||||
export OPENRESTY_PREFIX="/usr/local/openresty"
|
||||
|
||||
export PATH=$OPENRESTY_PREFIX/nginx/sbin:$OPENRESTY_PREFIX/luajit/bin:$OPENRESTY_PREFIX/bin:$PATH
|
||||
export OPENSSL_PREFIX=$OPENRESTY_PREFIX/openssl3
|
||||
export OPENSSL_BIN=$OPENSSL_PREFIX/bin/openssl
|
||||
}
|
||||
|
||||
create_lua_deps() {
|
||||
echo "Create lua deps"
|
||||
|
||||
make deps
|
||||
|
||||
# just for jwt-auth test
|
||||
luarocks install lua-resty-openssl --tree deps
|
||||
|
||||
# maybe reopen this feature later
|
||||
# luarocks install luacov-coveralls --tree=deps --local > build.log 2>&1 || (cat build.log && exit 1)
|
||||
# for github action cache
|
||||
chmod -R a+r deps
|
||||
}
|
||||
|
||||
rerun_flaky_tests() {
|
||||
if tail -1 "$1" | grep "Result: PASS"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! tail -1 "$1" | grep "Result: FAIL"; then
|
||||
# CI failure not caused by failed test
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local tests
|
||||
local n_test
|
||||
tests="$(awk '/^t\/.*.t\s+\(.+ Failed: .+\)/{ print $1 }' "$1")"
|
||||
n_test="$(echo "$tests" | wc -l)"
|
||||
if [ "$n_test" -gt 10 ]; then
|
||||
# too many tests failed
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Rerun $(echo "$tests" | xargs)"
|
||||
FLUSH_ETCD=1 prove --timer -I./test-nginx/lib -I./ $(echo "$tests" | xargs)
|
||||
}
|
||||
|
||||
install_curl () {
|
||||
CURL_VERSION="8.13.0"
|
||||
wget -q https://github.com/stunnel/static-curl/releases/download/${CURL_VERSION}/curl-linux-x86_64-glibc-${CURL_VERSION}.tar.xz
|
||||
tar -xf curl-linux-x86_64-glibc-${CURL_VERSION}.tar.xz
|
||||
sudo cp curl /usr/bin
|
||||
curl -V
|
||||
}
|
||||
|
||||
install_apisix_runtime() {
|
||||
export runtime_version=${APISIX_RUNTIME}
|
||||
wget "https://raw.githubusercontent.com/api7/apisix-build-tools/apisix-runtime/${APISIX_RUNTIME}/build-apisix-runtime.sh"
|
||||
chmod +x build-apisix-runtime.sh
|
||||
./build-apisix-runtime.sh latest
|
||||
}
|
||||
|
||||
install_grpcurl () {
|
||||
# For more versions, visit https://github.com/fullstorydev/grpcurl/releases
|
||||
GRPCURL_VERSION="1.8.5"
|
||||
wget -q https://github.com/fullstorydev/grpcurl/releases/download/v${GRPCURL_VERSION}/grpcurl_${GRPCURL_VERSION}_linux_x86_64.tar.gz
|
||||
tar -xvf grpcurl_${GRPCURL_VERSION}_linux_x86_64.tar.gz -C /usr/local/bin
|
||||
}
|
||||
|
||||
install_vault_cli () {
|
||||
VAULT_VERSION="1.9.0"
|
||||
wget -q https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip
|
||||
unzip vault_${VAULT_VERSION}_linux_amd64.zip && mv ./vault /usr/local/bin
|
||||
}
|
||||
|
||||
install_nodejs () {
|
||||
curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s install --cleanup lts
|
||||
corepack enable pnpm
|
||||
}
|
||||
|
||||
install_brotli () {
|
||||
local BORTLI_VERSION="1.1.0"
|
||||
wget -q https://github.com/google/brotli/archive/refs/tags/v${BORTLI_VERSION}.zip
|
||||
unzip v${BORTLI_VERSION}.zip && cd ./brotli-${BORTLI_VERSION} && mkdir build && cd build
|
||||
local CMAKE=$(command -v cmake3 > /dev/null 2>&1 && echo cmake3 || echo cmake)
|
||||
${CMAKE} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/brotli ..
|
||||
sudo ${CMAKE} --build . --config Release --target install
|
||||
if [ -d "/usr/local/brotli/lib64" ]; then
|
||||
echo /usr/local/brotli/lib64 | sudo tee /etc/ld.so.conf.d/brotli.conf
|
||||
else
|
||||
echo /usr/local/brotli/lib | sudo tee /etc/ld.so.conf.d/brotli.conf
|
||||
fi
|
||||
sudo ldconfig
|
||||
cd ../..
|
||||
rm -rf brotli-${BORTLI_VERSION}
|
||||
}
|
||||
|
||||
set_coredns() {
|
||||
# test a domain name is configured as upstream
|
||||
echo "127.0.0.1 test.com" | sudo tee -a /etc/hosts
|
||||
echo "::1 ipv6.local" | sudo tee -a /etc/hosts
|
||||
# test certificate verification
|
||||
echo "127.0.0.1 admin.apisix.dev" | sudo tee -a /etc/hosts
|
||||
cat /etc/hosts # check GitHub Action's configuration
|
||||
|
||||
# override DNS configures
|
||||
if [ -f "/etc/netplan/50-cloud-init.yaml" ]; then
|
||||
sudo pip3 install yq
|
||||
|
||||
tmp=$(mktemp)
|
||||
yq -y '.network.ethernets.eth0."dhcp4-overrides"."use-dns"=false' /etc/netplan/50-cloud-init.yaml | \
|
||||
yq -y '.network.ethernets.eth0."dhcp4-overrides"."use-domains"=false' | \
|
||||
yq -y '.network.ethernets.eth0.nameservers.addresses[0]="8.8.8.8"' | \
|
||||
yq -y '.network.ethernets.eth0.nameservers.search[0]="apache.org"' > $tmp
|
||||
mv $tmp /etc/netplan/50-cloud-init.yaml
|
||||
cat /etc/netplan/50-cloud-init.yaml
|
||||
sudo netplan apply
|
||||
sleep 3
|
||||
|
||||
sudo mv /etc/resolv.conf /etc/resolv.conf.bak
|
||||
sudo ln -s /run/systemd/resolve/resolv.conf /etc/
|
||||
fi
|
||||
cat /etc/resolv.conf
|
||||
|
||||
mkdir -p build-cache
|
||||
|
||||
if [ ! -f "build-cache/coredns_1_8_1" ]; then
|
||||
wget -q https://github.com/coredns/coredns/releases/download/v1.8.1/coredns_1.8.1_linux_amd64.tgz
|
||||
tar -xvf coredns_1.8.1_linux_amd64.tgz
|
||||
mv coredns build-cache/
|
||||
|
||||
touch build-cache/coredns_1_8_1
|
||||
fi
|
||||
|
||||
pushd t/coredns || exit 1
|
||||
../../build-cache/coredns -dns.port=1053 &
|
||||
popd || exit 1
|
||||
|
||||
touch build-cache/test_resolve.conf
|
||||
echo "nameserver 127.0.0.1:1053" > build-cache/test_resolve.conf
|
||||
}
|
||||
|
||||
GRPC_SERVER_EXAMPLE_VER=20210819
|
||||
|
||||
linux_get_dependencies () {
|
||||
apt update
|
||||
apt install -y cpanminus build-essential libncurses5-dev libreadline-dev libssl-dev perl libpcre3 libpcre3-dev xz-utils
|
||||
apt remove -y curl
|
||||
apt-get install -y libyaml-dev
|
||||
wget https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq
|
||||
|
||||
# install curl with http3 support
|
||||
install_curl
|
||||
}
|
||||
|
||||
function start_grpc_server_example() {
|
||||
./t/grpc_server_example/grpc_server_example \
|
||||
-grpc-address :10051 -grpcs-address :10052 -grpcs-mtls-address :10053 -grpc-http-address :10054 \
|
||||
-crt ./t/certs/apisix.crt -key ./t/certs/apisix.key -ca ./t/certs/mtls_ca.crt \
|
||||
> grpc_server_example.log 2>&1 &
|
||||
|
||||
for (( i = 0; i <= 10; i++ )); do
|
||||
sleep 0.5
|
||||
GRPC_PROC=`ps -ef | grep grpc_server_example | grep -v grep || echo "none"`
|
||||
if [[ $GRPC_PROC == "none" || "$i" -eq 10 ]]; then
|
||||
echo "failed to start grpc_server_example"
|
||||
ss -antp | grep 1005 || echo "no proc listen port 1005x"
|
||||
cat grpc_server_example.log
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ss -lntp | grep 10051 | grep grpc_server && break
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
function start_sse_server_example() {
|
||||
# build sse_server_example
|
||||
pushd t/sse_server_example
|
||||
go build
|
||||
./sse_server_example 7737 2>&1 &
|
||||
|
||||
for (( i = 0; i <= 10; i++ )); do
|
||||
sleep 0.5
|
||||
SSE_PROC=`ps -ef | grep sse_server_example | grep -v grep || echo "none"`
|
||||
if [[ $SSE_PROC == "none" || "$i" -eq 10 ]]; then
|
||||
echo "failed to start sse_server_example"
|
||||
ss -antp | grep 7737 || echo "no proc listen port 7737"
|
||||
exit 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
popd
|
||||
}
|
Reference in New Issue
Block a user