Пример #1
0
def base_component_descriptor_v2(
    component_name_v2: str,
    component_labels: typing.Iterable[cm.Label],
    effective_version: str,
    source_labels: tuple,
    ctx_repository_base_url: str,
    commit: str,
):
    import gci.componentmodel as cm
    import version as version_util
    parsed_version = version_util.parse_to_semver(effective_version)
    if parsed_version.finalize_version() == parsed_version:
        # "final" version --> there will be a tag, later (XXX hardcoded hack)
        src_ref = f'refs/tags/{effective_version}'
    else:
        # let's hope the version contains something committish
        if parsed_version.build:
            src_ref = f'{parsed_version.prerelease}{parsed_version.build}'
        else:
            src_ref = f'{parsed_version.prerelease}'

    # logical names must not contain slashes or dots
    logical_name = component_name_v2.replace('/', '_').replace('.', '_')

    base_descriptor_v2 = cm.ComponentDescriptor(
        meta=cm.Metadata(schemaVersion=cm.SchemaVersion.V2),
        component=cm.Component(
            name=component_name_v2,
            version=effective_version,
            repositoryContexts=[
                cm.RepositoryContext(
                    baseUrl=ctx_repository_base_url,
                    type=cm.AccessType.OCI_REGISTRY,
                )
            ],
            provider=cm.Provider.INTERNAL,
            sources=[
                cm.ComponentSource(
                    name=logical_name,
                    type=cm.SourceType.GIT,
                    access=cm.GithubAccess(
                        type=cm.AccessType.GITHUB,
                        repoUrl=component_name_v2,
                        ref=src_ref,
                        commit=commit,
                    ),
                    version=effective_version,
                    labels=source_labels,
                )
            ],
            componentReferences=[],  # added later
            resources=[],  # added later
            labels=list(component_labels),
        ),
    )

    return base_descriptor_v2
Пример #2
0
    def examinee(self, tmp_path):
        # prepare test component descriptor file and fill it with test content
        component_descriptor_file = tmp_path.joinpath(
            'test_descriptor').resolve()
        component_descriptor_file.write_text(
            'component descriptor test content')

        component_descriptor_v2 = os.path.join(tmp_path,
                                               'component_descriptor_v2')
        ctf_path = os.path.join(tmp_path, product.v2.CTF_OUT_DIR_NAME)
        cd_v2 = cm.ComponentDescriptor(
            component=cm.Component(
                name='a_name',
                version='1.2.3',
                repositoryContexts=[],
                provider=cm.Provider.INTERNAL,
                sources=[],
                componentReferences=[],
                resources=[],
            ),
            meta=cm.Metadata(),
        )
        with open(component_descriptor_v2, 'w') as f:
            yaml.dump(
                data=dataclasses.asdict(cd_v2),
                stream=f,
                Dumper=cm.EnumValueYamlDumper,
            )

        def _examinee(
                githubrepobranch=GitHubRepoBranch(
                    github_config='test_config',
                    repo_owner='test_owner',
                    repo_name='test_name',
                    branch='master',
                ),
                repo_dir=str(tmp_path),
                release_version='1.0.0',
                tag_helper_return_value=False,
                component_descriptor_file_path=str(component_descriptor_file),
        ):
            # Create a github_helper mock that always reports a tag as existing/not existing,
            # depending on the passed value
            github_helper_mock = MagicMock(spec=GitHubRepositoryHelper)
            return concourse.steps.release.GitHubReleaseStep(
                github_helper=github_helper_mock,
                githubrepobranch=githubrepobranch,
                repo_dir=repo_dir,
                release_version=release_version,
                component_descriptor_file_path=component_descriptor_file_path,
                component_descriptor_v2_path=component_descriptor_v2,
                ctf_path=ctf_path,
            )

        return _examinee
Пример #3
0
    def examinee(self, tmp_path):
        component_descriptor_v2 = os.path.join(tmp_path,
                                               'component_descriptor_v2')
        ctf_path = os.path.join(tmp_path, product.v2.CTF_OUT_DIR_NAME)
        cd_v2 = cm.ComponentDescriptor(
            component=cm.Component(
                name='example.com/a_name',
                version='1.2.3',
                repositoryContexts=[],
                provider=cm.Provider.INTERNAL,
                sources=[],
                componentReferences=[],
                resources=[],
            ),
            meta=cm.Metadata(),
        )
        with open(component_descriptor_v2, 'w') as f:
            yaml.dump(
                data=dataclasses.asdict(cd_v2),
                stream=f,
                Dumper=cm.EnumValueYamlDumper,
            )

        def _examinee(
                github_helper=MagicMock(),
                githubrepobranch=GitHubRepoBranch(
                    github_config='test_config',
                    repo_owner='test_owner',
                    repo_name='test_name',
                    branch='master',
                ),
                repository_hostname="example.com",
                repository_path="a_name",
                repo_dir=str(tmp_path),
                release_version='1.0.0',
        ):
            return concourse.steps.release.PublishReleaseNotesStep(
                github_helper=github_helper,
                githubrepobranch=githubrepobranch,
                repository_hostname=repository_hostname,
                repository_path=repository_path,
                repo_dir=repo_dir,
                release_version=release_version,
                component_descriptor_v2_path=component_descriptor_v2,
                ctf_path=ctf_path,
            )

        return _examinee
Пример #4
0
def _base_component_descriptor(
    version: str,
    ctx_repository_base_url: str,
    commit: str,
    branch: str,
    component_name: str = 'github.com/gardenlinux/gardenlinux',
):
    parsed_version = version_util.parse_to_semver(version)
    if parsed_version.finalize_version() == parsed_version:
        # "final" version --> there will be a tag, later
        src_ref = f'refs/tags/{version}'
    else:
        src_ref = f'refs/heads/{branch}'

    # logical names must not contain slashes or dots
    logical_name = component_name.replace('/', '_').replace('.', '_')

    base_descriptor_v2 = cm.ComponentDescriptor(
        meta=cm.Metadata(schemaVersion=cm.SchemaVersion.V2),
        component=cm.Component(
            name=component_name,
            version=version,
            repositoryContexts=[
                cm.OciRepositoryContext(
                    baseUrl=ctx_repository_base_url,
                    type=cm.AccessType.OCI_REGISTRY,
                )
            ],
            provider=cm.Provider.INTERNAL,
            sources=[
                cm.ComponentSource(
                    name=logical_name,
                    type=cm.SourceType.GIT,
                    access=cm.GithubAccess(
                        type=cm.AccessType.GITHUB,
                        repoUrl=component_name,
                        ref=src_ref,
                        commit=commit,
                    ),
                    version=version,
                )
            ],
            componentReferences=[],
            resources=[],  # added later
        ),
    )
    return base_descriptor_v2
Пример #5
0
def comp_desc(name, version) -> cm.ComponentDescriptor:
    return cm.ComponentDescriptor(
        meta=cm.Metadata(),
        component=comp(name, version),
    )