Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
99302b8bf9185c52e6b50f2f20cc27aac4fc8ab1
[simgrid.git] / tools / jenkins / project_description.sh
1 #!/usr/bin/env bash
2
3 get_boost(){
4     grep -m 1 "Boost version:" ./consoleText | sed  "s/.*-- Boost version: \([a-zA-Z0-9\.]*\)/\1/g"
5 }
6
7 get_compiler(){
8     grep -m 1 "The C compiler identification" ./consoleText | sed  "s/.*-- The C compiler identification is \([a-zA-Z0-9\.]*\)/\1/g"
9 }
10
11 get_java(){
12     grep -m 1 "Found Java:" ./consoleText | sed "s/.*-- Found Java.*found suitable version \"\([a-zA-Z0-9\.]*\)\",.*/\1/g"
13 }
14
15 get_cmake(){
16     grep -m 1 "Cmake version" ./consoleText| sed "s/.*-- Cmake version \([a-zA-Z0-9\.]*\)/\1/g"
17 }
18
19 get_ns3(){
20   found=$(grep -c "ns-3 found" ./consoleText)
21   if [ $found != 0 ]; then
22     echo "✔"
23   else
24     echo ""
25   fi
26 }
27
28 get_python(){
29   found=$(grep -c "Compile Python bindings .....: ON" ./consoleText)
30   if [ $found != 0 ]; then
31     echo "✔"
32   else
33     echo ""
34   fi
35 }
36
37 if [ -f consoleText ]; then
38   rm consoleText
39 fi
40
41
42 if [ -z $BUILD_URL ]; then
43   BUILD_URL="https://ci.inria.fr/simgrid/job/SimGrid/lastBuild"
44 fi
45
46 #get the list of nodes on jenkins
47 wget --quiet ${BUILD_URL}/consoleText >/dev/null 2>&1
48 nodes=($(sed -n 's/^Triggering SimGrid [^ ]* Debug,//p' ./consoleText| sort))
49 rm consoleText
50
51
52 echo "<br>Description of the nodes - Automatically updated by project_description.sh script - Don't edit here<br><br>
53 <script>
54 function compareVersion(v1, v2) {
55     if (typeof v1 !== 'string') return false;
56     if (typeof v2 !== 'string') return false;
57     v1 = v1.split('.');
58     v2 = v2.split('.');
59     const k = Math.min(v1.length, v2.length);
60     for (let i = 0; i < k; ++ i) {
61         v1[i] = parseInt(v1[i], 10);
62         v2[i] = parseInt(v2[i], 10);
63         if (v1[i] > v2[i]) return 1;
64         if (v1[i] < v2[i]) return -1;        
65     }
66     return v1.length == v2.length ? 0: (v1.length < v2.length ? -1 : 1);
67 }</script>
68 <script>
69 function sortTable(n, type) {
70   var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
71   table = document.getElementById('configuration-matrix');
72   switching = true;
73   //Set the sorting direction to ascending:
74   dir = 'asc'; 
75   /*Make a loop that will continue until
76   no switching has been done:*/
77   while (switching) {
78     //start by saying: no switching is done:
79     switching = false;
80     rows = table.rows;
81     /*Loop through all table rows (except the
82     first, which contains table headers):*/
83     for (i = 1; i < (rows.length - 1); i++) {
84       //start by saying there should be no switching:
85       shouldSwitch = false;
86       /*Get the two elements you want to compare,
87       one from current row and one from the next:*/
88       x = rows[i].getElementsByTagName('TD')[n];
89       y = rows[i + 1].getElementsByTagName('TD')[n];
90       /*check if the two rows should switch place,
91       based on the direction, asc or desc:*/
92       if (dir == 'asc') {
93         if(type == 'version'){
94           shouldSwitch = (compareVersion(x.innerHTML.toLowerCase(), y.innerHTML.toLowerCase()) > 0);
95         }else{
96           shouldSwitch = (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase());
97         }
98       } else if (dir == 'desc') {
99         if(type == 'version'){
100           shouldSwitch = (compareVersion(x.innerHTML.toLowerCase(), y.innerHTML.toLowerCase()) < 0);
101         }else{
102           shouldSwitch = (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase());
103         }
104       }
105       if (shouldSwitch)
106         break;
107     }
108     if (shouldSwitch) {
109       /*If a switch has been marked, make the switch
110       and mark that a switch has been done:*/
111       rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
112       switching = true;
113       //Each time a switch is done, increase this count by 1:
114       switchcount ++;      
115     } else {
116       /*If no switching has been done AND the direction is 'asc',
117       set the direction to 'desc' and run the while loop again.*/
118       if (switchcount == 0 && dir == 'asc') {
119         dir = 'desc';
120         switching = true;
121       }
122     }
123   }
124 }</script>
125 <table id=configuration-matrix> 
126 <tr class=matrix-row>  <td class=matrix-header style=min-width:75px onclick='sortTable(0);'>Name of the Builder</td><td class=matrix-header style=min-width:75px onclick='sortTable(1);'>OS</td><td class=matrix-header style=min-width:75px onclick='sortTable(2);'>Compiler</td><td class=matrix-header style=min-width:75px onclick=\"sortTable(3, 'version');\">Boost</td><td class=matrix-header style=min-width:75px onclick=\"sortTable(4,'version');\">Java</td><td class=matrix-header style=min-width:75px onclick=\"sortTable(5,'version');\">Cmake</td><td class=matrix-header style=min-width:50px onclick='sortTable(6);'>ns-3</td><td class=matrix-header style=min-width:50px onclick='sortTable(7);'>Python</td></tr>"
127
128 for node in "${nodes[@]}"
129 do
130     wget --quiet ${BUILD_URL}/build_mode=Debug,node=${node}/consoleText >/dev/null 2>&1
131     if [ ! -f consoleText ]; then
132       echo "file not existing for node ${node}"
133       exit 1
134     fi
135     boost=$(get_boost)
136     compiler=$(get_compiler)
137     java=$(get_java)
138     cmake=$(get_cmake)
139     ns3=$(get_ns3)
140     py=$(get_python)
141     os=$(grep -m 1 "OS Version" ./consoleText| sed "s/OS Version : \(.*\)/\1/g")
142     echo "<tr> <td class=\"matrix-leftcolumn\">$node</td><td class=\"matrix-cell\" style=\"text-align:left\">$os</td><td class=\"matrix-cell\" style=\"text-align:left\">$compiler</td><td class=\"matrix-cell\" style=\"text-align:left\">$boost</td><td class=\"matrix-cell\" style=\"text-align:left\">$java</td><td class=\"matrix-cell\" style=\"text-align:left\">$cmake</td><td class=\"matrix-cell\" style=\"text-align:center\">$ns3</td><td class=\"matrix-cell\" style=\"text-align:center\">$py</td></tr>"
143     rm consoleText
144 done
145
146
147 #Travis - get ID of the last jobs with the API
148 BUILD_NUM=$(curl -s 'https://api.travis-ci.org/repos/simgrid/simgrid/builds?limit=1' | grep -o '^\[{"id":[0-9]*,' | grep -o '[0-9]' | tr -d '\n')
149 BUILDS=($(curl -s https://api.travis-ci.org/repos/simgrid/simgrid/builds/${BUILD_NUM} | grep -o '{"id":[0-9]*,' | grep -o '[0-9]*'| tail -n 3))
150
151 for id in "${!BUILDS[@]}"
152 do
153     wget --quiet https://api.travis-ci.org/v3/job/${BUILDS[$id]}/log.txt -O ./consoleText >/dev/null 2>&1
154     sed -i -e "s/\r//g" ./consoleText
155     if [ $id == 0 ]; then
156       node="travis-linux (<a href=\"https://travis-ci.org/simgrid/simgrid/jobs/${BUILDS[$id]}\">log</a>)"
157       os="Ubuntu  <a href=\"https://docs.travis-ci.com/user/reference/xenial/\">16.04 xenial</a>"
158     elif [ $id == 1 ]; then
159       node="travis-mac (<a href=\"https://travis-ci.org/simgrid/simgrid/jobs/${BUILDS[$id]}\">log</a>)"
160       os="Mac OS X <a href=\"https://docs.travis-ci.com/user/reference/osx/\">Mojave (10.14)</a> "
161     elif [ $id == 2 ]; then
162       node="travis-windows (<a href=\"https://travis-ci.org/simgrid/simgrid/jobs/${BUILDS[$id]}\">log</a>)"
163       os="Windows <a href=\"https://docs.travis-ci.com/user/reference/windows/\">10 v17134</a>"
164     fi
165     boost=$(get_boost)
166     compiler=$(get_compiler)
167     java=$(get_java)
168     cmake=$(get_cmake)
169     ns3=$(get_ns3)
170     py=$(get_python)
171     echo "<tr> <td class=\"matrix-leftcolumn\">$node</td><td class=\"matrix-cell\" style=\"text-align:left\">$os</td><td class=\"matrix-cell\" style=\"text-align:left\">$compiler</td><td class=\"matrix-cell\" style=\"text-align:left\">$boost</td><td class=\"matrix-cell\" style=\"text-align:left\">$java</td><td class=\"matrix-cell\" style=\"text-align:left\">$cmake</td><td class=\"matrix-cell\" style=\"text-align:center\">$ns3</td><td class=\"matrix-cell\" style=\"text-align:center\">$py</td></tr>"
172     rm consoleText
173 done
174
175 echo "</table>"