7
7
- ' analysis/**'
8
8
9
9
jobs :
10
- build :
10
+ algorithms :
11
+ runs-on : ubuntu-latest
12
+ outputs : # here we use the outputs from steps, and set outputs for the job `configure`
13
+ algorithms : ${{ steps.algorithms.outputs.algorithms }}
14
+ steps :
15
+ - uses : actions/checkout@v3
16
+ - name : Set up Python
17
+ id : setup_python
18
+ uses : actions/setup-python@v4
19
+ with :
20
+ python-version : " 3.11"
21
+ cache : ' pip'
22
+ # - name: Cache virtualenv
23
+ # uses: actions/cache@v3
24
+ # with:
25
+ # key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ hashFiles('requirements.txt') }}
26
+ # path: .venv
27
+ - name : Install dependencies
28
+ run : |
29
+ python -m venv .venv
30
+ source .venv/bin/activate
31
+ python -m pip install -r requirements.txt
32
+ python -m pip install pytest
33
+ - name : Read algorithms
34
+ id : algorithms
35
+ run : |
36
+ echo 'algorithms<<EOF' >> $GITHUB_OUTPUT
37
+ cat ./tests/IVIMmodels/unit_tests/algorithms.json >> $GITHUB_OUTPUT
38
+ echo 'EOF' >> $GITHUB_OUTPUT
39
+ - name : Log algorithms
40
+ run : |
41
+ echo "${{fromJson(steps.algorithms.outputs.algorithms)}}"
42
+ echo "${{fromJson(steps.algorithms.outputs.algorithms).algorithms}}"
43
+ - name : Log algorithms file
44
+ run : cat ./tests/IVIMmodels/unit_tests/algorithms.json
11
45
46
+ build :
12
47
runs-on : ubuntu-latest
48
+ needs : algorithms
13
49
continue-on-error : false
14
50
strategy :
15
51
fail-fast : false
52
+ matrix :
53
+ algorithm : ${{fromJson(needs.algorithms.outputs.algorithms).algorithms}}
54
+ SNR : [10, 30, 50, 100, 200]
16
55
steps :
17
56
- uses : actions/checkout@v3
18
57
- name : Set up Python
19
58
uses : actions/setup-python@v4
20
59
with :
21
60
python-version : " 3.11"
61
+ cache : ' pip'
62
+ # - name: Cache virtualenv
63
+ # uses: actions/cache@v3
64
+ # with:
65
+ # key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ hashFiles('requirements.txt') }}
66
+ # path: .venv
22
67
- name : Install dependencies
23
68
run : |
24
- python -m pip install --upgrade pip
25
- pip install -r requirements.txt
69
+ python -m venv .venv
70
+ source .venv/bin/activate
71
+ python -m pip install -r requirements.txt
72
+ python -m pip install pytest
73
+ - name : Generate fitting data
74
+ run : |
75
+ source .venv/bin/activate
76
+ python -m pytest -m slow --selectAlgorithm ${{ matrix.algorithm }} --saveFileName test_output_${{ matrix.algorithm }}_${{ matrix.SNR }}.csv --SNR ${{ matrix.SNR }} --fitCount 300 --saveDurationFileName test_duration_${{ matrix.algorithm }}_${{ matrix.SNR }}.csv
77
+ - name : Upload raw data
78
+ uses : actions/upload-artifact@v3
79
+ with :
80
+ name : Working_Data
81
+ retention-days : 1
82
+ path : |
83
+ test_output_${{ matrix.algorithm }}_${{ matrix.SNR }}.csv
84
+ test_duration_${{ matrix.algorithm }}_${{ matrix.SNR }}.csv
85
+
86
+ merge :
87
+ runs-on : ubuntu-latest
88
+ needs : build
89
+ steps :
90
+ - name : Download artifacts
91
+ uses : actions/download-artifact@v3
92
+ with :
93
+ path : artifacts
94
+ - name : Merge fitting results
95
+ run : |
96
+ head -n 1 $(ls artifacts/Working_Data/test_output_*.csv | head -n 1) > test_output.csv
97
+ tail -q -n +2 artifacts/Working_Data/test_output_*.csv >> test_output.csv
98
+ - name : Merge timing results
99
+ run : |
100
+ head -n 1 $(ls artifacts/Working_Data/test_duration_*.csv | head -n 1) > test_duration.csv
101
+ tail -q -n +2 artifacts/Working_Data/test_duration_*.csv >> test_duration.csv
102
+ - name : Upload merged artifacts
103
+ uses : actions/upload-artifact@v3
104
+ with :
105
+ name : Data
106
+ path : |
107
+ test_output.csv
108
+ test_duration.csv
109
+
110
+ analyze :
111
+ runs-on : ubuntu-latest
112
+ needs : merge
113
+ steps :
114
+ - uses : actions/checkout@v3
26
115
- name : Set up R
27
116
uses : r-lib/actions/setup-r@v2
28
117
with :
@@ -36,23 +125,17 @@ jobs:
36
125
any::tidyverse
37
126
any::data.table
38
127
any::ggplot2
39
- - name : Generate fitting data
40
- run : |
41
- pip install pytest
42
- python -m pytest -m slow --saveFileName test_output.csv --SNR 10 30 50 100 200 --fitCount 300 --saveDurationFileName test_duration.csv
128
+ - name : Download artifacts
129
+ uses : actions/download-artifact@v3
130
+ with :
131
+ name : Data
43
132
- name : Generate figures
44
133
run : Rscript --vanilla tests/IVIMmodels/unit_tests/analyze.r test_output.csv test_duration.csv
45
- - name : Upload raw data
46
- uses : actions/upload-artifact@v3
47
- with :
48
- name : Raw data
49
- path : |
50
- test_output.csv
51
- test_duration.csv
52
134
- name : Upload figures
53
135
uses : actions/upload-artifact@v3
136
+ if : always()
54
137
with :
55
- name : Fit figures
138
+ name : Figures
56
139
path : |
57
140
D.pdf
58
141
f.pdf
@@ -63,3 +146,33 @@ jobs:
63
146
durations.pdf
64
147
curve_plot.pdf
65
148
fitted_curves.pdf
149
+
150
+ compare :
151
+ runs-on : ubuntu-latest
152
+ needs : merge
153
+ steps :
154
+ - uses : actions/checkout@v3
155
+ - name : Set up R
156
+ uses : r-lib/actions/setup-r@v2
157
+ with :
158
+ use-public-rspm : true
159
+ - name : Install R dependencies
160
+ uses : r-lib/actions/setup-r-dependencies@v2
161
+ with :
162
+ packages : |
163
+ any::tidyverse
164
+ any::assertr
165
+ - name : Download artifacts
166
+ uses : actions/download-artifact@v3
167
+ with :
168
+ name : Data
169
+ - name : Test against previous results
170
+ run : Rscript --vanilla tests/IVIMmodels/unit_tests/compare.r test_output.csv test_reference.csv tests/IVIMmodels/unit_tests/reference_output.csv test_results.csv
171
+ - name : Upload data
172
+ uses : actions/upload-artifact@v3
173
+ if : always()
174
+ with :
175
+ name : Comparison
176
+ path : |
177
+ test_reference.csv
178
+ test_results.csv
0 commit comments