Allow spack install to take either cdash stamp or track (#11106)

When providing a track, the cdash reporter will format the stamp
itself, as it has always done, and register the build during the
package installation process.  When providing a stamp, it should
first be formatted as cdash expects, and then cdash will be sure
to report results to same build id which was registered manually
elsewhere.
This commit is contained in:
Scott Wittenburg 2019-04-06 16:30:35 -06:00 committed by Todd Gamblin
parent 90c7c74334
commit 3616617804
3 changed files with 44 additions and 4 deletions

View File

@ -153,11 +153,20 @@ def setup_parser(subparser):
help="""The site name that will be reported to CDash.
Defaults to current system hostname."""
)
subparser.add_argument(
cdash_subgroup = subparser.add_mutually_exclusive_group()
cdash_subgroup.add_argument(
'--cdash-track',
default='Experimental',
help="""Results will be reported to this group on CDash.
Defaults to Experimental."""
)
cdash_subgroup.add_argument(
'--cdash-buildstamp',
default=None,
help="""Instead of letting the CDash reporter prepare the
buildstamp which, when combined with build name, site and project,
uniquely identifies the build, provide this argument to identify
the build yourself. Format: %%Y%%m%%d-%%H%%M-[cdash-track]"""
)
arguments.add_common_arguments(subparser, ['yes_to_all'])

View File

@ -72,9 +72,12 @@ def __init__(self, args):
self.site = args.cdash_site or socket.gethostname()
self.osname = platform.system()
self.endtime = int(time.time())
buildstamp_format = "%Y%m%d-%H%M-{0}".format(args.cdash_track)
self.buildstamp = time.strftime(buildstamp_format,
time.localtime(self.endtime))
if args.cdash_buildstamp:
self.buildstamp = args.cdash_buildstamp
else:
buildstamp_format = "%Y%m%d-%H%M-{0}".format(args.cdash_track)
self.buildstamp = time.strftime(buildstamp_format,
time.localtime(self.endtime))
self.buildId = None
self.revision = ''
git = which('git')

View File

@ -8,6 +8,7 @@
import filecmp
import re
from six.moves import builtins
import time
import pytest
@ -505,6 +506,33 @@ def test_cdash_upload_extra_params(tmpdir, mock_fetch, install_mockery, capfd):
assert '-my_custom_track' in content
@pytest.mark.disable_clean_stage_check
def test_cdash_buildstamp_param(tmpdir, mock_fetch, install_mockery, capfd):
# capfd interferes with Spack's capturing
with capfd.disabled():
with tmpdir.as_cwd():
cdash_track = 'some_mocked_track'
buildstamp_format = "%Y%m%d-%H%M-{0}".format(cdash_track)
buildstamp = time.strftime(buildstamp_format,
time.localtime(int(time.time())))
with pytest.raises((HTTPError, URLError)):
install(
'--log-file=cdash_reports',
'--cdash-build=my_custom_build',
'--cdash-site=my_custom_site',
'--cdash-buildstamp={0}'.format(buildstamp),
'--cdash-upload-url=http://localhost/fakeurl/submit.php?project=Spack',
'a')
report_dir = tmpdir.join('cdash_reports')
assert report_dir in tmpdir.listdir()
report_file = report_dir.join('Build.xml')
assert report_file in report_dir.listdir()
content = report_file.open().read()
assert 'Site BuildName="my_custom_build"' in content
assert 'Name="my_custom_site"' in content
assert buildstamp in content
@pytest.mark.disable_clean_stage_check
def test_cdash_install_from_spec_yaml(tmpdir, mock_fetch, install_mockery,
capfd, mock_packages, mock_archive,