Skip to content

Try this too

Try this too #3

name: buildbot
on:
workflow_call:
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
defaults:
run:
shell: 'bash -Eeo pipefail -x {0}'
jobs:
check-if-allowed:
if: ${{ ( github.repository_owner == 'nginx' || github.repository_owner == 'nginxinc' ) }}
runs-on: [ ubuntu-latest ]
steps:
- name: Check if we're in the allowed environment
run: |
org_found=0
event_found=0
ref_found=0
ALLOWED_ORGS="nginx nginxinc"
ALLOWED_EVENTS="push"
ALLOWED_REFS="refs/heads/main refs/heads/master refs/heads/branches/stable-1.26"
for org in $ALLOWED_ORGS; do
if [ "$org" == "$GITHUB_REPOSITORY_OWNER" ]; then org_found=1; fi
done
for event in $ALLOWED_EVENTS; do
if [ "$event" == "$GITHUB_EVENT_NAME" ]; then event_found=1; fi
done
for ref in $ALLOWED_REFS; do
if [ "$ref" == "$GITHUB_REF" ]; then ref_found=1; fi
done
if [ $org_found$event_found$ref_found -ne 111 ]; then
echo "Repository owner, event, or ref are not explicitely allowed to use this workflow: $GITHUB_REPOSITORY_OWNER, $GITHUB_EVENT_NAME, $GITHUB_REF"
exit 1
fi
exit 0
test:
if: 0
name: ${{ matrix.os }}, ${{ matrix.subarch != '' && matrix.subarch || matrix.arch }} ${{ matrix.asan != '' && matrix.asan || '' }}
runs-on: [ "${{ matrix.os }}-${{ matrix.arch }}" ]
needs: check-if-allowed
strategy:
matrix:
os: [ alpine-3.19, amazonlinux-2, amazonlinux-2023, debian-11, debian-12, freebsd-14, rhel-8, rhel-9, sles-12, ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ]
arch: [ amd64, arm64 ]
subarch: [ '' ]
asan: [ '' ]
exclude:
- os: freebsd-14 # we don't have an arm64 builder for freebsd-14 yet
arch: arm64
- os: sles-12 # we don't have an arm64 for SLES 12
arch: arm64
include:
- os: debian-12
arch: amd64
subarch: x86
- os: ubuntu-22.04
arch: amd64
asan: asan
fail-fast: false
steps:
- name: checkout v3
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
if: ${{ matrix.os == 'amazonlinux-2' || matrix.os == 'sles-12' }}
- name: checkout v4
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
if: ${{ matrix.os != 'amazonlinux-2' && matrix.os != 'sles-12' }}
- name: Set the defaults and set up environment
run: |
ENV_JSON=$(cat <<EOF
{
"alpine-3.19": {
"CC_OPT": "$(. /usr/share/abuild/default.conf; echo $CFLAGS)",
"LD_OPT": "$(. /usr/share/abuild/default.conf; echo $LDFLAGS)"
},
"amazonlinux-2": {
"CC_OPT": "$(rpm --eval %{optflags}) $(pcre2-config --cflags) -fPIC",
"LD_OPT": "-Wl,-z,relro -Wl,-z,now"
},
"amazonlinux-2023": {
"CC_OPT": "$(rpm --eval %{optflags}) $(pcre2-config --cflags) -fPIC",
"LD_OPT": "-Wl,-z,relro -Wl,-z,now"
},
"debian-11": {
"CC_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get CFLAGS)",
"LD_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get LDFLAGS)"
},
"debian-12": {
"CC_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get CFLAGS)",
"LD_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get LDFLAGS)"
},
"freebsd-14": {
"CC_OPT": "-I/usr/local/include -Wno-compound-token-split-by-macro",
"LD_OPT": "-L/usr/local/lib -Wl,-z,relro -Wl,-z,now"
},
"rhel-8": {
"CC_OPT": "$(rpm --eval %{optflags}) $(pcre2-config --cflags) -fPIC",
"LD_OPT": "-Wl,-z,relro -Wl,-z,now"
},
"rhel-9": {
"CC_OPT": "$(rpm --eval %{optflags}) $(pcre2-config --cflags) -fPIC",
"LD_OPT": "-Wl,-z,relro -Wl,-z,now"
},
"sles-12": {
"CC_OPT": "$(rpm --eval %{optflags}) $(pcre2-config --cflags) -fPIC",
"LD_OPT": "-Wl,-z,relro -Wl,-z,now"
},
"ubuntu-20.04": {
"CC_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get CFLAGS)",
"LD_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get LDFLAGS)"
},
"ubuntu-22.04": {
"CC_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get CFLAGS)",
"LD_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get LDFLAGS)"
},
"ubuntu-24.04": {
"CC_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get CFLAGS)",
"LD_OPT": "$(DEB_BUILD_MAINT_OPTIONS=hardening=+all DEB_CFLAGS_MAINT_APPEND=-fPIC DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed dpkg-buildflags --get LDFLAGS)"
},
"NGINX_CONFIGURE_CMD_MIN": "auto/configure \
--without-http_charset_module \
--without-http_gzip_module \
--without-http_ssi_module \
--without-http_userid_module \
--without-http_access_module \
--without-http_auth_basic_module \
--without-http_mirror_module \
--without-http_autoindex_module \
--without-http_geo_module \
--without-http_map_module \
--without-http_split_clients_module \
--without-http_referer_module \
--without-http_rewrite_module \
--without-http_proxy_module \
--without-http_fastcgi_module \
--without-http_uwsgi_module \
--without-http_scgi_module \
--without-http_memcached_module \
--without-http-cache \
--without-http_limit_conn_module \
--without-http_limit_req_module \
--without-http_empty_gif_module \
--without-http_browser_module \
--without-http_upstream_hash_module \
--without-http_upstream_ip_hash_module \
--without-http_upstream_least_conn_module \
--without-http_upstream_random_module \
--without-http_upstream_keepalive_module \
--without-http_upstream_zone_module \
--with-mail \
--without-mail_imap_module \
--without-mail_pop3_module \
--without-mail_smtp_module \
--with-stream \
--without-stream_limit_conn_module \
--without-stream_access_module \
--without-stream_geo_module \
--without-stream_map_module \
--without-stream_split_clients_module \
--without-stream_return_module \
--without-stream_set_module \
--without-stream_upstream_hash_module \
--without-stream_upstream_least_conn_module \
--without-stream_upstream_random_module \
--without-stream_upstream_zone_module",
"NGINX_CONFIGURE_CMD_COMMON": "auto/configure \
--prefix=/tmp \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-select_module \
--with-poll_module \
--with-http_auth_request_module \
--with-http_v2_module \
--with-http_slice_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-stream_realip_module \
--with-threads \
--with-compat",
"NGINX_CONFIGURE_ADD_STD_COMMON": "--with-cpp_test_module",
"NGINX_CONFIGURE_ADD_STD": "--with-http_perl_module \
--with-http_xslt_module \
--with-http_image_filter_module",
"NGINX_CONFIGURE_ADD_STD_MODULES": "--with-http_perl_module=dynamic \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic",
"NGINX_CONFIGURE_ADD_COMMON": "--with-http_degradation_module \
--with-http_v3_module",
"NGINX_CONFIGURE_ADD_GEOIP": "--with-http_geoip_module \
--with-stream_geoip_module",
"NGINX_CONFIGURE_ADD_GEOIP_MODULES": "--with-http_geoip_module=dynamic \
--with-stream_geoip_module=dynamic",
"NGINX_CONFIGURE_ADD_AIO": "--with-file-aio",
"TEST_NGINX_GLOBALS_HTTP_AIO": "aio on; directio 0; tcp_nopush on;"
}
EOF
)
CC_OPT=$(echo $ENV_JSON | jq -r '."${{ matrix.os }}".CC_OPT')
LD_OPT=$(echo $ENV_JSON | jq -r '."${{ matrix.os }}".LD_OPT')
CC_OPT_ADD=""
LD_OPT_ADD=""
NGINX_CONFIGURE_CMD_MIN=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_CMD_MIN')
NGINX_CONFIGURE_CMD_COMMON=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_CMD_COMMON')
NGINX_CONFIGURE_ADD_STD_COMMON=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_STD_COMMON')
NGINX_CONFIGURE_ADD_STD=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_STD')
NGINX_CONFIGURE_ADD_STD_MODULES=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_STD_MODULES')
NGINX_CONFIGURE_ADD_COMMON=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_COMMON')
NGINX_CONFIGURE_ADD_GEOIP=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_GEOIP')
NGINX_CONFIGURE_ADD_GEOIP_MODULES=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_GEOIP_MODULES')
NGINX_CONFIGURE_ADD_AIO=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_AIO')
TEST_NGINX_GLOBALS_HTTP_AIO=$(echo $ENV_JSON | jq -r '.TEST_NGINX_GLOBALS_HTTP_AIO')
# per-target hacks
case "${{ matrix.os }}" in
amazonlinux-2023)
NGINX_CONFIGURE_ADD_GEOIP=""
NGINX_CONFIGURE_ADD_GEOIP_MODULES=""
TEST_NGINX_GLOBALS_HTTP_AIO=""
;;
freebsd-*)
NGINX_CONFIGURE_ADD_GEOIP=""
NGINX_CONFIGURE_ADD_GEOIP_MODULES=""
TEST_NGINX_GLOBALS_HTTP_AIO="aio on; sendfile on; tcp_nopush on;"
;;
rhel-*)
NGINX_CONFIGURE_ADD_GEOIP=""
NGINX_CONFIGURE_ADD_GEOIP_MODULES=""
;;
sles-*)
NGINX_CONFIGURE_ADD_COMMON=${NGINX_CONFIGURE_ADD_COMMON%%--with-http_v3_module}
;;
esac
case "${{ matrix.subarch }}" in
x86)
CC_OPT_ADD="-m32"
LD_OPT_ADD="-m32"
# abuse for 32-bit perl...
NGINX_CONFIGURE_ADD_GEOIP="--with-perl=/usr/bin/perl5.36-i386-linux-gnu"
NGINX_CONFIGURE_ADD_GEOIP_MODULES="--with-perl=/usr/bin/perl5.36-i386-linux-gnu"
NGINX_CONFIGURE_ADD_AUX_CC_OPT="$CC_OPT_ADD"
NGINX_CONFIGURE_ADD_AUX_LD_OPT="$LD_OPT_ADD"
;;
esac
case "${{ matrix.asan }}" in
asan)
CC_OPT="-O1 -g -fsanitize=address -fno-omit-frame-pointer -DNJS_DEBUG_MEMORY -DNGX_DEBUG_PALLOC -DNGX_DEBUG_MALLOC -DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_FRAMES -DNGX_QUIC_DEBUG_ALLOC -DNGX_QUIC_DEBUG_CRYPTO"
LD_OPT="-fsanitize=address -lcrypt"
NGINX_CONFIGURE_ADD_AUX_CC_OPT="-O1 -g -fsanitize=address -fno-omit-frame-pointer -DNGX_DEBUG_PALLOC -DNGX_DEBUG_MALLOC"
NGINX_CONFIGURE_ADD_AUX_LD_OPT="$LD_OPT"
;;
esac
echo CC_OPT="$CC_OPT_ADD $CC_OPT" >> $GITHUB_ENV
echo LD_OPT="$LD_OPT_ADD $LD_OPT" >> $GITHUB_ENV
echo NGINX_CONFIGURE_CMD_MIN="$NGINX_CONFIGURE_CMD_MIN" >> $GITHUB_ENV
echo NGINX_CONFIGURE_CMD_COMMON="$NGINX_CONFIGURE_CMD_COMMON" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_COMMON="$NGINX_CONFIGURE_ADD_COMMON" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_STD_COMMON="$NGINX_CONFIGURE_ADD_STD_COMMON" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_STD="$NGINX_CONFIGURE_ADD_STD" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_STD_MODULES="$NGINX_CONFIGURE_ADD_STD_MODULES" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_GEOIP="$NGINX_CONFIGURE_ADD_GEOIP" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_GEOIP_MODULES="$NGINX_CONFIGURE_ADD_GEOIP_MODULES" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_AIO="$NGINX_CONFIGURE_ADD_AIO" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_AUX_CC_OPT="$NGINX_CONFIGURE_ADD_AUX_CC_OPT" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_AUX_LD_OPT="$NGINX_CONFIGURE_ADD_AUX_LD_OPT" >> $GITHUB_ENV
echo TEST_NGINX_GLOBALS_HTTP_AIO="$TEST_NGINX_GLOBALS_HTTP_AIO" >> $GITHUB_ENV
case "${{ matrix.os }}" in
freebsd-*)
echo MAKE_UTILITY=gmake >> $GITHUB_ENV
;;
*)
echo MAKE_UTILITY=make >> $GITHUB_ENV
;;
esac
- name: Check out nginx tests
run: |
git clone https://github.com/nginx/nginx-tests
- name: Fix kernel mmap rnd bits
if: matrix.asan == 'asan'
# Asan in ubuntu 22.04 is incompatible with high-entropy ASLR in much
# newer kernels using leading to random crashes: https://reviews.llvm.org/D148280
run: sudo sysctl vm.mmap_rnd_bits=28
- name: Configure and build std
run: |
./auto/configure \
--with-cc-opt="$NGINX_CONFIGURE_ADD_AUX_CC_OPT" \
--with-ld-opt="$NGINX_CONFIGURE_ADD_AUX_LD_OPT" \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
make clean
- name: Configure and build min
run: |
$NGINX_CONFIGURE_CMD_MIN \
--with-cc-opt="$NGINX_CONFIGURE_ADD_AUX_CC_OPT" \
--with-ld-opt="$NGINX_CONFIGURE_ADD_AUX_LD_OPT" \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
make clean
- name: Configure and build package-max
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD \
$NGINX_CONFIGURE_ADD_GEOIP \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test package-max
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
- name: Configure and build package-max debug
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD \
$NGINX_CONFIGURE_ADD_GEOIP \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
--with-debug \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test package-max debug
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
- name: Configure and build modules
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD_MODULES \
$NGINX_CONFIGURE_ADD_GEOIP_MODULES \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
|| cat objs/autoconf.err
make modules
- name: Configure and build dynamic
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test dynamic
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_GLOBALS: "load_module ${{ github.workspace }}/objs/ngx_http_image_filter_module.so;load_module ${{ github.workspace }}/objs/ngx_http_perl_module.so;load_module ${{ github.workspace }}/objs/ngx_http_xslt_filter_module.so;"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
- name: Configure and build modules debug
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD_MODULES \
$NGINX_CONFIGURE_ADD_GEOIP_MODULES \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
--with-debug \
|| cat objs/autoconf.err
make modules
- name: Configure and build dynamic debug
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
--with-debug \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test dynamic debug
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_GLOBALS: "load_module ${{ github.workspace }}/objs/ngx_http_image_filter_module.so;load_module /${{ github.workspace }}/objs/ngx_http_perl_module.so;load_module /${{ github.workspace }}/objs/ngx_http_xslt_filter_module.so;"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
- name: Configure and build aio
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD \
$NGINX_CONFIGURE_ADD_GEOIP \
$NGINX_CONFIGURE_ADD_AIO \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test aio
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
TEST_NGINX_GLOBALS_HTTP: "${{ env.TEST_NGINX_GLOBALS_HTTP_AIO }}"
- name: Test aio-write
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
TEST_NGINX_GLOBALS_HTTP: "aio threads; aio_write on;"
- name: Configure and build aio debug
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD \
$NGINX_CONFIGURE_ADD_GEOIP \
$NGINX_CONFIGURE_ADD_AIO \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
--with-debug \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test aio debug
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
TEST_NGINX_GLOBALS_HTTP: "${{ env.TEST_NGINX_GLOBALS_HTTP_AIO }}"
- name: Test aio-write debug
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
TEST_NGINX_GLOBALS_HTTP: "aio threads; aio_write on;"
- name: Check out nginx delay body filter
if: ${{ matrix.subarch == '' }}
run: |
# TODO: move under nginx/ org?
git clone https://github.com/thresheek/ngx_http_delay_body_filter_module ndb
- name: Configure and build ndb
if: ${{ matrix.subarch == '' }}
run: |
$NGINX_CONFIGURE_CMD_COMMON \
$NGINX_CONFIGURE_ADD_COMMON \
$NGINX_CONFIGURE_ADD_STD_COMMON \
$NGINX_CONFIGURE_ADD_STD \
$NGINX_CONFIGURE_ADD_GEOIP \
--with-cc-opt="$CC_OPT" \
--with-ld-opt="$LD_OPT" \
--add-module=./ndb/ \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test ndb
if: ${{ matrix.subarch == '' }}
run: |
ulimit -c unlimited
prove -v -j$(nproc) --state=save ./ndb/t || prove -v --state=failed
make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
ASAN_OPTIONS: "detect_odr_violation=0:report_globals=0:detect_leaks=0"
print:
if: 0
name: debian-12, amd64, print
runs-on: [ debian-12-amd64 ]
needs: check-if-allowed
steps:
- name: checkout v4
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Checkout and build clang-ast
run: |
git clone https://github.com/nginx/clang-ast
cd clang-ast
make CONFIG=llvm-config-14
- name: Configure and build package-max # TODO: don't duplicate the package-max configure params, but rather construct them from the other jobs?
run: |
CC=clang-14 ./auto/configure --prefix=/tmp --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-select_module --with-poll_module --with-http_auth_request_module --with-http_v2_module --with-http_slice_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-threads --with-cpp_test_module --with-compat --with-http_degradation_module --with-http_v3_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-stream_geoip_module --with-http_perl_module --with-debug \
|| cat build/autoconf.err
make CFLAGS='-Xclang -load -Xclang ./clang-ast/ngx-ast.so -Xclang -plugin -Xclang ngx-ast -DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_FRAMES -DNGX_QUIC_DEBUG_ALLOC -DNGX_QUIC_DEBUG_CRYPTO' LINK=: CC=clang-14
ssl:
if: 0
name: ${{ matrix.os }}, ${{ matrix.arch }}, ${{ matrix.ssl }}
runs-on: [ "${{ matrix.os }}-${{ matrix.arch }}" ]
needs: check-if-allowed
strategy:
matrix:
os: [ freebsd-14 ]
arch: [ amd64 ]
ssl: [ 'ossl31', 'ossl32', 'bssl', 'lssl', 'qssl' ]
fail-fast: false
env:
quictls_ver: 3.0.13+quic
libressl_ver: 3.8.2
steps:
- name: checkout v4
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Check out nginx tests
run: |
git clone https://github.com/nginx/nginx-tests
- name: checkout about build ${{ matrix.ssl }} library sources
run: |
case "${{ matrix.ssl }}" in
bssl)
git clone https://boringssl.googlesource.com/boringssl ssl
mkdir ssl/build
cd ssl/build
# TODO: fix the runner to have cmake
sudo pkg install -y cmake
cmake ..
make -j$(nproc)
;;
lssl)
curl -OL https://cdn.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${{ env.libressl_ver }}.tar.gz
tar -s /libressl-${{ env.libressl_ver }}/ssl/ -xzf libressl-${{ env.libressl_ver}}.tar.gz
cd ssl
./configure --disable-shared
make -sj$(nproc)
;;
ossl31)
git clone --depth 1 -b openssl-3.1 https://github.com/openssl/openssl ssl
cd ssl
./config no-shared no-threads
make -sj$(nproc)
;;
ossl32)
git clone --depth 1 -b openssl-3.2 https://github.com/openssl/openssl ssl
cd ssl
./config no-shared no-threads
make -sj$(nproc)
;;
qssl)
git clone --depth 1 -b openssl-${{ env.quictls_ver }} https://github.com/quictls/openssl ssl
cd ssl
./config no-shared no-threads
make -sj$(nproc)
;;
esac
- name: configure and build with ${{ matrix.ssl }}
run: |
case "${{ matrix.ssl }}" in
bssl)
LD_OPT="-L ssl/build/ssl -L ssl/build/crypto -lstdc++"
;;
lssl)
LD_OPT="-L ssl/ssl/.libs -L ssl/crypto/.libs"
;;
ossl*|qssl)
LD_OPT="-L ssl"
;;
esac
auto/configure \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-cc-opt="-I ssl/include -DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_FRAMES -DNGX_QUIC_DEBUG_ALLOC -DNGX_QUIC_DEBUG_CRYPTO" \
--with-ld-opt="$LD_OPT" \
--with-debug \
|| cat objs/autoconf.err
make -j$(nproc) -k || make
- name: Test with ssl
run: |
cd nginx-tests
ulimit -c unlimited
prove -v -j$(nproc) --state=save . || prove -v --state=failed
cd .. && make clean
env:
TEST_NGINX_BINARY: "${{ github.workspace }}/objs/nginx"
TEST_NGINX_VERBOSE: 1
PERL5LIB: "${{ github.workspace }}/nginx-tests/lib"
windows:
name: windows-2022, ${{ matrix.toolchain }}, ${{ matrix.env }}
runs-on: windows-2022-amd64
needs: check-if-allowed
strategy:
matrix:
toolchain: [ msvc ]
env: [ x64, x86 ]
include:
- toolchain: mingw64
env: x86_64
fail-fast: false
defaults:
run:
shell: C:\Tools\msys64\msys2_shell.cmd -mingw64 -defterm -no-start -where . -full-path -shell bash.exe '{0}'
steps:
- name: Check out nginx sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Check out nginx tests
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
repository: nginx/nginx-tests
path: nginx-tests
- name: Fix perl (TODO: remove)

