-
Notifications
You must be signed in to change notification settings - Fork 359
182 lines (158 loc) · 5.41 KB
/
tests.yml
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
#
# Run full tests
#
name: Tests
on:
push:
branches:
- master
- 6.[0-9]+
paths:
- 'src/**'
- 'test/**'
- 'doc/examples/**'
- 'doc/scripts/**'
- '.github/workflows/tests.yml'
pull_request:
paths:
- 'src/**'
- 'test/**'
- 'doc/examples/**'
- 'doc/scripts/**'
- '.github/workflows/tests.yml'
defaults:
run:
# default to use bash shell
shell: bash -el {0}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
test:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
env:
# directories
COASTLINEDIR: ${{ github.workspace }}/coastline
INSTALLDIR: ${{ github.workspace }}/gmt-install-dir
# disable auto-display of GMT plots
GMT_END_SHOW: off
# Run full tests
BUILD_DOCS : false
PACKAGE : false
RUN_TESTS : true
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-latest
- name: macOS
os: macos-13 # macos-14 use M1 chips, which causes many failures
- name: Windows
os: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.0
- name: Setup vcpkg (Windows)
run: gh run download -n vcpkg-cache -D C:/vcpkg/installed/
if: runner.os == 'Windows'
env:
GH_TOKEN: ${{ github.token }}
- name: Setup conda
uses: conda-incubator/setup-miniconda@v3
if: runner.os == 'macOS'
- name: Install GMT dependencies
run: |
# $RUNNER_OS can be Linux, macOS or Windows
# The following command converts $RUNNER_OS to lowercase
os=$(echo "$RUNNER_OS" | tr '[:upper:]' '[:lower:]')
bash ci/install-dependencies-${os}.sh
env:
EXCLUDE_OPTIONAL: ${{ matrix.EXCLUDE_OPTIONAL }}
- name: Add Ghostscript registry so that GraphicsMagick can find it [Windows]
shell: pwsh
run: |
New-Item -Path "HKLM:\Software\GPL Ghostscript"
New-Item -Path "HKLM:\Software\GPL Ghostscript\10.03.0"
New-ItemProperty -Path "HKLM:\Software\GPL Ghostscript\10.03.0" -Name GS_DLL -PropertyType String -Value "C:\Miniconda\Library\bin\gsdll64.dll"
New-ItemProperty -Path "HKLM:\Software\GPL Ghostscript\10.03.0" -Name GS_LIB -PropertyType String -Value "C:\Miniconda\Library\bin;C:\Miniconda\Library\lib;C\Miniconda\Library\Font;C:\Miniconda\Library\fonts"
if: runner.os == 'Windows'
- name: Download GSHHG and DCW data
run: gh run download -n coastline-cache -D coastline
env:
GH_TOKEN: ${{ github.token }}
- name: Configure GMT
run: |
if [ "$RUNNER_OS" != "Windows" ]; then
bash ci/config-gmt-unix.sh
else
bash ci/config-gmt-windows.sh
fi
- name: Compile GMT (Linux/macOS)
run: |
mkdir build
cd build
cmake -G Ninja ..
cmake --build .
if: runner.os != 'Windows'
- name: Compile GMT (Windows)
shell: cmd
run: |
mkdir build
cd build
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake -G Ninja .. -DCMAKE_TOOLCHAIN_FILE=%VCPKG_INSTALLATION_ROOT%\scripts\buildsystems\vcpkg.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build .
if: runner.os == 'Windows'
- name: Pull baseline image data from dvc remote
run: dvc pull --no-run-cache
- name: Install GMT
run: |
cd build
cmake --build . --target install
# Add GMT PATH to bin
echo "${INSTALLDIR}/bin" >> $GITHUB_PATH
- name: Download cached GMT remote data from GitHub Artifacts
run: gh run download -n gmt-cache -D ~/.gmt/static/
env:
GH_TOKEN: ${{ github.token }}
- name: Check a few simple commands
run: bash ci/simple-gmt-tests.sh
- name: Check a few simple commands (Windows)
shell: cmd
run: call ci/simple-gmt-tests.bat
if: runner.os == 'Windows'
- name: Run full tests
run: |
set -x -e
cd build
# Disable MinGW's path conversion, see #1035.
if [ "$RUNNER_OS" == "Windows" ]; then export MSYS_NO_PATHCONV=1; fi
# Run tests
ctest ${CTEST_ARGS} || ctest ${CTEST_ARGS} --rerun-failed || ctest ${CTEST_ARGS} --rerun-failed
# show the slowest tests
sort -k3nr Testing/Temporary/CTestCostData.txt > /tmp/cost.txt
head -n 30 /tmp/cost.txt | awk 'NF==3 {printf("%50-s %d %5.1f\n", $1, $2, $3)}'
env:
CTEST_ARGS : "--output-on-failure --force-new-ctest-process -j4 --timeout 480"
- name: Run DOS batch examples (Windows)
shell: cmd
run: |
cd doc/examples
call do_examples.bat
if: runner.os == 'Windows'
- name: Upload build directory if failed
uses: actions/upload-artifact@v4
with:
name: BuildDirectory-${{ runner.os }}
path: build/
if: failure()
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4.6.0
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
fail_ci_if_error: false
gcov: true
if: always()