Provide your own script, before_script, and after_script
This commit is contained in:
parent
4ca7d46e15
commit
ace52bd476
@ -449,7 +449,6 @@ def format_job_needs(phase_name, strip_compilers, dep_jobs,
|
|||||||
|
|
||||||
|
|
||||||
def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
||||||
custom_spack_repo=None, custom_spack_ref=None,
|
|
||||||
run_optimizer=False, use_dependencies=False):
|
run_optimizer=False, use_dependencies=False):
|
||||||
# FIXME: What's the difference between one that opens with 'spack'
|
# FIXME: What's the difference between one that opens with 'spack'
|
||||||
# and one that opens with 'env'? This will only handle the former.
|
# and one that opens with 'env'? This will only handle the former.
|
||||||
@ -488,22 +487,6 @@ def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
|||||||
os.environ.get('SPACK_IS_PR_PIPELINE', '').lower() == 'true'
|
os.environ.get('SPACK_IS_PR_PIPELINE', '').lower() == 'true'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Make sure we use a custom spack if necessary
|
|
||||||
before_script = None
|
|
||||||
after_script = None
|
|
||||||
if custom_spack_repo:
|
|
||||||
if not custom_spack_ref:
|
|
||||||
custom_spack_ref = 'develop'
|
|
||||||
before_script = [
|
|
||||||
('git clone "{0}"'.format(custom_spack_repo)),
|
|
||||||
'pushd ./spack && git checkout "{0}" && popd'.format(
|
|
||||||
custom_spack_ref),
|
|
||||||
'. "./spack/share/spack/setup-env.sh"',
|
|
||||||
]
|
|
||||||
after_script = [
|
|
||||||
'rm -rf "./spack"'
|
|
||||||
]
|
|
||||||
|
|
||||||
ci_mirrors = yaml_root['mirrors']
|
ci_mirrors = yaml_root['mirrors']
|
||||||
mirror_urls = [url for url in ci_mirrors.values()]
|
mirror_urls = [url for url in ci_mirrors.values()]
|
||||||
|
|
||||||
@ -604,19 +587,27 @@ def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
image_name = build_image
|
image_name = build_image
|
||||||
|
|
||||||
|
job_script = [
|
||||||
|
'spack env activate --without-view .',
|
||||||
|
'spack ci rebuild',
|
||||||
|
]
|
||||||
|
if 'script' in runner_attribs:
|
||||||
|
job_script = [s for s in runner_attribs['script']]
|
||||||
|
|
||||||
|
before_script = None
|
||||||
|
if 'before_script' in runner_attribs:
|
||||||
|
before_script = [
|
||||||
|
s for s in runner_attribs['before_script']
|
||||||
|
]
|
||||||
|
|
||||||
|
after_script = None
|
||||||
|
if 'after_script' in runner_attribs:
|
||||||
|
after_script = [s for s in runner_attribs['after_script']]
|
||||||
|
|
||||||
osname = str(release_spec.architecture)
|
osname = str(release_spec.architecture)
|
||||||
job_name = get_job_name(phase_name, strip_compilers,
|
job_name = get_job_name(phase_name, strip_compilers,
|
||||||
release_spec, osname, build_group)
|
release_spec, osname, build_group)
|
||||||
|
|
||||||
debug_flag = ''
|
|
||||||
if 'enable-debug-messages' in gitlab_ci:
|
|
||||||
debug_flag = '-d '
|
|
||||||
|
|
||||||
job_scripts = [
|
|
||||||
'spack env activate --without-view .',
|
|
||||||
'spack {0}ci rebuild'.format(debug_flag),
|
|
||||||
]
|
|
||||||
|
|
||||||
compiler_action = 'NONE'
|
compiler_action = 'NONE'
|
||||||
if len(phases) > 1:
|
if len(phases) > 1:
|
||||||
compiler_action = 'FIND_ANY'
|
compiler_action = 'FIND_ANY'
|
||||||
@ -717,7 +708,7 @@ def generate_gitlab_ci_yaml(env, print_summary, output_file,
|
|||||||
job_object = {
|
job_object = {
|
||||||
'stage': stage_name,
|
'stage': stage_name,
|
||||||
'variables': variables,
|
'variables': variables,
|
||||||
'script': job_scripts,
|
'script': job_script,
|
||||||
'tags': tags,
|
'tags': tags,
|
||||||
'artifacts': {
|
'artifacts': {
|
||||||
'paths': artifact_paths,
|
'paths': artifact_paths,
|
||||||
|
@ -45,15 +45,6 @@ def setup_parser(subparser):
|
|||||||
'--copy-to', default=None,
|
'--copy-to', default=None,
|
||||||
help="Absolute path of additional location where generated jobs " +
|
help="Absolute path of additional location where generated jobs " +
|
||||||
"yaml file should be copied. Default is not to copy.")
|
"yaml file should be copied. Default is not to copy.")
|
||||||
generate.add_argument(
|
|
||||||
'--spack-repo', default=None,
|
|
||||||
help="Provide a url for this argument if a custom spack repo " +
|
|
||||||
"should be cloned as a step in each generated job.")
|
|
||||||
generate.add_argument(
|
|
||||||
'--spack-ref', default=None,
|
|
||||||
help="Provide a git branch or tag if a custom spack branch " +
|
|
||||||
"should be checked out as a step in each generated job. " +
|
|
||||||
"This argument is ignored if no --spack-repo is provided.")
|
|
||||||
generate.add_argument(
|
generate.add_argument(
|
||||||
'--optimize', action='store_true', default=False,
|
'--optimize', action='store_true', default=False,
|
||||||
help="(Experimental) run the generated document through a series of "
|
help="(Experimental) run the generated document through a series of "
|
||||||
@ -82,8 +73,6 @@ def ci_generate(args):
|
|||||||
|
|
||||||
output_file = args.output_file
|
output_file = args.output_file
|
||||||
copy_yaml_to = args.copy_to
|
copy_yaml_to = args.copy_to
|
||||||
spack_repo = args.spack_repo
|
|
||||||
spack_ref = args.spack_ref
|
|
||||||
run_optimizer = args.optimize
|
run_optimizer = args.optimize
|
||||||
use_dependencies = args.dependencies
|
use_dependencies = args.dependencies
|
||||||
|
|
||||||
@ -97,8 +86,7 @@ def ci_generate(args):
|
|||||||
|
|
||||||
# Generate the jobs
|
# Generate the jobs
|
||||||
spack_ci.generate_gitlab_ci_yaml(
|
spack_ci.generate_gitlab_ci_yaml(
|
||||||
env, True, output_file, spack_repo, spack_ref,
|
env, True, output_file, run_optimizer=run_optimizer,
|
||||||
run_optimizer=run_optimizer,
|
|
||||||
use_dependencies=use_dependencies)
|
use_dependencies=use_dependencies)
|
||||||
|
|
||||||
if copy_yaml_to:
|
if copy_yaml_to:
|
||||||
|
@ -91,6 +91,21 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'before_script': {
|
||||||
|
'type': 'array',
|
||||||
|
'default': [],
|
||||||
|
'items': {'type': 'string'}
|
||||||
|
},
|
||||||
|
'script': {
|
||||||
|
'type': 'array',
|
||||||
|
'default': [],
|
||||||
|
'items': {'type': 'string'}
|
||||||
|
},
|
||||||
|
'after_script': {
|
||||||
|
'type': 'array',
|
||||||
|
'default': [],
|
||||||
|
'items': {'type': 'string'}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -100,10 +115,6 @@
|
|||||||
'type': 'boolean',
|
'type': 'boolean',
|
||||||
'default': False,
|
'default': False,
|
||||||
},
|
},
|
||||||
'enable-debug-messages': {
|
|
||||||
'type': 'boolean',
|
|
||||||
'default': False,
|
|
||||||
},
|
|
||||||
'final-stage-rebuild-index': {
|
'final-stage-rebuild-index': {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
|
@ -351,7 +351,6 @@ def test_ci_generate_with_cdash_token(tmpdir, mutable_mock_env_path,
|
|||||||
some-mirror: https://my.fake.mirror
|
some-mirror: https://my.fake.mirror
|
||||||
gitlab-ci:
|
gitlab-ci:
|
||||||
enable-artifacts-buildcache: True
|
enable-artifacts-buildcache: True
|
||||||
enable-debug-messages: True
|
|
||||||
mappings:
|
mappings:
|
||||||
- match:
|
- match:
|
||||||
- archive-files
|
- archive-files
|
||||||
@ -533,72 +532,6 @@ def test_ci_generate_with_external_pkg(tmpdir, mutable_mock_env_path,
|
|||||||
assert not any('externaltool' in key for key in yaml_contents)
|
assert not any('externaltool' in key for key in yaml_contents)
|
||||||
|
|
||||||
|
|
||||||
def test_ci_generate_debug_with_custom_spack(tmpdir, mutable_mock_env_path,
|
|
||||||
env_deactivate, install_mockery,
|
|
||||||
mock_packages):
|
|
||||||
"""Make sure we generate cloning of spack in job script if needed"""
|
|
||||||
filename = str(tmpdir.join('spack.yaml'))
|
|
||||||
with open(filename, 'w') as f:
|
|
||||||
f.write("""\
|
|
||||||
spack:
|
|
||||||
specs:
|
|
||||||
- archive-files
|
|
||||||
mirrors:
|
|
||||||
some-mirror: https://my.fake.mirror
|
|
||||||
gitlab-ci:
|
|
||||||
enable-artifacts-buildcache: True
|
|
||||||
enable-debug-messages: True
|
|
||||||
mappings:
|
|
||||||
- match:
|
|
||||||
- archive-files
|
|
||||||
runner-attributes:
|
|
||||||
tags:
|
|
||||||
- donotcare
|
|
||||||
image: donotcare
|
|
||||||
""")
|
|
||||||
|
|
||||||
with tmpdir.as_cwd():
|
|
||||||
env_cmd('create', 'test', './spack.yaml')
|
|
||||||
outfile = str(tmpdir.join('.gitlab-ci.yml'))
|
|
||||||
|
|
||||||
with ev.read('test'):
|
|
||||||
spack_repo = 'https://github.com/usera/spack.git'
|
|
||||||
spack_ref = 'custom-branch'
|
|
||||||
expected_clone_str = 'git clone "{0}"'.format(spack_repo)
|
|
||||||
|
|
||||||
ci_cmd('generate', '--output-file', outfile, '--spack-repo',
|
|
||||||
spack_repo, '--spack-ref', spack_ref)
|
|
||||||
|
|
||||||
with open(outfile) as f:
|
|
||||||
contents = f.read()
|
|
||||||
yaml_contents = syaml.load(contents)
|
|
||||||
for ci_key in yaml_contents.keys():
|
|
||||||
if '(specs)' in ci_key:
|
|
||||||
next_job = yaml_contents[ci_key]
|
|
||||||
print(next_job)
|
|
||||||
assert('before_script' in next_job)
|
|
||||||
before_script = next_job['before_script']
|
|
||||||
for step in before_script:
|
|
||||||
if expected_clone_str in step:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
msg = 'job "{0}" did not clone spack repo'.format(
|
|
||||||
ci_key)
|
|
||||||
print(msg)
|
|
||||||
assert(False)
|
|
||||||
|
|
||||||
assert('script' in next_job)
|
|
||||||
script = next_job['script']
|
|
||||||
for step in script:
|
|
||||||
if 'spack -d ci rebuild' in step:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
msg = 'job {0} missing rebuild command'.format(
|
|
||||||
ci_key)
|
|
||||||
print(msg)
|
|
||||||
assert(False)
|
|
||||||
|
|
||||||
|
|
||||||
def test_ci_rebuild_basic(tmpdir, mutable_mock_env_path, env_deactivate,
|
def test_ci_rebuild_basic(tmpdir, mutable_mock_env_path, env_deactivate,
|
||||||
install_mockery, mock_packages,
|
install_mockery, mock_packages,
|
||||||
mock_gnupghome):
|
mock_gnupghome):
|
||||||
|
@ -465,7 +465,7 @@ _spack_ci() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_spack_ci_generate() {
|
_spack_ci_generate() {
|
||||||
SPACK_COMPREPLY="-h --help --output-file --copy-to --spack-repo --spack-ref --optimize --dependencies"
|
SPACK_COMPREPLY="-h --help --output-file --copy-to --optimize --dependencies"
|
||||||
}
|
}
|
||||||
|
|
||||||
_spack_ci_rebuild() {
|
_spack_ci_rebuild() {
|
||||||
|
Loading…
Reference in New Issue
Block a user