Skip to content

Commit fd7e288

Browse files
committed
Manage SHA of git tags
1 parent 602f65c commit fd7e288

1 file changed

Lines changed: 72 additions & 20 deletions

File tree

‎scripts/update-appimages.py‎

Lines changed: 72 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ def title(self):
3838
return f'Python {version}'
3939

4040

41+
@dataclass
42+
class TagMeta:
43+
'''Metadata relative to a git tag
44+
'''
45+
46+
tag: str
47+
ref: "github.GitRef"
48+
49+
4150
@dataclass
4251
class AssetMeta:
4352
'''Metadata relative to a release Asset
@@ -94,7 +103,7 @@ def update(args):
94103
repo = session.get_repo('niess/python-appimage')
95104

96105
# Fetch currently released AppImages
97-
log('FETCH', 'Currently released AppImages')
106+
log('FETCH', 'currently released AppImages')
98107
releases = {}
99108
assets = defaultdict(dict)
100109
n_assets = 0
@@ -113,11 +122,12 @@ def update(args):
113122
assets[meta.tag][meta.abi] = meta
114123

115124
n_releases = len(releases)
116-
log('FETCH', f'Found {n_assets} AppImages in {n_releases} releases')
125+
log('FETCH', f'found {n_assets} AppImages in {n_releases} releases')
117126

118127
# Look for updates.
119128
new_releases = set()
120129
new_assets = []
130+
new_sha = []
121131

122132
for manylinux in MANYLINUSES:
123133
for arch in ARCHS:
@@ -146,22 +156,53 @@ def update(args):
146156
if rtag not in releases:
147157
new_releases.add(rtag)
148158

149-
if not new_assets:
159+
# Check SHA of tags.
160+
p = subprocess.run(
161+
'git rev-parse HEAD',
162+
shell = True,
163+
capture_output = True,
164+
check = True
165+
)
166+
sha = p.stdout.decode().strip()
167+
168+
for tag in releases.keys():
169+
ref = repo.get_git_ref(f'tags/{tag}')
170+
if ref.ref is not None:
171+
if ref.object.sha != sha:
172+
meta = TagMeta(
173+
tag = tag,
174+
ref = ref
175+
)
176+
new_sha.append(meta)
177+
178+
# Log foreseen changes.
179+
for tag in new_releases:
180+
meta = ReleaseMeta(tag)
181+
log('FORESEEN', f'create new release for {meta.title()}')
182+
183+
for meta in new_assets:
184+
log('FORESEEN', f'create asset {meta.appimage_name()}')
185+
if meta.asset:
186+
log('FORESEEN', f'remove asset {meta.asset.name}')
187+
188+
for meta in new_sha:
189+
log('FORESEEN', f'update git SHA for refs/tags/{meta.tag}')
190+
191+
if args.dry:
150192
return
151193

152-
# Build new AppImage(s)
153-
cwd = os.getcwd()
154-
os.makedirs(APPIMAGES_DIR, exist_ok=True)
155-
try:
156-
os.chdir(APPIMAGES_DIR)
157-
for meta in new_assets:
158-
build_manylinux(meta.tag, meta.abi)
159-
finally:
160-
os.chdir(cwd)
194+
if new_assets:
195+
# Build new AppImage(s)
196+
cwd = os.getcwd()
197+
os.makedirs(APPIMAGES_DIR, exist_ok=True)
198+
try:
199+
os.chdir(APPIMAGES_DIR)
200+
for meta in new_assets:
201+
build_manylinux(meta.tag, meta.abi)
202+
finally:
203+
os.chdir(cwd)
161204

162205
# Create any new release(s).
163-
repo = session.get_repo('niess/test-releases') # XXX
164-
165206
for tag in new_releases:
166207
meta = ReleaseMeta(tag)
167208
title = meta.title()
@@ -179,24 +220,35 @@ def update(args):
179220
appimage = meta.appimage_name()
180221
new_asset = release.upload_asset(
181222
path = f'{APPIMAGES_DIR}/{appimage}',
182-
label = appimage
223+
name = appimage
183224
)
184225
if meta.asset:
185226
meta.asset.delete_asset()
186227
meta.asset = new_asset
187228
assets[meta.tag][meta.abi] = meta
188229

230+
# Update git tags SHA.
231+
for meta in new_sha:
232+
meta.ref.edit(
233+
sha = sha,
234+
force = True
235+
)
236+
189237

190238
if __name__ == '__main__':
191239
parser = argparse.ArgumentParser(
192-
description = "Update GitHub releases of Python AppImages"
240+
description = 'Update GitHub releases of Python AppImages'
193241
)
194-
parser.add_argument("-t", "--token",
195-
help = "GitHub authentication token"
242+
parser.add_argument('-d', '--dry',
243+
help = 'dry run (only log changes)',
244+
action = 'store_true',
245+
default = False
196246
)
197-
parser.add_argument("-s", "--sha",
198-
help = "Current commit SHA"
247+
parser.add_argument('-t', '--token',
248+
help = 'GitHub authentication token'
199249
)
200250

251+
# XXX Add --all arg
252+
201253
args = parser.parse_args()
202254
update(args)

0 commit comments

Comments
 (0)