Skip to content

Commit 535436a

Browse files
committed
Add Envoy Gateway compatibility
1 parent 05fda11 commit 535436a

4 files changed

Lines changed: 287 additions & 0 deletions

File tree

static/compatibilities.yaml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16552,6 +16552,83 @@ addons:
1655216552
chart_version: 0.3.11
1655316553
images: ['ghcr.io/external-secrets/external-secrets:v0.3.11']
1655416554
name: external-secrets
16555+
- icon: https://raw.githubusercontent.com/envoyproxy/gateway/main/site/assets/icons/logo.svg
16556+
git_url: https://github.com/envoyproxy/gateway
16557+
release_url: https://github.com/envoyproxy/gateway/releases/tag/v{vsn}
16558+
helm_repository_url: oci://docker.io/envoyproxy/gateway-helm
16559+
chart_name: gateway-helm
16560+
versions:
16561+
- version: 1.8.1
16562+
kube: ['1.35', '1.34', '1.33', '1.32']
16563+
requirements: []
16564+
incompatibilities: []
16565+
summary: null
16566+
- version: 1.7.4
16567+
kube: ['1.35', '1.34', '1.33', '1.32']
16568+
requirements: []
16569+
incompatibilities: []
16570+
summary: null
16571+
- version: 1.6.7
16572+
kube: ['1.33', '1.32', '1.31', '1.30']
16573+
requirements: []
16574+
incompatibilities: []
16575+
summary: null
16576+
- version: 1.5.9
16577+
kube: ['1.33', '1.32', '1.31', '1.30']
16578+
requirements: []
16579+
incompatibilities: []
16580+
summary: null
16581+
- version: 1.4.6
16582+
kube: ['1.33', '1.32', '1.31', '1.30']
16583+
requirements: []
16584+
incompatibilities: []
16585+
summary: null
16586+
- version: 1.3.3
16587+
kube: ['1.32', '1.31', '1.30', '1.29']
16588+
requirements: []
16589+
incompatibilities: []
16590+
summary: null
16591+
- version: 1.2.8
16592+
kube: ['1.31', '1.30', '1.29', '1.28']
16593+
requirements: []
16594+
incompatibilities: []
16595+
summary: null
16596+
- version: 1.1.4
16597+
kube: ['1.30', '1.29', '1.28', '1.27']
16598+
requirements: []
16599+
incompatibilities: []
16600+
summary: null
16601+
- version: 1.0.2
16602+
kube: ['1.29', '1.28', '1.27', '1.26']
16603+
requirements: []
16604+
incompatibilities: []
16605+
summary: null
16606+
- version: 0.6.0
16607+
kube: ['1.28', '1.27', '1.26']
16608+
requirements: []
16609+
incompatibilities: []
16610+
summary: null
16611+
- version: 0.5.0
16612+
kube: ['1.27', '1.26', '1.25']
16613+
requirements: []
16614+
incompatibilities: []
16615+
summary: null
16616+
- version: 0.4.0
16617+
kube: ['1.27', '1.26', '1.25']
16618+
requirements: []
16619+
incompatibilities: []
16620+
summary: null
16621+
- version: 0.3.0
16622+
kube: ['1.26', '1.25', '1.24']
16623+
requirements: []
16624+
incompatibilities: []
16625+
summary: null
16626+
- version: 0.2.0
16627+
kube: ['1.24']
16628+
requirements: []
16629+
incompatibilities: []
16630+
summary: null
16631+
name: envoy-gateway
1655516632
- icon: https://avatars.githubusercontent.com/u/52158677?s=200&v=4
1655616633
git_url: https://github.com/fluxcd/flux2
1655716634
release_url: https://github.com/fluxcd/flux2/releases/tag/v{vsn}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
icon: https://raw.githubusercontent.com/envoyproxy/gateway/main/site/assets/icons/logo.svg
2+
git_url: https://github.com/envoyproxy/gateway
3+
release_url: https://github.com/envoyproxy/gateway/releases/tag/v{vsn}
4+
helm_repository_url: oci://docker.io/envoyproxy/gateway-helm
5+
chart_name: gateway-helm
6+
versions:
7+
- version: 1.8.1
8+
kube: ['1.35', '1.34', '1.33', '1.32']
9+
requirements: []
10+
incompatibilities: []
11+
summary: null
12+
- version: 1.7.4
13+
kube: ['1.35', '1.34', '1.33', '1.32']
14+
requirements: []
15+
incompatibilities: []
16+
summary: null
17+
- version: 1.6.7
18+
kube: ['1.33', '1.32', '1.31', '1.30']
19+
requirements: []
20+
incompatibilities: []
21+
summary: null
22+
- version: 1.5.9
23+
kube: ['1.33', '1.32', '1.31', '1.30']
24+
requirements: []
25+
incompatibilities: []
26+
summary: null
27+
- version: 1.4.6
28+
kube: ['1.33', '1.32', '1.31', '1.30']
29+
requirements: []
30+
incompatibilities: []
31+
summary: null
32+
- version: 1.3.3
33+
kube: ['1.32', '1.31', '1.30', '1.29']
34+
requirements: []
35+
incompatibilities: []
36+
summary: null
37+
- version: 1.2.8
38+
kube: ['1.31', '1.30', '1.29', '1.28']
39+
requirements: []
40+
incompatibilities: []
41+
summary: null
42+
- version: 1.1.4
43+
kube: ['1.30', '1.29', '1.28', '1.27']
44+
requirements: []
45+
incompatibilities: []
46+
summary: null
47+
- version: 1.0.2
48+
kube: ['1.29', '1.28', '1.27', '1.26']
49+
requirements: []
50+
incompatibilities: []
51+
summary: null
52+
- version: 0.6.0
53+
kube: ['1.28', '1.27', '1.26']
54+
requirements: []
55+
incompatibilities: []
56+
summary: null
57+
- version: 0.5.0
58+
kube: ['1.27', '1.26', '1.25']
59+
requirements: []
60+
incompatibilities: []
61+
summary: null
62+
- version: 0.4.0
63+
kube: ['1.27', '1.26', '1.25']
64+
requirements: []
65+
incompatibilities: []
66+
summary: null
67+
- version: 0.3.0
68+
kube: ['1.26', '1.25', '1.24']
69+
requirements: []
70+
incompatibilities: []
71+
summary: null
72+
- version: 0.2.0
73+
kube: ['1.24']
74+
requirements: []
75+
incompatibilities: []
76+
summary: null

