|
3 | 3 |
|
4 | 4 | from __future__ import annotations |
5 | 5 |
|
6 | | -import http.client |
7 | 6 | import json |
8 | 7 | import os |
9 | 8 | import re |
10 | 9 | import sys |
11 | 10 | from pathlib import Path |
12 | 11 |
|
13 | 12 |
|
14 | | -WORDPRESS_API_HOST = "api.wordpress.org" |
15 | | -WORDPRESS_VERSION_CHECK_PATH = "/core/version-check/1.7/" |
16 | 13 | WORDPRESS_LATEST_VERSION = os.environ.get("WORDPRESS_LATEST_VERSION") |
| 14 | +WORDPRESS_VERSION_CHECK_FILE = Path("wordpress-version-check.json") |
17 | 15 | SCAN_EXTENSIONS = {".php", ".md", ".txt"} |
18 | 16 | DEFAULT_EXCLUDED_DIRS = { |
19 | 17 | ".git", |
@@ -83,37 +81,24 @@ def get_latest_wordpress_major_minor() -> str: |
83 | 81 | if WORDPRESS_LATEST_VERSION: |
84 | 82 | return normalize_major_minor(WORDPRESS_LATEST_VERSION) |
85 | 83 |
|
86 | | - connection = http.client.HTTPSConnection(WORDPRESS_API_HOST, timeout=20) |
87 | | - connection.request( |
88 | | - "GET", |
89 | | - WORDPRESS_VERSION_CHECK_PATH, |
90 | | - headers={ |
91 | | - "Accept": "application/json", |
92 | | - "User-Agent": "wordpress-tested-up-to-check/1.0", |
93 | | - }, |
94 | | - ) |
95 | | - |
96 | | - response = connection.getresponse() |
97 | | - try: |
98 | | - if response.status != http.client.OK: |
99 | | - raise RuntimeError( |
100 | | - f"WordPress version-check API returned HTTP {response.status}." |
101 | | - ) |
102 | | - |
103 | | - payload = json.loads(response.read().decode("utf-8")) |
104 | | - finally: |
105 | | - connection.close() |
| 84 | + if not WORDPRESS_VERSION_CHECK_FILE.is_file(): |
| 85 | + raise RuntimeError( |
| 86 | + "WORDPRESS_LATEST_VERSION must be set, or wordpress-version-check.json must exist." |
| 87 | + ) |
106 | 88 |
|
| 89 | + payload = json.loads(WORDPRESS_VERSION_CHECK_FILE.read_text(encoding="utf-8")) |
107 | 90 | versions = [] |
| 91 | + |
108 | 92 | for offer in payload.get("offers", []): |
109 | 93 | version = offer.get("current") or offer.get("version") |
110 | 94 | if isinstance(version, str) and VERSION_PATTERN.match(version): |
111 | 95 | versions.append(version) |
112 | 96 |
|
113 | 97 | if not versions: |
114 | | - raise RuntimeError("Could not determine the latest WordPress version from the version-check API.") |
| 98 | + raise RuntimeError("Could not determine the latest WordPress version.") |
115 | 99 |
|
116 | | - return normalize_major_minor(max(versions, key=version_sort_key)) |
| 100 | + latest = max(versions, key=version_sort_key) |
| 101 | + return normalize_major_minor(latest) |
117 | 102 |
|
118 | 103 |
|
119 | 104 | def normalize_major_minor(version: str) -> str: |
|
0 commit comments