Commit Graph
273 Commits
Author SHA1 Message Date
Adrià Arrufat a6bb66ac3c Merge pull request #3390 from lightpanda-io/ci/trigger-python-package
ci: release lightpanda-python on version tags
2026-09-09 14:48:02 +02:00
Pierre Tachoire d00e6e6e4f ci: enable cors 2026-09-07 09:43:26 +02:00
Karl Seguin 7d39a4fbaf http: handle redirects better
Our redirect handling was "optimized" to re-use the same easy connection, at the
cost of circumventing the entire pipeline. A redirect would not check the new
target's robots.txt, rate limit, CORS, Web Auth, ...

The new code simply restarts the pipeline (with a discriminator tag so that
things like CDP can tell the difference between a redirected request and a new
one).
2026-09-02 12:41:53 +08:00
Karl Seguin fe3a491d22 ci: regenerate orderifle
remove auto orderfile generation, too much hassle.

Manually regenerate the two orderfiles. Change it to use newlines so the diff
is better.
2026-09-02 09:44:25 +08:00
Adrià Arrufat 38017c3d41 ci: release lightpanda-python on version tags
Add an update-python-package job that creates the matching release on
lightpanda-io/lightpanda-python (same distribution-app pattern as the
docker and homebrew jobs). That release triggers the wheels workflow
there, replacing its daily track-browser polling; its publish to PyPI
still waits for approval on that repo's pypi environment.

The distribution app needs contents write access to lightpanda-python.
2026-09-01 22:26:50 +02:00
Karl Seguin 84b8500f2e CI: Weekly orderfile generation + PR 2026-09-01 10:08:53 +08:00
Karl Seguin 857a8ea643 ci: enable bidi protocol for all e2e tests 2026-09-01 09:51:27 +08:00
Karl Seguin 731774ab67 ops: Allow serving both cdp and bidi on the same port
--protocol can now be specified multiple times. This just makes ops/dev easier
by only requiring 1 instance.
2026-08-31 22:45:15 +08:00
Karl Seguin 766c0d05d6 bidi: protocol selection CLI, start of [classic] WebDriver
In order to support Selenium the way people are used to, it looks  like we need
to support both WebDriver classic (WebDriver) and WebDriver BiDi (BiDi). Typical
scripts look like a mix of the two, e.g. using WebDriver to control the browser
and using BiDi  to receive notifications. This commit:

1 - adds a --protocol (cdp|webdriver) CLI argument to the `serve` command to
    enable one or the other protocol (defaulting to CDP)

2 - adds basic WebDriver endpoint to let a Selenium client connect. This
    implementation is hackish and sits on top of our simple Handshake handler.

