#!/usr/bin/env bash set -euo pipefail chart_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/quay" && pwd) helm lint "$chart_dir" --strict python3 - "$chart_dir" <<'PY' import subprocess import sys import yaml chart = sys.argv[1] def render(*args): output = subprocess.check_output( ['helm', 'template', 'quay', chart, '--namespace', 'default', *args], text=True ) return {(doc['kind'], doc['metadata']['name']): doc for doc in yaml.safe_load_all(output) if doc} active = render() assert {('Deployment', 'quay'), ('Deployment', 'quay-repomirror'), ('Service', 'quay')} <= active.keys() registry = active['Deployment', 'quay'] mirror = active['Deployment', 'quay-repomirror'] assert registry['spec']['selector']['matchLabels'] == {'app': 'quay'} assert mirror['spec']['selector']['matchLabels'] == {'app': 'quay-repomirror'} assert registry['spec']['strategy']['type'] == mirror['spec']['strategy']['type'] == 'Recreate' assert registry['spec']['template']['spec']['containers'][0]['image'] == mirror['spec']['template']['spec']['containers'][0]['image'] assert registry['spec']['template']['spec']['volumes'][0]['secret']['secretName'] == 'quay-config' assert active['Service', 'quay']['spec']['selector'] == {'app': 'quay'} staged = render('--set', 'quay.enabled=false', '--set', 'postgresql.enabled=true') assert ('StatefulSet', 'quay-postgresql') in staged assert not any(name == 'quay' or name == 'quay-repomirror' for kind, name in staged) assert ('Service', 'quay-postgresql') in staged operator = render('--set', 'cloudNativePG.enabled=true', '--set', 'cloudNativePG.create=true') assert ('Cluster', 'quay-postgresql') in operator assert ('StatefulSet', 'quay-postgresql') not in operator assert operator['Cluster', 'quay-postgresql']['spec']['bootstrap']['initdb']['owner'] == 'quay' preexisting = render('--set', 'cloudNativePG.enabled=true') assert ('Cluster', 'quay-postgresql') not in preexisting assert ('StatefulSet', 'quay-postgresql') not in preexisting conflict = subprocess.run(['helm', 'template', 'quay', chart, '--set', 'postgresql.enabled=true', '--set', 'cloudNativePG.enabled=true'], capture_output=True, text=True) assert conflict.returncode != 0 and 'mutually exclusive' in conflict.stderr PY