11name : App Smoke Tests
22
3+ # On the nightly schedule all `inputs.*` are empty, so job conditions use
4+ # `inputs.x || '<nightly value>'` fallbacks: platforms=all, tests=all.
35on :
46 workflow_dispatch :
57 inputs :
911 type : choice
1012 options :
1113 - all
14+ - android
1215 - linux
1316 - macos
1417 - windows
1518 default : all
19+ tests :
20+ description : " Which test suites to run on the selected platforms"
21+ required : false
22+ type : choice
23+ options :
24+ - vpn-smoke # connect/disconnect smoke only (validates the public IP changes) — the fast confidence check
25+ - all # every suite the platform supports
26+ default : vpn-smoke
1627 linux_arch :
1728 description : " Linux arch to test"
1829 required : false
2233 - arm64
2334 - all
2435 default : amd64
25- windows_connect_smoke :
26- description : " Run Windows connect/disconnect smoke"
27- required : false
28- type : boolean
29- default : true
30- macos_connect_smoke :
31- description : " Include macOS connect/disconnect smoke when platforms=all (requires self-hosted runner with approved system extension)"
32- required : false
33- type : boolean
34- default : false
35- windows_split_tunnel_website_smoke :
36- description : " Run Windows split-tunneling website smoke"
37- required : false
38- type : boolean
39- default : false
40- auth_smoke :
41- description : " Run existing auth smoke tests"
42- required : false
43- type : boolean
44- default : false
45- enable_ip_check :
46- description : " Validate public IP change during VPN connect smoke"
47- required : false
48- type : boolean
49- default : false
50- force_full_tunnel_smoke :
51- description : " Force full-tunnel mode during VPN connect smoke"
52- required : false
53- type : boolean
54- default : true
36+ schedule :
37+ # Nightly full sweep (platforms=all, tests=all) at 03:00 UTC so
38+ # regressions surface within a day without anyone dispatching manually.
39+ - cron : " 0 3 * * *"
5540
5641permissions :
5742 contents : read
@@ -62,6 +47,26 @@ concurrency:
6247 cancel-in-progress : false
6348
6449jobs :
50+ # Android builds its own versioned APKs and runs on Firebase Test Lab, so it
51+ # doesn't need the desktop version stamping from `prepare`. The vpn-smoke
52+ # tier builds only the VPN suite and runs it on one virtual device with no
53+ # retries; `all` builds the full aggregator on the script's two-device
54+ # matrix (physical Pixel 8 + Arm virtual) with retries for flaky tests.
55+ android :
56+ if : ${{ contains(fromJSON('["all", "android", ""]'), inputs.platforms) }}
57+ uses : ./.github/workflows/firebase-test-lab.yml
58+ secrets : inherit
59+ with :
60+ test_target : >-
61+ ${{ (inputs.tests || 'all') == 'vpn-smoke'
62+ && 'integration_test/vpn/android_vpn_smoke_test.dart'
63+ || 'integration_test/android_all_e2e_test.dart' }}
64+ devices : >-
65+ ${{ (inputs.tests || 'all') == 'vpn-smoke'
66+ && 'model=MediumPhone.arm,version=33,locale=en,orientation=portrait'
67+ || '' }}
68+ flaky_attempts : ${{ (inputs.tests || 'all') == 'all' && '2' || '' }}
69+
6570 prepare :
6671 runs-on : ubuntu-latest
6772 outputs :
@@ -96,56 +101,48 @@ jobs:
96101 name : pubspec
97102 path : pubspec.yaml
98103
104+ # Remaining suite toggles (IP check, config-url, …) are no longer umbrella
105+ # inputs: each build-*.yml declares smoke-appropriate defaults, and anything
106+ # exotic can be dispatched on that workflow directly. The `tests` tier maps
107+ # to the optional suites: vpn-smoke leaves them off, `all` turns them on.
99108 linux :
100109 needs : prepare
101- if : ${{ inputs.platforms == ' all' || inputs.platforms == 'linux' }}
110+ if : ${{ contains(fromJSON('[" all", "linux", ""]'), inputs.platforms) }}
102111 uses : ./.github/workflows/build-linux.yml
103- secrets :
104- APP_ENV : ${{ secrets.APP_ENV }}
112+ secrets : inherit
105113 with :
106114 version : ${{ needs.prepare.outputs.version }}
107115 build_type : nightly
108116 installer_base_name : ${{ needs.prepare.outputs.installer_base_name }}
109- linux_arch : ${{ inputs.linux_arch }}
110- enable_ip_check : ${{ inputs.enable_ip_check }}
111- force_full_tunnel_smoke : ${{ inputs.force_full_tunnel_smoke }}
112- run_auth_smoke : ${{ inputs.auth_smoke }}
117+ linux_arch : ${{ inputs.linux_arch || 'amd64' }}
118+ force_full_tunnel_smoke : true
119+ run_auth_smoke : ${{ (inputs.tests || 'all') == 'all' }}
113120
121+ # Not part of platforms=all (and so not the nightly): the connect smoke
122+ # needs the self-hosted runner with the approved system extension, so macOS
123+ # runs only when asked for explicitly.
114124 macos :
115125 needs : prepare
116- if : ${{ inputs.platforms == 'macos' || (inputs.platforms == 'all' && inputs.macos_connect_smoke) }}
126+ if : ${{ inputs.platforms == 'macos' }}
117127 uses : ./.github/workflows/build-macos.yml
118- secrets :
119- AC_USERNAME : ${{ secrets.AC_USERNAME }}
120- AC_PASSWORD : ${{ secrets.AC_PASSWORD }}
121- APP_ENV : ${{ secrets.APP_ENV }}
122- MACOS_BNS_CERT : ${{ secrets.MACOS_BNS_CERT }}
123- MACOS_BNS_CERT_PASS : ${{ secrets.MACOS_BNS_CERT_PASS }}
124- MACOS_PROVISION_PROFILE_BASE64 : ${{ secrets.MACOS_PROVISION_PROFILE_BASE64 }}
125- MACOS_PROVISION_TUNNEL_BASE64 : ${{ secrets.MACOS_PROVISION_TUNNEL_BASE64 }}
128+ secrets : inherit
126129 with :
127130 version : ${{ needs.prepare.outputs.version }}
128131 build_type : nightly
129132 installer_base_name : ${{ needs.prepare.outputs.installer_base_name }}
130133 runner_label : lantern-macos-smoke
131134 run_connect_smoke : true
132- enable_ip_check : ${{ inputs.enable_ip_check }}
133- force_full_tunnel_smoke : ${{ inputs.force_full_tunnel_smoke }}
134135
135136 windows :
136137 needs : prepare
137- if : ${{ inputs.platforms == ' all' || inputs.platforms == 'windows' }}
138+ if : ${{ contains(fromJSON('[" all", "windows", ""]'), inputs.platforms) }}
138139 uses : ./.github/workflows/build-windows.yml
139- secrets :
140- APP_ENV : ${{ secrets.APP_ENV }}
140+ secrets : inherit
141141 with :
142142 version : ${{ needs.prepare.outputs.version }}
143143 build_type : nightly
144144 installer_base_name : ${{ needs.prepare.outputs.installer_base_name }}
145145 skip_signing : true
146- enable_ip_check : ${{ inputs.enable_ip_check }}
147- run_connect_smoke : ${{ inputs.windows_connect_smoke }}
148- run_split_tunnel_website_smoke : ${{ inputs.windows_split_tunnel_website_smoke }}
149- run_config_url_smoke : false
150- force_full_tunnel_smoke : ${{ inputs.force_full_tunnel_smoke }}
151- run_auth_smoke : ${{ inputs.auth_smoke }}
146+ force_full_tunnel_smoke : true
147+ run_auth_smoke : ${{ (inputs.tests || 'all') == 'all' }}
148+ run_split_tunnel_website_smoke : ${{ (inputs.tests || 'all') == 'all' }}
0 commit comments