Check failure on line 706 in .github/workflows/nginx-buildbot.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/nginx-buildbot.yml

Invalid workflow file

You have an error in your yaml syntax on line 706
shell: cmd
run: |
mv C:\tools\msys64\usr\bin\perl.exe C:\tools\msys64\usr\bin\perl.exe.msys
mv C:\tools\msys64\usr\bin\link.exe C:\tools\msys64\usr\bin\link.exe.msys
- name: Set the defaults and set up environment
run: |
ENV_JSON=$(cat <<EOF
{
"NGINX_CONFIGURE_CMD_WIN": "auto/configure \
--builddir=objs \
--prefix= \
--conf-path=conf/nginx.conf \
--pid-path=logs/nginx.pid \
--http-log-path=logs/access.log \
--error-log-path=logs/error.log \
--sbin-path=nginx.exe \
--http-client-body-temp-path=temp/client_body_temp \
--http-proxy-temp-path=temp/proxy_temp \
--http-fastcgi-temp-path=temp/fastcgi_temp \
--with-cc-opt=-DFD_SETSIZE=1024 \
--with-pcre=objs/lib/pcre \
--with-zlib=objs/lib/zlib \
--with-select_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_stub_status_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_ssl_module \
--with-mail_ssl_module \
--with-http_auth_request_module \
--with-http_v2_module \
--with-http_slice_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-stream_realip_module \
--with-openssl=objs/lib/openssl",
"NGINX_CONFIGURE_CC_MSVC": "--with-cc=cl",
"NGINX_CONFIGURE_CC_MINGW": "--with-cc=/${{ matrix.toolchain }}/bin/${{ matrix.env }}-w64-mingw32-gcc.exe",
"NGINX_CONFIGURE_ADD_STATIC": "--with-stream --with-mail",
"NGINX_CONFIGURE_ADD_DYNAMIC": "--with-stream=dynamic --with-mail=dynamic",
"NGINX_CONFIGURE_OPENSSL_OPT": "no-asm no-tests -D_WIN32_WINNT=0x0601"
}
EOF
)
NGINX_CONFIGURE_CMD_WIN=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_CMD_WIN')
NGINX_CONFIGURE_CC_MSVC=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_CC_MSVC')
NGINX_CONFIGURE_CC_MINGW=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_CC_MINGW')
NGINX_CONFIGURE_ADD_STATIC=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_STATIC')
NGINX_CONFIGURE_ADD_DYNAMIC=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_ADD_DYNAMIC')
NGINX_CONFIGURE_OPENSSL_OPT=$(echo $ENV_JSON | jq -r '.NGINX_CONFIGURE_OPENSSL_OPT')
echo NGINX_CONFIGURE_CMD_WIN="$NGINX_CONFIGURE_CMD_WIN" >> $GITHUB_ENV
echo NGINX_CONFIGURE_CC_MSVC="$NGINX_CONFIGURE_CC_MSVC" >> $GITHUB_ENV
echo NGINX_CONFIGURE_CC_MINGW="$NGINX_CONFIGURE_CC_MINGW" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_STATIC="$NGINX_CONFIGURE_ADD_STATIC" >> $GITHUB_ENV
echo NGINX_CONFIGURE_ADD_DYNAMIC="$NGINX_CONFIGURE_ADD_DYNAMIC" >> $GITHUB_ENV
echo NGINX_CONFIGURE_OPENSSL_OPT="$NGINX_CONFIGURE_OPENSSL_OPT" >> $GITHUB_ENV
echo "VCVARSALL=$('C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' -products \* -latest -property installationPath)\\VC\\Auxiliary\\Build\\vcvarsall.bat" >> $GITHUB_ENV
echo "VCARCH=${{ matrix.env }}" >> $GITHUB_ENV
echo "CL=/MP" >> $GITHUB_ENV
echo 'TEMP=C:\TEMP' >> $GITHUB_ENV
echo 'TMP=C:\TEMP' >> $GITHUB_ENV
mkdir C:/TEMP/
- name: Download and unpack dependencies
run: |
mkdir t
mkdir objs
mkdir objs/lib
curl -sLO https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.gz
tar -C objs/lib --transform 's/pcre2-10.39/pcre/' -xzf ./pcre2-10.39.tar.gz
echo '#include <stdint.h>' > objs\lib\pcre\src\inttypes.h
curl -sLO https://zlib.net/fossils/zlib-1.3.1.tar.gz
tar -C objs/lib --transform 's/zlib-1.3.1/zlib/' -xzf ./zlib-1.3.1.tar.gz
curl -sLO https://github.com/openssl/openssl/releases/download/openssl-3.0.13/openssl-3.0.13.tar.gz
tar -C objs/lib --transform 's/openssl-3.0.13/openssl/' -xzf ./openssl-3.0.13.tar.gz
cp -R objs objs.deps
- name: Configure and build
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
@echo on
call "%VCVARSALL%" %VCARCH%
"C:\Program Files\Git\bin\bash.exe" ^
%NGINX_CONFIGURE_CMD_WIN% ^
%NGINX_CONFIGURE_CC_MSVC% ^
%NGINX_CONFIGURE_ADD_STATIC% ^
--with-openssl-opt="%NGINX_CONFIGURE_OPENSSL_OPT%"
nmake -f objs/Makefile
- name: Configure and build
if: startsWith( matrix.toolchain, 'mingw')
run: |
$NGINX_CONFIGURE_CMD_WIN \
$NGINX_CONFIGURE_CC_MINGW \
$NGINX_CONFIGURE_ADD_STATIC \
--with-openssl-opt="$NGINX_CONFIGURE_OPENSSL_OPT"
make -j4
- name: Run tests
shell: cmd
run: |
perl --version
cd nginx-tests
prove -v ../t .
env:
TEST_NGINX_BINARY: "${{ github.workspace }}\\objs\\nginx.exe"
PERL5LIB: "${{ github.workspace }}\\nginx-tests\\lib"
- name: Cleanup
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" %VCARCH%
nmake clean
- name: Cleanup
if: startsWith( matrix.toolchain, 'mingw')
run: |
make clean
- name: Restore dependencies
shell: cmd
run: |
cp -R objs.deps objs
- name: Configure and build with debug
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
@echo on
call "%VCVARSALL%" %VCARCH%
"C:\Program Files\Git\bin\bash.exe" ^
%NGINX_CONFIGURE_CMD_WIN% ^
%NGINX_CONFIGURE_CC_MSVC% ^
%NGINX_CONFIGURE_ADD_STATIC% ^
--with-openssl-opt="%NGINX_CONFIGURE_OPENSSL_OPT%" ^
--with-debug
nmake -f objs/Makefile
- name: Configure and build with debug
if: startsWith( matrix.toolchain, 'mingw')
run: |
$NGINX_CONFIGURE_CMD_WIN \
$NGINX_CONFIGURE_CC_MINGW \
$NGINX_CONFIGURE_ADD_STATIC \
--with-openssl-opt="$NGINX_CONFIGURE_OPENSSL_OPT" \
--with-debug
make -j4
- name: Run tests with debug
shell: cmd
run: |
cd nginx-tests
prove -v ../t .
env:
TEST_NGINX_BINARY: "${{ github.workspace }}\\objs\\nginx.exe"
PERL5LIB: "${{ github.workspace }}\\nginx-tests\\lib"
- name: Cleanup
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" %VCARCH%
nmake clean
- name: Cleanup
if: startsWith( matrix.toolchain, 'mingw')
run: |
make clean
- name: Restore dependencies
if: startsWith( matrix.toolchain, 'mingw')
shell: cmd
run: |
cp -R objs.deps objs
- name: Configure and build dynamic with debug
if: startsWith( matrix.toolchain, 'mingw')
run: |
$NGINX_CONFIGURE_CMD_WIN \
$NGINX_CONFIGURE_CC_MINGW \
$NGINX_CONFIGURE_ADD_DYNAMIC \
--with-openssl-opt="$NGINX_CONFIGURE_OPENSSL_OPT" \
--with-debug
make
- name: Run tests dynamic debug
if: startsWith( matrix.toolchain, 'mingw')
shell: cmd
run: |
cd nginx-tests
prove -v ../t .
env:
TEST_NGINX_BINARY: "${{ github.workspace }}\\objs\\nginx.exe"
PERL5LIB: "${{ github.workspace }}\\nginx-tests\\lib"