Don't use CDash upload URL as report filename (#35338)

fixes #35337
This commit is contained in:
Massimiliano Culpo
2023-02-05 12:58:45 +01:00
committed by GitHub
parent 1ad290e5a2
commit 017a15988c
4 changed files with 55 additions and 31 deletions

View File

@@ -6,6 +6,7 @@
import argparse import argparse
import os.path import os.path
import textwrap
from llnl.util.lang import stable_partition from llnl.util.lang import stable_partition
@@ -415,6 +416,40 @@ def add_cdash_args(subparser, add_help):
cdash_subgroup.add_argument("--cdash-buildstamp", default=None, help=cdash_help["buildstamp"]) cdash_subgroup.add_argument("--cdash-buildstamp", default=None, help=cdash_help["buildstamp"])
def print_cdash_help():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=textwrap.dedent(
"""\
environment variables:
SPACK_CDASH_AUTH_TOKEN
authentication token to present to CDash
"""
),
)
add_cdash_args(parser, True)
parser.print_help()
def sanitize_reporter_options(namespace: argparse.Namespace):
"""Sanitize options that affect generation and configuration of reports, like
CDash or JUnit.
Args:
namespace: options parsed from cli
"""
has_any_cdash_option = (
namespace.cdash_upload_url or namespace.cdash_build or namespace.cdash_site
)
if namespace.log_format == "junit" and has_any_cdash_option:
raise argparse.ArgumentTypeError("cannot pass any cdash option when --log-format=junit")
# If any CDash option is passed, assume --log-format=cdash is implied
if namespace.log_format is None and has_any_cdash_option:
namespace.log_format = "cdash"
namespace.reporter = _cdash_reporter(namespace)
class ConfigSetAction(argparse.Action): class ConfigSetAction(argparse.Action):
"""Generic action for setting spack config options from CLI. """Generic action for setting spack config options from CLI.

View File

@@ -7,7 +7,6 @@
import os import os
import shutil import shutil
import sys import sys
import textwrap
from typing import List from typing import List
import llnl.util.filesystem as fs import llnl.util.filesystem as fs
@@ -260,7 +259,7 @@ def default_log_file(spec):
def report_filename(args: argparse.Namespace, specs: List[spack.spec.Spec]) -> str: def report_filename(args: argparse.Namespace, specs: List[spack.spec.Spec]) -> str:
"""Return the filename to be used for reporting to JUnit or CDash format.""" """Return the filename to be used for reporting to JUnit or CDash format."""
result = args.log_file or args.cdash_upload_url or default_log_file(specs[0]) result = args.log_file or default_log_file(specs[0])
return result return result
@@ -348,21 +347,6 @@ def install_specs_outside_environment(specs, install_kwargs):
builder.install() builder.install()
def print_cdash_help():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=textwrap.dedent(
"""\
environment variables:
SPACK_CDASH_AUTH_TOKEN
authentication token to present to CDash
"""
),
)
arguments.add_cdash_args(parser, True)
parser.print_help()
def install_all_specs_from_active_environment( def install_all_specs_from_active_environment(
install_kwargs, only_concrete, cli_test_arg, reporter_factory install_kwargs, only_concrete, cli_test_arg, reporter_factory
): ):
@@ -496,7 +480,7 @@ def install(parser, args):
tty.set_verbose(args.verbose or args.install_verbose) tty.set_verbose(args.verbose or args.install_verbose)
if args.help_cdash: if args.help_cdash:
print_cdash_help() spack.cmd.common.arguments.print_cdash_help()
return return
if args.no_checksum: if args.no_checksum:
@@ -505,6 +489,8 @@ def install(parser, args):
if args.deprecated: if args.deprecated:
spack.config.set("config:deprecated", True, scope="command_line") spack.config.set("config:deprecated", True, scope="command_line")
spack.cmd.common.arguments.sanitize_reporter_options(args)
def reporter_factory(specs): def reporter_factory(specs):
if args.log_format is None: if args.log_format is None:
return None return None

View File

@@ -11,7 +11,6 @@
import re import re
import shutil import shutil
import sys import sys
import textwrap
from llnl.util import lang, tty from llnl.util import lang, tty
from llnl.util.tty import colify from llnl.util.tty import colify
@@ -171,20 +170,11 @@ def test_run(args):
# cdash help option # cdash help option
if args.help_cdash: if args.help_cdash:
parser = argparse.ArgumentParser( arguments.print_cdash_help()
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=textwrap.dedent(
"""\
environment variables:
SPACK_CDASH_AUTH_TOKEN
authentication token to present to CDash
"""
),
)
arguments.add_cdash_args(parser, True)
parser.print_help()
return return
arguments.sanitize_reporter_options(args)
# set config option for fail-fast # set config option for fail-fast
if args.fail_fast: if args.fail_fast:
spack.config.set("config:fail_fast", True, scope="command_line") spack.config.set("config:fail_fast", True, scope="command_line")

View File

@@ -1187,3 +1187,16 @@ def test_padded_install_runtests_root(install_mockery_mutable_config, mock_fetch
spack.config.set("config:install_tree:padded_length", 255) spack.config.set("config:install_tree:padded_length", 255)
output = install("--test=root", "--no-cache", "test-build-callbacks", fail_on_error=False) output = install("--test=root", "--no-cache", "test-build-callbacks", fail_on_error=False)
assert output.count("method not implemented") == 1 assert output.count("method not implemented") == 1
@pytest.mark.regression("35337")
def test_report_filename_for_cdash(install_mockery_mutable_config, mock_fetch):
"""Test that the temporary file used to write the XML for CDash is not the upload URL"""
parser = argparse.ArgumentParser()
spack.cmd.install.setup_parser(parser)
args = parser.parse_args(
["--cdash-upload-url", "https://blahblah/submit.php?project=debugging", "a"]
)
_, specs = spack.cmd.install.specs_from_cli(args, {})
filename = spack.cmd.install.report_filename(args, specs)
assert filename != "https://blahblah/submit.php?project=debugging"