Skip to content

Commit 2e28e7c

Browse files
committed
🔄 synced local '.github/workflows/update-module-properties.yml' with remote '.releases/update-module-properties.yml'
1 parent 80be29f commit 2e28e7c

File tree

1 file changed

+81
-27
lines changed

1 file changed

+81
-27
lines changed

‎.github/workflows/update-module-properties.yml‎

Lines changed: 81 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -84,68 +84,114 @@ jobs:
8484
response.raise_for_status()
8585
release_data = response.json()
8686
87-
# For composer, extract version from release title/name
88-
composer_version = None
89-
if module_name == 'composer':
90-
release_name = release_data.get('name', '')
91-
# Try to extract version from release name (e.g., "Composer 2.8.4" -> "2.8.4")
92-
version_match = re.search(r'(\d+\.\d+\.\d+(?:\.\d+)?)', release_name)
87+
# Extract version from release title/name (fallback for all modules)
88+
release_name_version = None
89+
release_name = release_data.get('name', '')
90+
if release_name:
91+
# Try to extract version from release name (supports 2-5+ part versions: X.Y, X.Y.Z, X.Y.Z.W, etc.)
92+
version_match = re.search(r'(\d+(?:\.\d+)+)', release_name)
9393
if version_match:
94-
composer_version = version_match.group(1)
95-
print(f"Extracted composer version from release name: {composer_version}")
94+
release_name_version = version_match.group(1)
95+
print(f"Found version in release name: {release_name_version}")
9696
9797
# Extract assets
98-
# Special handling for composer (uses .phar files)
98+
# Special handling for composer (uses .phar files) and xlight (version in release name)
9999
assets = []
100100
for asset in release_data.get('assets', []):
101101
filename = asset['name']
102102
103103
# For composer, accept any .phar file (doesn't need to start with "composer")
104+
# For xlight, accept xlight-x64.zip (version comes from release name)
104105
# For other modules, file must start with module name
105106
if module_name == 'composer':
106107
if filename.endswith('.phar'):
107108
download_url = asset['browser_download_url']
108-
# Use version from release name, or extract from filename
109-
if composer_version:
110-
ver = composer_version
109+
# Try to extract version from filename first, then fall back to release name
110+
version_match = re.search(r'(\d+(?:\.\d+)+)', filename)
111+
if version_match:
112+
ver = version_match.group(1)
113+
elif release_name_version:
114+
ver = release_name_version
111115
else:
112-
version_match = re.search(r'(\d+\.\d+\.\d+(?:\.\d+)?)', filename)
113-
if version_match:
114-
ver = version_match.group(1)
115-
else:
116-
print(f"ERROR: Could not extract version for composer from release name or filename: {filename}")
117-
print(f"Release name: {release_data.get('name', 'N/A')}")
118-
exit(1)
116+
print(f"ERROR: Could not extract version for composer from release name or filename: {filename}")
117+
print(f"Release name: {release_data.get('name', 'N/A')}")
118+
exit(1)
119119
assets.append({
120120
'version': ver,
121121
'url': download_url,
122122
'filename': filename
123123
})
124124
print(f"Found: {filename} -> Version: {ver}")
125+
elif module_name == 'xlight':
126+
# For xlight, look for xlight-x64.zip and use version from release name
127+
if filename == 'xlight-x64.zip':
128+
download_url = asset['browser_download_url']
129+
if release_name_version:
130+
ver = release_name_version
131+
assets.append({
132+
'version': ver,
133+
'url': download_url,
134+
'filename': filename
135+
})
136+
print(f"Found: {filename} -> Version: {ver}")
137+
else:
138+
print(f"ERROR: Could not extract version for xlight from release name")
139+
print(f"Release name: {release_data.get('name', 'N/A')}")
140+
exit(1)
125141
elif filename.lower().startswith(module_name):
126-
# Standard modules use .7z or .zip and must start with module name (case-insensitive)
127-
if filename.endswith('.7z') or filename.endswith('.zip'):
142+
# Standard modules use .7z, .exe, or .zip and must start with module name (case-insensitive)
143+
if filename.endswith('.7z') or filename.endswith('.exe') or filename.endswith('.zip'):
128144
download_url = asset['browser_download_url']
129145
130-
# Extract version number (flexible pattern)
131-
version_match = re.search(r'(\d+\.\d+\.\d+(?:\.\d+)?)', filename)
146+
# Try to extract version from filename first, then fall back to release name
147+
version_match = re.search(r'(\d+(?:\.\d+)+)', filename)
132148
if version_match:
133149
ver = version_match.group(1)
134150
assets.append({
135151
'version': ver,
136152
'url': download_url,
137153
'filename': filename
138154
})
139-
print(f"Found: {filename} -> Version: {ver}")
155+
print(f"Found: {filename} -> Version: {ver} (from filename)")
156+
elif release_name_version:
157+
ver = release_name_version
158+
assets.append({
159+
'version': ver,
160+
'url': download_url,
161+
'filename': filename
162+
})
163+
print(f"Found: {filename} -> Version: {ver} (from release name)")
140164
else:
141-
print(f"Warning: Could not extract version from: {filename}")
165+
print(f"\n{'='*60}")
166+
print(f"ERROR: Could not extract version for {module_name}")
167+
print(f"{'='*60}")
168+
print(f"Module name: {module_name}")
169+
print(f"Release tag: {release_tag}")
170+
print(f"Release name: {release_data.get('name', 'N/A')}")
171+
print(f"Asset filename: {filename}")
172+
print(f"Asset URL: {download_url}")
173+
print(f"\nVersion extraction attempts:")
174+
print(f" 1. Filename regex pattern: r'(\\d+(?:\\.\\d+)+)'")
175+
print(f" Matches: X.Y, X.Y.Z, X.Y.Z.W, etc. (2+ parts)")
176+
print(f" Result: No match found in '{filename}'")
177+
print(f" 2. Release name: '{release_data.get('name', 'N/A')}'")
178+
print(f" Result: No version found")
179+
print(f"\nAll assets in this release:")
180+
for idx, a in enumerate(release_data.get('assets', []), 1):
181+
print(f" {idx}. {a['name']}")
182+
print(f"{'='*60}\n")
183+
exit(1)
142184
143185
if not assets:
144186
if module_name == 'composer':
145187
print(f"No .phar assets found in release")
146188
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
189+
elif module_name == 'xlight':
190+
print(f"No xlight-x64.zip asset found in release")
191+
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
147192
else:
148-
print(f"No .7z or .zip assets found starting with '{module_name}' in release")
193+
print(f"No .7z, .exe, or .zip assets found starting with '{module_name}' in release")
194+
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
149195
exit(0)
150196
151197
# Read existing properties file
@@ -250,7 +296,7 @@ jobs:
250296
This PR updates the `${{ steps.module_info.outputs.module_name }}.properties` file with new versions from release `${{ github.event.release.tag_name || github.event.inputs.release_tag }}`.
251297
252298
### Changes:
253-
- Extracted assets starting with `${{ steps.module_info.outputs.module_name }}`
299+
- Extracted assets starting with `${{ steps.module_info.outputs.module_name }}` (.7z, .exe, or .zip files)
254300
- Added version entries with download URLs
255301
- Maintained semver ordering (newest first)
256302
@@ -276,3 +322,11 @@ jobs:
276322
gh pr merge ${{ steps.create_pr.outputs.pull-request-number }} --auto --squash
277323
env:
278324
GH_TOKEN: ${{ secrets.GH_PAT }}
325+
326+
- name: Cleanup
327+
if: always()
328+
run: |
329+
if [ -f module_name.txt ]; then
330+
rm module_name.txt
331+
echo "Cleaned up module_name.txt"
332+
fi

0 commit comments

Comments
 (0)