ci: do not prune specs when stacks are touched (#29825)
This commit is contained in:
parent
43577beb9c
commit
ff33978b0d
1 changed files with 33 additions and 9 deletions
|
@ -526,6 +526,28 @@ def get_change_revisions():
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
|
|
||||||
|
def get_stack_changed(env_path, rev1='HEAD^', rev2='HEAD'):
|
||||||
|
"""Given an environment manifest path and two revisions to compare, return
|
||||||
|
whether or not the stack was changed. Returns True if the environment
|
||||||
|
manifest changed between the provided revisions (or additionally if the
|
||||||
|
`.gitlab-ci.yml` file itself changed). Returns False otherwise."""
|
||||||
|
git = exe.which("git")
|
||||||
|
if git:
|
||||||
|
with fs.working_dir(spack.paths.prefix):
|
||||||
|
git_log = git("diff", "--name-only", rev1, rev2,
|
||||||
|
output=str, error=os.devnull,
|
||||||
|
fail_on_error=False).strip()
|
||||||
|
lines = [] if not git_log else re.split(r'\s+', git_log)
|
||||||
|
|
||||||
|
for path in lines:
|
||||||
|
if '.gitlab-ci.yml' in path or path in env_path:
|
||||||
|
tty.debug('env represented by {0} changed'.format(
|
||||||
|
env_path))
|
||||||
|
tty.debug('touched file: {0}'.format(path))
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def compute_affected_packages(rev1='HEAD^', rev2='HEAD'):
|
def compute_affected_packages(rev1='HEAD^', rev2='HEAD'):
|
||||||
"""Determine which packages were added, removed or changed
|
"""Determine which packages were added, removed or changed
|
||||||
between rev1 and rev2, and return the names as a set"""
|
between rev1 and rev2, and return the names as a set"""
|
||||||
|
@ -607,6 +629,8 @@ def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
||||||
rev1, rev2 = get_change_revisions()
|
rev1, rev2 = get_change_revisions()
|
||||||
tty.debug('Got following revisions: rev1={0}, rev2={1}'.format(rev1, rev2))
|
tty.debug('Got following revisions: rev1={0}, rev2={1}'.format(rev1, rev2))
|
||||||
if rev1 and rev2:
|
if rev1 and rev2:
|
||||||
|
# If the stack file itself did not change, proceed with pruning
|
||||||
|
if not get_stack_changed(env.manifest_path, rev1, rev2):
|
||||||
prune_untouched_packages = True
|
prune_untouched_packages = True
|
||||||
affected_pkgs = compute_affected_packages(rev1, rev2)
|
affected_pkgs = compute_affected_packages(rev1, rev2)
|
||||||
tty.debug('affected pkgs:')
|
tty.debug('affected pkgs:')
|
||||||
|
|
Loading…
Reference in a new issue