@@ -38,6 +38,34 @@ def parse_semver(raw_str):
38
38
else :
39
39
return False
40
40
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 )
41
69
42
70
def default_stack ():
43
71
try :
@@ -58,7 +86,8 @@ def default_stack():
58
86
4. modify bitrise.yml (update stack value)
59
87
'''
60
88
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 ]
62
91
tmp_file = 'tmp.yml'
63
92
64
93
with open (BITRISE_YML , 'r' ) as infile :
@@ -75,15 +104,28 @@ def default_stack():
75
104
76
105
# remove pattern prefix from current_semver to compare with largest
77
106
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
81
130
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