Skip to content

Commit e0f8d8d

Browse files
committed
Use python script for parsing json
1 parent 888e63f commit e0f8d8d

File tree

3 files changed

+93
-98
lines changed

3 files changed

+93
-98
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import sys
2+
import json
3+
import os
4+
import requests
5+
from packaging import version
6+
import re
7+
8+
mendix_version = sys.argv[1]
9+
mendix_version_base = re.match(r'(\d+\.\d+\.\d+)', mendix_version).group(1)
10+
11+
print(f"Mendix version: {mendix_version}")
12+
print(f"Mendix base version: {mendix_version_base}")
13+
14+
# Parse the JSON file
15+
try:
16+
with open('mendix_version.json', 'r') as file:
17+
version_data = json.load(file)
18+
except FileNotFoundError:
19+
print("mendix_version.json not found")
20+
sys.exit(1)
21+
22+
# Find the best matching version range
23+
best_match = None
24+
highest_min_version = version.parse("0.0.0")
25+
mendix_version_obj = version.parse(mendix_version_base)
26+
27+
for range_str, data in version_data.items():
28+
if range_str.startswith(">="):
29+
min_ver_str = range_str[2:]
30+
min_ver = version.parse(min_ver_str)
31+
32+
if mendix_version_obj >= min_ver and min_ver > highest_min_version:
33+
best_match = range_str
34+
highest_min_version = min_ver
35+
print(f"Found matching range: {range_str}")
36+
37+
if best_match:
38+
print(f"Best matching range: {best_match}")
39+
40+
# Get the major version to look for in tags
41+
max_pattern = version_data[best_match].get("max", "")
42+
major_version = max_pattern.split('.')[0]
43+
44+
print(f"Looking for latest version with major version: {major_version}")
45+
46+
# Get available tags from native-template repository
47+
response = requests.get('https://api.github.com/repos/mendix/native-template/tags')
48+
if response.status_code == 200:
49+
all_tags = response.json()
50+
tag_names = [tag['name'] for tag in all_tags]
51+
print(f"Available tags: {tag_names}")
52+
53+
# Find the latest version matching the major version
54+
matching_tags = []
55+
56+
for tag in tag_names:
57+
# Remove 'v' prefix if present for comparison
58+
clean_tag = tag[1:] if tag.startswith('v') else tag
59+
60+
# Check if the tag starts with the major version
61+
if clean_tag.startswith(f"{major_version}."):
62+
try:
63+
# Try to parse as a version (this handles proper version numbers)
64+
tag_version = version.parse(clean_tag)
65+
matching_tags.append((tag, tag_version))
66+
except:
67+
# Skip tags that don't parse as proper versions
68+
pass
69+
70+
if matching_tags:
71+
# Sort by version (highest last) and get the last one
72+
matching_tags.sort(key=lambda x: x[1])
73+
latest_version = matching_tags[-1][0]
74+
print(f"Selected Native Template version: {latest_version}")
75+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
76+
f.write(f"nt_branch={latest_version}\n")
77+
else:
78+
# Fallback to min version if no matching tag found
79+
min_version = version_data[best_match].get("min", "")
80+
print(f"No matching tag found, using minimum version: {min_version}")
81+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
82+
f.write(f"nt_branch={min_version}\n")
83+
else:
84+
print(f"Failed to get tags: {response.status_code}")
85+
print("Using master as fallback")
86+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
87+
f.write("nt_branch=master\n")
88+
else:
89+
print("No matching version range found, using master")
90+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
91+
f.write("nt_branch=master\n")

.github/scripts/determine-nt-version.sh

Lines changed: 0 additions & 96 deletions
This file was deleted.

.github/workflows/NativePipeline.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ jobs:
136136
if: steps.check-input.outputs.source == 'auto'
137137
id: determine-nt-branch
138138
run: |
139-
chmod +x ./.github/scripts/determine-nt-version.sh
140-
./.github/scripts/determine-nt-version.sh "${{ needs.mendix-version.outputs.mendix_version }}"
139+
pip install requests packaging
140+
python ./.github/scripts/determine-nt-version.py "${{ needs.mendix-version.outputs.mendix_version }}"
141141
- name: "Set output nt_branch"
142142
id: set-output
143143
run: |

0 commit comments

Comments
 (0)