Skip to content

Track application restart generations #277

Track application restart generations

Track application restart generations #277

Workflow file for this run

name: Passenger CI tests
env:
FORCE_COLOR: 1
RUST_LOG_STYLE: always
DEFAULT_RUBY_VERSION: 3.1
BUNDLE_CLEAN: true
USE_ASAN: true
on:
push: {}
pull_request: {}
jobs:
cxx-linux:
name: C++ tests on Linux
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
EXTRA_CFLAGS: '-fdiagnostics-color'
EXTRA_CXXFLAGS: '-fdiagnostics-color'
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: sccache/cxx-ubuntu
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: x86_64-unknown-linux-musl
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup library dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev
- name: Setup misc
run: |
set -x
sudo chmod 755 "$HOME"
cp test/config.json.github-ci-linux test/config.json
- name: Build C++ tests
run: bundle exec drake -j4 test:cxx:build
- name: Run C++ tests
run: >
sudo env
PATH="$PATH"
GEM_PATH="$GEM_PATH"
../buildout/test/cxx/main
working-directory: test
- name: Archive logs
uses: actions/upload-artifact@v4
with:
name: cxx-test-logs-macos
path: 'buildout/testlogs/*'
if-no-files-found: ignore
if: '!cancelled()'
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
cxx-macos:
name: C++ tests on macOS
runs-on: macos-14
timeout-minutes: 30
env:
EXTRA_CFLAGS: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
EXTRA_CXXFLAGS: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: sccache/cxx-macos-14-arm
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: aarch64-apple-darwin
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup dependencies
run: brew install coreutils
- name: Setup misc
run: |
sudo chmod 755 "$HOME"
sed "s|_USER_|$(whoami)|" test/config.json.github-ci-macos > test/config.json
- name: Build C++ tests
run: bundle exec drake -j4 test:cxx:build
- name: Run C++ tests
# The AbortHandler doesn't work so well on Github's macOS runners:
# - crash-watch invocation freezes the runner, so we disable this.
# - resuming the parent process after SIGSTOP doesn't work, so we force kill the parent.
# - force killing the parent may not work, so we enforce a low timeout to prevent
# the test from haging for a long time. We enforce this primarily using the 'timeout'
# command from coreutils instead of Github Actions' timeout, because the latter
# could put the entire job in the "skipped" state and refuse to show logs.
timeout-minutes: 11
run: >
sudo env
PATH="$PATH"
GEM_PATH="$GEM_PATH"
PASSENGER_DUMP_WITH_CRASH_WATCH=false
PASSENGER_FORCE_TERMINATE_ON_ABORT=true
gtimeout --signal KILL --verbose 600
../buildout/test/cxx/main
working-directory: test
- name: Archive logs
uses: actions/upload-artifact@v4
with:
name: cxx-test-logs-macos
path: 'buildout/testlogs/*'
if-no-files-found: ignore
if: '!cancelled()'
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
apache2:
name: "Apache2 tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
config_file: test/config.json.github-ci-linux
extra_cflags: '-fdiagnostics-color'
address_sanitizer: true
sccache_arch_and_os: x86_64-unknown-linux-musl
sccache_azure_key_prefix: sccache/cxx-ubuntu-24.04-x86_64
- name: macOS
os: macos-14
config_file: test/config.json.github-ci-macos
extra_cflags: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
# Using AddressSanitizer on dynamically loaded modules (like Apache modules)
# requires loading Apache with the AddressSanitizer runtime using DYLD_INSERT_LIBRARIES.
# That in turn requires disabling SIP, which is not possible on Github Actions.
address_sanitizer: false
sccache_arch_and_os: aarch64-apple-darwin
sccache_azure_key_prefix: sccache/cxx-macos-14-arm
runs-on: ${{ matrix.os }}
env:
EXTRA_CFLAGS: ${{ matrix.extra_cflags }}
EXTRA_CXXFLAGS: ${{ matrix.extra_cflags }}
USE_ASAN: ${{ matrix.address_sanitizer }}
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: ${{ matrix.sccache_azure_key_prefix }}
SCCACHE_CACHE_MULTIARCH: true
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup misc
run: |
sudo chmod 755 "$HOME"
sed "s|_USER_|$(whoami)|; s|_SOURCE_ROOT_|$(pwd)|" ${{ matrix.config_file }} > test/config.json
- name: Setup Linux dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev apache2-dev libapr1-dev libaprutil1-dev
if: matrix.name == 'Linux'
- name: Setup macOS code signing
run: |
exec 2>&1
set -x
echo "$OPENSSL_CONFIG" > cert_config.cnf
openssl req -new -newkey rsa:2048 -nodes -keyout github-ci.key -out github-ci.csr -config cert_config.cnf
openssl x509 -req -in github-ci.csr -signkey github-ci.key -out github-ci.crt -days 3650 -extensions req_ext -extfile cert_config.cnf
sudo security authorizationdb write com.apple.trust-settings.admin allow
security create-keychain -p mypassword mykeychain.keychain
security set-keychain-settings -lut 21600 mykeychain.keychain
security unlock-keychain -p mypassword mykeychain.keychain
security import github-ci.key -k mykeychain.keychain -A
security set-key-partition-list -S apple-tool:,apple: -k mypassword mykeychain.keychain
security add-trusted-cert -d -r trustRoot -k mykeychain.keychain github-ci.crt
security list-keychain -d user -s mykeychain.keychain
if: matrix.name == 'macOS'
env:
OPENSSL_CONFIG: |
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
CN = Github CI
[ req_ext ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = codeSigning
- name: Setup hosts entries
run: |
echo 127.0.0.1 passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 1.passenger.test 2.passenger.test 3.passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 4.passenger.test 5.passenger.test 6.passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 7.passenger.test 8.passenger.test 9.passenger.test | sudo tee -a /etc/hosts
- run: npm ci
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Test module installation as normal user
run: ./bin/passenger-install-apache2-module --auto --force-colors
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
- name: Setup sccache as root
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
SUDO: true
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Test module installation as root
run: sudo -E ./bin/passenger-install-apache2-module --auto --force-colors --no-compile
- name: Teardown sccache as root
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
env:
SUDO: true
- name: Integration tests
run: bundle exec rake test:integration:apache2
- name: Archive logs
uses: actions/upload-artifact@v4
with:
name: apache-test-logs-${{ matrix.os }}
path: 'buildout/testlogs/*'
if-no-files-found: ignore
if: '!cancelled()'
nginx:
name: "Nginx tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
config_file: test/config.json.github-ci-linux
extra_cflags: '-fdiagnostics-color'
sccache_arch_and_os: x86_64-unknown-linux-musl
sccache_azure_key_prefix: sccache/cxx-ubuntu-24.04-x86_64
- name: macOS
os: macos-14
config_file: test/config.json.github-ci-macos
extra_cflags: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
sccache_arch_and_os: aarch64-apple-darwin
sccache_azure_key_prefix: sccache/cxx-macos-14-arm
runs-on: ${{ matrix.os }}
env:
EXTRA_CFLAGS: ${{ matrix.extra_cflags }}
EXTRA_CXXFLAGS: ${{ matrix.extra_cflags }}
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: ${{ matrix.sccache_azure_key_prefix }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup misc
run: |
sudo chmod 755 "$HOME"
sed "s|_USER_|$(whoami)|" ${{ matrix.config_file }} > test/config.json
- name: Setup Linux dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev
if: matrix.name == 'Linux'
- name: Setup hosts entries
run: |
echo 127.0.0.1 passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 1.passenger.test 2.passenger.test 3.passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 4.passenger.test 5.passenger.test 6.passenger.test | sudo tee -a /etc/hosts
echo 127.0.0.1 7.passenger.test 8.passenger.test 9.passenger.test | sudo tee -a /etc/hosts
- run: npm ci
- name: Test installation
run: ./bin/passenger-install-nginx-module --auto --force-colors --prefix=/tmp/nginx --auto-download
- name: Integration tests
run: bundle exec rake test:integration:nginx
- name: Archive logs
uses: actions/upload-artifact@v4
with:
name: nginx-test-logs-${{ matrix.os }}
path: 'buildout/testlogs/*'
if-no-files-found: ignore
if: '!cancelled()'
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
nginx_dynamic:
name: "Nginx dynamic module tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
extra_cflags: '-fdiagnostics-color'
sccache_arch_and_os: x86_64-unknown-linux-musl
sccache_azure_key_prefix: sccache/cxx-ubuntu-24.04-x86_64
- name: macOS
os: macos-14
extra_cflags: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
sccache_arch_and_os: aarch64-apple-darwin
sccache_azure_key_prefix: sccache/cxx-macos-14-arm
runs-on: ${{ matrix.os }}
env:
EXTRA_CFLAGS: ${{ matrix.extra_cflags }}
EXTRA_CXXFLAGS: ${{ matrix.extra_cflags }}
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: ${{ matrix.sccache_azure_key_prefix }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup Linux dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev
if: matrix.name == 'Linux'
- name: Setup parameters
run: |
TEST_DYNAMIC_WITH_NGINX_VERSION=$(ruby -r "./src/ruby_supportlib/phusion_passenger.rb" -e 'puts PhusionPassenger::PREFERRED_NGINX_VERSION')
NGINX_ADDON_DIR=$(./bin/passenger-config --nginx-addon-dir)
echo "TEST_DYNAMIC_WITH_NGINX_VERSION=$TEST_DYNAMIC_WITH_NGINX_VERSION" >> "$GITHUB_ENV"
echo "NGINX_ADDON_DIR=$NGINX_ADDON_DIR" >> "$GITHUB_ENV"
- name: Compile module
run: bundle exec drake -j4 nginx:as_dynamic_module
- name: Download Nginx source
run: curl -sSLO "https://www.nginx.org/download/nginx-$TEST_DYNAMIC_WITH_NGINX_VERSION.tar.gz"
- name: Extract Nginx source
run: tar -xzf "nginx-$TEST_DYNAMIC_WITH_NGINX_VERSION.tar.gz"
- name: Configure Nginx source
run: ./configure --with-cc-opt='-Wno-error' --add-dynamic-module="$NGINX_ADDON_DIR"
working-directory: "nginx-${{ env.TEST_DYNAMIC_WITH_NGINX_VERSION }}"
- name: Compile Nginx with dynamic module
run: make -j4
working-directory: "nginx-${{ env.TEST_DYNAMIC_WITH_NGINX_VERSION }}"
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
standalone:
name: "Passenger Standalone tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
extra_cflags: '-fdiagnostics-color'
sccache_arch_and_os: x86_64-unknown-linux-musl
sccache_azure_key_prefix: sccache/cxx-ubuntu-24.04-x86_64
- name: macOS
os: macos-14
extra_cflags: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
sccache_arch_and_os: aarch64-apple-darwin
sccache_azure_key_prefix: sccache/cxx-macos-14-arm
runs-on: ${{ matrix.os }}
env:
EXTRA_CFLAGS: ${{ matrix.extra_cflags }}
EXTRA_CXXFLAGS: ${{ matrix.extra_cflags }}
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: ${{ matrix.sccache_azure_key_prefix }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup Linux dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev
if: matrix.name == 'Linux'
- name: Compile prerequisites
run: bundle exec drake -j4 nginx
- name: Integration test
run: bundle exec drake -j4 test:integration:standalone
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
ruby:
name: "Ruby tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
config_file: test/config.json.github-ci-linux
extra_cflags: '-fdiagnostics-color'
sccache_arch_and_os: x86_64-unknown-linux-musl
sccache_azure_key_prefix: sccache/cxx-ubuntu-24.04-x86_64
- name: macOS
os: macos-14
config_file: test/config.json.github-ci-macos
extra_cflags: '-I/opt/homebrew/opt/openssl@3/include -fcolor-diagnostics'
sccache_arch_and_os: aarch64-apple-darwin
sccache_azure_key_prefix: sccache/cxx-macos-14-arm
runs-on: ${{ matrix.os }}
env:
EXTRA_CFLAGS: ${{ matrix.extra_cflags }}
EXTRA_CXXFLAGS: ${{ matrix.extra_cflags }}
SCCACHE_AZURE_BLOB_CONTAINER: ${{ vars.SCCACHE_AZURE_BLOB_CONTAINER }}
SCCACHE_AZURE_KEY_PREFIX: ${{ matrix.sccache_azure_key_prefix }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Setup sccache
run: ./dev/ci/setup-sccache
timeout-minutes: 1
env:
ARCH_AND_OS: ${{ matrix.sccache_arch_and_os }}
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.AZURE_CI_STORAGE_CONNECTION_STRING }}
- name: Setup misc
run: |
sudo chmod 755 "$HOME"
sed "s|_USER_|$(whoami)|" ${{ matrix.config_file }} > test/config.json
- name: Setup Linux dependencies
run: >
sudo apt update &&
sudo apt install -y libcurl4-openssl-dev
if: matrix.name == 'Linux'
- name: Compile
run: bundle exec drake -j4 agent
- name: Test
run: bundle exec rake test:ruby
- name: Teardown sccache
run: ./dev/ci/teardown-sccache
if: '!cancelled()'
nodejs:
name: "Node.js tests on ${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-24.04
- name: macOS
os: macos-14
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- run: npm ci
- name: Test
run: bundle exec rake test:node
homebrew_packaging:
name: Homebrew packaging tests
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Create tarball
run: bundle exec rake package:set_official package:tarball
- name: Check whether formula is up-to-date
run: >
./packaging/homebrew/verify-oss-formula-uptodate
-c homebrew-core.git
-r upstream
- name: Modify formula
run: >
./packaging/homebrew/modify-formula
--passenger-dir .
--formula packaging/homebrew/Formula/passenger.rb
--tarball pkg/*.tar.gz
--output pkg/passenger.rb
- name: Test formula
run: >
./packaging/homebrew/test-formula
-p .
-f pkg/passenger.rb
-t pkg/*.tar.gz
source_packaging:
name: Source packaging tests
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.DEFAULT_RUBY_VERSION }}
bundler-cache: true
- name: Setup bundle gem path
run: ./dev/ci/setup-bundle-gem-path
- name: Test
run: bundle exec rake test:source_packaging