mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
9df41954c0
Most users will be building with Xcode Clang on macOS anyway, as our build scripts default to the system compiler if it's new enough. We already have an upstream Clang-based workflow on Linux, so we won't lose any compiler coverage by switching to Apple Clang on macOS. This should help us avoid build breakages like #186.
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=$(xcrun --find clang)" >> "$GITHUB_OUTPUT"
|
|
echo "host_cxx=$(xcrun --find 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'
|