@@ -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