Repository navigation
172 lines (150 loc) · 6.85 KB
/
Copy pathgenerate_coverage.yaml
File metadata and controls
172 lines (150 loc) · 6.85 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
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
name: Generate coverage data for dpnp
on:
pull_request:
push:
branches: [master]
permissions: read-all
jobs:
generate-coverage:
name: Generate coverage and push to Coveralls.io
runs-on: ubuntu-latest
timeout-minutes: 180
permissions:
# Needed to cancel any previous runs that are not completed for a given workflow
actions: write
defaults:
run:
shell: bash -el {0}
env:
# Pinned: Miniforge3 26.9.4-0 fails 'conda init' on Windows runners
miniforge-version: '26.7.2-1'
environment-file: 'environments/environment.yml'
build-with-oneapi-env: 'environments/build_with_oneapi.yml'
coverage-env: 'environments/coverage.yml'
test-pkg-env: 'environments/test.yml'
oneapi-pkgs-env: ''
# Enable env when it's required to use only conda packages without OneAPI installation
# oneapi-pkgs-env: '${{ github.workspace }}/environments/oneapi_pkgs.yml'
dpctl-pkg-txt: 'environments/dpctl_pkg.txt'
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1
with:
access_token: ${{ github.token }}
- name: Add Intel repository
if: env.oneapi-pkgs-env == ''
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
< GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo apt update
- name: Install latest Intel OneAPI
if: env.oneapi-pkgs-env == ''
run: |
sudo apt install hwloc \
intel-oneapi-mkl \
intel-oneapi-umf \
intel-oneapi-mkl-devel \
intel-oneapi-tbb-devel \
intel-oneapi-libdpstd-devel \
intel-oneapi-compiler-dpcpp-cpp
- name: Checkout repo
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0
- name: Install conda-merge tool
uses: BSFishy/pip-action@8f2d471d809dc20b6ada98c91910b6ae6243f318 # v1
with:
packages: conda-merge
- name: Merge conda env files
run: |
conda-merge ${{ env.build-with-oneapi-env }} \
${{ env.coverage-env }} \
${{ env.oneapi-pkgs-env }} \
${{ env.test-pkg-env }} > ${{ env.environment-file }}
cat ${{ env.environment-file }}
- name: Setup miniconda
id: setup_miniconda
continue-on-error: true
uses: conda-incubator/setup-miniconda@be893c923ea9cf1cf7cd510fbdde27c7e18cbdcb # v4.1.0
with:
miniforge-version: ${{ env.miniforge-version }}
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.environment-file }}
activate-environment: 'coverage'
- name: ReSetup miniconda
if: steps.setup_miniconda.outcome == 'failure'
uses: conda-incubator/setup-miniconda@be893c923ea9cf1cf7cd510fbdde27c7e18cbdcb # v4.1.0
with:
miniforge-version: ${{ env.miniforge-version }}
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.environment-file }}
activate-environment: 'coverage'
# We can't install dpctl as a conda package when the environment is created through
# installing of Intel OneAPI packages because the dpctl conda package has a runtime
# dependency on DPC++ RT one. Whereas the DPC++ RT package has beedn already installed
# by the apt command above and its version has been matched with the DPC++ compiler.
# In case where we install the DPC++ compiler with the apt (including DPC++ RT) and
# install the DPC++ RT conda package while resolving dependencies, this can lead
# to a versioning error, i.e. compatibility issue as the DPC++ compiler only guarantees
# backwards compatibility, not forward compatibility (DPC++ RT may not run a binary built
# with a newer version of the DPC++ compiler).
# Installing dpctl via the pip manager has no such limitation, as the package has no
# run dependency on the DPC++ RT pip package, so this is why the step is necessary here.
- name: Install dpctl
if: env.oneapi-pkgs-env == ''
run: |
pip install -r ${{ env.dpctl-pkg-txt }}
- name: Conda info
run: |
mamba info
mamba list
- name: Build dpnp with coverage
timeout-minutes: 60
run: |
[ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh
python scripts/gen_coverage.py --stage build
- name: Run dpnp tests with coverage
id: dpnp_tests
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0
with:
shell: bash
timeout_minutes: 90
max_attempts: 2
retry_on: error
command: |
. $CONDA/etc/profile.d/conda.sh
conda activate coverage
[ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh
python scripts/gen_coverage.py --stage dpnp-tests
- name: Run dpnp.tensor tests with coverage
id: tensor_tests
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0
with:
shell: bash
timeout_minutes: 30
max_attempts: 3
# also retry on timeout, the tests may hang
retry_on: any
command: |
. $CONDA/etc/profile.d/conda.sh
conda activate coverage
[ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh
python scripts/gen_coverage.py --stage tensor-tests
- name: Total number of coverage attempts
if: ${{ !cancelled() }}
run: |
echo "dpnp tests attempts: ${{ steps.dpnp_tests.outputs.total_attempts }}"
echo "dpnp.tensor tests attempts: ${{ steps.tensor_tests.outputs.total_attempts }}"
- name: Generate coverage reports
run: |
[ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh
python scripts/gen_coverage.py --stage report
- name: Upload coverage data to coveralls.io
uses: coverallsapp/github-action@8d6379e14d29928660c4ba802d8e85393440b329 # v2.3.8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}