-
Notifications
You must be signed in to change notification settings - Fork 5
331 lines (277 loc) · 14.4 KB
/
Copy pathmain.yml
File metadata and controls
331 lines (277 loc) · 14.4 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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
name: Parallel Random Testing
on:
workflow_dispatch:
inputs:
JarName:
description: "Insert jar file name"
default: "saxpath"
CoverageValue:
description: "Insert coverage limit"
default: "60"
TimeLimit:
description: "Insert time limit for each test session"
default: "20"
env:
name_file: ${{ github.event.inputs.JarName }}
coverage_value: ${{ github.event.inputs.CoverageValue }}
time_limit: ${{ github.event.inputs.TimeLimit }}
jobs:
tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ci_node_total: [8]
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7]
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Download Randoop and Emma
run: |
wget https://github.com/randoop/randoop/releases/download/v3.0.6/randoop-all-3.0.6.jar -P /home/runner/work/ParallelRandomTesting/ParallelRandomTesting
wget https://sourceforge.net/projects/emma/files/emma-release/2.0.5312/emma-2.0.5312.zip -P /home/runner/work/ParallelRandomTesting/ParallelRandomTesting
- name: Unzip Emma
run: unzip /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312.zip -d /home/runner/work/ParallelRandomTesting/ParallelRandomTesting
- name: Random seed
run: |
#!/bin/bash
randseed=$((1 + RANDOM % 99999))
echo "randseed=$randseed" >> $GITHUB_ENV
- name: Run emma and randoop
run: |
#!/bin/bash
timestamp=${{ matrix.ci_node_index }}
mkdir /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp
#Instr emma
java -noverify -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma instr -m fullcopy -d /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp -ip /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/jars/${{ env.name_file }}.jar -out coverage_$timestamp/coverage_$timestamp.em
#Randoop
java -noverify -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/lib/${{ env.name_file }}.jar:/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar:/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/randoop-all-3.0.6.jar randoop.main.Main gentests --classlist=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/lista.txt --timelimit=${{ env.time_limit }} --randomseed=${{ env.randseed }} --no-regression-tests=true --junit-output-dir=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp
cp coverage.ec /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.ec
rm coverage.ec
#Emma report
#java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma report -r html -Dreport.html.out.file=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.html -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.em,/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.ec
#Emma merge .em e .ec
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma merge -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.em,/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.ec -out /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.es
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma report -r html -Dreport.html.out.file=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.html -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$timestamp/coverage_$timestamp.es
- name: Upload Emma reports
uses: actions/upload-artifact@v2
with:
name: Emma reports
path: /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_?
#Job che si attiva al termine di tutte le sessioni di test, effettua i merge dei file di coverage
merge:
needs: tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: Emma reports
- name: Download Emma
run: wget https://sourceforge.net/projects/emma/files/emma-release/2.0.5312/emma-2.0.5312.zip -P /home/runner/work/ParallelRandomTesting/ParallelRandomTesting
- name: Unzip Emma
run: unzip /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312.zip -d /home/runner/work/ParallelRandomTesting/ParallelRandomTesting
- name: Emma merge
run: |
#!/bin/bash
count=0
for file in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_?/*.es
do
count2=$(($count+1))
FILE=coverage_$count2/coverage_$count2.es
if test -f "$FILE"; then
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma merge -in coverage_$count/coverage_$count.es,coverage_$count2/coverage_$count2.es -out coverage_$count2/coverage_$count2.es
count=$(($count+1))
fi
done
#controllo se esiste coveragemerge
if test -f "/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/merge/coverage/coveragemerge.es"; then
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma merge -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$((count))/coverage_$((count)).es,merge/coverage/coveragemerge.es -out merge/coverage/coveragemerge.es
cp merge/coverage/coveragemerge.es /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge.es
else
cp /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coverage_$((count))/coverage_$((count)).es /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge.es
echo "else"
fi
#Emma report finale
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma report -r html -Dreport.html.out.file=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge/coveragemerge.html -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge.es
java -classpath /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/emma-2.0.5312/lib/emma.jar emma report -r xml -Dreport.xml.out.file=/home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge/coveragemerge.xml -in /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge.es
cp /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge.es /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge/coveragemerge.es
- name: Upload Emma reports
uses: actions/upload-artifact@v2
with:
name: Coverage merge
path: /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/coveragemerge/*
#job che valuta i risultati e prepara la successiva esecuzione
badge:
needs: merge
runs-on: ubuntu-latest
env:
MY_VAR: 0
permissions:
contents: write
actions: write
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: Coverage merge
- name: Download xmlstarlet
run: |
sudo apt-get update
sudo apt-get install xmlstarlet
- name: Coverage Line
run: |
MY_VAR=$(xmlstarlet sel -t -v "//coverage[@type='line, %']/@value" coveragemerge.xml | head -1)
echo "MY_VAR=$MY_VAR" >> $GITHUB_ENV
- name: Coverage Line color
run: |
VALUE=$(echo "${{env.MY_VAR}}" | awk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}')
echo $VALUE
COLOR=red
echo "COLOR=$COLOR" >> $GITHUB_ENV
if (($VALUE > 50)); then
COLOR=yellow
echo "COLOR=$COLOR" >> $GITHUB_ENV
if(($VALUE >= 60)); then
COLOR=green
echo "COLOR=$COLOR" >> $GITHUB_ENV
fi
fi
- name: Coverage Block
run: |
MY_VAR2=$(xmlstarlet sel -t -v "//coverage[@type='block, %']/@value" coveragemerge.xml | head -1)
echo "MY_VAR2=$MY_VAR2" >> $GITHUB_ENV
- name: Coverage bLOCK color
run: |
VALUE=$(echo "${{env.MY_VAR2}}" | awk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}')
echo $VALUE
COLOR2=red
echo "COLOR2=$COLOR" >> $GITHUB_ENV
if (($VALUE > 50)); then
COLOR2=yellow
echo "COLOR2=$COLOR2" >> $GITHUB_ENV
if(($VALUE >= 60)); then
COLOR2=green
echo "COLOR2=$COLOR2" >> $GITHUB_ENV
fi
fi
- name: Coverage Method
run: |
MY_VAR3=$(xmlstarlet sel -t -v "//coverage[@type='method, %']/@value" coveragemerge.xml | head -1)
echo "MY_VAR3=$MY_VAR3" >> $GITHUB_ENV
- name: Coverage Method color
run: |
VALUE=$(echo "${{env.MY_VAR3}}" | awk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}')
echo $VALUE
COLOR3=red
echo "COLOR3=$COLOR3" >> $GITHUB_ENV
if (($VALUE > 50)); then
COLOR3=yellow
echo "COLOR3=$COLOR3" >> $GITHUB_ENV
if(($VALUE >= 60)); then
COLOR3=green
echo "COLOR3=$COLOR3" >> $GITHUB_ENV
fi
fi
- name: Coverage Class
run: |
MY_VAR4=$(xmlstarlet sel -t -v "//coverage[@type='class, %']/@value" coveragemerge.xml | head -1)
echo "MY_VAR4=$MY_VAR4" >> $GITHUB_ENV
- name: Coverage Class color
run: |
VALUE=$(echo "${{env.MY_VAR4}}" | awk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}')
echo $VALUE
COLOR4=red
echo "COLOR4=$COLOR4" >> $GITHUB_ENV
if (($VALUE > 50)); then
COLOR4=yellow
echo "COLOR4=$COLOR4" >> $GITHUB_ENV
if(($VALUE >= 60)); then
COLOR4=green
echo "COLOR4=$COLOR4" >> $GITHUB_ENV
fi
fi
- name: Create the Badge 1
uses: schneegans/dynamic-badges-action@v1.0.0
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: 99488398e05ca4ebe8bddedc60dbc49e
filename: ParallelRandomTesting__${{ env.BRANCH }}.json
schemaVersion: 1
label: Coverage Line
message: ${{ env.MY_VAR }}
color: ${{ env.COLOR }}
namedLogo: github
- name: Create the Badge 2
uses: schneegans/dynamic-badges-action@v1.0.0
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: 99488398e05ca4ebe8bddedc60dbc49e
filename: ParallelRandomTesting2__${{ env.BRANCH }}.json
schemaVersion: 2
label: Coverage Block
message: ${{ env.MY_VAR2 }}
color: ${{ env.COLOR2 }}
namedLogo: github
- name: Create the Badge 3
uses: schneegans/dynamic-badges-action@v1.0.0
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: 99488398e05ca4ebe8bddedc60dbc49e
filename: ParallelRandomTesting3__${{ env.BRANCH }}.json
schemaVersion: 3
label: Coverage Method
message: ${{ env.MY_VAR3 }}
color: ${{ env.COLOR3 }}
namedLogo: github
- name: Create the Badge 4
uses: schneegans/dynamic-badges-action@v1.0.0
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: 99488398e05ca4ebe8bddedc60dbc49e
filename: ParallelRandomTesting4__${{ env.BRANCH }}.json
schemaVersion: 4
label: Coverage Class
message: ${{ env.MY_VAR4 }}
color: ${{ env.COLOR4 }}
namedLogo: github
- name: directory
run: |
#!/bin/bash
mkdir -p /home/runner/work/ParallelRandomTesting/ParallelRandomTesting/merge/coverage
cp coveragemerge.xml merge/coverage/coveragemerge.xml
cp coveragemerge.html merge/coverage/coveragemerge.html
cp coveragemerge.es merge/coverage/coveragemerge.es
- name: Percentuale
run: |
#!/bin/bash
value=$(echo "${{env.MY_VAR}}" | awk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}')
echo "value=$value" >> $GITHUB_ENV
if (($value < ${{ env.coverage_value }})); then
bool=1
echo "bool=$bool" >> $GITHUB_ENV
else
bool=0
echo "bool=$bool" >> $GITHUB_ENV
fi
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Changed files
file_pattern: merge/*
- if: ${{ env.bool == 1}}
uses: benc-uk/workflow-dispatch@v1
with:
workflow: main.yml
inputs: '{ "JarName": "${{env.name_file}}", "CoverageValue": "${{env.coverage_value}}", "TimeLimit": "${{env.time_limit}}" }'