ci: restore ability to reproduce gitlab job failures (#33953)

This commit is contained in:
Scott Wittenburg 2022-11-21 09:39:03 -07:00 committed by GitHub
parent 8ea366b33f
commit 6411cbd803
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1777,9 +1777,9 @@ def reproduce_ci_job(url, work_dir):
download_and_extract_artifacts(url, work_dir) download_and_extract_artifacts(url, work_dir)
lock_file = fs.find(work_dir, "spack.lock")[0] lock_file = fs.find(work_dir, "spack.lock")[0]
concrete_env_dir = os.path.dirname(lock_file) repro_lock_dir = os.path.dirname(lock_file)
tty.debug("Concrete environment directory: {0}".format(concrete_env_dir)) tty.debug("Found lock file in: {0}".format(repro_lock_dir))
yaml_files = fs.find(work_dir, ["*.yaml", "*.yml"]) yaml_files = fs.find(work_dir, ["*.yaml", "*.yml"])
@ -1802,6 +1802,20 @@ def reproduce_ci_job(url, work_dir):
if pipeline_yaml: if pipeline_yaml:
tty.debug("\n{0} is likely your pipeline file".format(yf)) tty.debug("\n{0} is likely your pipeline file".format(yf))
relative_concrete_env_dir = pipeline_yaml["variables"]["SPACK_CONCRETE_ENV_DIR"]
tty.debug("Relative environment path used by cloud job: {0}".format(relative_concrete_env_dir))
# Using the relative concrete environment path found in the generated
# pipeline variable above, copy the spack environment files so they'll
# be found in the same location as when the job ran in the cloud.
concrete_env_dir = os.path.join(work_dir, relative_concrete_env_dir)
os.makedirs(concrete_env_dir, exist_ok=True)
copy_lock_path = os.path.join(concrete_env_dir, "spack.lock")
orig_yaml_path = os.path.join(repro_lock_dir, "spack.yaml")
copy_yaml_path = os.path.join(concrete_env_dir, "spack.yaml")
shutil.copyfile(lock_file, copy_lock_path)
shutil.copyfile(orig_yaml_path, copy_yaml_path)
# Find the install script in the unzipped artifacts and make it executable # Find the install script in the unzipped artifacts and make it executable
install_script = fs.find(work_dir, "install.sh")[0] install_script = fs.find(work_dir, "install.sh")[0]
st = os.stat(install_script) st = os.stat(install_script)
@ -1857,6 +1871,7 @@ def reproduce_ci_job(url, work_dir):
if repro_details: if repro_details:
mount_as_dir = repro_details["ci_project_dir"] mount_as_dir = repro_details["ci_project_dir"]
mounted_repro_dir = os.path.join(mount_as_dir, rel_repro_dir) mounted_repro_dir = os.path.join(mount_as_dir, rel_repro_dir)
mounted_env_dir = os.path.join(mount_as_dir, relative_concrete_env_dir)
# We will also try to clone spack from your local checkout and # We will also try to clone spack from your local checkout and
# reproduce the state present during the CI build, and put that into # reproduce the state present during the CI build, and put that into
@ -1940,7 +1955,7 @@ def reproduce_ci_job(url, work_dir):
inst_list.append(" $ source {0}/share/spack/setup-env.sh\n".format(spack_root)) inst_list.append(" $ source {0}/share/spack/setup-env.sh\n".format(spack_root))
inst_list.append( inst_list.append(
" $ spack env activate --without-view {0}\n\n".format( " $ spack env activate --without-view {0}\n\n".format(
mounted_repro_dir if job_image else repro_dir mounted_env_dir if job_image else repro_dir
) )
) )
inst_list.append(" - Run the install script\n\n") inst_list.append(" - Run the install script\n\n")