Example #1
0
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,
        ),
    )
Example #2
0
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,
        ),
    )
Example #3
0
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
Example #4
0
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,
        ),
    )
Example #5
0
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}')
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
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,
        ),
    )
Example #11
0
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,
        ),
    )
Example #12
0
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
Example #13
0
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
Example #14
0
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
Example #15
0
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,
        ),
    )
Example #16
0
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
Example #17
0
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}')
Example #18
0
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