diff --git a/static/compatibilities/dagster.yaml b/static/compatibilities/dagster.yaml new file mode 100644 index 0000000000..d042852f2e --- /dev/null +++ b/static/compatibilities/dagster.yaml @@ -0,0 +1,161 @@ +icon: https://avatars.githubusercontent.com/u/40032576?v=4 +git_url: https://github.com/dagster-io/dagster +release_url: https://github.com/dagster-io/dagster/releases/tag/{vsn} +helm_repository_url: https://dagster-io.github.io/helm +versions: +- version: 1.12.12 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.12.12 + images: ['docker.io/bitnami/minideb:stretch', 'docker.io/busybox:1.28', 'docker.io/dagster/dagster-celery-k8s:1.12.12', + 'docker.io/dagster/user-code-example:1.12.12', 'docker.io/library/postgres:14.6'] +- version: 1.12.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.12.0 + images: [] +- version: 1.11.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.11.0 + images: [] +- version: 1.10.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.10.0 + images: [] +- version: 1.9.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.9.0 + images: [] +- version: 1.8.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.8.0 + images: [] +- version: 1.7.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.7.0 + images: [] +- version: 1.6.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.6.0 + images: [] +- version: 1.5.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.5.0 + images: [] +- version: 1.4.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.4.0 + images: [] +- version: 1.3.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.3.0 + images: [] +- version: 1.2.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.2.0 + images: [] +- version: 1.1.1 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.1.1 + images: [] +- version: 1.0.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 1.0.0 + images: [] +- version: 0.15.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 0.15.0 + images: [] +- version: 0.14.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 0.14.0 + images: [] +- version: 0.13.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18', '1.17', '1.16', + '1.15'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 0.13.0 + images: [] +- version: 0.12.0 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18', '1.17', '1.16', + '1.15'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 0.12.0 + images: [] +- version: 0.11.3 + kube: ['1.35', '1.34', '1.33', '1.32', '1.31', '1.30', '1.29', '1.28', '1.27', '1.26', + '1.25', '1.24', '1.23', '1.22', '1.21', '1.20', '1.19', '1.18', '1.17', '1.16', + '1.15'] + requirements: [] + incompatibilities: [] + summary: null + chart_version: 0.11.3 + images: [] diff --git a/static/compatibilities/manifest.yaml b/static/compatibilities/manifest.yaml index b800a06c0c..b973c938a5 100644 --- a/static/compatibilities/manifest.yaml +++ b/static/compatibilities/manifest.yaml @@ -36,3 +36,4 @@ names: - elastic-agent - rabbitmq-cluster-operator - kserve +- dagster diff --git a/utils/compatibility/scrapers/dagster.py b/utils/compatibility/scrapers/dagster.py new file mode 100644 index 0000000000..4a5749fa69 --- /dev/null +++ b/utils/compatibility/scrapers/dagster.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +import yaml +from collections import OrderedDict + +from utils import ( + current_kube_version, + expand_kube_versions, + fetch_page, + print_error, + update_compatibility_info, + validate_semver, +) + + +app_name = "dagster" +HELM_INDEX_URL = "https://dagster-io.github.io/helm/index.yaml" + + +def _kube_versions_from_constraint(kube_version: str) -> list[str]: + if not kube_version: + return [] + + min_version = None + max_version = None + for part in kube_version.replace(" ", "").split(","): + if part.startswith(">"): + cleaned = part.lstrip("><=v").replace("-0", "") + sem = validate_semver(cleaned) + if sem: + min_version = f"{sem.major}.{sem.minor}" + elif part.startswith("<"): + cleaned = part.lstrip("><=v").replace("-0", "") + sem = validate_semver(cleaned) + if sem: + max_version = f"{sem.major}.{sem.minor}" + + if not min_version: + return [] + + if not max_version: + max_version = current_kube_version() + if not max_version: + return [] + + return expand_kube_versions(min_version, max_version) + + +def _fetch_index(): + content = fetch_page(HELM_INDEX_URL) + if not content: + return None + try: + return yaml.safe_load(content) + except yaml.YAMLError as exc: + print_error(f"Failed to parse Dagster helm index: {exc}") + return None + + +def scrape() -> None: + index = _fetch_index() + if not index: + return + + entries = index.get("entries", {}).get(app_name, []) + if not entries: + print_error("No Dagster chart entries found in helm index.") + return + + versions = [] + for chart in entries: + raw_chart_version = str(chart.get("version", "")).lstrip("v") + raw_app_version = str(chart.get("appVersion", "")).lstrip("v") + + app_semver = validate_semver(raw_app_version) + chart_semver = validate_semver(raw_chart_version) + + semver = app_semver or chart_semver + if not semver: + continue + + kube_versions = _kube_versions_from_constraint( + chart.get("kubeVersion", "") + ) + if not kube_versions: + continue + + version_info = OrderedDict( + [ + ("version", str(semver)), + ("kube", kube_versions), + ("requirements", []), + ("incompatibilities", []), + ] + ) + if chart_semver: + version_info["chart_version"] = str(chart_semver) + versions.append(version_info) + + if not versions: + print_error("No Dagster compatibility rows parsed.") + return + + update_compatibility_info( + f"../../static/compatibilities/{app_name}.yaml", versions + )