Skip to content

Instantly share code, notes, and snippets.

@djerfy
Created February 11, 2023 10:32
Show Gist options
  • Save djerfy/b7fb5134f9c8169390abab88fe193478 to your computer and use it in GitHub Desktop.
Save djerfy/b7fb5134f9c8169390abab88fe193478 to your computer and use it in GitHub Desktop.
🐳 Check your Chart dependencies updates from ArtifactHub
#!/usr/bin/env python3
import sys, json, yaml, requests, argparse, os
from rich.console import Console
from rich.table import Table
baseurl = "https://artifacthub.io/api/v1"
headers = {"Content-Type": "application/json"}
parser = argparse.ArgumentParser()
parser.add_argument("--chart-file", dest="chart_file", action="store", required=True, help="Path to Chart.yaml file", default="./Chart.yaml")
args = parser.parse_args()
if not os.path.exists(args.chart_file):
print(f"error: chart file '{args.chart_file}' not found")
sys.exit(1)
with open(args.chart_file, "r") as stream:
try:
chart_json = yaml.safe_load(stream)
except yaml.YAMLError as err:
print(f"error: {err}")
sys.exit(1)
if not "dependencies" in chart_json:
print("no dependencies found")
sys.exit(0)
def searchArtifacthub(name, repo):
opts = f"offset=0&limit=50&facets=false&ts_query_web={name}&kind=0&deprecated=false&sort=relevance"
resp = requests.get(f"{baseurl}/packages/search?{opts}", headers=headers).json()
for pkg in resp['packages']:
if pkg['name'] == name and pkg['repository']['url'].split('/')[2] == repo.split('/')[2]: return pkg
return None
table = Table(title=f"Helm chart dependencies version: {chart_json['name']} ({args.chart_file})")
for cn in ['Name', 'Repository', 'Curr version', 'Last version', 'Last appVersion']: table.add_column(cn, justify="center")
for dep in chart_json['dependencies']:
try:
dep_check = searchArtifacthub(dep['name'], dep['repository'])
dep_color = "green" if dep['version'] == dep_check['version'] else "red"
table.add_row(dep['name'], dep['repository'], dep['version'], f"[{dep_color}]{dep_check['version']}", dep_check['app_version'])
except:
table.add_row(dep['name'], dep['repository'], dep['version'], "[yellow]Unknown", "[yellow]Unknown")
console = Console()
console.print(table)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment