def base_image_build_task(env_vars, volumes, volume_mounts): params = [] clone_repo_step, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step build_base_image_step, params_step = steps.build_base_image_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step params = unify_params(params) return tkn.model.Task( metadata=tkn.model.Metadata(name='build-baseimage'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_repo_step, build_base_image_step, ], volumes=volumes, ), )
def test_task( env_vars, volume_mounts, volumes=[], ): params = [] clone_step, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step pre_check_tests_step, params_step = steps.pre_check_tests_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step test_step, params_step = steps.test_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step upload_test_results_step, params_step = steps.upload_test_results_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step params = unify_params(params) task_volumes = [v for v in volumes] task_volumes.extend( [{ 'name': 'dev', 'hostPath': {'path': '/dev', 'type': 'Directory'}, }, { 'name': 'build', 'emptyDir': {'medium': 'Memory'}, }] ) return tkn.model.Task( metadata=tkn.model.Metadata(name='integration-test-task'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, pre_check_tests_step, test_step, upload_test_results_step, ], volumes=task_volumes, ), )
def build_task(use_secrets_server: bool, ): arch = NamedParam(name='architecture', default='amd64') cicd_cfg_name = NamedParam(name='cicd_cfg_name', default='default') committish = NamedParam(name='committish', default='master') giturl = NamedParam(name='giturl', default='ssh://[email protected]/gardenlinux/gardenlinux') glepoch = NamedParam(name='gardenlinux_epoch') mods = NamedParam(name='modifiers') outfile = NamedParam(name='outfile', default='/workspace/gardenlinux.out') repodir = NamedParam(name='repodir', default='/workspace/gardenlinux_git') snapshot_ts = NamedParam(name='snapshot_timestamp') suite = NamedParam(name='suite', default='bullseye') params = [ arch, cicd_cfg_name, committish, giturl, glepoch, mods, outfile, repodir, snapshot_ts, suite, ] if use_secrets_server: env_vars = [{ 'name': 'SECRETS_SERVER_CACHE', 'value': '/secrets/config.json', }] volume_mounts = [{ 'name': 'secrets', 'mountPath': '/secrets', }] else: env_vars = [] volume_mounts = [] clone_step = steps.clone_step( committish=committish, env_vars=env_vars, git_url=giturl, repo_dir=repodir, volume_mounts=volume_mounts, ) task = tkn.model.Task( metadata=tkn.model.Metadata(name='build-gardenlinux-task'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, ], ), ) return task
def base_image_build_task(env_vars, volumes, volume_mounts): repodir = _repodir oci_path = NamedParam( name='oci_path', description='path in OCI-registry where to store output', default='eu.gcr.io/gardener-project/test/gardenlinux-test', ) version_label = NamedParam( name='version_label', default='latest', description='version label uses as tag for upload', ) committish = NamedParam( name='committish', default='master', description='commit to build', ) giturl = NamedParam( name='giturl', default='https://github.com/gardenlinux/gardenlinux.git', description='Gardenlinux Git repo', ) clone_repo_step = steps.clone_step( committish=committish, repo_dir=repodir, git_url=giturl, env_vars=env_vars, volume_mounts=volume_mounts, ) build_base_image_step = steps.build_base_image_step( repo_dir=repodir, oci_path=oci_path, version_label=version_label, env_vars=env_vars, volume_mounts=volume_mounts, ) return tkn.model.Task( metadata=tkn.model.Metadata(name='build-baseimage'), spec=tkn.model.TaskSpec( params=[ committish, giturl, oci_path, repodir, version_label, ], steps=[ clone_repo_step, build_base_image_step, ], volumes=volumes, ), )
def main(): parser = argparse.ArgumentParser() parser.add_argument('--outfile', default='tasks.yaml') parsed = parser.parse_args() build_task_yaml_path = os.path.join(paths.own_dir, 'build-task.yaml.template') with open(build_task_yaml_path) as f: raw_build_task = yaml.safe_load(f) promote_task = tasks.promote_task( committish=NamedParam(name='committish'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), snapshot_timestamp=NamedParam(name='snapshot_timestamp'), cicd_cfg_name=NamedParam(name='cicd_cfg_name'), version=NamedParam(name='version'), promote_target=NamedParam(name='promote_target'), promote_mode=NamedParam(name='promote_mode'), flavourset=NamedParam(name='flavourset'), ) raw_promote_task = dataclasses.asdict(promote_task) clone_step = steps.clone_step( committish=tkn.model.NamedParam(name='committish'), repo_dir=tkn.model.NamedParam(name='repodir'), git_url=tkn.model.NamedParam(name='giturl'), ) clone_step_dict = dataclasses.asdict(clone_step) upload_step = steps.upload_results_step( cicd_cfg_name=NamedParam(name='cicd_cfg_name'), committish=NamedParam(name='committish'), architecture=NamedParam(name='architecture'), platform=NamedParam(name='platform'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), fnameprefix=NamedParam(name='fnameprefix'), modifiers=NamedParam(name='modifiers'), version=NamedParam(name='version'), outfile=NamedParam(name='outfile'), repo_dir=tkn.model.NamedParam(name='repodir'), ) upload_step_dict = dataclasses.asdict(upload_step) # hack: patch-in clone-step (avoid redundancy with other tasks) raw_build_task['spec']['steps'][0] = clone_step_dict raw_build_task['spec']['steps'][-1] = upload_step_dict with open(parsed.outfile, 'w') as f: yaml.safe_dump_all((raw_build_task, raw_promote_task), f) print(f'dumped tasks to {parsed.outfile}')
def promote_task( committish: NamedParam, gardenlinux_epoch: NamedParam, snapshot_timestamp: NamedParam, cicd_cfg_name: NamedParam, version: NamedParam, flavourset: NamedParam, promote_target: NamedParam, promote_mode: NamedParam, repodir: NamedParam = _repodir, giturl: NamedParam = _giturl, name='promote-gardenlinux-task', namespace='gardenlinux-tkn', ): clone_step = steps.clone_step( committish=committish, repo_dir=repodir, git_url=giturl, ) promote_step = steps.promote_step( cicd_cfg_name=cicd_cfg_name, flavourset=flavourset, promote_target=promote_target, promote_mode=promote_mode, gardenlinux_epoch=gardenlinux_epoch, committish=committish, version=version, repo_dir=repodir, ) params = [ giturl, committish, gardenlinux_epoch, snapshot_timestamp, cicd_cfg_name, version, flavourset, promote_target, promote_mode, repodir, ] task = tkn.model.Task( metadata=tkn.model.Metadata(name=name, namespace=namespace), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, promote_step, ], ), ) return task
def promote_task( name='promote-gardenlinux-task', env_vars=[], volumes=[], volume_mounts=[], ): params = [] clone_step, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step promote_step, params_step = steps.promote_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step release_step, params_step = steps.release_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step build_cd_step, params_step = steps.create_component_descriptor_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step params = unify_params(params) task = tkn.model.Task( metadata=tkn.model.Metadata(name=name), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, build_cd_step, promote_step, release_step, ], volumes=volumes, ), ) return task
def notify_task( env_vars, volumes, volume_mounts, ): params = [] clone_step, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step log_step, params_step = steps.get_logs_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step attach_log_step, params_step = steps.attach_log_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step notify_step, params_step = steps.notify_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step params = unify_params(params) task = tkn.model.Task( metadata=tkn.model.Metadata(name='notify-task'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, attach_log_step, log_step, notify_step, ], volumes=volumes, ), ) return task
def build_task(namespace: str = 'gardenlinux-tkn', ): suite = NamedParam(name='suite', default='bullseye') arch = NamedParam(name='architecture', default='amd64') mods = NamedParam(name='modifiers') fnamep = NamedParam(name='fnameprefix') giturl = NamedParam(name='giturl', default='ssh://[email protected]/gardenlinux/gardenlinux') committish = NamedParam(name='committish', default='master') glepoch = NamedParam(name='gardenlinux_epoch') snapshot_ts = NamedParam(name='snapshot_timestamp') repodir = NamedParam(name='repodir', default='/workspace/gardenlinux_git') cicd_cfg_name = NamedParam(name='cicd_cfg_name', default='default') outfile = NamedParam(name='outfile', default='/workspace/gardenlinux.out') params = [ suite, arch, mods, fnamep, giturl, committish, glepoch, snapshot_ts, repodir, cicd_cfg_name, outfile, ] clone_step = steps.clone_step( committish=committish, repo_dir=repodir, git_url=giturl, ) task = tkn.model.Task( metadata=tkn.model.Metadata(name='build-gardenlinux-task', namespace=namespace), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, ], ), ) return task
def test_task( env_vars, volume_mounts, volumes=[], ): params = _get_build_and_test_parameters() clone_step = steps.clone_step( committish=params.committish, git_url=params.giturl, repo_dir=_repodir, env_vars=env_vars, volume_mounts=volume_mounts, ) publishing_actions = NamedParam(name='publishing_actions') pytest_cfg = NamedParam( name='pytest_cfg', description='configuration name of testsuite in file test_cfg.yaml', default='default', ) pre_check_tests_step = steps.pre_check_tests_step( architecture=params.arch, committish=params.committish, cicd_cfg_name=params.cicd_cfg_name, gardenlinux_epoch=params.glepoch, modifiers=params.modifiers, platform=params.platform, publishing_actions=publishing_actions, repo_dir=_repodir, version=params.version, env_vars=env_vars, volume_mounts=volume_mounts, ) test_step = steps.test_step( architecture=params.arch, committish=params.committish, cicd_cfg_name=params.cicd_cfg_name, gardenlinux_epoch=params.glepoch, modifiers=params.modifiers, platform=params.platform, publishing_actions=publishing_actions, repo_dir=_repodir, suite=params.suite, snapshot_timestamp=params.snapshot_ts, version=params.version, pytest_cfg=pytest_cfg, env_vars=env_vars, volume_mounts=volume_mounts, ) upload_test_results_step = steps.upload_test_results_step( architecture=params.arch, cicd_cfg_name=params.cicd_cfg_name, committish=params.committish, gardenlinux_epoch=params.glepoch, modifiers=params.modifiers, platform=params.platform, repo_dir=_repodir, version=params.version, env_vars=env_vars, volume_mounts=volume_mounts, ) task_volumes = [v for v in volumes] task_volumes.extend( [{ 'name': 'dev', 'hostPath': {'path': '/dev', 'type': 'Directory'}, }, { 'name': 'build', 'emptyDir': {'medium': 'Memory'}, }] ) return tkn.model.Task( metadata=tkn.model.Metadata(name='integration-test-task'), spec=tkn.model.TaskSpec( params=[ params.arch, params.build_image, params.cicd_cfg_name, params.committish, params.flavourset, params.giturl, params.glepoch, params.modifiers, params.outfile, params.platform, params.promote_target, params.publishing_actions, _repodir, params.snapshot_ts, params.suite, params.version, pytest_cfg, ], steps=[ clone_step, pre_check_tests_step, test_step, upload_test_results_step, ], volumes=task_volumes, ), )
def build_task( env_vars, volume_mounts, volumes=[], ): params = _get_build_and_test_parameters() clone_step = steps.clone_step( committish=params.committish, git_url=params.giturl, repo_dir=_repodir, env_vars=env_vars, volume_mounts=volume_mounts, ) pre_build_step = steps.pre_build_step( architecture=params.arch, cicd_cfg_name=params.cicd_cfg_name, committish=params.committish, gardenlinux_epoch=params.glepoch, modifiers=params.modifiers, platform=params.platform, publishing_actions=params.publishing_actions, repo_dir=_repodir, version=params.version, env_vars=env_vars, volume_mounts=volume_mounts, ) build_image_step = steps.build_image_step( arch=params.arch, suite=params.suite, gardenlinux_epoch=params.glepoch, timestamp=params.snapshot_ts, platform=params.platform, modifiers=params.modifiers, committish=params.committish, gardenversion=params.version, env_vars=env_vars, volume_mounts=volume_mounts, repo_dir=_repodir, ) upload_step = steps.upload_results_step( architecture=params.arch, cicd_cfg_name=params.cicd_cfg_name, committish=params.committish, gardenlinux_epoch=params.glepoch, modifiers=params.modifiers, outfile=params.outfile, platform=params.platform, publishing_actions=params.publishing_actions, repo_dir=_repodir, version=params.version, env_vars=env_vars, volume_mounts=volume_mounts, ) task_volumes = [v for v in volumes] task_volumes.extend( [{ 'name': 'dev', 'hostPath': {'path': '/dev', 'type': 'Directory'}, }, { 'name': 'build', 'emptyDir': {'medium': 'Memory'}, }] ) return tkn.model.Task( metadata=tkn.model.Metadata(name='build-gardenlinux-task'), spec=tkn.model.TaskSpec( params=[ params.arch, params.build_image, params.cicd_cfg_name, params.committish, params.flavourset, params.giturl, params.glepoch, params.modifiers, params.outfile, params.platform, params.promote_target, params.publishing_actions, _repodir, params.snapshot_ts, params.suite, params.version, ], steps=[ clone_step, pre_build_step, build_image_step, upload_step, ], volumes=task_volumes, ), )
def promote_task( branch: NamedParam, cicd_cfg_name: NamedParam, committish: NamedParam, flavourset: NamedParam, gardenlinux_epoch: NamedParam, publishing_actions: NamedParam, snapshot_timestamp: NamedParam, version: NamedParam, ctx_repository_config_name: NamedParam, snapshot_ctx_repository_config_name: NamedParam, env_vars=[], giturl: NamedParam = _giturl, name='promote-gardenlinux-task', repodir: NamedParam = _repodir, volumes=[], volume_mounts=[], ): clone_step = steps.clone_step( committish=committish, env_vars=env_vars, git_url=giturl, repo_dir=repodir, volume_mounts=volume_mounts, ) promote_step = steps.promote_step( cicd_cfg_name=cicd_cfg_name, committish=committish, env_vars=env_vars, flavourset=flavourset, gardenlinux_epoch=gardenlinux_epoch, publishing_actions=publishing_actions, repo_dir=repodir, version=version, volume_mounts=volume_mounts, ) release_step = steps.release_step( committish=committish, env_vars=env_vars, gardenlinux_epoch=gardenlinux_epoch, giturl=giturl, publishing_actions=publishing_actions, repo_dir=repodir, volume_mounts=volume_mounts, ) build_cd_step = steps.create_component_descriptor_step( branch=branch, repo_dir=_repodir, committish=committish, version=version, gardenlinux_epoch=gardenlinux_epoch, ctx_repository_config_name=ctx_repository_config_name, snapshot_ctx_repository_config_name=snapshot_ctx_repository_config_name, env_vars=env_vars, publishing_actions=publishing_actions, volume_mounts=volume_mounts, cicd_cfg_name=cicd_cfg_name, ) params = [ branch, cicd_cfg_name, ctx_repository_config_name, snapshot_ctx_repository_config_name, committish, flavourset, gardenlinux_epoch, giturl, publishing_actions, repodir, snapshot_timestamp, version, ] task = tkn.model.Task( metadata=tkn.model.Metadata(name=name), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, build_cd_step, promote_step, release_step, ], volumes=volumes, ), ) return task
def _package_task( task_name: str, package_build_step: tkn.model.TaskStep, is_kernel_task: bool, env_vars, volumes, volume_mounts, ): cfssl_dir = NamedParam( name='cfssl_dir', default='/workspace/cfssl', description='git wokring dir to clone and build cfssl', ) cfssl_fastpath = NamedParam( name='cfssl_fastpath', default='false', description='bypass cfssl build and copy binaries from github (set to true/false)', ) cicd_cfg_name = NamedParam( name='cicd_cfg_name', default='default', ) committish = NamedParam( name='committish', default='master', description='commit to build', ) gardenlinux_build_deb_image = NamedParam( name='gardenlinux_build_deb_image', description='image to use for package build', ) giturl = NamedParam( name='giturl', default='https://github.com/gardenlinux/gardenlinux.git', description='Gardenlinux Git repo', ) if is_kernel_task: pkg_name = NamedParam( name='pkg_names', description='list of kernel-package to build (comma separated string)', ) else: pkg_name = NamedParam( name='pkg_name', description='name of package to build', ) repodir = _repodir s3_package_path = NamedParam( name='package_path_s3_prefix', default='packages/pool', description='path relative to the root of the s3 bucket to upload the built packages to', ) version_label = NamedParam( name='version_label', description='version label uses as tag for upload', ) cfssl_committish = NamedParam( name='cfssl_committish', description='cfssl branch to clone', default='master' ) cfss_git_url = NamedParam( name='cfssl_git_url', description='cfssl git url to clone', default='https://github.com/cloudflare/cfssl.git' ) key_config_name = NamedParam( name='key_config_name', description='config name of the key to use for signing the packages', default='gardenlinux', ) params = [ cfss_git_url, cfssl_committish, cfssl_dir, cfssl_fastpath, cicd_cfg_name, committish, gardenlinux_build_deb_image, giturl, key_config_name, pkg_name, repodir, s3_package_path, version_label, ] clone_step_gl = steps.clone_step( committish=committish, repo_dir=repodir, git_url=giturl, env_vars=env_vars, volume_mounts=volume_mounts, ) clone_step_cfssl = steps.cfssl_clone_step( name='clone-step-cfssl', committish=cfssl_committish, working_dir=cfssl_dir, gardenlinux_repo_path_param=repodir, git_url=cfss_git_url, env_vars=env_vars, volume_mounts=volume_mounts, ) write_key_step = steps.write_key_step( key_config_name=key_config_name, repo_dir=repodir, env_vars=env_vars, volume_mounts=volume_mounts, ) cfssl_build_step = steps.build_cfssl_step( repo_dir=repodir, cfssl_fastpath=cfssl_fastpath, cfssl_dir=cfssl_dir, env_vars=env_vars, volume_mounts=volume_mounts, ) build_certs_step = steps.build_cert_step( repo_dir=repodir, env_vars=env_vars, volume_mounts=volume_mounts, ) s3_upload_packages_step = steps.build_upload_packages_step( cicd_cfg_name=cicd_cfg_name, repo_dir=repodir, s3_package_path=s3_package_path, env_vars=env_vars, volume_mounts=volume_mounts, ) task = tkn.model.Task( metadata=tkn.model.Metadata(name=task_name), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step_gl, clone_step_cfssl, write_key_step, cfssl_build_step, build_certs_step, package_build_step, s3_upload_packages_step, ], volumes=volumes, ), ) return task
def _package_task( task_name: str, package_build_step: tkn.model.TaskStep, package_build_params: typing.Sequence[NamedParam], is_kernel_task: bool, env_vars, volumes, volume_mounts, ): if is_kernel_task: pkg_name = all_params.pkg_names else: pkg_name = all_params.pkg_name params = [pkg_name, all_params.gardenlinux_build_deb_image, ] params += package_build_params clone_step_gl, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step write_key_step, params_step = steps.write_key_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step build_certs_step, params_step = steps.build_cert_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step s3_upload_packages_step, params_step = steps.build_upload_packages_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step task_steps = [ clone_step_gl, write_key_step, build_certs_step, package_build_step, s3_upload_packages_step, ] params = unify_params(params) task = tkn.model.Task( metadata=tkn.model.Metadata(name=task_name), spec=tkn.model.TaskSpec( params=params, steps=task_steps, volumes=volumes, ), ) return task
def build_task( env_vars, volume_mounts, volumes=[], ): params = [all_params.build_image, all_params.gardenlinux_build_deb_image] clone_step, params_step = steps.clone_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step pre_build_step, params_step = steps.pre_build_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step write_key_step, params_step = steps.write_key_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step build_certs_step, params_step = steps.build_cert_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step build_image_step, params_step = steps.build_image_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step upload_step, params_step = steps.upload_results_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step promote_step, params_step = steps.promote_single_step( params=all_params, env_vars=env_vars, volume_mounts=volume_mounts, ) params += params_step task_volumes = [v for v in volumes] task_volumes.extend( [{ 'name': 'dev', 'hostPath': {'path': '/dev', 'type': 'Directory'}, }, { 'name': 'build', 'emptyDir': {'medium': 'Memory'}, }] ) task_steps = [ clone_step, pre_build_step, write_key_step, build_certs_step, build_image_step, upload_step, promote_step, ] params = unify_params(params) return tkn.model.Task( metadata=tkn.model.Metadata(name='build-gardenlinux-task'), spec=tkn.model.TaskSpec( params=params, steps=task_steps, volumes=task_volumes, ), )
def notify_task( env_vars, volumes, volume_mounts, ): additional_recipients = NamedParam( name='additional_recipients', ) only_recipients = NamedParam( name='only_recipients', ) cicd_cfg_name = NamedParam( name='cicd_cfg_name', default='default', ) committish = NamedParam( name='committish', default='main', description='commit to build', ) disable_notifications = NamedParam( name='disable_notifications', default='false', description='if true no notification emails are sent', ) status = tkn.model.NamedParam( name='status_dict_str', default='~', description='JSON string with status for all tasks', ) namespace = NamedParam( name='namespace', description='Namespace of current pipeline run', ) pipeline_name = NamedParam( name='pipeline_name', description='Namespace of current pipeline', ) pipeline_run_name = NamedParam( name='pipeline_run_name', description='Name of current pipeline run', ) params = [ additional_recipients, cicd_cfg_name, committish, disable_notifications, _giturl, only_recipients, _repodir, status, namespace, pipeline_name, pipeline_run_name, ] clone_step = steps.clone_step( committish=committish, repo_dir=_repodir, git_url=_giturl, env_vars=env_vars, volume_mounts=volume_mounts, ) log_step = steps.get_logs_step( repo_dir=_repodir, pipeline_run_name=pipeline_run_name, namespace=namespace, env_vars=env_vars, volume_mounts=volume_mounts, ) notify_step = steps.notify_step( cicd_cfg_name=cicd_cfg_name, disable_notifications=disable_notifications, git_url=_giturl, namespace=namespace, pipeline_name=pipeline_name, pipeline_run_name=pipeline_run_name, repo_dir=_repodir, status_dict_str=status, additional_recipients=additional_recipients, only_recipients=only_recipients, env_vars=env_vars, volume_mounts=volume_mounts, ) task = tkn.model.Task( metadata=tkn.model.Metadata(name='notify-task'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, log_step, notify_step, ], volumes=volumes, ), ) return task
def main(): parser = argparse.ArgumentParser() parser.add_argument('--use-secrets-server', action='store_true') parser.add_argument('--outfile', default='tasks.yaml') parsed = parser.parse_args() if not parsed.use_secrets_server: env_vars = [{ 'name': 'SECRETS_SERVER_CACHE', 'value': '/secrets/config.json', }] volume_mounts = [{ 'name': 'secrets', 'mountPath': '/secrets', }] else: env_vars = [] volume_mounts = [] build_task_yaml_path = os.path.join(paths.own_dir, 'build-task.yaml.template') with open(build_task_yaml_path) as f: raw_build_task = yaml.safe_load(f) promote_task = tasks.promote_task( branch=NamedParam(name='branch'), cicd_cfg_name=NamedParam(name='cicd_cfg_name'), committish=NamedParam(name='committish'), flavourset=NamedParam(name='flavourset'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), publishing_actions=NamedParam(name='publishing_actions'), snapshot_timestamp=NamedParam(name='snapshot_timestamp'), version=NamedParam(name='version'), env_vars=env_vars, volume_mounts=volume_mounts, ) raw_promote_task = dataclasses.asdict(promote_task) clone_step = steps.clone_step( committish=NamedParam(name='committish'), git_url=NamedParam(name='giturl'), repo_dir=NamedParam(name='repodir'), env_vars=env_vars, volume_mounts=volume_mounts, ) clone_step_dict = dataclasses.asdict(clone_step) pre_build_step = steps.pre_build_step( architecture=NamedParam(name='architecture'), cicd_cfg_name=NamedParam(name='cicd_cfg_name'), committish=NamedParam(name='committish'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), modifiers=NamedParam(name='modifiers'), platform=NamedParam(name='platform'), publishing_actions=NamedParam(name='publishing_actions'), repo_dir=NamedParam(name='repodir'), version=NamedParam(name='version'), env_vars=env_vars, volume_mounts=volume_mounts, ) pre_build_step_dict = dataclasses.asdict(pre_build_step) upload_step = steps.upload_results_step( architecture=NamedParam(name='architecture'), cicd_cfg_name=NamedParam(name='cicd_cfg_name'), committish=NamedParam(name='committish'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), modifiers=NamedParam(name='modifiers'), outfile=NamedParam(name='outfile'), platform=NamedParam(name='platform'), publishing_actions=NamedParam(name='publishing_actions'), repo_dir=NamedParam(name='repodir'), version=NamedParam(name='version'), env_vars=env_vars, volume_mounts=volume_mounts, ) upload_step_dict = dataclasses.asdict(upload_step) promote_step = steps.promote_single_step( architecture=NamedParam(name='architecture'), cicd_cfg_name=NamedParam(name='cicd_cfg_name'), committish=NamedParam(name='committish'), gardenlinux_epoch=NamedParam(name='gardenlinux_epoch'), modifiers=NamedParam(name='modifiers'), platform=NamedParam(name='platform'), publishing_actions=NamedParam(name='publishing_actions'), repo_dir=NamedParam(name='repodir'), version=NamedParam(name='version'), env_vars=env_vars, volume_mounts=volume_mounts, ) promote_step_dict = dataclasses.asdict(promote_step) # hack: patch-in clone-step (avoid redundancy with other tasks) raw_build_task['spec']['steps'][0] = clone_step_dict raw_build_task['spec']['steps'][1] = pre_build_step_dict raw_build_task['spec']['steps'][-1] = upload_step_dict raw_build_task['spec']['steps'].append(promote_step_dict) if not parsed.use_secrets_server: print(raw_build_task['spec']['volumes']) raw_build_task['spec']['volumes'].append({ 'name': 'secrets', 'secret': { 'secretname': 'secrets', } }) with open(parsed.outfile, 'w') as f: yaml.safe_dump_all((raw_build_task, raw_promote_task), f) print(f'dumped tasks to {parsed.outfile}')
def notify_task( env_vars, volumes, volume_mounts, ): additional_recipients = NamedParam(name='additional_recipients', ) only_recipients = NamedParam(name='only_recipients', ) cicd_cfg_name = NamedParam( name='cicd_cfg_name', default='default', ) committish = NamedParam( name='committish', default='main', description='commit to build', ) disable_notifications = NamedParam( name='disable_notifications', default='false', description='if true no notification emails are sent', ) status = tkn.model.NamedParam( name='status_dict_str', default='~', description='JSON string with status for all tasks', ) params_def = _get_build_and_test_parameters() namespace = NamedParam( name='namespace', description='Namespace of current pipeline run', ) pipeline_name = NamedParam( name='pipeline_name', description='Namespace of current pipeline', ) pipeline_run_name = NamedParam( name='pipeline_run_name', description='Name of current pipeline run', ) params = [ additional_recipients, params_def.cicd_cfg_name, params_def.committish, disable_notifications, _giturl, only_recipients, _repodir, status, namespace, pipeline_name, pipeline_run_name, params_def.arch, params_def.glepoch, params_def.modifiers, params_def.platform, params_def.publishing_actions, params_def.version, ] clone_step = steps.clone_step( committish=committish, repo_dir=_repodir, git_url=_giturl, env_vars=env_vars, volume_mounts=volume_mounts, ) log_step = steps.get_logs_step( repo_dir=_repodir, pipeline_run_name=pipeline_run_name, namespace=namespace, env_vars=env_vars, volume_mounts=volume_mounts, ) attach_log_step = steps.attach_log_step( architecture=params_def.arch, cicd_cfg_name=cicd_cfg_name, committish=committish, gardenlinux_epoch=params_def.glepoch, modifiers=params_def.modifiers, namespace=namespace, pipeline_run_name=pipeline_run_name, platform=params_def.platform, repo_dir=_repodir, version=params_def.version, env_vars=env_vars, volume_mounts=volume_mounts, ) notify_step = steps.notify_step( cicd_cfg_name=cicd_cfg_name, disable_notifications=disable_notifications, git_url=_giturl, namespace=namespace, pipeline_name=pipeline_name, pipeline_run_name=pipeline_run_name, repo_dir=_repodir, status_dict_str=status, additional_recipients=additional_recipients, only_recipients=only_recipients, env_vars=env_vars, volume_mounts=volume_mounts, ) task = tkn.model.Task( metadata=tkn.model.Metadata(name='notify-task'), spec=tkn.model.TaskSpec( params=params, steps=[ clone_step, attach_log_step, log_step, notify_step, ], volumes=volumes, ), ) return task