Skip to content

Commit 9de2f16

Browse files
authoredMar 12, 2025
Bugfix MTE-4370 "Bitrise Xcode Check and Update" should query the latest available stacks (#25166)
Update "Bitrise Xcode Check and Update" Github Actions to query the latest stacks.
1 parent 2d47332 commit 9de2f16

File tree

1 file changed

+54
-12
lines changed

1 file changed

+54
-12
lines changed
 

‎test-fixtures/update.py

+54-12
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,34 @@ def parse_semver(raw_str):
3838
else:
3939
return False
4040

41+
def latest_stack():
42+
try:
43+
resp = requests.get(BITRISE_STACK_INFO)
44+
resp_json = resp.json()['available_stacks']
45+
keys = sorted([key for key in resp_json.keys() if 'osx-xcode-edge' not in key], reverse=True)
46+
return keys[0]
47+
except HTTPError as http_error:
48+
print('An HTTP error has occurred: {http_error}')
49+
except Exception as err:
50+
print('An exception has occurred: {err}')
51+
52+
def latest_stable_stack():
53+
try:
54+
resp = requests.get(BITRISE_STACK_INFO)
55+
resp_json = resp.json()['available_stacks']
56+
keys = sorted([key for key in resp_json.keys() if '-edge' not in key], reverse=True)
57+
return keys[0]
58+
except HTTPError as http_error:
59+
print('An HTTP error has occurred: {http_error}')
60+
except Exception as err:
61+
print('An exception has occurred: {err}')
62+
63+
def write_to_bitrise_yml(yaml, version):
64+
yaml['workflows'][WORKFLOW]['meta']['bitrise.io']['stack'] = '{0}{1}'.format(pattern, version)
65+
with open(tmp_file, 'w+') as tmpfile:
66+
obj_yaml.dump(yaml, tmpfile)
67+
copyfile(tmp_file, BITRISE_YML)
68+
os.remove(tmp_file)
4169

4270
def default_stack():
4371
try:
@@ -58,7 +86,8 @@ def default_stack():
5886
4. modify bitrise.yml (update stack value)
5987
'''
6088

61-
default_semver = default_stack().split(pattern)[1]
89+
latest_stable_semver = latest_stable_stack().split(pattern)[1]
90+
latest_semver = latest_stack().split(pattern)[1]
6291
tmp_file = 'tmp.yml'
6392

6493
with open(BITRISE_YML, 'r') as infile:
@@ -75,15 +104,28 @@ def default_stack():
75104

76105
# remove pattern prefix from current_semver to compare with largest
77106
current_semver = current_semver.split(pattern)[1]
78-
79-
if current_semver >= default_semver:
80-
print('Xcode version unchanged or more recent! aborting.')
107+
108+
print("current_semver: {0}".format(current_semver))
109+
print("latest_stable_semver: {0}".format(latest_stable_semver))
110+
print("latest_semver: {0}".format(latest_semver))
111+
112+
# if we use an edge stack currently, see if there is a new stable version
113+
if '-edge' in current_semver:
114+
# if there is a stable stack of the same version or later, use stable stack.
115+
# otherwise do nothing
116+
if latest_stable_semver >= current_semver.replace('-edge', ''):
117+
print("Stable version of Bitrise stack available: {0} ... updating bitrise.yml!".format(latest_stable_semver))
118+
write_to_bitrise_yml(y, latest_stable_semver)
119+
else:
120+
print('No stable version of Bitrise stack available! aborting.')
121+
# if we are using a stable stack, see if there is a new stable version
122+
elif current_semver < latest_stable_semver:
123+
print('New stable Bitrise stack available: {0} ... updating bitrise.yml!'.format(latest_stable_semver))
124+
write_to_bitrise_yml(y, latest_stable_semver)
125+
# if a new edge version is available, update bitrise.yml
126+
elif current_semver < latest_semver:
127+
print('New edge version of Bitrise stack available: {0} ... updating bitrise.yml!'.format(latest_semver))
128+
write_to_bitrise_yml(y, latest_semver)
129+
# we're using the absolutely latest version available
81130
else:
82-
print('New Xcode version available: {0} ... updating bitrise.yml!'.format(default_semver))
83-
# add prefix pattern back to be recognizable by bitrise
84-
# as a valid stack value
85-
y['workflows'][WORKFLOW]['meta']['bitrise.io']['stack'] = '{0}{1}'.format(pattern, default_semver)
86-
with open(tmp_file, 'w+') as tmpfile:
87-
obj_yaml.dump(y, tmpfile)
88-
copyfile(tmp_file, BITRISE_YML)
89-
os.remove(tmp_file)
131+
print('Xcode version unchanged or more recent! aborting.')

0 commit comments

Comments
 (0)
Failed to load comments.