The handshake handler is well past its original design. Serving /json/version
and /metrics from it was one thing. But Driving the entire browser session? This
will get a follow up PR.
2026-08-31 22:45:15 +08:00
Karl Seguin 313803c354 CI: Lower MAX_VmHWM to 24 (down from 28)
orderfile PRs (https://github.com/lightpanda-io/browser/pull/3271 and
https://github.com/lightpanda-io/browser/pull/3285) has dropped memory usage to
~23.6. Rather than hitting 28MB in 2-3 months time and not knowing how we got
there, I'd rather get slow/incremental notices.
2026-08-29 11:41:12 +08:00
Karl Seguin 585ed9b93c agent regression explictly load workers and iframes 2026-08-27 18:32:36 +08:00
Karl Seguin 7a6774a278 enable worker/iframe in 2nd e2e test 2026-08-27 17:27:31 +08:00
Karl Seguin db258bfec4 breaking: disable worker and iframe loading by default
By default, iframes and workers no longer loaded. Use `--load-resources iframe`
and `--load-resources worker` to restore the previous behavior. The disabling
makes resource loading more consistent.

To further make things more consistent, Config seems the following changes:

1. remove  `--timeout` from `serve` which does nothing but has printed a
   deprecation warning for a long time

2. added .deprecated field to CLI config flags which now logs the specified
   deprecated warning when used

3. `--log-filter-scopes` is deprecated in favor of `--log-scopes`

4. `--disable_subframes` is deprecated. Iframe loading is disabled by default,
    use `--load-resources iframe` to enable iframe loading

5. `--disable_workers` is deprecated. Worker loading is disabled by default,
    use `--load-resources worker` to enable worker loading

6. `--enable_external_stylesheets`  is deprecated. Stylesheets remain disabled
    by default. Use `--load-resources stylesheet` to enable loading external
    stylesheets

CLI log parameters now alter the logger behavior on parse. This helps minimze
the window where default log settings are in-play. It also means things like
this work:

```
./lightpanda --log-level fatal --disable_subframes --log-level warn
```

More seriously, there's now an optional `beforeParse` fired once the mode is
known. This is used by mcp to set the default log level to logfmt. Previously
this was done much later and could easily result in a mix of pretty and logfmt
logs.
2026-08-27 17:25:42 +08:00
Karl Seguin 98ff4b9b4d CI: bump timeout from 20 to 30 for e2e-test
Mimic's https://github.com/lightpanda-io/browser/pull/3294

I looked into this a little bit, and the main issue is that we build the binary
in releasefast twice: once for the snapshot and once for the browser itself.
Each build takes ~10 minutes.

The snapshot cache almost always misses (since any change to webapi/*
invalidates it). I don't see a great solution.
2026-08-27 13:54:30 +08:00
Pierre Tachoire f1fcdb6617 ci: increase release build timeout 20 -> 30 2026-08-26 15:32:21 +02:00
Karl Seguin ee1fd9207c mem: On linux CI builds, use an orderfile
CI build, for e2e-test and nightly now build with:
-Dorderfile/lightpanda.ld

This file informs the build on how to organize the code in the binary, grouping
hot code together so that we have to load less of the binary into memory.

lightpanda.ld will drift: we'll refactor our code, add new features, update
dependencies, update Zig, ... So it has to be re-generated. But we can do that
automatically in the CI (say, before the nightly build). That's for a follow up
PR.

This does not currently cover V8. V8 is being build with
`-no-unique-section-names`, so we don't get names that we can correctly
organize. The real win comes from doing this in V8, since a lot of V8 is cold.
This PR can land as-is, a zig-v8-fork PR will remove that flag, and then we can
have a follow up PR with an lightpanda.ld that includes the v8 symbols.

This is opt-in (via the -Dorderfile flag) because it adds ~20 seconds of
linking time.
2026-08-25 21:02:31 +08:00
Pierre Tachoire 34aae91fa1 ci: bump ubunutu to 24.04 for arm release.
apt.llvm.org no longer publishes an LLVM 23 repo for 22.04.
https://github.com/lightpanda-io/zig-v8-fork/pull/199
2026-08-14 10:30:25 +02:00
Karl Seguin aa0909aef1 chore: bump WPT --max-mem from 100 to 200
Some WPT tests just take more memory, e.g. shadow-dom/declarative/gethtml.html.

Also left some placeholder comments for profiling JS (which I used to make sure
this was just v8 memory usage). These placeholders used to exist but didn't
survive the session multi-page refactor (figured I'd fix it next time I needed
it, and now I needed it).
2026-08-13 21:06:31 +08:00
Pierre Tachoire fd35c0d01a wpt: adjust concurrency 2026-07-21 11:38:27 +02:00
Thibaud-Vdb 1d553ff5ee ci: add plumber to watch workflow security
Runs on pushes to main and on pull requests. The config starts from
the generated defaults and is scoped to this repo: the few controls
that are off carry a note explaining why and what would let them
come back on.

Reports are uploaded to code scanning, except on PRs from forks
where the token cannot write security events. Each run on main also
publishes the score through OIDC, which feeds the live badge added
to the README next to the existing ones.
2026-07-20 15:12:58 +02:00
Thibaud-Vdb cca00c022e ci: pin github actions to commit shas
Mutable tags like @v6 can be re-pointed by whoever controls the action,
so the next run executes code nobody here reviewed, with the job's
token and secrets. Pinning to the full commit sha freezes what runs.
Version tags are kept as comments so renovate or dependabot can still
track updates.

dtolnay/rust-toolchain is pinned to a master commit with the toolchain
moved to an explicit input, as its readme recommends for sha pinning.
2026-07-20 14:56:59 +02:00
Pierre Tachoire af3a552af7 wpt: set a memory limit per browser instead of per process 2026-07-20 08:29:44 +02:00
Adrià Arrufat f5ddbb49fe ci: publish agent-regression results to slack, run nightly
Mirror the wpt/e2e-integration pattern: tee the suite output to a log,
strip the ANSI colors, and upload it to the #ci-agent channel
(AGENT_SLACK_CHANNEL_ID) via the CI slack bot, with the final
pass/fail summary as the comment. The post also happens when the
suite fails, without masking its exit code (explicit bash pipefail).

Add a nightly cron trigger (03:37, offset from wpt's 02:21) so the
suite actually runs unattended; workflow_dispatch stays for manual
runs with a model override.
2026-07-08 16:22:41 +02:00
Adrià Arrufat 52a8779f2a Merge branch 'main' into agent-regression 2026-07-07 11:43:12 +02:00
Adrià Arrufat 2170b34ea9 ci: agent-regression is manual-only, drop the nightly cron
Claude-Session: https://claude.ai/code/session_01SG5kc3gGurhT7N6f63cjMq
2026-07-03 12:01:05 +02:00
Adrià Arrufat f7bcdace77 ci: drop temporary push trigger, cross-repo wiring validated green
Claude-Session: https://claude.ai/code/session_01SG5kc3gGurhT7N6f63cjMq
2026-07-03 10:13:43 +02:00
Adrià Arrufat bd95d9a610 test: consume agent regression suite from lightpanda-io/demo
The suite moved to the demo repo (machinery in agent/, targets the
existing public/ sites — lightpanda-io/demo#206). Delete the in-repo
copy and point the agent-deterministic job, agent-regression.yml, and
make test-agent at the demo checkout, passing the binary via LPD_PATH
(the same variable wptrunner uses) — same consumption model as
runner/integration/wpt.

Includes a temporary push trigger on agent-regression.yml to validate
the cross-repo wiring pre-merge; dropped before merging.
2026-07-03 09:59:29 +02:00
Adrià Arrufat f9c3e4bc2a ci: drop temporary push trigger, suite validated green in CI 2026-07-02 12:00:19 +02:00
Adrià Arrufat 86ef37e12b ci: temporary push trigger to validate agent-regression pre-merge 2026-07-02 10:24:59 +02:00
Adrià Arrufat f191410773 test: add agent regression suite
Two layers driven by test/agent/run.sh:

- deterministic: replay a golden PandaScript against frozen local HN
  fixtures and diff the returned JSON exactly against a golden file.
  No API key, no network; gates every PR via e2e-test.yml.

- live (GOOGLE_API_KEY): closed-form Q&A over a local fixture page
  (substring match), and a live Hacker News scrape saved with --save,
  replayed token-free and validated against a jq shape invariant.
  Runs nightly and on demand via agent-regression.yml.

The live output contract lives in cases/hn-live.task (prompt) +
schemas/hn-live.jq (invariant). Model pinned to gemini-3.5-flash in
run.sh; per-task timeouts and a $usage token ceiling guard runaway
loops. make test-agent for local runs.
2026-07-02 09:40:22 +02:00
Halil Durak 5e567adf1b ci: run serve command with TLS host verification disabled 2026-07-02 08:46:21 +03:00
Pierre Tachoire 7aa8bac4ba ci: add read permission to release for docker 2026-06-30 08:31:15 +02:00
Pierre Tachoire 30eb23e0c5 ci: login on GH registry during release 2026-06-29 09:41:58 +02:00
Pierre Tachoire e396cbb90c ci: login on GH registry during release 2026-06-29 09:38:10 +02:00
Pierre Tachoire 4d07f47da1 Generate a versions.json file 2026-06-25 17:45:19 +02:00
Pierre Tachoire 4e97d1e2e9 ci: fix homebrew release workflow name 2026-06-24 08:13:36 +02:00
Pierre Tachoire 4314148b70 ci: trigger homebrew-browser formula update after release 2026-06-23 11:58:22 +02:00
Pierre Tachoire ff6fc57d3d call browser-docker workflow after installation 2026-06-22 18:00:48 +02:00
Pierre Tachoire b2f7bdd935 ci: upload on s3 an agent alias 2026-06-18 10:10:59 +02:00
Pierre Tachoire 7836e1e042 ci: invalidate cloudfront distribution on release 2026-06-17 08:33:57 +02:00
Pierre Tachoire 12cdaea683 ci: upload release on s3 in its own directory 2026-06-17 08:29:06 +02:00
Pierre Tachoire cd5822c889 ci: remove nightly agent build 2026-06-17 08:29:03 +02:00
Pierre Tachoire a899fbaec0 ci: fix cache invalidation for agent-build 2026-06-09 11:18:23 +02:00
Pierre Tachoire 8d98d7aa99 ci: add missing cache key for integration test 2026-06-08 12:05:44 +02:00
Pierre Tachoire 41cff18e75 ci: save LP cache for integration tests 2026-06-08 10:56:26 +02:00
Pierre Tachoire d68f1a48ad ci: always enable cache with e2e test 2026-05-28 11:25:47 +02:00
Pierre Tachoire a15c04de4b ci: remove cdp logs from end to end tests 2026-05-19 17:32:13 +02:00
Adrià Arrufat 8981a6245c ci: tighten mcp-smoke jq assertions
Replace `grep '"id":N' | jq -e ...` with `jq -ec 'select(.id == N) | ...'`.
The grep form also matched `"id":10`, `"id":11`, ... and any tool description
containing that substring; numeric `select` is type-correct. `jq -e` still
fails the job when `select` produces no output (exit 4), so the smoke
semantics are preserved.

Also add `jq --version` up front so the job fails fast and loud if the
`ubuntu-latest` image ever stops shipping jq.
2026-05-17 10:43:03 +02:00
Pierre Tachoire 803e4303c2 Merge pull request #2481 from navidemad/ci-mcp-smoke
ci: smoke test the MCP stdio server
2026-05-17 10:39:18 +02:00
Karl Seguin a5c1068b85 Force kill lightpanda between steps to prevent "port already in-use" error in CI 2026-05-16 08:39:53 +08:00