static/compatibilities/manifest.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ names:
1515
- descheduler
1616
- external-dns
1717
- external-secrets
18+
- envoy-gateway
1819
- flux
1920
- ingress-nginx
2021
- istio
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import json
2+
import re
3+
from collections import OrderedDict
4+
5+
from packaging.version import Version
6+
7+
from utils import fetch_page, print_error, update_compatibility_info
8+
9+
10+
APP_NAME = "envoy-gateway"
11+
COMPATIBILITY_URL = "https://raw.githubusercontent.com/envoyproxy/gateway/main/site/content/en/news/releases/matrix.md"
12+
TAGS_URL = "https://api.github.com/repos/envoyproxy/gateway/tags"
13+
TARGET_FILE = f"../../static/compatibilities/{APP_NAME}.yaml"
14+
15+
16+
def _decode(content):
17+
return content.decode("utf-8") if isinstance(content, bytes) else content
18+
19+
20+
def _clean_cell(value):
21+
return value.strip().strip("*").strip()
22+
23+
24+
def _version_series(value):
25+
match = re.search(r"v?(\d+\.\d+)", value)
26+
if not match:
27+
return None
28+
return match.group(1)
29+
30+
31+
def _kube_versions(value):
32+
return [match.group(1) for match in re.finditer(r"v?(\d+\.\d+)", value)]
33+
34+
35+
def _latest_patch_versions():
36+
latest = {}
37+
page = 1
38+
39+
while True:
40+
content = fetch_page(f"{TAGS_URL}?per_page=100&page={page}")
41+
if not content:
42+
return latest
43+
44+
try:
45+
tags = json.loads(_decode(content))
46+
except json.JSONDecodeError as exc:
47+
print_error(f"Failed to parse Envoy Gateway tags: {exc}")
48+
return latest
49+
50+
if not tags:
51+
break
52+
53+
for tag in tags:
54+
tag_name = str(tag.get("name", ""))
55+
match = re.fullmatch(r"v(\d+\.\d+\.\d+)", tag_name)
56+
if not match:
57+
continue
58+
59+
app_version = match.group(1)
60+
parsed = Version(app_version)
61+
series = f"{parsed.major}.{parsed.minor}"
62+
current = latest.get(series)
63+
if not current or parsed > Version(current):
64+
latest[series] = app_version
65+
66+
if len(tags) < 100:
67+
break
68+
69+
page += 1
70+
71+
return latest
72+
73+
74+
def _matrix_rows(content):
75+
rows = {}
76+
77+
for line in _decode(content).splitlines():
78+
stripped = line.strip()
79+
if not stripped.startswith("|"):
80+
continue
81+
if set(stripped.replace("|", "").strip()) <= {"-"}:
82+
continue
83+
84+
columns = [_clean_cell(column) for column in stripped.strip("|").split("|")]
85+
if len(columns) < 5 or columns[0] in {"Envoy Gateway version", "latest"}:
86+
continue
87+
88+
series = _version_series(columns[0])
89+
kube_versions = _kube_versions(columns[4])
90+
if series and kube_versions:
91+
rows[series] = kube_versions
92+
93+
return rows
94+
95+
96+
def scrape():
97+
content = fetch_page(COMPATIBILITY_URL)
98+
if not content:
99+
print_error("Failed to fetch Envoy Gateway compatibility matrix.")
100+
return
101+
102+
compatibility = _matrix_rows(content)
103+
if not compatibility:
104+
print_error("No Envoy Gateway compatibility rows found.")
105+
return
106+
107+
latest_versions = _latest_patch_versions()
108+
if not latest_versions:
109+
print_error("No Envoy Gateway release tags found.")
110+
return
111+
112+
versions = []
113+
for series, kube_versions in compatibility.items():
114+
app_version = latest_versions.get(series)
115+
if not app_version:
116+
continue
117+
118+
versions.append(
119+
OrderedDict(
120+
[
121+
("version", app_version),
122+
("kube", kube_versions),
123+
("requirements", []),
124+
("incompatibilities", []),
125+
]
126+
)
127+
)
128+
129+
if not versions:
130+
print_error("No Envoy Gateway versions extracted from compatibility matrix.")
131+
return
132+
133+
update_compatibility_info(TARGET_FILE, versions)

0 commit comments

Comments
 (0)