diff --git a/lib/spack/spack/ci/common.py b/lib/spack/spack/ci/common.py index 07bb7c5fd93..b014e1b9572 100644 --- a/lib/spack/spack/ci/common.py +++ b/lib/spack/spack/ci/common.py @@ -217,7 +217,7 @@ def args(self): "--cdash-upload-url", win_quote(self.upload_url), "--cdash-build", - win_quote(self.build_name), + win_quote(self.build_name()), "--cdash-site", win_quote(self.site), "--cdash-buildstamp", @@ -351,7 +351,7 @@ def report_skipped(self, spec: spack.spec.Spec, report_dir: str, reason: Optiona configuration = CDashConfiguration( upload_url=self.upload_url, packages=[spec.name], - build=self.build_name, + build=self.build_name(), site=self.site, buildstamp=self.build_stamp, track=None, diff --git a/lib/spack/spack/reporters/cdash.py b/lib/spack/spack/reporters/cdash.py index 0405b3224fa..209876175b8 100644 --- a/lib/spack/spack/reporters/cdash.py +++ b/lib/spack/spack/reporters/cdash.py @@ -10,6 +10,7 @@ import re import socket import time +import warnings import xml.sax.saxutils from typing import Dict, Optional from urllib.parse import urlencode @@ -123,11 +124,15 @@ def __init__(self, configuration: CDashConfiguration): self.multiple_packages = False def report_build_name(self, pkg_name): - return ( + buildname = ( "{0} - {1}".format(self.base_buildname, pkg_name) if self.multiple_packages else self.base_buildname ) + if len(buildname) > 190: + warnings.warn("Build name exceeds CDash 190 character maximum and will be truncated.") + buildname = buildname[:190] + return buildname def build_report_for_package(self, report_dir, package, duration): if "stdout" not in package: diff --git a/lib/spack/spack/test/reporters.py b/lib/spack/spack/test/reporters.py index 55ab019a8a4..41271559a4e 100644 --- a/lib/spack/spack/test/reporters.py +++ b/lib/spack/spack/test/reporters.py @@ -179,3 +179,22 @@ def upload(*args, **kwargs): err = capfd.readouterr()[1] assert "Skipping report for" in err assert "No generated output" in err + + +def test_cdash_reporter_truncates_build_name_if_too_long(): + build_name = "a" * 190 + extra_long_build_name = build_name + "a" + configuration = CDashConfiguration( + upload_url="https://fake-upload", + packages="fake-package", + build=extra_long_build_name, + site="fake-site", + buildstamp=None, + track="fake-track", + ) + + reporter = CDash(configuration=configuration) + new_build_name = reporter.report_build_name("fake-package") + + assert new_build_name != extra_long_build_name + assert new_build_name == build_name