FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
pythonnative/.github/workflows/e2e.yml at main · andevsr/pythonnative · GitHub
andevsr
pythonnative
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
pythonnative
/
.github
/
workflows
/
e2e.yml
Copy path
View runs
More file actions
More file actions
Latest commit
History
History
History
184 lines (164 loc) · 6.76 KB
Breadcrumbs
pythonnative
/
.github
/
workflows
/
e2e.yml
Copy path
File metadata and controls
184 lines (164 loc) · 6.76 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
name
:
E2E
on
:
push
:
branches
:
[main]
pull_request
:
branches
:
[main]
workflow_dispatch
:
jobs
:
coverage
:
#
Runs first; fast static check that gates the long device jobs so
#
missing demos / flows fail before the emulator boots.
runs-on
:
ubuntu-latest
steps
:
-
name
:
Checkout
uses
:
actions/checkout@v4
-
name
:
Set up Python
uses
:
actions/setup-python@v5
with
:
python-version
:
'
3.11
'
-
name
:
Check E2E coverage of pythonnative.__all__
run
:
python scripts/check-e2e-coverage.py
e2e-android
:
needs
:
coverage
runs-on
:
ubuntu-latest
timeout-minutes
:
30
#
GitHub-hosted Android emulators grow unstable after ~15 minutes of
#
sustained Maestro driving and start reporting "device offline" /
#
"device not found" mid-run (the emulator VM, not the app, dies).
#
The full suite reliably crosses that threshold around the ~35th
#
flow. Sharding the run into a few balanced groups, each on its
#
own freshly booted emulator, keeps every session well under the
#
limit, and parallelizes the Android pass as a bonus. Groups are
#
sized so none exceeds ~15 flows; ``components`` (28 flows after
#
the gesture/animated additions) crossed the ceiling at ~flow 26,
#
so it runs as two halves, and ``hooks`` (22 flows after the async
#
hook additions) now takes ~10 minutes of driving on its own, so
#
it gets a dedicated emulator. ``fail-fast: false`` so one shard's
#
failure still lets the others report.
strategy
:
fail-fast
:
false
matrix
:
include
:
-
name
:
components-a
suites
:
components-a
-
name
:
components-b
suites
:
components-b
-
name
:
hooks
suites
:
hooks
-
name
:
nav-gestures-layout-styling
suites
:
navigation gestures layout styling
-
name
:
anim-misc
suites
:
animations misc
name
:
e2e-android (${{ matrix.name }})
steps
:
-
name
:
Checkout
uses
:
actions/checkout@v4
-
name
:
Set up Python
uses
:
actions/setup-python@v5
with
:
python-version
:
'
3.11
'
-
name
:
Set up Java 17
uses
:
actions/setup-java@v4
with
:
distribution
:
'
temurin
'
java-version
:
'
17
'
-
name
:
Install PythonNative
run
:
pip install -e .
-
name
:
Install Maestro
run
:
|
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> $GITHUB_PATH
-
name
:
Enable KVM
run
:
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
-
name
:
Build, install, and run E2E tests
uses
:
reactivecircus/android-emulator-runner@v2
with
:
api-level
:
31
arch
:
x86_64
script
:
bash -lc "./scripts/run-e2e.sh android ${{ matrix.suites }}"
#
Maestro writes per-flow debug output (command log, view-hierarchy
#
dumps, failure screenshots) under ~/.maestro/tests. Surface it when
#
a shard fails so CI-only failures are diagnosable without guesswork.
-
name
:
Upload Maestro debug output
if
:
failure()
uses
:
actions/upload-artifact@v4
with
:
name
:
maestro-debug-android-${{ matrix.name }}
path
:
~/.maestro/tests/
if-no-files-found
:
ignore
retention-days
:
7
e2e-ios
:
needs
:
coverage
#
Pinned to macos-15 rather than macos-latest: the macos-26 image
#
(default since mid-July 2026) sporadically delivers a single
#
XCTest-synthesized tap as TWO UIControl action sends (~25% of
#
taps; the app's unified log shows one UIEvent followed by a
#
doubled "send control actions" burst ~1ms apart). It reproduces
#
on both the iOS 26.5 and 26.2 simulator runtimes on that image,
#
but never on a macOS 15 host, so the host-side simulator/XCTest
#
event-injection stack is the trigger. Doubled taps break every
#
non-idempotent press handler: reducer counters jump by two,
#
alerts present twice, pickers reopen after selecting. This suite
#
ran green on the macos-15 image for months.
runs-on
:
macos-15
#
Budget for the worst case: ~8 min build/boot plus two full suite
#
attempts (run-e2e.sh retries the whole suite once after a driver
#
flake) at up to ~20 min each on a slow runner. 40 was enough for
#
a clean pass but cut the retry off mid-suite.
timeout-minutes
:
55
#
iOS simulators are stable for the full suite (unlike the Android
#
emulator; see the e2e-android note), so this split is purely a
#
speed optimization: the iOS Maestro run is ~22 minutes and is the
#
critical path for the whole E2E workflow. Sharding it across three
#
simulators (same balanced groups as Android) runs them in parallel
#
and roughly halves wall-clock time. macOS minutes are free on this
#
public repo, so the extra per-shard build/boot overhead is fine.
#
``fail-fast: false`` so one shard's failure still lets the others
#
report.
strategy
:
fail-fast
:
false
matrix
:
include
:
-
name
:
components
suites
:
components
-
name
:
hooks-nav-gestures
suites
:
hooks navigation gestures
-
name
:
layout-styling-anim-misc
suites
:
layout styling animations misc
name
:
e2e-ios (${{ matrix.name }})
steps
:
-
name
:
Checkout
uses
:
actions/checkout@v4
-
name
:
Set up Python
uses
:
actions/setup-python@v5
with
:
python-version
:
'
3.11
'
-
name
:
Install PythonNative
run
:
pip install -e .
#
Maestro drives iOS simulators with its own bundled XCTest
#
runner; idb-companion (once installed here) hasn't been needed
#
since Maestro dropped idb, and its formula no longer installs
#
on macos-15 anyway (no bottle, and building needs Xcode 26).
-
name
:
Install Maestro
run
:
|
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> $GITHUB_PATH
-
name
:
Build and run E2E tests
run
:
./scripts/run-e2e.sh ios ${{ matrix.suites }}
env
:
GITHUB_TOKEN
:
${{ secrets.GITHUB_TOKEN }}
#
Maestro writes per-flow debug output (command log, view-hierarchy
#
dumps, failure screenshots) under ~/.maestro/tests. Surface it when
#
a shard fails so CI-only failures are diagnosable without guesswork.
-
name
:
Upload Maestro debug output
if
:
failure()
uses
:
actions/upload-artifact@v4
with
:
name
:
maestro-debug-ios-${{ matrix.name }}
path
:
~/.maestro/tests/
if-no-files-found
:
ignore
retention-days
:
7
Back
|
FazBrowse Home
|
New Git URL