Skip to content

Commit 41e41b5

Browse files
committed
🔄 synced local '.github/workflows/update-releases-properties.yml' with remote '.releases/update-releases-properties.yml'
1 parent 591342b commit 41e41b5

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

.github/workflows/update-releases-properties.yml

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ name: Update Releases Properties
66
on:
77
release:
88
types: [prereleased, released, edited]
9-
9+
1010
# Manual trigger for testing
1111
workflow_dispatch:
1212
inputs:
@@ -17,29 +17,29 @@ on:
1717
jobs:
1818
update-properties:
1919
runs-on: ubuntu-latest
20-
20+
2121
steps:
2222
- name: Checkout repository
2323
uses: actions/checkout@v4
2424
with:
2525
token: ${{ secrets.GH_PAT }}
26-
26+
2727
- name: Set up Python
2828
uses: actions/setup-python@v5
2929
with:
3030
python-version: '3.11'
31-
31+
3232
- name: Install dependencies
3333
run: |
3434
pip install requests packaging
35-
35+
3636
- name: Extract module name from repository
3737
id: extract_module
3838
run: |
3939
# Extract module name from repo name (e.g., "module-php" -> "php")
4040
REPO_NAME="${{ github.event.repository.name }}"
4141
echo "Repository name: ${REPO_NAME}"
42-
42+
4343
# Remove "module-" prefix (case-insensitive)
4444
if [[ "${REPO_NAME}" == module-* ]]; then
4545
MODULE_NAME="${REPO_NAME#module-}"
@@ -50,13 +50,13 @@ jobs:
5050
echo "Expected format: module-MODULENAME (e.g., module-php)"
5151
exit 1
5252
fi
53-
53+
5454
# Convert to lowercase
5555
MODULE_NAME=$(echo "${MODULE_NAME}" | tr '[:upper:]' '[:lower:]')
56-
56+
5757
echo "module_name=${MODULE_NAME}" >> $GITHUB_OUTPUT
5858
echo "Module name: ${MODULE_NAME}"
59-
59+
6060
- name: Update releases properties
6161
env:
6262
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -71,47 +71,47 @@ jobs:
7171
import requests
7272
from packaging import version
7373
from collections import OrderedDict
74-
74+
7575
# Get environment variables
7676
release_tag = os.environ['RELEASE_TAG']
7777
repo_owner = os.environ['REPO_OWNER']
7878
repo_name = os.environ['REPO_NAME']
7979
module_name = os.environ['MODULE_NAME']
8080
github_token = os.environ['GITHUB_TOKEN']
81-
81+
8282
# Strip module name prefix from tag if present (e.g., "postgresql-2025.11.22" -> "2025.11.22")
8383
if release_tag.lower().startswith(f"{module_name.lower()}-"):
8484
original_tag = release_tag
8585
release_tag = release_tag[len(module_name)+1:]
8686
print(f"Stripped module prefix from tag: {original_tag} -> {release_tag}")
87-
87+
8888
print(f"Processing release: {release_tag}")
8989
print(f"Module name: {module_name}")
90-
90+
9191
# Construct API URL
9292
api_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/releases/tags/{release_tag}"
93-
93+
9494
headers = {
9595
'Authorization': f'token {github_token}',
9696
'Accept': 'application/vnd.github.v3+json'
9797
}
98-
98+
9999
print(f"Fetching release information from: {api_url}")
100-
100+
101101
# Fetch release data
102102
response = requests.get(api_url, headers=headers)
103103
response.raise_for_status()
104104
release_data = response.json()
105-
105+
106106
# Extract assets that end with .7z only
107107
assets = []
108108
for asset in release_data.get('assets', []):
109109
filename = asset['name']
110-
110+
111111
# Check if file ends with .7z
112112
if filename.endswith('.7z'):
113113
download_url = asset['browser_download_url']
114-
114+
115115
# Extract version number after module name (e.g., "bearsampp-postgresql-18.1-2025.7.2.7z" -> "18.1")
116116
# Pattern: module_name followed by version, then either a dash+date or .7z
117117
# Supports: 18.1, 17.2.3, 3.2.1.0, 17.0-RC1
@@ -131,29 +131,29 @@ jobs:
131131
print(f"Found: {filename} -> Version: {ver}")
132132
else:
133133
print(f"Warning: Could not extract version from: {filename}")
134-
134+
135135
if not assets:
136136
print(f"No .7z assets found in release")
137137
exit(0)
138-
138+
139139
# Read existing properties file
140140
properties_file = "releases.properties"
141-
141+
142142
if not os.path.exists(properties_file):
143143
print(f"Properties file not found: {properties_file}")
144144
print(f"Creating new properties file...")
145145
with open(properties_file, 'w', encoding='utf-8') as f:
146146
f.write(f"# {module_name.upper()} Releases Properties\n")
147147
f.write(f"# Auto-generated and maintained by automation\n\n")
148-
148+
149149
with open(properties_file, 'r', encoding='utf-8') as f:
150150
lines = f.readlines()
151-
151+
152152
# Parse existing properties
153153
properties = OrderedDict()
154154
header_lines = []
155155
in_header = True
156-
156+
157157
for line in lines:
158158
stripped = line.strip()
159159
if in_header and (stripped.startswith('#') or stripped == ''):
@@ -163,7 +163,7 @@ jobs:
163163
if '=' in line and not stripped.startswith('#'):
164164
key, value = line.split('=', 1)
165165
properties[key.strip()] = value.strip()
166-
166+
167167
# Fix malformed version entries by re-extracting correct versions from URLs
168168
# This handles cases like "2025.7.2.7" or "18.1-2025" that should be "18.1"
169169
fixed_properties = OrderedDict()
@@ -175,7 +175,7 @@ jobs:
175175
url,
176176
re.IGNORECASE
177177
)
178-
178+
179179
if url_version_match:
180180
correct_version = url_version_match.group(1)
181181
# If the key is malformed (date-like or has trailing year), fix it
@@ -188,46 +188,46 @@ jobs:
188188
else:
189189
# If we can't extract version from URL, keep the original entry
190190
fixed_properties[key] = url
191-
191+
192192
properties = fixed_properties
193-
193+
194194
# Add new versions
195195
for asset in assets:
196196
ver = asset['version']
197197
url = asset['url']
198-
198+
199199
# Create property key (just version number)
200200
key = ver
201201
properties[key] = url
202202
print(f"Added/Updated: {key} = {url}")
203-
203+
204204
# Sort properties by version (semver)
205205
def extract_version(key):
206206
# Parse version directly from key
207207
try:
208208
return version.parse(key)
209209
except:
210210
return version.parse("0.0.0")
211-
211+
212212
sorted_properties = OrderedDict(
213213
sorted(properties.items(), key=lambda x: extract_version(x[0]), reverse=True)
214214
)
215-
215+
216216
# Write back to file
217217
with open(properties_file, 'w', encoding='utf-8') as f:
218218
# Write header
219219
for line in header_lines:
220220
f.write(line)
221-
221+
222222
# Write sorted properties with spaces around equals sign
223223
for key, value in sorted_properties.items():
224224
f.write(f"{key} = {value}\n")
225-
225+
226226
print(f"\nSuccessfully updated {properties_file}")
227227
print(f"Total versions: {len(sorted_properties)}")
228-
228+
229229
EOF
230-
230+
231231
- name: Create Pull Request
232232
id: create_pr
233233
uses: peter-evans/create-pull-request@v6
@@ -236,37 +236,37 @@ jobs:
236236
base: main
237237
commit-message: |
238238
Update releases.properties
239-
239+
240240
Auto-generated from release ${{ github.event.release.tag_name || github.event.inputs.release_tag }}
241241
branch: update-releases-${{ github.event.release.tag_name || github.event.inputs.release_tag }}
242242
delete-branch: true
243243
title: 'Update releases.properties from release ${{ github.event.release.tag_name || github.event.inputs.release_tag }}'
244244
body: |
245245
## 🤖 Automated Releases Properties Update
246-
246+
247247
This PR updates the `releases.properties` file with new versions from release `${{ github.event.release.tag_name || github.event.inputs.release_tag }}`.
248-
248+
249249
### Changes:
250250
- Extracted .7z assets from the release
251251
- Added version entries with download URLs
252252
- Maintained semver ordering (newest first)
253-
253+
254254
**Release URL:** ${{ github.event.release.html_url || format('https://github.com/{0}/{1}/releases/tag/{2}', github.repository_owner, github.event.repository.name, github.event.inputs.release_tag) }}
255-
255+
256256
### Next Steps:
257257
1. ⏳ Link validation will run automatically
258258
2. ✅ Once validation passes, this PR will auto-merge
259259
3. ❌ If validation fails, please review and fix invalid URLs
260260
labels: |
261261
automated
262262
releases-update
263-
263+
264264
- name: Wait for validation checks
265265
if: steps.create_pr.outputs.pull-request-number != ''
266266
run: |
267267
echo "Waiting for link validation to complete..."
268268
sleep 10
269-
269+
270270
- name: Enable auto-merge
271271
if: steps.create_pr.outputs.pull-request-number != ''
272272
run: |

0 commit comments

Comments
 (0)