@@ -31,23 +31,19 @@ class ReleaseMeta:
3131
3232 tag : str
3333
34+ ref : Optional ["github.GitRef" ] = None
3435 release : Optional ["github.GitRelease" ] = None
3536
37+ def message (self ):
38+ '''Returns release message'''
39+ return f'Appimage distributions of { self .title ()} (see `Assets` below)'
40+
3641 def title (self ):
3742 '''Returns release title'''
3843 version = self .tag [6 :]
3944 return f'Python { version } '
4045
4146
42- @dataclass
43- class TagMeta :
44- '''Metadata relative to a git tag
45- '''
46-
47- tag : str
48- ref : "github.GitRef"
49-
50-
5147@dataclass
5248class AssetMeta :
5349 '''Metadata relative to a release Asset
@@ -88,6 +84,18 @@ def update(args):
8884 '''Update Python AppImage GitHub releases
8985 '''
9086
87+ sha = args .sha
88+ if sha is None :
89+ sha = os .getenv ('GITHUB_SHA' )
90+ if sha is None :
91+ p = subprocess .run (
92+ 'git rev-parse HEAD' ,
93+ shell = True ,
94+ capture_output = True ,
95+ check = True
96+ )
97+ sha = p .stdout .decode ().strip ()
98+
9199 # Connect to GitHub
92100 token = args .token
93101 if token is None :
@@ -114,10 +122,15 @@ def update(args):
114122 n_assets = 0
115123 for release in repo .get_releases ():
116124 if release .tag_name .startswith ('python' ):
117- releases [ release . tag_name ] = ReleaseMeta (
125+ meta = ReleaseMeta (
118126 tag = release .tag_name ,
119127 release = release
120128 )
129+ ref = repo .get_git_ref (f'tags/{ meta .tag } ' )
130+ if (ref .ref is not None ) and (ref .object .sha != sha ):
131+ meta .ref = ref
132+ releases [release .tag_name ] = meta
133+
121134 for asset in release .get_assets ():
122135 if asset .name .endswith ('.AppImage' ):
123136 n_assets += 1
@@ -132,7 +145,6 @@ def update(args):
132145 # Look for updates.
133146 new_releases = set ()
134147 new_assets = []
135- new_sha = []
136148
137149 for manylinux in MANYLINUSES :
138150 for arch in ARCHS :
@@ -161,29 +173,6 @@ def update(args):
161173 if rtag not in releases :
162174 new_releases .add (rtag )
163175
164- # Check SHA of tags.
165- sha = args .sha
166- if sha is None :
167- sha = os .getenv ('GITHUB_SHA' )
168- if sha is None :
169- p = subprocess .run (
170- 'git rev-parse HEAD' ,
171- shell = True ,
172- capture_output = True ,
173- check = True
174- )
175- sha = p .stdout .decode ().strip ()
176-
177- for tag in releases .keys ():
178- ref = repo .get_git_ref (f'tags/{ tag } ' )
179- if ref .ref is not None :
180- if ref .object .sha != sha :
181- meta = TagMeta (
182- tag = tag ,
183- ref = ref
184- )
185- new_sha .append (meta )
186-
187176 if args .dry :
188177 # Log foreseen changes and exit
189178 for tag in new_releases :
@@ -192,11 +181,14 @@ def update(args):
192181
193182 for meta in new_assets :
194183 log ('DRY' , f'create asset { meta .appimage_name ()} ' )
195- if meta .asset :
184+ if meta .asset is not None :
196185 log ('DRY' , f'remove asset { meta .asset .name } ' )
197186
198- for meta in new_sha :
199- log ('DRY' , f'refs/tags/{ meta .tag } -> { sha } ' )
187+ for meta in releases .values ():
188+ if meta .ref is not None :
189+ log ('DRY' , f'refs/tags/{ meta .tag } -> { sha } ' )
190+ if meta .release is not None :
191+ log ('DRY' , f'reformat release for { meta .title ()} ' )
200192
201193 return
202194
@@ -218,7 +210,7 @@ def update(args):
218210 meta .release = repo .create_git_release (
219211 tag = meta .tag ,
220212 name = title ,
221- message = f'Appimage distributions of { title } (see `Assets` below)' ,
213+ message = meta . message () ,
222214 prerelease = True
223215 )
224216 releases [tag ] = meta
@@ -238,12 +230,23 @@ def update(args):
238230 assets [meta .tag ][meta .abi ] = meta
239231
240232 # Update git tags SHA.
241- for meta in new_sha :
242- meta .ref .edit (
243- sha = sha ,
244- force = True
245- )
246- log ('UPDATE' , f'refs/tags/{ meta .tag } -> { sha } ' )
233+ for meta in releases .values ():
234+ if meta .ref is not None :
235+ meta .ref .edit (
236+ sha = sha ,
237+ force = True
238+ )
239+ log ('UPDATE' , f'refs/tags/{ meta .tag } -> { sha } ' )
240+
241+ if meta .release is not None :
242+ title = meta .title ()
243+ meta .release .update_release (
244+ name = title ,
245+ message = meta .message (),
246+ prerelease = True ,
247+ tag_name = meta .tag
248+ )
249+ log ('UPDATE' , f'reformat release for { title } ' )
247250
248251
249252if __name__ == '__main__' :
0 commit comments