Skip to content

Commit f5f7349

Browse files
committed
Update release messages
1 parent a2a075f commit f5f7349

1 file changed

Lines changed: 47 additions & 44 deletions

File tree

‎scripts/update-appimages.py‎

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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
5248
class 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

249252
if __name__ == '__main__':

0 commit comments

Comments
 (0)