import os
import subprocess
from buildtest.defaults import BUILDTEST_ROOT, console
from buildtest.exceptions import BuildTestError
from buildtest.utils.file import create_dir, write_file
[docs]def run(query):
"""This method will execute command for the tutorials examples. If returncode
is non-zero we raise exception otherwise we return output of command.
Args:
query (str): Run a arbitrary shell command.
"""
print(f"Executing Command: {query}")
command = subprocess.run(
[query], shell=True, check=True, universal_newlines=True, capture_output=True
)
# for non-negative returncode
if command.returncode != 0:
raise BuildTestError(f"[red]Returncode: {command.returncode}")
console.print(f"[green]Returncode: {command.returncode}")
return command.stdout
[docs]def write_example(fname, command):
"""Given a shell command, we will write output to file. We will print first
10 lines from upon writing file to ensure file was written properly.
Args:
fname (str): Path to file where output of command will be written
command (str): Command that was executed
"""
out = f"$ {command} \n"
out += run(command)
write_file(fname, out)
console.print(f"Writing output to {fname}")
console.rule(fname)
# read first 10 lines of files written in example
N = 10
with open(fname, "r") as fd:
firstNlines = fd.readlines()[0:N]
firstNlines = "".join(firstNlines)
console.print(firstNlines)
[docs]def build_spack_examples(autogen_dir):
"""This method will build spack examples for the tutorial
Args:
autogen_dir (str): Directory where auto generated documentation examples will be written.
"""
build_dir = os.path.join(autogen_dir, "spack", "build")
inspect_dir = os.path.join(autogen_dir, "spack", "inspect")
create_dir(build_dir)
create_dir(inspect_dir)
SPACK_EXAMPLE_DIR = os.path.join(BUILDTEST_ROOT, "examples", "spack")
commands_to_run = {
f"{build_dir}/install_specs.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/install_specs.yml",
f"{build_dir}/env_install.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/env_install.yml",
f"{build_dir}/env_create_directory.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/env_create_directory.yml",
f"{build_dir}/env_create_manifest.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/env_create_manifest.yml",
f"{build_dir}/remove_environment_example.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/remove_environment_example.yml",
f"{build_dir}/pre_post_cmds.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/pre_post_cmds.yml",
f"{build_dir}/mirror_example.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/mirror_example.yml",
f"{build_dir}/spack_test.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/spack_test.yml",
f"{build_dir}/spack_test_specs.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/spack_test_specs.yml",
f"{build_dir}/spack_sbatch.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/spack_sbatch.yml",
f"{build_dir}/e4s_testsuite_mpich.txt": f"buildtest build -b {SPACK_EXAMPLE_DIR}/e4s_testsuite_mpich.yml",
f"{inspect_dir}/install_specs.txt": "buildtest inspect query -o -t install_specs_example clone_spack_and_install_zlib",
f"{inspect_dir}/env_install.txt": "buildtest inspect query -t install_in_spack_env",
f"{inspect_dir}/env_create_directory.txt": "buildtest inspect query -o -t spack_env_directory",
f"{inspect_dir}/env_create_manifest.txt": "buildtest inspect query -o -t spack_env_create_from_manifest",
f"{inspect_dir}/remove_environment_example.txt": "buildtest inspect query -t remove_environment_automatically remove_environment_explicit",
f"{inspect_dir}/pre_post_cmds.txt": "buildtest inspect query -o -t run_pre_post_commands",
f"{inspect_dir}/mirror_example.txt": "buildtest inspect query -o -t add_mirror add_mirror_in_spack_env",
f"{inspect_dir}/spack_test.txt": "buildtest inspect query -o -t spack_test_m4",
f"{inspect_dir}/spack_test_specs.txt": "buildtest inspect query -o -t spack_test_results_specs_format",
f"{inspect_dir}/spack_sbatch.txt": "buildtest inspect query -t spack_sbatch_example",
f"{inspect_dir}/e4s_testsuite_mpich.txt": "buildtest inspect query -o -e -t mpich_e4s_testsuite",
}
for fname, command in commands_to_run.items():
write_example(fname, command)
[docs]def build_compiler_examples(autogen_dir):
"""This method will build examples for compiler examples for the tutorial
Args:
autogen_dir (str): Directory where auto generated documentation examples will be written.
"""
compiler_dir = os.path.join(autogen_dir, "compilers")
build_dir = os.path.join(compiler_dir, "build")
inspect_dir = os.path.join(compiler_dir, "inspect")
create_dir(compiler_dir)
create_dir(build_dir)
create_dir(inspect_dir)
COMPILER_EXAMPLE_DIR = os.path.join(BUILDTEST_ROOT, "examples", "compilers")
commands_to_run = {
f"{build_dir}/gnu_hello_fortran.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/gnu_hello_fortran.yml",
f"{inspect_dir}/gnu_hello_fortran.txt": "buildtest inspect query -t hello_f",
f"{compiler_dir}/compilers_list.txt": "buildtest config compilers -y",
f"{build_dir}/vecadd.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/vecadd.yml",
f"{build_dir}/gnu_hello_c.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/gnu_hello_c.yml",
f"{inspect_dir}/gnu_hello_c.txt": "buildtest inspect query -t hello_c/",
f"{build_dir}/compiler_exclude.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/compiler_exclude.yml",
f"{build_dir}/openmp_hello.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/openmp_hello.yml",
f"{inspect_dir}/openmp_hello.txt": "buildtest inspect query -t openmp_hello_c_example",
f"{build_dir}/envvar_override.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/envvar_override.yml",
f"{inspect_dir}/envvar_override.txt": "buildtest inspect query -t override_environmentvars/",
f"{build_dir}/compiler_status_regex.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/compiler_status_regex.yml",
f"{inspect_dir}/compiler_status_regex.txt": "buildtest inspect query -o override_status_regex/",
f"{build_dir}/custom_run.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/custom_run.yml",
f"{inspect_dir}/custom_run.txt": "buildtest inspect query -b -t custom_run_by_compilers/",
f"{build_dir}/pre_post_build_run.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/pre_post_build_run.yml",
f"{inspect_dir}/pre_post_build_run.txt": "buildtest inspect query -t pre_post_build_run",
f"{build_dir}/stream_example.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/stream_example.yml",
f"{inspect_dir}/stream_example.txt": "buildtest inspect query -t stream_openmp_c/",
f"{build_dir}/stream_example_metrics.txt": f"buildtest build -b {COMPILER_EXAMPLE_DIR}/stream_example_metrics.yml",
f"{inspect_dir}/stream_openmp_metrics.txt": "buildtest inspect query -o stream_openmp_metrics/",
}
for fname, command in commands_to_run.items():
write_example(fname, command)