Skip to content

Commit bf93f6d

Browse files
committed
Install xvfb for headed browser tests
1 parent 3221c24 commit bf93f6d

5 files changed

Lines changed: 19 additions & 2 deletions

File tree

docs/msra-app.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
| `version` | Версия клиента или API-контракта | Копируется в generated package и используется как версия артефакта. Значение должно быть статическим. |
1818
| `timeout_ms` | Глобальный таймаут по умолчанию | Становится базовым лимитом для runtime-операций и используется, если локальный блок не переопределяет timeout. |
1919
| `browser` | Браузер по умолчанию | Определяет, какой движок запустит runtime для warmup и browser-backed функций. Если не указан, runtime использует `camoufox` по умолчанию. |
20-
| `@DisallowHeadless` | Запрещает headless-запуск | Меняет дефолт `headless` на `False`, заставляет runtime выбрасывать ошибку, если caller всё же просит `headless=True`, и переключает generated test pipeline на headed запуск под `xvfb-run` (runner должен предоставлять `xvfb-run`). |
20+
| `@DisallowHeadless` | Запрещает headless-запуск | Меняет дефолт `headless` на `False`, заставляет runtime выбрасывать ошибку, если caller всё же просит `headless=True`, и переключает generated test pipeline на headed запуск под `xvfb-run` с установкой Xvfb из `github.workflows.tests.xvfb_install_commands` (runner должен уметь выполнить эти команды). |
2121
| `@Humanize` | Включает humanized-режим браузера | Передаёт `humanize=` в `AsyncCamoufox`, снижает “ботоподобность” поведения и требует `browser="camoufox"`. Разрешена либо как пустая аннотация, либо с положительным числом интенсивности, например `@Humanize(0.5)`. |
2222
| `@BlockImages` | Блокирует загрузку изображений | Передаёт `block_images=` в `AsyncCamoufox`, ускоряет старт и экономит трафик. Аннотация работает только с `browser="camoufox"`. |
2323

@@ -62,4 +62,4 @@
6262
`@BlockImages` блокирует загрузку изображений при старте браузера.
6363
`@DisallowHeadless` делает `headless=False` значением по умолчанию и выбрасывает runtime error, если клиент всё же стартует с `headless=True`.
6464

65-
`@Humanize` и `@BlockImages` работают только с `browser="camoufox"`. `@DisallowHeadless` не зависит от выбранного браузера, но влияет на generated CI pipeline, который начинает запускать браузерные тесты через `xvfb-run`.
65+
`@Humanize` и `@BlockImages` работают только с `browser="camoufox"`. `@DisallowHeadless` не зависит от выбранного браузера, но влияет на generated CI pipeline, который начинает запускать браузерные тесты через `xvfb-run` и установку Xvfb.

msra_codegen/config.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ install_commands = [
6868
"venv/bin/python -m pip install -U pip",
6969
"venv/bin/python -m pip install -r requirements-dev.txt",
7070
]
71+
xvfb_install_commands = [
72+
"sudo apt-get update",
73+
"sudo apt-get install -y xvfb xauth",
74+
]
7175
run_command_shell = "bash -e -lc"
7276
headed_run_command_shell = "xvfb-run -a bash -e -lc"
7377
run_commands = [

msra_codegen/github_workflows.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def build_github_workflows_context(project: dict[str, Any], package_name: str) -
2424
source_sync_python_version = str(source_sync_config["python_version"])
2525
tests_run_command_shell = str(tests_config["run_command_shell"])
2626
tests_headed_run_command_shell = str(tests_config["headed_run_command_shell"])
27+
tests_xvfb_install_commands = list(tests_config["xvfb_install_commands"])
2728
preserved_target_paths = app_sync_config.get("preserved_target_paths", [])
2829
if not isinstance(preserved_target_paths, list):
2930
raise RuntimeError("app.sync.preserved_target_paths must be a list.")
@@ -43,6 +44,7 @@ def build_github_workflows_context(project: dict[str, Any], package_name: str) -
4344
"checkout_action": str(tests_config["checkout_action"]),
4445
"setup_python_action": str(tests_config["setup_python_action"]),
4546
"install_commands": list(tests_config["install_commands"]),
47+
"xvfb_install_commands": tests_xvfb_install_commands,
4648
"run_commands": list(tests_config["run_commands"]),
4749
"run_command_shell": tests_run_command_shell,
4850
"headed_run_command_shell": tests_headed_run_command_shell,

msra_codegen/templates/github/workflows/tests.yml.tpl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ jobs:
4040
{{ line }}
4141
{% endfor %}
4242

43+
{% if tests.requires_xvfb %}
44+
- name: Install Xvfb
45+
run: |
46+
{% for line in tests.xvfb_install_commands %}
47+
{{ line }}
48+
{% endfor %}
49+
50+
{% endif %}
51+
4352
- name: Run tests (venv)
4453
env:
4554
MSRA_RUN_COMMANDS: |

tests/codegen.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,8 @@ test("python codegen builds the demo project", () => {
10241024
readmeText,
10251025
/\[!\[Ruff\]\(https:\/\/img\.shields\.io\/badge\/linting-Ruff-blue\?logo=ruff&logoColor=white\)\]\(https:\/\/github\.com\/astral-sh\/ruff\)/,
10261026
);
1027+
assert.match(testsWorkflowText, /name: Install Xvfb/);
1028+
assert.match(testsWorkflowText, /sudo apt-get install -y xvfb xauth/);
10271029
assert.match(testsWorkflowText, /xvfb-run -a bash -e -lc "\$MSRA_RUN_COMMANDS"/);
10281030

10291031
const probeScript = [

0 commit comments

Comments
 (0)