def process_pipeline_args(self, pipeline_args: JobVariant): main_repo = pipeline_args.main_repository() prepare_step = pipeline_args.step('prepare') publish_step = pipeline_args.step('publish') image_name = main_repo.branch() + '-image' tag_name = main_repo.branch() + '-tag' # configure prepare step's outputs (consumed by publish step) prepare_step.add_output('image_path', image_name) prepare_step.add_output('tag_path', tag_name) # configure publish step's inputs (produced by prepare step) publish_step.add_input('image_path', image_name) publish_step.add_input('tag_path', tag_name) input_step_names = set() for image_descriptor in self.trait.dockerimages(): # todo: image-specific prepare steps input_step_names.update(image_descriptor.input_steps()) for input_step_name in input_step_names: input_step = pipeline_args.step(input_step_name) input_name = input_step.output_dir() prepare_step.add_input(input_name, input_name) # prepare-step depdends on every other step, except publish and release # TODO: do not hard-code knowledge about 'release' step for step in pipeline_args.steps(): if step.name in ['publish', 'release']: continue prepare_step._add_dependency(step)
def process_pipeline_args(self, pipeline_args: JobVariant): # our steps depends on dependency descriptor step component_descriptor_step = pipeline_args.step( concourse.model.traits.component_descriptor.DEFAULT_COMPONENT_DESCRIPTOR_STEP_NAME ) if self.trait.protecode(): self.image_scan_step._add_dependency(component_descriptor_step) if self.trait.clam_av(): self.malware_scan_step._add_dependency(component_descriptor_step) for trait_name in self.trait.trait_depends(): if not pipeline_args.has_trait(trait_name): raise ModelValidationError(f'dependency towards absent trait: {trait_name}') depended_on_trait = pipeline_args.trait(trait_name) # XXX refactor Trait/TraitTransformer transformer = depended_on_trait.transformer() # XXX step-injection may have (unintended) side-effects :-/ depended_on_step_names = {step.name for step in transformer.inject_steps()} for step in pipeline_args.steps(): if not step.name in depended_on_step_names: continue if self.trait.protecode(): self.image_scan_step._add_dependency(step) # prevent cyclic dependencies (from auto-injected depends) if self.image_scan_step.name in step.depends(): step._remove_dependency(self.image_scan_step) if self.trait.clam_av(): self.malware_scan_step._add_dependency(step) # prevent cyclic dependencies (from auto-injected depends) if self.malware_scan_step.name in step.depends(): step._remove_dependency(self.malware_scan_step)
def process_pipeline_args(self, pipeline_args: JobVariant): # our step depends on dependency descriptor step component_descriptor_step = pipeline_args.step('component_descriptor') self.image_scan_step._add_dependency(component_descriptor_step) for trait_name in self.trait.trait_depends(): if not pipeline_args.has_trait(trait_name): raise ModelValidationError( f'dependency towards absent trait: {trait_name}') depended_on_trait = pipeline_args.trait(trait_name) # XXX refactor Trait/TraitTransformer transformer = depended_on_trait.transformer() # XXX step-injection may have (unintended) side-effects :-/ depended_on_step_names = { step.name for step in transformer.inject_steps() } for step in pipeline_args.steps(): if not step.name in depended_on_step_names: continue self.image_scan_step._add_dependency(step) # prevent cyclic dependencies (from auto-injected depends) if self.image_scan_step.name in step.depends(): step._remove_dependency(self.image_scan_step)
def process_pipeline_args(self, pipeline_args: JobVariant): # our step depends on dependendency descriptor step component_descriptor_step = pipeline_args.step('component_descriptor') self.update_component_deps_step._add_dependency(component_descriptor_step) upstream_component_name = self.trait.upstream_component_name() if upstream_component_name: self.update_component_deps_step.variables()['UPSTREAM_COMPONENT_NAME'] = '"{cn}"'.format( cn=upstream_component_name, )
def process_pipeline_args(self, pipeline_args: JobVariant): main_repo = pipeline_args.main_repository() prepare_step = pipeline_args.step('prepare') if self.trait.oci_builder() is OciBuilder.CONCOURSE_IMAGE_RESOURCE: publish_step = pipeline_args.step('publish') image_name = main_repo.branch() + '-image' tag_name = main_repo.branch() + '-tag' # configure prepare step's outputs (consumed by publish step) prepare_step.add_output(variable_name=IMAGE_ENV_VAR_NAME, name=image_name) prepare_step.add_output(variable_name=TAG_ENV_VAR_NAME, name=tag_name) if self.trait.oci_builder() is OciBuilder.CONCOURSE_IMAGE_RESOURCE: # configure publish step's inputs (produced by prepare step) publish_step.add_input(variable_name=IMAGE_ENV_VAR_NAME, name=image_name) publish_step.add_input(variable_name=TAG_ENV_VAR_NAME, name=tag_name) for build_step in self._build_steps: build_step.add_input(variable_name=IMAGE_ENV_VAR_NAME, name=image_name) input_step_names = set() for image_descriptor in self.trait.dockerimages(): # todo: image-specific prepare steps input_step_names.update(image_descriptor.input_steps()) for input_step_name in input_step_names: input_step = pipeline_args.step(input_step_name) input_name = input_step.output_dir() prepare_step.add_input(input_name, input_name) # prepare-step depdends on every other step, except publish and release # TODO: do not hard-code knowledge about 'release' step for step in pipeline_args.steps(): if step.name in ['publish', 'release', 'build_oci_image']: continue if step.name.startswith('build_oci_image'): continue prepare_step._add_dependency(step)
def process_pipeline_args(self, pipeline_args: JobVariant): # All steps depend on meta step and receive an input from it for step in pipeline_args.steps(): if step == self.meta_step: continue step._add_dependency(self.meta_step) step.add_input(name=DIR_NAME, variable_name=ENV_VAR_NAME) if pipeline_args.has_trait('version'): # All steps depend on version. Remove ourself to avoid circular dependency version_step = pipeline_args.step('version') self.meta_step._remove_dependency(version_step) self.meta_step.remove_input('version_path')
def process_pipeline_args(self, pipeline_args: JobVariant): repo_name = pipeline_args.main_repository().logical_name() # convert main-repo to PR pr_repo = pipeline_args.pr_repository(repo_name) pr_repo._trigger = True # patch-in the updated repository pipeline_args._repos_dict[repo_name] = pr_repo # patch the configured steps so that they do not report their status back to PRs for step_name in self.trait.disable_status_report(): if not pipeline_args.has_step(step_name): raise model.base.ModelValidationError( f"Reporting to pull requests was disabled for step '{step_name}', but no step " f"'{step_name}' was found in job '{pipeline_args.variant_name}'" ) step = pipeline_args.step(step_name) step._notification_policy = StepNotificationPolicy.NO_NOTIFICATION
def process_pipeline_args(self, pipeline_args: JobVariant): cd_trait = pipeline_args.trait('component_descriptor') cd_step = pipeline_args.step(cd_trait.step_name()) self.release_step._add_dependency(cd_step)
def process_pipeline_args(self, pipeline_args: JobVariant): # our step depends on dependency descriptor step component_descriptor_step = pipeline_args.step('component_descriptor') self.source_scan_step._add_dependency(component_descriptor_step)
def process_pipeline_args(self, pipeline_args: JobVariant): # our step depends on dependency descriptor step component_descriptor_step = pipeline_args.step( concourse.model.traits.component_descriptor. DEFAULT_COMPONENT_DESCRIPTOR_STEP_NAME) self.source_scan_step._add_dependency(component_descriptor_step)