mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
As discussed on zulip we would like to rename `libservo` to `servo` (again) before a future crates.io release. Servo is a library, so the `lib` prefix is somewhat redundant. We already renamed the binary of ServoShell to `servoshell`, to reduce confusion of users of what servo is. Note: This PR does not touch all occurrences of `libservo`. Specifically CI job names remain untouched, since the risk of breaking something is higher here, harder to test for and the name not user facing. Testing: CI testing of this change should give us good confidence. Manual testing of `./mach doc` and `./mach build` showed no issues on macos. [Full try run](https://github.com/jschwe/servo/actions/runs/22909562747) Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
448 lines
16 KiB
YAML
448 lines
16 KiB
YAML
name: Linux
|
|
on:
|
|
workflow_call:
|
|
outputs:
|
|
artifact_ids:
|
|
value: ${{ jobs.build.outputs.artifact_ids }}
|
|
description: Comma-separated list of artifact IDs for the release artifacts
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: string
|
|
build-args:
|
|
default: ""
|
|
required: false
|
|
type: string
|
|
wpt-args:
|
|
default: ""
|
|
required: false
|
|
type: string
|
|
wpt-sync-from-upstream:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
wpt:
|
|
required: false
|
|
type: boolean
|
|
number-of-wpt-chunks:
|
|
default: 20
|
|
required: false
|
|
type: number
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
build-libservo:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
force-github-hosted-runner:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
bencher:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
coverage:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
workflow_dispatch:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: choice
|
|
options: ["release", "debug", "production"]
|
|
wpt-args:
|
|
default: ""
|
|
required: false
|
|
type: string
|
|
wpt-sync-from-upstream:
|
|
default: false
|
|
required: false
|
|
type: boolean
|
|
wpt:
|
|
required: false
|
|
type: boolean
|
|
number-of-wpt-chunks:
|
|
default: 20
|
|
required: false
|
|
type: number
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
build-libservo:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
force-github-hosted-runner:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
bencher:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
SHELL: /bin/bash
|
|
|
|
jobs:
|
|
# Runs the underlying job (“workload”) on a self-hosted runner if available,
|
|
# with the help of a `runner-select` job and a `runner-timeout` job.
|
|
runner-select:
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
unique-id: ${{ steps.select.outputs.unique-id }}
|
|
selected-runner-label: ${{ steps.select.outputs.selected-runner-label }}
|
|
runner-type-label: ${{ steps.select.outputs.runner-type-label }}
|
|
is-self-hosted: ${{ steps.select.outputs.is-self-hosted }}
|
|
steps:
|
|
- name: Runner select
|
|
id: select
|
|
uses: servo/ci-runners/actions/runner-select@6d88b19dda997f1ce2a11e4c1c34717c2bbcafba
|
|
with:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
# Before updating the GH action runner image for the nightly job, ensure
|
|
# that the system has a glibc version that is compatible with the one
|
|
# used by the wpt.fyi runners.
|
|
github-hosted-runner-label: ubuntu-22.04
|
|
self-hosted-image-name: servo-ubuntu2204
|
|
# You can disable self-hosted runners globally by creating a repository variable named
|
|
# NO_SELF_HOSTED_RUNNERS with any non-empty value.
|
|
# <https://github.com/servo/servo/settings/variables/actions>
|
|
NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }}
|
|
# Any other boolean conditions that disable self-hosted runners go here.
|
|
force-github-hosted-runner: ${{ inputs.force-github-hosted-runner }}
|
|
|
|
build:
|
|
needs:
|
|
- runner-select
|
|
name: Linux Build [${{ needs.runner-select.outputs.unique-id }}]
|
|
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
|
|
outputs:
|
|
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
|
|
steps:
|
|
- uses: servo/ci-runners/actions/checkout@6d88b19dda997f1ce2a11e4c1c34717c2bbcafba
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
with:
|
|
tool-cache: false
|
|
large-packages: false
|
|
swap-storage: false
|
|
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
|
|
- name: Setup Python
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
uses: ./.github/actions/setup-python
|
|
- name: Change Mirror Priorities
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
uses: ./.github/actions/apt-mirrors
|
|
- uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: nextest
|
|
- name: Bootstrap dependencies
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
timeout-minutes: 30
|
|
run: |
|
|
sudo apt update
|
|
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
|
|
sudo apt install -qy tshark
|
|
./mach bootstrap --yes --skip-lints
|
|
|
|
# Always install crown, even on self-hosted runners, because it is tightly
|
|
# coupled to the rustc version, and we may have the wrong version if the
|
|
# commit we are building uses a different rustc version.
|
|
- name: Install crown
|
|
run: cargo install --path support/crown
|
|
|
|
- name: Build (${{ inputs.profile }})
|
|
run: |
|
|
./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }}
|
|
mv target/cargo-timings target/cargo-timings-linux
|
|
- name: Smoketest
|
|
run: xvfb-run ./mach smoketest --profile ${{ inputs.profile }}
|
|
- name: Script tests
|
|
run: ./mach test-scripts
|
|
- name: Unit tests
|
|
id: run_unit_tests
|
|
if: ${{ inputs.unit-tests }}
|
|
env:
|
|
NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683
|
|
LANG: en-US
|
|
run: ./mach test-unit --profile ${{ inputs.profile }} --nextest-profile ci
|
|
# We upload the test-results to Codecov to help us identify flaky unit-tests.
|
|
- name: Upload test results to Codecov
|
|
# Upload test results to Codecov, also for failed unit-tests, but only
|
|
# if unit-tests were supposed to run, and not if they were skipped (e.g., due
|
|
# to an earlier failure).
|
|
if: ${{ !cancelled() && steps.run_unit_tests.conclusion != 'skipped' }}
|
|
uses: codecov/codecov-action@v5
|
|
with:
|
|
report_type: test_results
|
|
files: target/nextest/ci/junit.xml
|
|
disable_search: true
|
|
flags: unittests,unittests-linux,unittests-linux-${{ inputs.profile }}
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
- name: Devtools tests
|
|
if: ${{ false && inputs.unit-tests }} # FIXME #39273
|
|
run: ./mach test-devtools --profile ${{ inputs.profile }}
|
|
- name: Archive build timing
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: cargo-timings-linux-${{ inputs.profile }}
|
|
# Using a wildcard here ensures that the archive includes the path.
|
|
path: target/cargo-timings-*
|
|
if-no-files-found: error
|
|
- name: Build mach package
|
|
run: ./mach package --profile ${{ inputs.profile }}
|
|
- name: Upload artifact for mach package
|
|
uses: actions/upload-artifact@v7
|
|
id: upload-tarball
|
|
with:
|
|
name: ${{ inputs.profile }}-binary-linux
|
|
path: target/${{ inputs.profile }}/servo-tech-demo.tar.gz
|
|
if-no-files-found: error
|
|
- name: Collect artifact IDs needed by the release workflow
|
|
id: artifact_ids
|
|
shell: bash
|
|
run: |
|
|
echo "artifact_ids=${{steps.upload-tarball.outputs.artifact-id}}" >> $GITHUB_OUTPUT
|
|
|
|
wpt-2020:
|
|
if: ${{ inputs.wpt }}
|
|
name: Linux WPT
|
|
needs: ["build"]
|
|
uses: ./.github/workflows/linux-wpt.yml
|
|
with:
|
|
wpt-args: ${{ inputs.wpt-args }}
|
|
profile: ${{ inputs.profile }}
|
|
wpt-sync-from-upstream: ${{ inputs.wpt-sync-from-upstream }}
|
|
number-of-wpt-chunks: ${{ inputs. number-of-wpt-chunks }}
|
|
binary-path: servo/servoshell
|
|
secrets: inherit
|
|
|
|
bencher:
|
|
needs: ["build"]
|
|
if: ${{ inputs.bencher && inputs.profile != 'debug' && github.event_name != 'workflow_dispatch' && github.event_name != 'merge_group' }}
|
|
uses: ./.github/workflows/bencher.yml
|
|
with:
|
|
target: "linux"
|
|
profile: ${{ inputs.profile }}
|
|
compressed-file-path: ${{ inputs.profile }}-binary-linux/servo-tech-demo.tar.gz
|
|
binary-path: servo/servoshell
|
|
file-size: true
|
|
# We only evaluate speedometer and dromaeo score in release
|
|
speedometer: ${{ inputs.profile == 'release' }}
|
|
dromaeo: ${{ inputs.profile == 'release' }}
|
|
secrets: inherit
|
|
|
|
build-libservo:
|
|
if: ${{ inputs.build-libservo }}
|
|
name: Build libservo and MSRV check
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
if: github.event_name != 'pull_request_target'
|
|
with:
|
|
fetch-depth: 1
|
|
# This is necessary to checkout the pull request if this run was triggered via a
|
|
# `pull_request_target` event.
|
|
- uses: actions/checkout@v5
|
|
if: github.event_name == 'pull_request_target'
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 1
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
with:
|
|
tool-cache: false
|
|
large-packages: false
|
|
swap-storage: false
|
|
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
|
|
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: Determine MSRV
|
|
id: msrv
|
|
uses: ./.github/actions/parse_msrv
|
|
- name: Install MSRV
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ steps.msrv.outputs.rust_version }}
|
|
# We can remove this after upgrading to Rust 1.90, but for now
|
|
# installing lld is the easiest way to get it in path.
|
|
- name: install lld
|
|
run: sudo apt-get install -y lld
|
|
- name: Compile libservo with MSRV
|
|
env:
|
|
# lld seems to use less memory and prevents OOM errors during linking.
|
|
# We can remove this after upgrading to Rust 1.90, where lld will be the default.
|
|
RUSTFLAGS: "-C link-arg=-fuse-ld=lld"
|
|
run: |
|
|
cargo +${{ steps.msrv.outputs.rust_version }} build -p servo --locked --all-targets
|
|
|
|
# Runs the underlying job (“workload”) on a self-hosted runner if available.
|
|
runner-select-coverage:
|
|
if: inputs.coverage
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
unique-id: ${{ steps.select.outputs.unique-id }}
|
|
selected-runner-label: ${{ steps.select.outputs.selected-runner-label }}
|
|
is-self-hosted: ${{ steps.select.outputs.is-self-hosted }}
|
|
steps:
|
|
- name: Runner select
|
|
id: select
|
|
uses: servo/ci-runners/actions/runner-select@6d88b19dda997f1ce2a11e4c1c34717c2bbcafba
|
|
with:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
# Before updating the GH action runner image for the nightly job, ensure
|
|
# that the system has a glibc version that is compatible with the one
|
|
# used by the wpt.fyi runners.
|
|
github-hosted-runner-label: ubuntu-22.04
|
|
self-hosted-image-name: servo-ubuntu2204
|
|
# You can disable self-hosted runners globally by creating a repository variable named
|
|
# NO_SELF_HOSTED_RUNNERS with any non-empty value.
|
|
# <https://github.com/servo/servo/settings/variables/actions>
|
|
NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }}
|
|
# Any other boolean conditions that disable self-hosted runners go here.
|
|
force-github-hosted-runner: ${{ inputs.force-github-hosted-runner }}
|
|
|
|
unit-test-coverage:
|
|
if: inputs.coverage
|
|
needs: runner-select-coverage
|
|
name: Unit Test Coverage [${{ needs.runner-select-coverage.outputs.unique-id }}]
|
|
runs-on: ${{ needs.runner-select-coverage.outputs.selected-runner-label }}
|
|
continue-on-error: true
|
|
steps:
|
|
- uses: servo/ci-runners/actions/checkout@6d88b19dda997f1ce2a11e4c1c34717c2bbcafba
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
with:
|
|
tool-cache: false
|
|
large-packages: false
|
|
swap-storage: false
|
|
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
|
|
shell: bash
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
|
|
- name: Setup Python
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
uses: ./.github/actions/setup-python
|
|
- name: Change Mirror Priorities
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
uses: ./.github/actions/apt-mirrors
|
|
- name: Install cargo-llvm-cov
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: cargo-llvm-cov,cargo-nextest
|
|
- name: Bootstrap dependencies
|
|
if: ${{ runner.environment != 'self-hosted' }}
|
|
timeout-minutes: 30
|
|
shell: bash
|
|
run: |
|
|
sudo apt update
|
|
./mach bootstrap --yes --skip-lints
|
|
- name: Determine options
|
|
id: options
|
|
run: |
|
|
if [[ ${{ runner.environment }} == 'self-hosted' ]];
|
|
then
|
|
CARGO_PROFILE=dev
|
|
else
|
|
# github hosted runners don't have enough diskspace for the dev profile.
|
|
CARGO_PROFILE=coverage
|
|
fi
|
|
echo "cargo_profile=${CARGO_PROFILE}" | tee $GITHUB_OUTPUT
|
|
- name: Run unit-tests with coverage
|
|
shell: bash
|
|
env:
|
|
NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683
|
|
LANG: en-US
|
|
run: |
|
|
./mach test-unit --code-coverage \
|
|
--profile=${{ steps.options.outputs.cargo_profile }} \
|
|
--llvm-cov-option=--codecov \
|
|
--llvm-cov-option=--output-path=codecov.json
|
|
- name: Upload coverage to Codecov
|
|
uses: codecov/codecov-action@v5
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
files: codecov.json,support/crown/codecov.json
|
|
fail_ci_if_error: true
|
|
flags: unittests
|
|
|
|
media-examples:
|
|
name: Media Examples
|
|
if: ${{ inputs.unit-tests }}
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
if: github.event_name != 'pull_request_target'
|
|
with:
|
|
fetch-depth: 1
|
|
- name: Change Mirror Priorities
|
|
uses: ./.github/actions/apt-mirrors
|
|
- name: Install Dependencies
|
|
run: |
|
|
sudo bash -c 'apt-add-repository -y https://mirrors.kernel.org/ubuntu'
|
|
sudo apt update
|
|
sudo apt install -y \
|
|
gstreamer1.0-libav \
|
|
gstreamer1.0-plugins-bad \
|
|
gstreamer1.0-plugins-base \
|
|
gstreamer1.0-plugins-good \
|
|
gstreamer1.0-plugins-ugly \
|
|
gstreamer1.0-tools \
|
|
jackd2 \
|
|
libasound2-plugins \
|
|
libfaad2 \
|
|
libffi7 \
|
|
libfftw3-single3 \
|
|
libges-1.0-dev \
|
|
libgstreamer-plugins-bad1.0-dev\
|
|
libgstreamer-plugins-base1.0-dev \
|
|
libgstreamer1.0-dev \
|
|
libgstrtspserver-1.0-dev \
|
|
libjack-jackd2-0 \
|
|
libmms0 \
|
|
libmpg123-0 \
|
|
libopus0 \
|
|
liborc-0.4-0 \
|
|
liborc-0.4-dev \
|
|
libpulsedsp \
|
|
libsamplerate0 \
|
|
libspeexdsp1 \
|
|
libtdb1 \
|
|
libtheora0 \
|
|
libtwolame0 \
|
|
libwayland-egl1-mesa \
|
|
libwebrtc-audio-processing1 \
|
|
pulseaudio \
|
|
pulseaudio-utils \
|
|
webp
|
|
- name: Determine MSRV
|
|
id: msrv
|
|
uses: ./.github/actions/parse_msrv
|
|
- name: Install MSRV
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ steps.msrv.outputs.rust_version }}
|
|
- name: Virtual Audio Devices
|
|
run: |
|
|
jackd -d dummy &
|
|
pulseaudio --start
|
|
gst-inspect-1.0 | grep Total
|
|
- name: Run Examples
|
|
run: |
|
|
ls components/media/examples/examples/*.rs | xargs -I{} basename {} .rs | grep -v params_connect | RUST_BACKTRACE=1 GST_DEBUG=3 xargs -I{} cargo run -p servo-media-examples --example {}
|