Repository navigation
131 lines (123 loc) · 3.86 KB
/
Copy pathci-python.yml
File metadata and controls
131 lines (123 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: CI - Python
on:
workflow_call:
inputs:
smoke:
description: Smoke tests always run; callers pass false to add the full matrix
required: false
type: boolean
default: true
compile-manager:
description: Build Selenium Manager from source instead of downloading the pinned binary
required: false
type: boolean
default: false
workflow_dispatch:
inputs:
smoke:
description: Smoke tests only (default also runs the full matrix)
required: false
type: boolean
default: false
compile-manager:
description: Build Selenium Manager from source instead of downloading the pinned binary
required: false
type: boolean
default: false
permissions:
contents: read
# Two tiers, mutually exclusive by content. `smoke` runs on every event, including
# schedule, so the schedule-only flaky parser sees it. The full jobs run on schedule
# or dispatch and exclude the smoke tags, so they are the nightly complement of
# smoke rather than the whole tree.
jobs:
lint-ruff:
name: Lint (ruff)
uses: ./.github/workflows/bazel.yml
with:
name: Lint (ruff)
run: bazel run //py:ruff-check -- --no-fix
lint-mypy:
name: Lint (mypy)
uses: ./.github/workflows/bazel.yml
with:
name: Lint (mypy)
run: bazel run //py:mypy
lint-docs:
name: Lint (docs)
uses: ./.github/workflows/bazel.yml
with:
name: Lint (docs)
run: |
bazel run //py:generate-api-listing
bazel run //py:sphinx-autogen
bazel build //py:docs
unit-tests:
name: Unit Tests
if: github.event_name == 'schedule' || !inputs.smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
python-version: ['3.15']
os: [ubuntu]
with:
name: Unit Tests (${{ matrix.python-version }}, ${{ matrix.os }})
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
run: bazel test --local_test_jobs 1 //py:unit
smoke:
name: ${{ matrix.os }}-smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
os: [windows, macos]
tag_filters: ["unit,os-sensitive,se-manager,skip-rbe"]
# macOS runners are scarce, so only use for PRs and nightly runs
exclude:
- os: ${{ github.event_name == 'push' && 'macos' || '' }}
with:
name: ${{ matrix.os }}
needs-display: true
os: ${{ matrix.os }}
rerun-with-debug: true
download-artifact-name: targets
run: >
[ -s bazel-targets-py.txt ] || echo //py/... > bazel-targets-py.txt;
./scripts/github-actions/bazel-test-if-targets.sh
--keep_going
--flaky_test_attempts 3
--local_test_jobs 1
--build_tests_only
--skip_incompatible_explicit_targets
--pin_browsers=false
${{ inputs.compile-manager && '--manager=host' || '' }}
--test_tag_filters=${{ matrix.tag_filters }}
--target_pattern_file=bazel-targets-py.txt
browser-tests:
name: Browser Tests
if: github.event_name == 'schedule' || !inputs.smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
browser: [chrome, firefox, chrome-bidi, edge, chrome-grid, firefox-grid]
os: [windows]
include:
- browser: safari
os: macos
with:
name: Integration Tests (${{ matrix.browser }})
needs-display: true
os: ${{ matrix.os }}
rerun-with-debug: true
run: >
bazel test
--keep_going
--flaky_test_attempts 3
--local_test_jobs 1
--pin_browsers=false
${{ inputs.compile-manager && '--manager=host' || '' }}
--test_tag_filters=-os-sensitive,-se-manager,-skip-rbe
//py:test-${{ matrix.browser }}