Skip to content

Commit e36ebf6

Browse files
authored
Update create_release_tag.py
1 parent 1707a18 commit e36ebf6

File tree

1 file changed

+38
-61
lines changed

1 file changed

+38
-61
lines changed

.github/workflows/create_release_tag.py

Lines changed: 38 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import zipfile
77
from typing import List, Dict, Tuple, Optional
88
import sys
9+
import json
910

1011
TARGET_FILE = "src/index.json"
1112

@@ -22,7 +23,8 @@ def get_api_urls() -> Tuple[str, str]:
2223
return f"{base_url}/releases", f"{base_url}/git/tags"
2324

2425

25-
def get_file_changes() -> List[str]:
26+
def get_file_diff() -> List[str]:
27+
"""Get added lines from git diff"""
2628
diff_output = subprocess.check_output(
2729
["git", "diff", "HEAD^", "HEAD", "--", TARGET_FILE],
2830
text=True
@@ -37,70 +39,37 @@ def get_file_changes() -> List[str]:
3739
return added_lines
3840

3941

40-
def parse_filename(added_lines: List[str]) -> Optional[Dict]:
41-
"""Parse filename and metadata from added lines"""
42-
filename = None
43-
metadata = {}
44-
download_url = None
45-
sha256_digest = None
46-
in_metadata = False
47-
42+
def parse_filename(added_lines: List[str]) -> Optional[str]:
43+
"""Parse filename from added lines"""
4844
for line in added_lines:
49-
line = line.strip()
50-
5145
if '"filename":' in line:
5246
try:
5347
filename = line.split(":")[1].strip().strip('",')
48+
return filename
5449
except IndexError:
5550
print(f"Error parsing line: {line}")
51+
return None
5652

57-
elif '"downloadUrl":' in line:
58-
try:
59-
download_url = line.split(":")[1].strip().strip('",')
60-
except IndexError:
61-
print(f"Error parsing downloadUrl: {line}")
62-
63-
elif '"sha256Digest":' in line:
64-
try:
65-
sha256_digest = line.split(":")[1].strip().strip('",')
66-
except IndexError:
67-
print(f"Error parsing sha256Digest: {line}")
68-
69-
elif '"metadata":' in line:
70-
in_metadata = True
71-
continue
72-
73-
elif in_metadata and line.startswith('"'):
74-
# Parse metadata key-value pairs
75-
try:
76-
key = line.split(":")[0].strip().strip('"')
77-
value = line.split(":")[1].strip().strip('",')
78-
metadata[key] = value
79-
except IndexError:
80-
print(f"Error parsing metadata line: {line}")
8153

82-
elif line.startswith("}"):
83-
in_metadata = False
54+
def get_extension_info(filename: str) -> Optional[Dict]:
55+
"""Get extension information from index.json"""
56+
try:
57+
with open(TARGET_FILE, 'r') as f:
58+
index_data = json.load(f)
8459

85-
if not filename:
86-
print("No filename found in added lines")
87-
return None
60+
# Search for the extension entry with matching filename
61+
for ext_name, versions in index_data.get("extensions", {}).items():
62+
for version in versions:
63+
if version.get("filename") == filename:
64+
return version
8865

89-
if not download_url:
90-
print("No downloadUrl found in added lines")
66+
print(f"Extension {filename} not found in index.json")
9167
return None
9268

93-
if not sha256_digest:
94-
print("No sha256Digest found in added lines")
69+
except Exception as e:
70+
print(f"Error reading index.json: {e}")
9571
return None
9672

97-
return {
98-
"filename": filename,
99-
"metadata": metadata,
100-
"downloadUrl": download_url,
101-
"sha256Digest": sha256_digest
102-
}
103-
10473

10574
def generate_tag_and_title(filename: str) -> Tuple[str, str, str]:
10675
"""Generate tag name and release title from filename"""
@@ -115,13 +84,15 @@ def generate_tag_and_title(filename: str) -> Tuple[str, str, str]:
11584
release_title = f"{name} {version}"
11685
return tag_name, release_title, version
11786

87+
11888
def check_tag_exists(url: str, tag_name: str, headers: Dict[str, str]) -> bool:
11989
response = requests.get(
12090
f"{url}/{tag_name}",
12191
headers=headers
12292
)
12393
return response.status_code == 200
12494

95+
12596
def create_release(url: str, release_data: Dict[str, str], headers: Dict[str, str], wheel_url: str = None) -> None:
12697
try:
12798
# Create release
@@ -155,7 +126,7 @@ def create_release(url: str, release_data: Dict[str, str], headers: Dict[str, st
155126
data=wheel_response.content
156127
)
157128
upload_response.raise_for_status()
158-
print(f"Successfully uploaded wheel file")
129+
print("Successfully uploaded wheel file")
159130

160131
except requests.exceptions.RequestException as e:
161132
print(f"\nError creating release for {release_data['tag_name']}")
@@ -237,31 +208,37 @@ def main():
237208
sys.exit(1)
238209

239210
release_url, tag_url = get_api_urls()
240-
241211
headers = {
242212
"Authorization": f"token {github_token}",
243213
"Accept": "application/vnd.github.v3+json"
244214
}
245215

246216
try:
247-
added_lines = get_file_changes()
217+
# Get added lines from git diff
218+
added_lines = get_file_diff()
248219
if not added_lines:
249220
print("No changes found in index.json")
250221
return
251222

252-
file_info = parse_filename(added_lines)
253-
if not file_info:
223+
# Parse filename from added lines
224+
filename = parse_filename(added_lines)
225+
if not filename:
254226
print("No filename found in changes")
255227
return
256228

229+
# Get extension info from index.json
230+
extension_info = get_extension_info(filename)
231+
if not extension_info:
232+
print("Could not get extension information from index.json")
233+
return
234+
257235
try:
258-
filename = file_info["filename"]
259236
tag_name, release_title, version = generate_tag_and_title(filename)
260237

261238
# Get history notes from wheel package
262239
print("Getting history notes from wheel package...")
263-
history_note = get_history_note(file_info["downloadUrl"], version)
264-
240+
history_note = get_history_note(extension_info["downloadUrl"], version)
241+
265242
# If no notes found in wheel, try source code
266243
if "No history notes found" in history_note:
267244
print("No history notes found in wheel, trying source code...")
@@ -274,7 +251,7 @@ def main():
274251
history_note = f"Release {extension_name} {version}"
275252

276253
# Generate release body
277-
release_body = generate_release_body(history_note, file_info["sha256Digest"], filename)
254+
release_body = generate_release_body(history_note, extension_info["sha256Digest"], filename)
278255

279256
commit_sha = subprocess.check_output(
280257
["git", "rev-parse", "HEAD"],
@@ -298,7 +275,7 @@ def main():
298275
print(f"Target commit: {commit_sha}")
299276
print(f"Body preview: {release_body[:200]}...")
300277

301-
create_release(release_url, release_data, headers, file_info["downloadUrl"])
278+
create_release(release_url, release_data, headers, extension_info["downloadUrl"])
302279

303280
except ValueError as e:
304281
print(f"Error generating tag for filename {filename}: {e}")

0 commit comments

Comments
 (0)