def test_render_tag_from_config(self, tmpdir, from_container_yaml,
                                    extra_args, has_platform_tag, extra_tags,
                                    primary_tags):
        kwargs = get_sample_prod_params(BUILD_TYPE_WORKER)
        kwargs.pop('platforms', None)
        kwargs.pop('platform', None)
        expected_primary = set(primary_tags)
        exclude_for_override = set(['latest', '{version}'])

        if extra_tags and not from_container_yaml:
            with open(os.path.join(str(tmpdir), ADDITIONAL_TAGS_FILE),
                      'w') as f:
                f.write('\n'.join(extra_tags))
        kwargs.update(extra_args)

        if from_container_yaml:
            if extra_tags:
                expected_primary -= exclude_for_override
            (flexmock(utils).should_receive('get_repo_info').with_args(
                TEST_GIT_URI, TEST_GIT_REF,
                git_branch=TEST_GIT_BRANCH).and_return(
                    RepoInfo(additional_tags=AdditionalTagsConfig(
                        tags=extra_tags))))
        else:
            (flexmock(utils).should_receive('get_repo_info').with_args(
                TEST_GIT_URI, TEST_GIT_REF,
                git_branch=TEST_GIT_BRANCH).and_return(
                    RepoInfo(additional_tags=AdditionalTagsConfig(
                        dir_path=str(tmpdir)))))

        user_params = BuildUserParams(INPUTS_PATH)
        user_params.set_params(**kwargs)
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        assert get_plugin(plugins, 'postbuild_plugins', 'tag_from_config')
        tag_suffixes = plugin_value_get(plugins, 'postbuild_plugins',
                                        'tag_from_config', 'args',
                                        'tag_suffixes')
        assert len(tag_suffixes['unique']) == 1
        if has_platform_tag:
            unique_tag_suffix = tag_suffixes['unique'][0]
            assert unique_tag_suffix.endswith('-x86_64') == has_platform_tag
        assert len(tag_suffixes['primary']) == len(expected_primary)
        assert set(tag_suffixes['primary']) == expected_primary
Exemplo n.º 2
0
def get_repo_info(git_uri, git_ref, git_branch=None):
    with checkout_git_repo(git_uri, git_ref, git_branch) as code_dir:
        dfp = DockerfileParser(os.path.join(code_dir), cache_content=True)
        config = RepoConfiguration(dir_path=code_dir)
        tags_config = AdditionalTagsConfig(dir_path=code_dir,
                                           tags=config.container.get(
                                               'tags', set()))
    return RepoInfo(dfp, config, tags_config)
Exemplo n.º 3
0
    def test_explicit_params(self):
        df_parser = flexmock()
        configuration = RepoConfiguration()
        tags_config = AdditionalTagsConfig()

        repo_info = RepoInfo(df_parser, configuration, tags_config)
        assert repo_info.dockerfile_parser is df_parser
        assert repo_info.configuration is configuration
        assert repo_info.additional_tags is tags_config
Exemplo n.º 4
0
def get_repo_info(git_uri, git_ref, git_branch=None, depth=None):
    with checkout_git_repo(git_uri, commit=git_ref, branch=git_branch,
                           depth=depth) as code_dir_info:
        code_dir = code_dir_info.repo_path
        depth = code_dir_info.commit_depth
        dfp = DockerfileParser(os.path.join(code_dir), cache_content=True)
        config = RepoConfiguration(git_uri=git_uri, git_ref=git_ref, git_branch=git_branch,
                                   dir_path=code_dir, depth=depth)
        tags_config = AdditionalTagsConfig(dir_path=code_dir,
                                           tags=config.container.get('tags', set()))
    repo_info = RepoInfo(dfp, config, tags_config)
    return repo_info
Exemplo n.º 5
0
 def test_invalid_tags(self, tmpdir, bad_tag):
     tags = [bad_tag, 'good']
     self.mock_additional_tags(str(tmpdir), tags)
     conf = AdditionalTagsConfig(dir_path=str(tmpdir))
     assert conf.tags == ['good']
Exemplo n.º 6
0
 def test_tags_parsed(self, tmpdir):
     tags = ['spam', 'bacon', 'eggs', 'saus.age']
     self.mock_additional_tags(str(tmpdir), tags)
     conf = AdditionalTagsConfig(dir_path=str(tmpdir))
     # Compare as a "set" because order is not guaranteed
     assert set(conf.tags) == set(tags)
Exemplo n.º 7
0
 def test_default_values(self):
     conf = AdditionalTagsConfig()
     assert conf.tags == []