| # Copyright (c) 2024 VEXXHOST, Inc. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import glob |
| import os |
| import subprocess |
| |
| |
| def run_helm_unittest(charts_dir, exclusions): |
| """ |
| :param charts_dir: The directory containing Helm charts. |
| :param exclusions: List of subdirectories to exclude. |
| """ |
| all_tests_passed = True |
| charts = [ |
| os.path.basename(d) |
| for d in glob.glob(os.path.join(charts_dir, "*")) |
| if os.path.isdir(d) and os.path.basename(d) not in exclusions |
| ] |
| for chart in charts: |
| print(f"Running helm unittest for chart: {chart}") |
| chart_tests_path = f"../../roles/{chart}/tests/*.yaml" |
| chart_path = os.path.join(charts_dir, chart) |
| try: |
| # Run helm unittest |
| subprocess.run( |
| ["helm", "unittest", "-f", chart_tests_path, chart_path], |
| check=True, |
| ) |
| print(f"Helm unitest passed for chart: {chart}") |
| except subprocess.CalledProcessError as e: |
| print(f"Helm unittest failed for chart: {chart}") |
| all_tests_passed = False |
| raise e |
| if all_tests_passed: |
| print("\nAll Helm unitests passed successfully!") |
| exit(0) |
| else: |
| print("\nOne or more charts had test failures.") |
| exit(1) |
| |
| |
| def main(): |
| charts_dir = os.getenv("CHARTS_DIR", "charts") |
| exclusions = ["patches"] |
| run_helm_unittest(charts_dir, exclusions) |
| |
| |
| if __name__ == "__main__": |
| main() |