Refactor the LAVA job generation

Create a LAVA job per test
Use flasher support
Simplify templates
Include metadata
Add LAVA job generation for each parallel build
Implement the LAVA wait and parsing step for simple gerrit verification
Create FVP jobs as well
Change filenames for MPS2 fvp jobs
Fix FVP templates and add NOBL2 jobs
User docker-prefix and license-variable from Jenkins job environment

Change-Id: I4dca28a353bc908a570f578b539aeb9c4528f6fa
Signed-off-by: Dean Birch <dean.birch@arm.com>
diff --git a/lava_helper/jinja2_templates/base.jinja2 b/lava_helper/jinja2_templates/base.jinja2
new file mode 100644
index 0000000..22c9d6b
--- /dev/null
+++ b/lava_helper/jinja2_templates/base.jinja2
@@ -0,0 +1,42 @@
+{#------------------------------------------------------------------------------
+# Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-----------------------------------------------------------------------------#}
+{%- block metadata %}
+metadata:
+  build_no: {{ build_no }}
+  compiler: {{ compiler }}
+  build_type: {{ build_type }}
+  boot_type: {{ boot_type }}
+  name: {{ name }}
+  platform: {{ platform }}
+  build_name: {{ build_name }}
+  recovery_image_url: {{ recovery_image_url }}
+  firmware_url: {{ firmware_url }}
+  bootloader_url: {{ bootloader_url }}
+  build_job_url: {{ build_job_url }}
+{%- endblock %}
+
+{%- block base %}
+device_type: {{ device_type }}
+job_name: {{ job_name }}
+
+timeouts:
+  job:
+    minutes: {{ job_timeout }}
+  action:
+    minutes: {{ action_timeout }}
+  actions:
+    power-off:
+      minutes: {{ poweroff_timeout }}
+  connections:
+    lava-test-monitor:
+      minutes: {{ monitor_timeout }}
+
+priority: medium
+visibility: public
+{% endblock %}
+{% block actions %}
+{% endblock %}
diff --git a/lava_helper/jinja2_templates/template_tfm_mps2_fvp.jinja2 b/lava_helper/jinja2_templates/template_tfm_mps2_fvp.jinja2
index aec5bd2..c90a0e1 100644
--- a/lava_helper/jinja2_templates/template_tfm_mps2_fvp.jinja2
+++ b/lava_helper/jinja2_templates/template_tfm_mps2_fvp.jinja2
@@ -26,22 +26,23 @@
         url: {{ bootloader_url }}
 
 - boot:
+    failure_retry: 3
     namespace: docker
     method: fvp
     docker:
-      name: 'replace_docker_prefix/lava-fvp-mps2'
+      name: {{ docker_prefix }}/lava-fvp-mps2
     prompts:
     - 'root@lava '
     image: /opt/model/FVP_MPS2_AEMv8M
     timeout:
       minutes: 5
     console_string: 'telnetterminal0: Listening for serial connection on port (?P<PORT>\d+)'
-    license_variable: 'replace_licence_variable'
+    license_variable: '{{ license_variable }}'
     arguments:
-    -  "--application cpu0={S}"
-    -  "--data cpu0={NS}@0x00100000"
-    -  "--simlimit 1200"
+    -  "--application cpu0={NS}"
+    -  "--data cpu0={S}@{{ data_bin_offset }}"
     -  "--parameter fvp_mps2.platform_type=2"
+    -  "--parameter cpu0.baseline=0"
     -  "--parameter cpu0.INITVTOR_S=0x10000000"
     -  "--parameter cpu0.semihosting-enable=0"
     -  "--parameter fvp_mps2.DISABLE_GATING=0"
@@ -51,27 +52,21 @@
     -  "--parameter fvp_mps2.telnetterminal0.quiet=0"
     -  "--parameter fvp_mps2.telnetterminal1.quiet=0"
     -  "--parameter fvp_mps2.telnetterminal2.quiet=0"
-    -  "--parameter fvp_mps2.UART0.unbuffered_output=1"
     -  "--parameter fvp_mps2.UART0.shutdown_on_eot=1"
-    -  "--parameter fvp_mps2.UART1.unbuffered_output=1"
-    -  "--parameter fvp_mps2.UART1.shutdown_on_eot=1"
-    -  "--parameter fvp_mps2.UART2.unbuffered_output=1"
-    -  "--parameter fvp_mps2.UART2.shutdown_on_eot=1"
     -  "--parameter fvp_mps2.mps2_visualisation.disable-visualisation=1"
-    -  "--parameter cpu0.baseline=1"
     prompts:
-    - 'Jumping to non-secure code'
+    - '(.*)'
 
 - test:
     namespace: target
     monitors:
     {%- for monitor in test.monitors %}
-    - name: "{{monitor.name}}_{{ platform }}_{{ compiler }}_{{ name }}_{{ build_type }}_{{ boot_type }}"
+    - name: "{{monitor.name}}"
       start: "{{monitor.start}}"
       end: "{{monitor.end}}"
       pattern: "{{monitor.pattern}}"
       fixupdict:
          '{{monitor.fixup.pass}}': pass
          '{{monitor.fixup.fail}}': fail
-    {% endfor %}
+    {%- endfor %}
 {% endblock %}
diff --git a/lava_helper/jinja2_templates/template_tfm_mps2_sse_200.jinja2 b/lava_helper/jinja2_templates/template_tfm_mps2_sse_200.jinja2
index 6aefc55..870c95f 100644
--- a/lava_helper/jinja2_templates/template_tfm_mps2_sse_200.jinja2
+++ b/lava_helper/jinja2_templates/template_tfm_mps2_sse_200.jinja2
@@ -4,63 +4,44 @@
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-----------------------------------------------------------------------------#}
-device_type: {{ device_type }}
-job_name: {{ job_name }}
-
-timeouts:
-  job:
-    minutes: {{ job_timeout }}
-  action:
-    minutes: {{ action_timeout }}
-  actions:
-    power-off:
-      minutes: {{ poweroff_timeout }}
-  connections:
-    lava-test-monitor:
-      minutes: {{ monitor_timeout }}
-
-priority: medium
-visibility: public
-
+{% extends 'jinja2_templates/base.jinja2' %}
+{% block metadata %}
+{{ super() }}
+{% endblock %}
+{% block base %}
+{{ super() }}
+{% endblock %}
+{% block actions %}
 actions:
-{%- for platform, recovery in platforms.items()|sort(reverse=false) %}
-  {% for compiler in compilers|sort(reverse=true) %}
-    {%- for build_type in build_types|sort(reverse=false) %}
-      {%- for boot_type in boot_types|sort(reverse=false) %}
-        {%- for name, test in tests.items()|sort(reverse=false) %}
-    - deploy:
-        to: flasher
-        images:
-          recovery_image:
-            url: {{ recovery_store_url }}/{{ build_no }}/artifact/{{ recovery }}
-            compression: gz
-          test_binary_1:
-            url: {{artifact_store_url}}/{{ build_no }}/artifact/build-ci-all/{{ platform }}_{{ compiler }}_Config{{ name }}_{{ build_type }}_{{ boot_type }}/install/outputs/{{ platform }}/{{ test.binaries.firmware }}
-          test_binary_2:
-            url: {{artifact_store_url}}/{{ build_no }}/artifact/build-ci-all/{{ platform }}_{{ compiler }}_Config{{ name }}_{{ build_type }}_{{ boot_type }}/install/outputs/{{ platform }}/{{ test.binaries.bootloader }}
-        namespace: target
+- deploy:
+    to: flasher
+    images:
+      recovery_image:
+        url: {{ recovery_image_url }}
+        compression: gz
+    namespace: target
+    test_binary_1:
+      url: {{ firmware_url}}
+    test_binary_2:
+      url: {{ bootloader_url }}
+    namespace: target
 
-    - boot:
-        method: minimal
-        timeout:
-          minutes: 10
-        namespace: target
+- boot:
+    method: minimal
+    timeout:
+      minutes: 10
+    namespace: target
 
-    - test:
-        namespace: target
-        monitors:
-        {%- for monitor in test.monitors %}
-        - name: "{{monitor.name}}_{{ platform }}_{{ compiler }}_{{ name }}_{{ build_type }}_{{ boot_type }}"
-          start: "{{monitor.start}}"
-          end: "{{monitor.end}}"
-          pattern: "{{monitor.pattern}}"
-          fixupdict:
-             '{{monitor.fixup.pass}}': pass
-             '{{monitor.fixup.fail}}': fail
-
-        {%- endfor %}
-        {%- endfor %}
-      {%- endfor %}
-    {%- endfor %}
-  {%- endfor %}
-{%- endfor %}
+- test:
+    namespace: target
+    monitors:
+    {%- for monitor in test.monitors %}
+    - name: "{{monitor.name}}"
+      start: "{{monitor.start}}"
+      end: "{{monitor.end}}"
+      pattern: "{{monitor.pattern}}"
+      fixupdict:
+         '{{monitor.fixup.pass}}': pass
+         '{{monitor.fixup.fail}}': fail
+    {% endfor %}
+{% endblock %}
diff --git a/lava_helper/jinja2_templates/test_summary.jinja2 b/lava_helper/jinja2_templates/test_summary.jinja2
new file mode 100644
index 0000000..5c0ebb4
--- /dev/null
+++ b/lava_helper/jinja2_templates/test_summary.jinja2
@@ -0,0 +1,49 @@
+<html>
+<head>
+  <title>TF Test Summary</title>
+  <meta charset="UTF-8">
+</head>
+<body>
+
+{% for job in jobs %}
+{% for job_id, data in job.items() %}
+<h3>
+{% if data[0]['health'] == 'Complete' %}
+<font color="green">
+{% else %}
+<font color="red">
+{% endif %}
+Job: {{ job_id }}<br/>
+Description: {{ data[0]['description'] }}<br/>
+Device Type: {{ data[0]['device_type']}}  Health: {{ data[0]['health'] }}  <a href="{{ data[0]['metadata']['build_job_url'] }}">Build Job</a></br>
+<a href="{{ data[0]['artifacts_dir'] }}/definition.yaml">LAVA Definition</a>  <a href="{{ data[0]['lava_url'] }}">LAVA Job</a>  <a href="{{ data[0]['artifacts_dir'] }}/target_log.txt">Target Log</a></br>
+</font>
+</h3>
+{% if data[1] %}
+<h3>
+<table>
+<tr>
+<th>Name</th>
+<th>Suite</th>
+<th>Result</th>
+</tr>
+{% for result in data[1] %}
+<tr>
+<td>{{ result['name'] }} </td>
+<td>{{ result['suite'] }} </td>
+{% if result['result'] == 'pass' %}
+<td style="background-color:green">
+{% else %}
+<td style="background-color:red">
+{% endif %}
+{{ result['result'] }}</td>
+</tr>
+{% endfor %}
+</table>
+</h3>
+{% endif %}
+{% endfor %}
+{% endfor %}
+
+</body>
+</html>
diff --git a/lava_helper/jinja2_templates/test_summary_csv.jinja2 b/lava_helper/jinja2_templates/test_summary_csv.jinja2
new file mode 100644
index 0000000..b7aa4ae
--- /dev/null
+++ b/lava_helper/jinja2_templates/test_summary_csv.jinja2
@@ -0,0 +1,12 @@
+LAVA_JOB_ID,LAVA_HEALTH,LAVA_DEVICE_TYPE,BUILD_FULL_NAME,BUILD_NUMBER,COMPILER,BUILD_TYPE,BOOT_TYPE,PLATFORM,RESULT_SUITE,RESULT_NAME,RESULT
+{%- for job in jobs %}
+{%- for job_id, data in job.items() -%}
+{%- if data[1] %}
+{%- for result in data[1] %}
+{{ job_id }},{{ data[0]['health']}},{{ data[0]['device_type']}},{{ data[0]['metadata']['build_name'] }},{{ data[0]['metadata']['build_no'] }},{{ data[0]['metadata']['compiler'] }},{{ data[0]['metadata']['build_type'] }},{{ data[0]['metadata']['boot_type'] }},{{ data[0]['metadata']['platform'] }},{{ result['suite'] }},{{ result['name'] }},{{ result['result'] }}
+{%- endfor %}
+{%- else %}
+{{ job_id }},{{ data[0]['health']}},{{ data[0]['device_type']}},{{ data[0]['metadata']['build_name'] }},{{ data[0]['metadata']['build_no'] }},{{ data[0]['metadata']['compiler'] }},{{ data[0]['metadata']['build_type'] }},{{ data[0]['metadata']['boot_type'] }},{{ data[0]['metadata']['platform'] }},,,
+{%- endif %}
+{%- endfor %}
+{%- endfor %}