Skip to content

Commit 1c15b0c

Browse files
committed
🔄 synced local '.github/workflows/update-module-properties.yml' with remote '.releases/update-module-properties.yml'
1 parent 911cde6 commit 1c15b0c

File tree

1 file changed

+135
-5
lines changed

1 file changed

+135
-5
lines changed

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

Lines changed: 135 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ jobs:
9595
print(f"Found version in release name: {release_name_version}")
9696
9797
# Extract assets
98-
# Special handling for composer (uses .phar files), xlight (version in release name), and git (files start with "portable")
98+
# Special handling for:
99+
# - composer: uses .phar files
100+
# - xlight: version in release name
101+
# - git: files start with "portable"
102+
# - ghostscript: version embedded without dots (e.g., gs10051w64.7z for version 10.05.1)
99103
assets = []
100104
for asset in release_data.get('assets', []):
101105
filename = asset['name']
@@ -171,6 +175,62 @@ jobs:
171175
print(f"ERROR: Could not extract version for git from release name or filename: {filename}")
172176
print(f"Release name: {release_data.get('name', 'N/A')}")
173177
exit(1)
178+
elif module_name == 'ghostscript':
179+
# For ghostscript, files are named like gs10051w64.7z where 10051 = version 10.05.1
180+
# Pattern: gs + version_without_dots + w32/w64 + .7z
181+
if filename.lower().startswith('gs') and filename.endswith('.7z'):
182+
download_url = asset['browser_download_url']
183+
184+
# Extract the numeric part between 'gs' and 'w32'/'w64'
185+
# Example: gs10051w64.7z -> 10051
186+
match = re.match(r'gs(\d+)w(?:32|64)\.7z', filename.lower())
187+
if match:
188+
version_digits = match.group(1)
189+
# Convert version digits to proper version format
190+
# Examples: 922 -> 9.22, 9561 -> 9.56.1, 10051 -> 10.05.1, 1000 -> 10.0
191+
if len(version_digits) == 3:
192+
# Format: XYZ -> X.YZ (e.g., 922 -> 9.22)
193+
ver = f"{version_digits[0]}.{version_digits[1:]}"
194+
elif len(version_digits) == 4:
195+
if version_digits.startswith('10'):
196+
# Format: 10XY -> 10.X.Y or 10.XY (e.g., 1000 -> 10.0, 1003 -> 10.03)
197+
if version_digits[2:] == '00':
198+
ver = f"10.{version_digits[2]}" # 1000 -> 10.0
199+
else:
200+
ver = f"10.{version_digits[2:]}" # 1003 -> 10.03
201+
else:
202+
# Format: XYZW -> X.YZ.W (e.g., 9561 -> 9.56.1)
203+
ver = f"{version_digits[0]}.{version_digits[1:3]}.{version_digits[3]}"
204+
elif len(version_digits) == 5:
205+
# Format: 10XYZ -> 10.XY.Z (e.g., 10051 -> 10.05.1, 10020 -> 10.02.0)
206+
ver = f"10.{version_digits[2:4]}.{version_digits[4]}"
207+
else:
208+
print(f"WARNING: Unexpected version digit length for ghostscript: {version_digits}")
209+
if release_name_version:
210+
ver = release_name_version
211+
else:
212+
print(f"ERROR: Could not parse version from filename: {filename}")
213+
continue
214+
215+
assets.append({
216+
'version': ver,
217+
'url': download_url,
218+
'filename': filename
219+
})
220+
print(f"Found: {filename} -> Version: {ver} (parsed from filename)")
221+
elif release_name_version:
222+
# Fallback to release name version
223+
ver = release_name_version
224+
assets.append({
225+
'version': ver,
226+
'url': download_url,
227+
'filename': filename
228+
})
229+
print(f"Found: {filename} -> Version: {ver} (from release name)")
230+
else:
231+
print(f"ERROR: Could not extract version for ghostscript from filename: {filename}")
232+
print(f"Release name: {release_data.get('name', 'N/A')}")
233+
exit(1)
174234
elif filename.lower().startswith(module_name):
175235
# Standard modules use .7z, .exe, or .zip and must start with module name (case-insensitive)
176236
if filename.endswith('.7z') or filename.endswith('.exe') or filename.endswith('.zip'):
@@ -226,6 +286,10 @@ jobs:
226286
print(f"No valid assets found in release")
227287
print(f"Expected: .7z, .exe, or .zip files starting with 'portable'")
228288
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
289+
elif module_name == 'ghostscript':
290+
print(f"No valid ghostscript assets found in release")
291+
print(f"Expected: .7z files matching pattern gs<version>w32/w64.7z")
292+
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
229293
else:
230294
print(f"No .7z, .exe, or .zip assets found starting with '{module_name}' in release")
231295
print(f"Available assets: {[a['name'] for a in release_data.get('assets', [])]}")
@@ -266,15 +330,67 @@ jobs:
266330
for key, value in properties.items():
267331
print(f" {key} = {value}")
268332
333+
# Track if any changes were made
334+
changes_made = False
335+
added_versions = []
336+
updated_versions = []
337+
269338
# Add new versions
270339
for asset in assets:
271340
ver = asset['version']
272341
url = asset['url']
273342
274343
# Create property key (just version number)
275344
key = ver
276-
properties[key] = url
277-
print(f"Added/Updated: {key} = {url}")
345+
346+
# Check if this is a new version or an update
347+
if key in properties:
348+
if properties[key] != url:
349+
updated_versions.append(f"{key}: {properties[key]} -> {url}")
350+
properties[key] = url
351+
changes_made = True
352+
print(f"Updated: {key} = {url}")
353+
else:
354+
print(f"Unchanged: {key} = {url} (already exists with same URL)")
355+
else:
356+
added_versions.append(f"{key} = {url}")
357+
properties[key] = url
358+
changes_made = True
359+
print(f"Added: {key} = {url}")
360+
361+
# Check if any changes were actually made
362+
if not changes_made:
363+
print(f"\n{'='*70}")
364+
print(f"ERROR: No changes were made to {properties_file}")
365+
print(f"{'='*70}")
366+
print(f"\nRelease Information:")
367+
print(f" Release Tag: {release_tag}")
368+
print(f" Release Name: {release_data.get('name', 'N/A')}")
369+
print(f" Module: {module_name}")
370+
print(f"\nAssets Found in Release:")
371+
for idx, asset in enumerate(assets, 1):
372+
print(f" {idx}. {asset['filename']}")
373+
print(f" Version: {asset['version']}")
374+
print(f" URL: {asset['url']}")
375+
print(f"\nExisting Properties File Content:")
376+
print(f" File: {properties_file}")
377+
print(f" Total entries: {len(properties)}")
378+
for key, value in properties.items():
379+
print(f" {key} = {value}")
380+
print(f"\nReason:")
381+
print(f" All versions from this release already exist in the properties file")
382+
print(f" with the same URLs. No updates are needed.")
383+
print(f"\nPossible Causes:")
384+
print(f" 1. This release was already processed previously")
385+
print(f" 2. The properties file was manually updated with these versions")
386+
print(f" 3. The workflow was re-run on the same release")
387+
print(f"\nAction Required:")
388+
print(f" If this is unexpected, verify:")
389+
print(f" - The release contains new assets not in the properties file")
390+
print(f" - The asset filenames match the expected pattern for {module_name}")
391+
print(f" - The version extraction logic is working correctly")
392+
print(f"{'='*70}\n")
393+
exit(1)
278394
279395
# Sort properties by version (semver)
280396
def extract_version(key):
@@ -298,8 +414,22 @@ jobs:
298414
for key, value in sorted_properties.items():
299415
f.write(f"{key} = {value}\n")
300416
301-
print(f"\nSuccessfully updated {properties_file}")
302-
print(f"Total versions: {len(sorted_properties)}")
417+
print(f"\n{'='*70}")
418+
print(f"SUCCESS: Updated {properties_file}")
419+
print(f"{'='*70}")
420+
print(f"Total versions in file: {len(sorted_properties)}")
421+
422+
if added_versions:
423+
print(f"\nAdded {len(added_versions)} new version(s):")
424+
for ver in added_versions:
425+
print(f" + {ver}")
426+
427+
if updated_versions:
428+
print(f"\nUpdated {len(updated_versions)} existing version(s):")
429+
for ver in updated_versions:
430+
print(f" ~ {ver}")
431+
432+
print(f"{'='*70}\n")
303433
304434
EOF
305435

0 commit comments

Comments
 (0)