-
Notifications
You must be signed in to change notification settings - Fork 119
158 lines (139 loc) · 4.75 KB
/
macos_tests.yaml
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
name: MacOS Tests
on:
push:
branches:
- main
- "releases/**"
pull_request:
branches:
- main
- "releases/**"
# Restrict tests to the most recent commit.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build_test_addons:
name: Build Test Addons
uses: ./.github/workflows/build_addons.yaml
with:
test-addons-name: test-addons-${{ github.sha }}
build_test_app:
name: Build Test Client
runs-on: macos-latest
defaults:
run:
shell: bash -el {0}
outputs:
matrix: ${{ steps.testGen.outputs.tests }}
steps:
- name: Clone repository
uses: actions/checkout@v4
with:
submodules: "recursive"
- uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: "latest"
environment-file: "env.yml"
activate-environment: vpn
- name: Setup compiler cache
uses: actions/cache@v4
with:
path: ~/Library/Caches/ccache
key: ccache-${{ runner.os }}-${{ runner.arch }}-${{ github.sha }}
lookup-only: github.event_name == 'pull_request'
restore-keys: ccache-${{ runner.os }}-${{ runner.arch }}-${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.sha }}
- name: Install build dependencies
run: |
./scripts/macos/conda_install_extras.sh
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
brew install ninja
- name: Install Qt6
run: |
wget https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/mozillavpn.v2.mozillavpn.cache.level-3.toolchains.v3.qt-macos-6.6.latest/artifacts/public%2Fbuild%2Fqt6_mac.zip -O qt6_mac.zip
unzip -a -d ${{ github.workspace }} qt6_mac.zip
- name: Compile test client
run: |
mkdir -p build/cmake
cmake -S $(pwd) -B build/cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_PREFIX_PATH=${{ github.workspace }}/qt_dist/lib/cmake
cmake --build build/cmake
cp -r ./build/cmake/src/Mozilla\ VPN.app/ build/Mozilla\ VPN.app
- uses: actions/upload-artifact@v4
with:
name: test-client-${{ github.sha }}
path: |
build/
!build/cmake/
- name: Generate tasklist
id: testGen
run: |
echo -n "tests=" >> $GITHUB_OUTPUT
for test in $(find tests/functional -name 'test*.js' | sort); do
printf '{"name": "%s", "path": "%s"}' $(basename ${test%.js} | sed -n 's/test//p') $test
done | jq -s -c >> $GITHUB_OUTPUT
- name: Check tests
env:
TEST_LIST: ${{ steps.testGen.outputs.tests }}
run: |
echo $TEST_LIST | jq
functionaltests:
name: Functional tests
needs:
- build_test_app
- build_test_addons
runs-on: macos-latest
timeout-minutes: 45
strategy:
fail-fast: false # Don't cancel other jobs if a test fails
matrix:
test: ${{ fromJson(needs.build_test_app.outputs.matrix) }}
steps:
- name: Clone repository
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: test-client-${{ github.sha }}
path: build/
- uses: actions/download-artifact@v4
with:
name: test-addons-${{ github.sha }}
path: build/addons/
- uses: actions/setup-python@v5
env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
with:
python-version: "3.9"
cache: "pip"
- run: pip install -r requirements.txt
- uses: actions/setup-node@v4
with:
node-version: 18
cache: "npm"
- run: npm install
- name: Check build
shell: bash
run: |
chmod +x ./build/Mozilla\ VPN.app/Contents/MacOS/Mozilla\ VPN
./build/Mozilla\ VPN.app/Contents/MacOS/Mozilla\ VPN -v
- name: Running ${{ matrix.test.name }} Tests
shell: bash
id: runTests
env:
TZ: Europe/London
HEADLESS: yes
ARTIFACT_DIR: ${{ runner.temp }}/artifacts
MVPN_ADDONS_PATH: ./build/addons
MVPN_BIN: ./build/Mozilla VPN.app/Contents/MacOS/Mozilla VPN
run: |
export PATH=$GECKOWEBDRIVER:$(npm bin):$PATH
mkdir -p $ARTIFACT_DIR
npm run functionalTest -- --retries 3 ${{ matrix.test.path }}
- name: Uploading artifacts
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: ${{ matrix.test.name }} Logs
path: ${{ runner.temp }}/artifacts
if-no-files-found: ignore