Various CI fixes

* Output CSV on build stage
* Check more failure states in pipeline
* Allow configs.py to use multiple groups
* Add build log as artifact
* Add links to particular build configs
* Host CMSIS_5 pack file internally
* Adding mbedcrypto url as a param
* Move the LAVA job generation into a new jenkins job
* Make job_ids strings for adding to job description

Change-Id: I801a1a5d15a7f55e25477ad371e8ec59eb14fd7f
Signed-off-by: Dean Birch <dean.birch@arm.com>
diff --git a/configs.py b/configs.py
index 3b5bc7d..32283d9 100755
--- a/configs.py
+++ b/configs.py
@@ -41,13 +41,13 @@
 def list_configs(group):
     """Lists available configurations"""
     build_manager = get_build_manager(group)
-    build_manager.print_config()
+    return build_manager.get_config()
 
 
-def print_config_environment(config, group=None):
+def print_config_environment(config, group=None, silence_stderr=False):
     """Prints particular configuration environment variables"""
     build_manager = get_build_manager(group)
-    build_manager.print_config_environment(config)
+    build_manager.print_config_environment(config, silence_stderr=silence_stderr)
 
 
 if __name__ == "__main__":
@@ -63,14 +63,29 @@
     PARSER.add_argument(
         "-g",
         "--group",
-        default=None,
+        default=[],
+        action="append",
         help="Only list configurations under a certain group. ",
         choices=list(_builtin_configs.keys()),
     )
     ARGS = PARSER.parse_args()
 
-    # By default print available configs
-    if not ARGS.config:
-        list_configs(ARGS.group)
-    else:
-        print_config_environment(ARGS.config, group=ARGS.group)
+    all_configs = set()
+    for group in ARGS.group:
+        # By default print available configs
+        if not ARGS.config:
+            all_configs.update(list_configs(group))
+        else:
+            try:
+                print_config_environment(ARGS.config, group=group, silence_stderr=True)
+                break
+            except SystemExit:
+                if group == ARGS.group[-1]:
+                    print(
+                        "Could not find configuration {} in groups {}".format(
+                            ARGS.config, ARGS.group
+                        )
+                    )
+
+    for config in all_configs:
+        print(config)