mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
bf3c11229f
This changes the Sanitizer configs to build all the vcpkg dependencies with our specified CFLAGS and CXXFLAGS for ASAN and UBSAN. Unfortunately, we can't yet enable actually compiling them with sanitizers enabled, because this causes test failures that need to be investigated.
184 lines
7.2 KiB
YAML
184 lines
7.2 KiB
YAML
name: Lagom Template
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
toolchain:
|
|
required: true
|
|
type: string
|
|
os_name:
|
|
required: true
|
|
type: string
|
|
os:
|
|
required: true
|
|
type: string
|
|
fuzzer:
|
|
required: false
|
|
type: string
|
|
default: 'NO_FUZZ'
|
|
|
|
env:
|
|
# runner.workspace = /home/runner/work/serenity
|
|
# github.workspace = /home/runner/work/serenity/serenity
|
|
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
|
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
|
VCPKG_ROOT: ${{ github.workspace }}/Toolchain/Tarballs/vcpkg
|
|
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
|
|
|
jobs:
|
|
CI:
|
|
runs-on: ${{ inputs.os }}
|
|
|
|
steps:
|
|
# Pull requests can trail behind `master` and can cause breakage if merging before running the CI checks on an updated branch.
|
|
# Luckily, GitHub creates and maintains a merge branch that is updated whenever the target or source branch is modified. By
|
|
# checking this branch out, we gain a stabler `master` at the cost of reproducibility.
|
|
- uses: actions/checkout@v4
|
|
if: ${{ github.event_name != 'pull_request' }}
|
|
|
|
- uses: actions/checkout@v4
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
with:
|
|
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
|
|
- name: Set Up Environment
|
|
uses: ./.github/actions/setup
|
|
with:
|
|
os: ${{ inputs.os_name }}
|
|
arch: 'Lagom'
|
|
|
|
# === PREPARE FOR BUILDING ===
|
|
|
|
- name: Restore Caches
|
|
uses: ./.github/actions/cache-restore
|
|
id: 'cache-restore'
|
|
with:
|
|
os: ${{ inputs.os_name }}
|
|
arch: 'Lagom'
|
|
toolchain: ${{ inputs.toolchain }}
|
|
cache_key_extra: ${{ inputs.fuzzer }}
|
|
serenity_ccache_path: ${{ env.CCACHE_DIR }}
|
|
download_cache_path: ${{ github.workspace }}/Build/caches
|
|
|
|
- name: Assign Build Parameters
|
|
id: 'build-parameters'
|
|
run: |
|
|
if ${{ inputs.os_name == 'Linux' }} ; then
|
|
if ${{ inputs.toolchain == 'Clang' }} ; then
|
|
echo "host_cc=clang-18" >> "$GITHUB_OUTPUT"
|
|
echo "host_cxx=clang++-18" >> "$GITHUB_OUTPUT"
|
|
elif ${{ inputs.toolchain == 'GNU' }} ; then
|
|
echo "host_cc=gcc-13" >> "$GITHUB_OUTPUT"
|
|
echo "host_cxx=g++-13" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
elif ${{ inputs.os_name == 'macOS' }} ; then
|
|
echo "host_cc=$(brew --prefix llvm@18)/bin/clang" >> "$GITHUB_OUTPUT"
|
|
echo "host_cxx=$(brew --prefix llvm@18)/bin/clang++" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Set dynamic environment variables
|
|
id: 'set-env-vars'
|
|
run: |
|
|
# Note: Required for vcpkg to use this compiler for its own builds.
|
|
echo "CC=${{ steps.build-parameters.outputs.host_cc }}" >> "$GITHUB_ENV"
|
|
echo "CXX=${{ steps.build-parameters.outputs.host_cxx }}" >> "$GITHUB_ENV"
|
|
|
|
# https://github.com/actions/runner-images/issues/9330
|
|
- name: Enable Microphone Access (macOS 14)
|
|
if: ${{ inputs.os == 'macos-14' }}
|
|
run: sqlite3 $HOME/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT OR IGNORE INTO access VALUES ('kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159,NULL,NULL,'UNUSED',1687786159);"
|
|
|
|
- name: Create Build Environment
|
|
if: ${{ inputs.fuzzer == 'NO_FUZZ' }}
|
|
working-directory: ${{ github.workspace }}
|
|
run: |
|
|
cmake --preset Sanitizer_CI -B Build \
|
|
-DINCLUDE_WASM_SPEC_TESTS=ON \
|
|
-DWASM_SPEC_TEST_SKIP_FORMATTING=ON \
|
|
-DCMAKE_C_COMPILER=${{ steps.build-parameters.outputs.host_cc }} \
|
|
-DCMAKE_CXX_COMPILER=${{ steps.build-parameters.outputs.host_cxx }}
|
|
|
|
- name: Create Build Environment
|
|
if: ${{ inputs.fuzzer == 'FUZZ' }}
|
|
working-directory: ${{ github.workspace }}
|
|
run: |
|
|
set -e
|
|
|
|
cmake -GNinja -S Meta/Lagom -B ${{ github.workspace }}/tools-build \
|
|
-DLAGOM_TOOLS_ONLY=ON \
|
|
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/tool-install \
|
|
-DSERENITY_CACHE_DIR=${{ github.workspace }}/Build/caches \
|
|
-DCMAKE_C_COMPILER=gcc-13 \
|
|
-DCMAKE_CXX_COMPILER=g++-13 \
|
|
-Dpackage=LagomTools
|
|
|
|
ninja -C tools-build install
|
|
|
|
cmake --preset Fuzzers_CI -B Build \
|
|
-DCMAKE_C_COMPILER=${{ steps.build-parameters.outputs.host_cc }} \
|
|
-DCMAKE_CXX_COMPILER=${{ steps.build-parameters.outputs.host_cxx }} \
|
|
-DCMAKE_PREFIX_PATH=${{ github.workspace }}/tool-install
|
|
|
|
# === BUILD ===
|
|
|
|
- name: Build
|
|
working-directory: ${{ github.workspace }}/Build
|
|
run: |
|
|
set -e
|
|
cmake --build .
|
|
cmake --install . --strip --prefix ${{ github.workspace }}/Install
|
|
|
|
- name: Enable the Ladybird Qt chrome
|
|
if: ${{ inputs.os_name == 'macOS' && inputs.fuzzer == 'NO_FUZZ' }}
|
|
working-directory: ${{ github.workspace }}
|
|
run: cmake -B Build -DENABLE_QT=ON
|
|
|
|
- name: Build the Ladybird Qt chrome
|
|
if: ${{ inputs.os_name == 'macOS' && inputs.fuzzer == 'NO_FUZZ' }}
|
|
working-directory: ${{ github.workspace }}/Build
|
|
run: cmake --build .
|
|
|
|
- name: Save Caches
|
|
uses: ./.github/actions/cache-save
|
|
with:
|
|
arch: 'Lagom'
|
|
serenity_ccache_path: ${{ env.CCACHE_DIR }}
|
|
serenity_ccache_primary_key: ${{ steps.cache-restore.outputs.serenity_ccache_primary_key }}
|
|
|
|
# === TEST ===
|
|
|
|
- name: Test
|
|
if: ${{ inputs.fuzzer == 'NO_FUZZ' }}
|
|
working-directory: ${{ github.workspace }}
|
|
run: ctest --preset Sanitizer --output-on-failure --test-dir Build
|
|
env:
|
|
TESTS_ONLY: 1
|
|
|
|
- name: Upload LibWeb Test Artifacts
|
|
if: ${{ always() && inputs.fuzzer == 'NO_FUZZ' }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: libweb-test-artifacts-${{ inputs.os_name }}
|
|
path: ${{ github.workspace }}/Build/Ladybird/test-dumps
|
|
retention-days: 7
|
|
if-no-files-found: ignore
|
|
|
|
- name: WPT
|
|
# FIXME: #1 Figure out why the WebDriver doesn't start when building with GCC on Linux
|
|
if: ${{ inputs.os_name == 'Linux' && inputs.fuzzer == 'NO_FUZZ' && inputs.toolchain != 'GNU' }}
|
|
working-directory: ${{ github.workspace }}/Tests/LibWeb/WPT
|
|
run: ./run.sh --remove-wpt-repository
|
|
env:
|
|
QT_QPA_PLATFORM: 'offscreen'
|
|
ASAN_OPTIONS: 'strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1'
|
|
UBSAN_OPTIONS: 'print_stacktrace=1:print_summary=1:halt_on_error=1'
|
|
|
|
- name: Lints
|
|
if: ${{ inputs.os_name == 'Linux' && inputs.fuzzer == 'NO_FUZZ' }}
|
|
working-directory: ${{ github.workspace }}
|
|
run: |
|
|
set -e
|
|
git ls-files '*.ipc' | xargs ./Build/bin/IPCMagicLinter
|
|
env:
|
|
ASAN_OPTIONS: 'strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1'
|
|
UBSAN_OPTIONS: 'print_stacktrace=1:print_summary=1:halt_on_error=1'
|