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
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)
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
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
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']
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)
def test_default_values(self): conf = AdditionalTagsConfig() assert conf.tags == []