summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/spack/gitlab/cloud_pipelines/configs/ci.yaml6
-rw-r--r--share/spack/gitlab/cloud_pipelines/scripts/common/aggregate_package_logs.spack.py38
2 files changed, 43 insertions, 1 deletions
diff --git a/share/spack/gitlab/cloud_pipelines/configs/ci.yaml b/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
index 1b3e723d5a..da0abb65d5 100644
--- a/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
+++ b/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
@@ -20,7 +20,11 @@ ci:
- k=$CI_GPG_KEY_ROOT/intermediate_ci_signing_key.gpg; [[ -r $k ]] && spack gpg trust $k
- k=$CI_GPG_KEY_ROOT/spack_public_key.gpg; [[ -r $k ]] && spack gpg trust $k
script::
- - spack --color=always --backtrace ci rebuild --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
+ - - spack --color=always --backtrace ci rebuild --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
+ - - spack python ${CI_PROJECT_DIR}/share/spack/gitlab/cloud_pipelines/scripts/common/aggregate_package_logs.spack.py
+ --prefix /home/software/spack:${CI_PROJECT_DIR}
+ --log install_times.json
+ ${SPACK_ARTIFACTS_ROOT}/user_data/install_times.json
after_script:
- - cat /proc/loadavg || true
variables:
diff --git a/share/spack/gitlab/cloud_pipelines/scripts/common/aggregate_package_logs.spack.py b/share/spack/gitlab/cloud_pipelines/scripts/common/aggregate_package_logs.spack.py
new file mode 100644
index 0000000000..9adab64e57
--- /dev/null
+++ b/share/spack/gitlab/cloud_pipelines/scripts/common/aggregate_package_logs.spack.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env spack-python
+"""
+This script is meant to be run using:
+ `spack python aggregate_logs.spack.py`
+"""
+
+import os
+
+
+def find_logs(prefix, filename):
+ for root, _, files in os.walk(prefix):
+ if filename in files:
+ yield os.path.join(root, filename)
+
+
+if __name__ == "__main__":
+ import json
+ from argparse import ArgumentParser
+
+ parser = ArgumentParser("aggregate_logs")
+ parser.add_argument("output_file")
+ parser.add_argument("--log", default="install_times.json")
+ parser.add_argument("--prefix", required=True)
+
+ args = parser.parse_args()
+
+ prefixes = [p for p in args.prefix.split(":") if os.path.exists(p)]
+
+ # Aggregate the install timers into a single json
+ data = []
+ for prefix in prefixes:
+ time_logs = find_logs(prefix, args.log)
+ for log in time_logs:
+ with open(log) as fd:
+ data.append(json.load(fd))
+
+ with open(args.output_file, "w") as fd:
+ json.dump(data, fd)