This patch updates `linux.yml`, `mac.yml`, and `windows.yml` to run the
devtools test suite (https://github.com/servo/servo/issues/36325).
Testing: this patch effectively adds all devtools tests to CI
Fixes: https://github.com/servo/servo/issues/36325
Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: Delan Azabani <dazabani@igalia.com>
As previously proposed on zulip and discussed in the coordination
meeting, add a check to CI to see if
servo still compiles with our minimum supported Rust version.
To avoid requiring changes, we define our MSRV as the current version we
are using now (1.85.0).
This does not prevent us from updating the default compiler version,
which we should still do, to
get benefits like faster compile times, newer lints and making sure
crown stays up-to-date.
We simply test that libservo compiles in CI, since libservo (and
dependencies) is what embedders would care about. We also don't need
mach (or bootstrap!) for this, so we just use cargo build.
Testing: This PR adds a CI test. [`./mach try windows-build-libservo
linux-build-libservo
mac-build-libservo`](https://github.com/jschwe/servo/actions/runs/16901171766)
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
this patch updates linux.yml, mac.yml, and windows.yml to run the
devtools test suite (#36325), whenever unit tests are enabled in those
workflows. plus three changes that speed up the tests from 73 → 65 → 56
→ 51 seconds:
- we replace the hardcoded sleep(1) after starting servoshell with a
loop that waits until the devtools port is open (this also fixes
intermittent failures when servoshell starts too slowly, especially on
macOS)
- we start the internal web servers once, and reuse them across all
tests
- we run servoshell in headless mode (this is also required because most
CI runners have no GUI)
finally we fix two bugs that cause very noisy but not very interesting
error messages:
- in the test code, we use a [context
manager](https://docs.python.org/3/reference/datamodel.html#context-managers)
to ensure the devtools client is disconnected unconditionally, even if
test methods or assert helper methods raise exceptions (this was causing
errors on all platforms)
- in the devtools server, we treat “connection reset” errors when
reading from the client like a normal EOF, rather than as a failure
(this was causing errors on Windows)
on self-hosted linux builds, there are still spurious error messages
like the following, but we can fix them later:
```
error: XDG_RUNTIME_DIR not set in the environment.
libEGL warning: egl: failed to create dri2 screen
```
Testing: this patch effectively adds 44 tests to CI
Fixes: #36325
---------
Signed-off-by: Delan Azabani <dazabani@igalia.com>
Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
This logic was removed in #37311. However, based on the recent failures
identified in #37626, it seems like GH hosted runners sometimes do use
the `D:` drive for checkouts. It is unclear if this is always the case
or not, so this patch adds the logic back but with a conditional check
on the workspace path.
Testing: This patch has been tested on a fork.
Fixes: #37626
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Add `build-args` input in CI and try_parser job definition so we can
pass own build args to `./mach build`
Testing: There are tests for try parser and I tested CI in my fork.
Fixes: partial fix#36823
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
* Fix building libservo with `cargo build -p libservo`
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Test the libservo build in CI
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Work around build issue on macOS (#34517)
Signed-off-by: Delan Azabani <dazabani@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
---------
Signed-off-by: Delan Azabani <dazabani@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
The new images published in servo/ci-runners#12 should have `uv`
installed already and the initial build of servo triggered during the
base image construction will force the installation of the Python
version mentioned at the time of the image construction (3.12). When
.python-version changes, we can no longer use the .venv baked into the
image and must recreate the it to avoid activating the environment.
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This allows us to use `uv` for:
1. Installing a pinned Python version
2. Installing the dependency packages using `uv`'s pip compatible interface.
4. Bootstrapping `mach` without a Python installion on the host, using `uv
run`
This change also introduces a new 'composite' GitHub action to setup
python in the different CI workflows. There is no support for externally
managed python installations and virtual environments. These could be
added in the future.
Fixes#34095, #34547
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This patch switches servo to use `uv` for both installing a pinned
Python version as well as installing the dependency packages using
`uv`'s pip compatible interface. It also introduces a new 'composite'
GitHub action to setup python in the different CI workflows.
There is no support for externally managed python installations and
virtual environments. These could be added in the future.
Fixes#34095
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* CI: use self-hosted runners for Linux build jobs
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Set ccache and incremental env variables when not self-hosted
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Force GitHub-hosted runner when in upload mode
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Revert s/python/python3/ now that our image has python
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Remove stray comment in timeout workflow
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Update description of runner-select job
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Apply suggestions from code review
Address couple minor naming / formatting nits
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
---------
Signed-off-by: Delan Azabani <dazabani@igalia.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* CI: use self-hosted Windows runners in main workflow
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Fix a couple of robustness issues by generating a unique build id
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Work around needs-context expressions being busted in concurrency
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* CI: use self-hosted Windows runners in try and try-label workflows
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Rename windows workflow back for simplicity
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Clarify why the copy resources step is for GitHub-hosted jobs only
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Fix cancelled status problem by dispatching instead of calling
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Tweak retry strategy to avoid hitting REST API rate limits
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Update dispatch-workflow.yml accordingly
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Rework to use simpler approach with runner labels
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Use org-scoped self-hosted runners
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Don’t run runner-timeout job when GitHub-hosted runner is selected
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Downgrade to Python 3.10
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Avoid failing when RUNNER_API_TOKEN is missing (such as in forks)
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Fix undefined needs output when RUNNER_API_TOKEN is missing
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Reset working tree, in case it was dirty in the runner image
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Clearer runner assignment timeout jobs that fail and offer help
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Fix some other sources of incremental build breakage (but not PATH)
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Log reasons why we fall back to GitHub-hosted runners
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Allow self-hosted runners to be disabled via repository variable
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Always install crown, even on self-hosted runners
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Rename incremental build debugging step
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Clean up job friendly names
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Reduce fetch depth, now that this job no longer lints
Signed-off-by: Delan Azabani <dazabani@igalia.com>
---------
Signed-off-by: Delan Azabani <dazabani@igalia.com>
This [issue][1] was reported by GitHub user @RedYetiDev via the Security
Advisory reporting mechanism on GitHub. The fix is also based on their
proposed solution.
The issue is that `refs/pull/{pr_number}/head` points to the latest
commit of a PR and so it could be different than the commit that was
reviewed when the try label was applied. The fix is to use the exact commit
sha at the point when the try job is triggered, which is available in
the `github` context as `github.event.pull_request.head.sha`.
[1]: https://github.com/servo/servo/security/advisories/GHSA-fxqr-xgh8-3577
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Aviv Keller <38299977+RedYetiDev@users.noreply.github.com>
* Make `crown` optional
Add the optional `--use-crown` flag to mach
* --use-crown for all platforms in CI
Signed-off-by: Jonathan Schwender <jonathan.schwender@huawei.com>
* Add documentation for `--use-crown`
Signed-off-by: Jonathan Schwender <jonathan.schwender@huawei.com>
* Update python/servo/command_base.py
Co-authored-by: Mukilan Thiyagarajan <mukilanthiagarajan@gmail.com>
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
* Raise Error if CARGO_BUILD_RUSTC conflicts with --use-crown
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
* add dummy RUSTFLAG to trigger re-checking
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
---------
Signed-off-by: Jonathan Schwender <jonathan.schwender@huawei.com>
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Co-authored-by: Mukilan Thiyagarajan <mukilanthiagarajan@gmail.com>
Use the `cargo-install` action to cache the cargo-deny output.
`cargo-deny` is currently unconditionally installed during bootstrap,
and takes around 2 minutes to install, so caching should give a
significant speedup
Signed-off-by: Jonathan Schwender <jonathan.schwender@huawei.com>
Thus the build will immediately fail if a PR modifies Cargo.toml but
forgets to include the changes in Cargo.lock
This was previously checked by lockfile_changed.sh after building
normally, wasting resources.
* ci: Switch to version 4 of GitHub artifact actions
This switches to version 4 of the GitHub artifact actions, which
requires producing a single artifact per job and adding merge steps. In
addition, the names of artifacts are standardized:
- Build: <profile>-binary-<platform>
- Full WPT results (only on failure): wpt-full-logs-<platform>-<layout>
- Filtered WPT results (only on failure): wpt-filtered-logs-<platform>-<layout>
* Delete merged build timings and combine with Result job
* Always archives logs even after test failures
* Correct the name of the log files for WPT import
* Matrix in CI and mach try with presets
* small fixups
* names in trigger try run comment
* let
* f
* rename step
* fix running try on win
* fix try branch full
* py3.10
* typo
* Make unit-tests default to false, except in basic os runs
Fixes https://github.com/servo/servo/issues/31174
* make full use linux-wpt & linux-wpt also include unit-tests
so full is equal to main workflow
* Stylish fixes
* cmp json as dict
* build: Add support for Visual Studio 2022 and VC143 DLLs
This change adds supports fot Visual Studio 2022 and the VC143 (current)
version of the Visual Studio CRT. In addition, it reworks the way that
Visual Studio is found, returning all installations in a generator,
separately finding it via vswhere.exe, searching paths, and via
environment variables.
All of these installations are searched for the DLLs with highest
priority given to the highest version of MS Visual Studio installed. The
hope is that this makes the process more robust and properly handles
having multiple versions installed, but only one with the correct
runtime DLLs.
* Update based on review comments
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
---------
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This makes it more foolproof to install crown from inside the Servo
directory, because the root Servo config.toml overrides the rustc to use
crown (an obvious circular dependency).
Make it so that all try builds go through try.yml and pass
workflow_call arguments as expected to subsequent workflows.
Co-authored-by: Samson <16504129+sagudev@users.noreply.github.com>
* Replace virtualenv with Python's built-in venv.
* Apply Delan's suggestions and make a couple small fixes
- Fix a tidy warning about directories that don't exist
- Use shutil instead of the redundant get_exec_path
- Miscellaneous cleanups
* Fix typo in environment variable
* fix bug where pip still tries to the wrong site-packages
---------
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Delan Azabani <dazabani@igalia.com>
* Remove script_plugins
* Use crown instead of script_plugins
* crown_is_not_used
* Use crown in command base
* bootstrap crown
* tidy happy
* disable sccache
* Bring crown in tree
* Install crown from tree
* fix windows ci
* fix warning
* fix mac
libscript_plugins.dylib is not available anymore
* Update components/script/lib.rs
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* Update for nightly-2023-03-18
Mostly just based off https://github.com/servo/servo/pull/30630
* Always install crown
it's slow only when there is new version
* Run crown test with `mach test-unit`
* Small fixups; better trace_in_no_trace tests
* Better doc
* crown in config.toml
* Fix tidy for real
* no sccache on rustc_wrapper
* document rustc overrides
* fixup of compiletest
* Make a few minor comment adjustments
* Fix a typo in python/servo/platform/base.py
Co-authored-by: Samson <16504129+sagudev@users.noreply.github.com>
* Proper test types
* Ignore tidy on crown/tests
---------
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Triggering from labels means that we have less actions running and less
false job failures spamming project members. Plus, we have more
flexibility with labels rather than the backward compatibility we have
set up for bors comments.