def test_one_lint_result_per_chart(rule_runner: RuleRunner) -> None: rule_runner.write_files({ "src/chart1/BUILD": "helm_chart()", "src/chart1/Chart.yaml": gen_chart_file("chart1", version="0.1.0"), "src/chart1/values.yaml": HELM_VALUES_FILE, "src/chart1/templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "src/chart1/templates/service.yaml": K8S_SERVICE_FILE, "src/chart2/BUILD": "helm_chart()", "src/chart2/Chart.yaml": gen_chart_file("chart2", version="0.1.0"), "src/chart2/values.yaml": HELM_VALUES_FILE, "src/chart2/templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "src/chart2/templates/service.yaml": K8S_SERVICE_FILE, }) source_root_patterns = ("src/*", ) chart1_target = rule_runner.get_target( Address("src/chart1", target_name="chart1")) chart2_target = rule_runner.get_target( Address("src/chart2", target_name="chart2")) lint_results = run_helm_lint(rule_runner, [chart1_target, chart2_target], source_root_patterns=source_root_patterns) assert len(lint_results) == 2 assert lint_results[0].exit_code == 0 assert lint_results[0].partition_description == "chart1" assert lint_results[1].exit_code == 0 assert lint_results[1].partition_description == "chart2"
def test_lint_non_strict_chart_failing(rule_runner: RuleRunner) -> None: rule_runner.write_files({ "BUILD": "helm_chart(name='mychart')", "Chart.yaml": gen_chart_file("mychart", version="0.1.0", icon="wrong URL"), "values.yaml": HELM_VALUES_FILE, "templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "templates/service.yaml": K8S_SERVICE_FILE, }) tgt = rule_runner.get_target(Address("", target_name="mychart")) lint_results = run_helm_lint(rule_runner, [tgt]) assert len(lint_results) == 1 assert lint_results[0].exit_code == 1
def test_lint_strict_chart_failing(rule_runner: RuleRunner) -> None: rule_runner.write_files({ "BUILD": "helm_chart(name='mychart', lint_strict=True)", "Chart.yaml": gen_chart_file("mychart", version="0.1.0", icon=None), "values.yaml": HELM_VALUES_FILE, "templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "templates/ingress.yaml": K8S_INGRESS_FILE_WITH_LINT_WARNINGS, }) tgt = rule_runner.get_target(Address("", target_name="mychart")) lint_results = run_helm_lint(rule_runner, [tgt]) assert len(lint_results) == 1 assert lint_results[0].exit_code == 1
def test_helm_package(rule_runner: RuleRunner) -> None: chart_name = "foo" chart_version = "0.1.0" rule_runner.write_files({ f"src/{chart_name}/BUILD": f"helm_chart(name='{chart_name}')", f"src/{chart_name}/Chart.yaml": gen_chart_file(chart_name, version=chart_version), f"src/{chart_name}/values.yaml": HELM_VALUES_FILE, f"src/{chart_name}/templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, f"src/{chart_name}/templates/service.yaml": K8S_SERVICE_FILE, }) _assert_build_package(rule_runner, chart_name=chart_name, chart_version=chart_version)
def test_skip_lint(rule_runner: RuleRunner) -> None: rule_runner.write_files({ "src/chart/BUILD": "helm_chart(skip_lint=True)", "src/chart/Chart.yaml": gen_chart_file("chart", version="0.1.0"), "src/chart/values.yaml": HELM_VALUES_FILE, "src/chart/templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "src/chart/templates/service.yaml": K8S_SERVICE_FILE, }) source_root_patterns = ("src/*", ) chart_target = rule_runner.get_target( Address("src/chart", target_name="chart")) lint_results = run_helm_lint(rule_runner, [chart_target], source_root_patterns=source_root_patterns) assert len(lint_results) == 0
def test_helm_package_with_custom_output_path(rule_runner: RuleRunner) -> None: chart_name = "bar" chart_version = "0.2.0" output_path = "charts" rule_runner.write_files({ f"src/{chart_name}/BUILD": f"""helm_chart(name="{chart_name}", output_path="{output_path}")""", f"src/{chart_name}/Chart.yaml": gen_chart_file(chart_name, version=chart_version), f"src/{chart_name}/values.yaml": HELM_VALUES_FILE, f"src/{chart_name}/templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, f"src/{chart_name}/templates/service.yaml": K8S_SERVICE_FILE, }) _assert_build_package(rule_runner, chart_name=chart_name, chart_version=chart_version)
def test_collects_single_chart_sources( rule_runner: RuleRunner, name: str, version: str, type: ChartType, icon: str | None, lint_strict: bool, ) -> None: rule_runner.write_files({ "BUILD": f"helm_chart(name='{name}', lint_strict={lint_strict})", "Chart.yaml": gen_chart_file(name, version=version, type=type, icon=icon), "values.yaml": HELM_VALUES_FILE, "templates/_helpers.tpl": HELM_TEMPLATE_HELPERS_FILE, "templates/service.yaml": K8S_SERVICE_FILE, }) address = Address("", target_name=name) tgt = rule_runner.get_target(address) expected_metadata = HelmChartMetadata( name=name, version=version, icon=icon, type=type, ) helm_chart = rule_runner.request(HelmChart, [HelmChartRequest.from_target(tgt)]) assert helm_chart.metadata == expected_metadata assert len(helm_chart.snapshot.files) == 4 assert helm_chart.address == address
def test_injects_parent_chart(rule_runner: RuleRunner) -> None: rule_runner.write_files({ "src/chart1/BUILD": """helm_chart()""", "src/chart1/Chart.yaml": gen_chart_file("chart1", version="0.1.0"), "src/chart1/values.yaml": HELM_VALUES_FILE, "src/chart1/templates/service.yaml": K8S_SERVICE_FILE, "src/chart1/tests/BUILD": """helm_unittest_tests(sources=["*_test.yaml"])""", "src/chart1/tests/service_test.yaml": "", "src/chart2/BUILD": """helm_chart()""", "src/chart2/Chart.yaml": gen_chart_file("chart2", version="0.1.0"), "src/chart2/values.yaml": HELM_VALUES_FILE, "src/chart2/templates/service.yaml": K8S_SERVICE_FILE, "src/chart2/tests/BUILD": """helm_unittest_tests(sources=["*_test.yaml"])""", "src/chart2/tests/service_test.yaml": "", }) source_roots = ["src/*"] rule_runner.set_options([f"--source-roots-patterns={repr(source_roots)}"]) chart1_tgt = rule_runner.get_target( Address("src/chart1", target_name="chart1")) chart1_unittest_tgt = rule_runner.get_target( Address("src/chart1/tests", target_name="tests")) chart2_tgt = rule_runner.get_target( Address("src/chart2", target_name="chart2")) chart2_unittest_tgt = rule_runner.get_target( Address("src/chart2/tests", target_name="tests")) chart1_injected_deps = rule_runner.request( InjectedDependencies, [ InjectHelmUnitTestChartDependencyRequest( chart1_unittest_tgt[HelmUnitTestDependenciesField]) ], ) chart2_injected_deps = rule_runner.request( InjectedDependencies, [ InjectHelmUnitTestChartDependencyRequest( chart2_unittest_tgt[HelmUnitTestDependenciesField]) ], ) assert len(chart1_injected_deps) == 1 assert len(chart2_injected_deps) == 1 assert list(chart1_injected_deps)[0] == chart1_tgt.address assert list(chart2_injected_deps)[0] == chart2_tgt.address