serenity/Meta/Azure/Lagom.yml
Timothy Flynn a6fde58682 CI: Add a step to ensure the Qt chrome can compile on macOS
The AppKit chrome is now the default, but the Qt chrome may still be
enabled for testing. Let's ensure it can compile in CI, as it has
already broken since the default change.
2023-11-04 08:36:34 -04:00

206 lines
7.4 KiB
YAML

parameters:
os: 'Linux'
fuzzer: 'NoFuzz'
lagom_lints: false
jobs:
- job: 'Lagom_${{ parameters.os }}_${{ parameters.fuzzer }}'
timeoutInMinutes: 0 # Setting to 0 means the maximum allowed timeout is used.
variables:
- name: SERENITY_CCACHE_DIR
value: $(Build.SourcesDirectory)/.ccache
- name: job_pool
${{ if eq(parameters.os, 'Linux') }}:
value: ubuntu-22.04
${{ if or(eq(parameters.os, 'macOS'), eq(parameters.os, 'Android')) }}:
value: macos-12
- name: toolchain
${{ if eq(parameters.fuzzer, 'Fuzz') }}:
value: clang
${{ if eq(parameters.fuzzer, 'NoFuzz') }}:
value: gcc
- name: host-cc
${{ if eq(parameters.os, 'macOS') }}:
value: $(brew --prefix llvm@15)/bin/clang
${{ if not(eq(parameters.os, 'macOS')) }}:
value: gcc-12
- name: host-cxx
${{ if eq(parameters.os, 'macOS') }}:
value: $(brew --prefix llvm@15)/bin/clang++
${{ if not(eq(parameters.os, 'macOS')) }}:
value: g++-12
- name: ndk_version # only relevant for Android
value: '25.2.9519653'
pool:
vmImage: $(job_pool)
steps:
- template: Setup.yml
parameters:
os: '${{ parameters.os }}'
- template: Caches.yml
parameters:
os: '${{ parameters.os }}'
arch: 'Lagom'
toolchain: '$(toolchain)'
download_cache_path: 'Meta/Lagom/caches'
serenity_ccache_path: '$(SERENITY_CCACHE_DIR)'
with_remote_data_caches: true
${{ if eq(parameters.os, 'macOS') }}:
ccache_version: 2
serenity_ccache_size: '2G'
- ${{ if eq(parameters.os, 'Android') }}:
- script: |
yes | $ANDROID_SDK_ROOT/tools/bin/sdkmanager "ndk;$(ndk_version)"
displayName: "Install NDK $(ndk_version)"
- script: |
# Install AVD files
echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install 'system-images;android-30;google_apis;x86_64'
# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-30;google_apis;x86_64' --force
$ANDROID_HOME/emulator/emulator -list-avds
echo "Starting emulator"
# Start emulator in background
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > /dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'
$ANDROID_HOME/platform-tools/adb devices
echo "Emulator started"
displayName: "Start Android Emulator"
- task: Gradle@2
inputs:
workingDirectory: 'Ladybird/Android'
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
jdkVersionOption: '17'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'connectedAndroidTest'
env:
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
SERENITY_CACHE_DIR: "$(Build.SourcesDirectory)/Meta/Lagom/caches"
displayName: "Build and Test in Android Emulator"
- ${{ elseif eq(parameters.fuzzer, 'Fuzz') }}:
- script: |
set -e
cmake -GNinja -B tools-build \
-DBUILD_LAGOM=OFF \
-DENABLE_LAGOM_CCACHE=ON \
-DCMAKE_INSTALL_PREFIX=tool-install \
-Dpackage=LagomTools
ninja -C tools-build install
cmake -GNinja -B Build \
-DBUILD_LAGOM=ON \
-DENABLE_LAGOM_CCACHE=ON \
-DENABLE_FUZZERS_LIBFUZZER=ON \
-DENABLE_ADDRESS_SANITIZER=ON \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH=tool-install
displayName: 'Create Build Environment'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom
env:
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
- ${{ elseif eq(parameters.fuzzer, 'NoFuzz') }}:
- script: |
set -e
cmake -GNinja -B Build \
-DBUILD_LAGOM=ON \
-DENABLE_LAGOM_CCACHE=ON \
-DENABLE_LAGOM_LADYBIRD=ON \
-DINCLUDE_WASM_SPEC_TESTS=ON \
-DWASM_SPEC_TEST_SKIP_FORMATTING=ON \
-DENABLE_UNDEFINED_SANITIZER=ON \
-DENABLE_ADDRESS_SANITIZER=ON \
-DCMAKE_C_COMPILER=$(host-cc) \
-DCMAKE_CXX_COMPILER=$(host-cxx)
displayName: 'Create Build Environment'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom
env:
PATH: '$(PATH):$(Build.SourcesDirectory)/wabt-1.0.23/bin'
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
- ${{ if not(eq(parameters.os, 'Android')) }}:
- script: |
set -e
cmake --build .
cmake --install . --prefix $(Build.SourcesDirectory)/Meta/Lagom/Install
displayName: 'Build'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom/Build
env:
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
- ${{ if and(eq(parameters.fuzzer, 'NoFuzz'), not(eq(parameters.os, 'Android')) ) }}:
- script: |
set -e
ninja test
displayName: 'Test'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom/Build
env:
SERENITY_SOURCE_DIR: '$(Build.SourcesDirectory)'
CTEST_OUTPUT_ON_FAILURE: 1
ASAN_OPTIONS: 'strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1'
UBSAN_OPTIONS: 'print_stacktrace=1:print_summary=1:halt_on_error=1'
TESTS_ONLY: 1
- ${{ if and(eq(parameters.fuzzer, 'NoFuzz'), eq(parameters.os, 'Linux') ) }}:
- script: |
./run.sh
displayName: 'WPT'
workingDirectory: $(Build.SourcesDirectory)/Tests/LibWeb/WPT/
env:
SERENITY_SOURCE_DIR: '$(Build.SourcesDirectory)'
QT_QPA_PLATFORM: 'offscreen'
- ${{ if and(eq(parameters.fuzzer, 'NoFuzz'), eq(parameters.os, 'macOS') ) }}:
- script: |
set -e
cmake -B Build -DENABLE_QT=ON
displayName: 'Enable the Ladybird Qt chrome'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom
env:
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
- script: |
set -e
cmake --build .
displayName: 'Build Ladybird Qt chrome'
workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom/Build
env:
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
- ${{ if eq(parameters.lagom_lints, true) }}:
- script: |
set -e
./Meta/check-markdown.sh
./Meta/lint-gml-format.sh
git ls-files '*.ipc' | xargs ./Meta/Lagom/Build/bin/IPCMagicLinter
displayName: 'Run lints that require Lagom'
workingDirectory: $(Build.SourcesDirectory)/
env:
MARKDOWN_CHECK_BINARY: ./Meta/Lagom/Build/bin/markdown-check
GML_FORMAT: ./Meta/Lagom/Build/bin/gml-format
# FIXME: enable detect_stack_use_after_return=1 #7420
ASAN_OPTIONS: 'strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=0'
UBSAN_OPTIONS: 'print_stacktrace=1:print_summary=1:halt_on_error=1'
- script: |
CCACHE_DIR='$(SERENITY_CCACHE_DIR)' ccache -s
displayName: 'Cache Stats'