|
@@ -31,23 +31,19 @@ class ReleaseMeta:
|
|
|
|
|
|
|
|
tag: str
|
|
tag: str
|
|
|
|
|
|
|
|
|
|
+ ref: Optional["github.GitRef"] = None
|
|
|
release: Optional["github.GitRelease"] = None
|
|
release: Optional["github.GitRelease"] = None
|
|
|
|
|
|
|
|
|
|
+ def message(self):
|
|
|
|
|
+ '''Returns release message'''
|
|
|
|
|
+ return f'Appimage distributions of {self.title()} (see `Assets` below)'
|
|
|
|
|
+
|
|
|
def title(self):
|
|
def title(self):
|
|
|
'''Returns release title'''
|
|
'''Returns release title'''
|
|
|
version = self.tag[6:]
|
|
version = self.tag[6:]
|
|
|
return f'Python {version}'
|
|
return f'Python {version}'
|
|
|
|
|
|
|
|
|
|
|
|
|
-@dataclass
|
|
|
|
|
-class TagMeta:
|
|
|
|
|
- '''Metadata relative to a git tag
|
|
|
|
|
- '''
|
|
|
|
|
-
|
|
|
|
|
- tag: str
|
|
|
|
|
- ref: "github.GitRef"
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
@dataclass
|
|
@dataclass
|
|
|
class AssetMeta:
|
|
class AssetMeta:
|
|
|
'''Metadata relative to a release Asset
|
|
'''Metadata relative to a release Asset
|
|
@@ -88,6 +84,18 @@ def update(args):
|
|
|
'''Update Python AppImage GitHub releases
|
|
'''Update Python AppImage GitHub releases
|
|
|
'''
|
|
'''
|
|
|
|
|
|
|
|
|
|
+ sha = args.sha
|
|
|
|
|
+ if sha is None:
|
|
|
|
|
+ sha = os.getenv('GITHUB_SHA')
|
|
|
|
|
+ if sha is None:
|
|
|
|
|
+ p = subprocess.run(
|
|
|
|
|
+ 'git rev-parse HEAD',
|
|
|
|
|
+ shell = True,
|
|
|
|
|
+ capture_output = True,
|
|
|
|
|
+ check = True
|
|
|
|
|
+ )
|
|
|
|
|
+ sha = p.stdout.decode().strip()
|
|
|
|
|
+
|
|
|
# Connect to GitHub
|
|
# Connect to GitHub
|
|
|
token = args.token
|
|
token = args.token
|
|
|
if token is None:
|
|
if token is None:
|
|
@@ -114,10 +122,15 @@ def update(args):
|
|
|
n_assets = 0
|
|
n_assets = 0
|
|
|
for release in repo.get_releases():
|
|
for release in repo.get_releases():
|
|
|
if release.tag_name.startswith('python'):
|
|
if release.tag_name.startswith('python'):
|
|
|
- releases[release.tag_name] = ReleaseMeta(
|
|
|
|
|
|
|
+ meta = ReleaseMeta(
|
|
|
tag = release.tag_name,
|
|
tag = release.tag_name,
|
|
|
release = release
|
|
release = release
|
|
|
)
|
|
)
|
|
|
|
|
+ ref = repo.get_git_ref(f'tags/{meta.tag}')
|
|
|
|
|
+ if (ref.ref is not None) and (ref.object.sha != sha):
|
|
|
|
|
+ meta.ref = ref
|
|
|
|
|
+ releases[release.tag_name] = meta
|
|
|
|
|
+
|
|
|
for asset in release.get_assets():
|
|
for asset in release.get_assets():
|
|
|
if asset.name.endswith('.AppImage'):
|
|
if asset.name.endswith('.AppImage'):
|
|
|
n_assets += 1
|
|
n_assets += 1
|
|
@@ -132,7 +145,6 @@ def update(args):
|
|
|
# Look for updates.
|
|
# Look for updates.
|
|
|
new_releases = set()
|
|
new_releases = set()
|
|
|
new_assets = []
|
|
new_assets = []
|
|
|
- new_sha = []
|
|
|
|
|
|
|
|
|
|
for manylinux in MANYLINUSES:
|
|
for manylinux in MANYLINUSES:
|
|
|
for arch in ARCHS:
|
|
for arch in ARCHS:
|
|
@@ -161,29 +173,6 @@ def update(args):
|
|
|
if rtag not in releases:
|
|
if rtag not in releases:
|
|
|
new_releases.add(rtag)
|
|
new_releases.add(rtag)
|
|
|
|
|
|
|
|
- # Check SHA of tags.
|
|
|
|
|
- sha = args.sha
|
|
|
|
|
- if sha is None:
|
|
|
|
|
- sha = os.getenv('GITHUB_SHA')
|
|
|
|
|
- if sha is None:
|
|
|
|
|
- p = subprocess.run(
|
|
|
|
|
- 'git rev-parse HEAD',
|
|
|
|
|
- shell = True,
|
|
|
|
|
- capture_output = True,
|
|
|
|
|
- check = True
|
|
|
|
|
- )
|
|
|
|
|
- sha = p.stdout.decode().strip()
|
|
|
|
|
-
|
|
|
|
|
- for tag in releases.keys():
|
|
|
|
|
- ref = repo.get_git_ref(f'tags/{tag}')
|
|
|
|
|
- if ref.ref is not None:
|
|
|
|
|
- if ref.object.sha != sha:
|
|
|
|
|
- meta = TagMeta(
|
|
|
|
|
- tag = tag,
|
|
|
|
|
- ref = ref
|
|
|
|
|
- )
|
|
|
|
|
- new_sha.append(meta)
|
|
|
|
|
-
|
|
|
|
|
if args.dry:
|
|
if args.dry:
|
|
|
# Log foreseen changes and exit
|
|
# Log foreseen changes and exit
|
|
|
for tag in new_releases:
|
|
for tag in new_releases:
|
|
@@ -192,11 +181,14 @@ def update(args):
|
|
|
|
|
|
|
|
for meta in new_assets:
|
|
for meta in new_assets:
|
|
|
log('DRY', f'create asset {meta.appimage_name()}')
|
|
log('DRY', f'create asset {meta.appimage_name()}')
|
|
|
- if meta.asset:
|
|
|
|
|
|
|
+ if meta.asset is not None:
|
|
|
log('DRY', f'remove asset {meta.asset.name}')
|
|
log('DRY', f'remove asset {meta.asset.name}')
|
|
|
|
|
|
|
|
- for meta in new_sha:
|
|
|
|
|
- log('DRY', f'refs/tags/{meta.tag} -> {sha}')
|
|
|
|
|
|
|
+ for meta in releases.values():
|
|
|
|
|
+ if meta.ref is not None:
|
|
|
|
|
+ log('DRY', f'refs/tags/{meta.tag} -> {sha}')
|
|
|
|
|
+ if meta.release is not None:
|
|
|
|
|
+ log('DRY', f'reformat release for {meta.title()}')
|
|
|
|
|
|
|
|
return
|
|
return
|
|
|
|
|
|
|
@@ -218,7 +210,7 @@ def update(args):
|
|
|
meta.release = repo.create_git_release(
|
|
meta.release = repo.create_git_release(
|
|
|
tag = meta.tag,
|
|
tag = meta.tag,
|
|
|
name = title,
|
|
name = title,
|
|
|
- message = f'Appimage distributions of {title} (see `Assets` below)',
|
|
|
|
|
|
|
+ message = meta.message(),
|
|
|
prerelease = True
|
|
prerelease = True
|
|
|
)
|
|
)
|
|
|
releases[tag] = meta
|
|
releases[tag] = meta
|
|
@@ -238,12 +230,23 @@ def update(args):
|
|
|
assets[meta.tag][meta.abi] = meta
|
|
assets[meta.tag][meta.abi] = meta
|
|
|
|
|
|
|
|
# Update git tags SHA.
|
|
# Update git tags SHA.
|
|
|
- for meta in new_sha:
|
|
|
|
|
- meta.ref.edit(
|
|
|
|
|
- sha = sha,
|
|
|
|
|
- force = True
|
|
|
|
|
- )
|
|
|
|
|
- log('UPDATE', f'refs/tags/{meta.tag} -> {sha}')
|
|
|
|
|
|
|
+ for meta in releases.values():
|
|
|
|
|
+ if meta.ref is not None:
|
|
|
|
|
+ meta.ref.edit(
|
|
|
|
|
+ sha = sha,
|
|
|
|
|
+ force = True
|
|
|
|
|
+ )
|
|
|
|
|
+ log('UPDATE', f'refs/tags/{meta.tag} -> {sha}')
|
|
|
|
|
+
|
|
|
|
|
+ if meta.release is not None:
|
|
|
|
|
+ title = meta.title()
|
|
|
|
|
+ meta.release.update_release(
|
|
|
|
|
+ name = title,
|
|
|
|
|
+ message = meta.message(),
|
|
|
|
|
+ prerelease = True,
|
|
|
|
|
+ tag_name = meta.tag
|
|
|
|
|
+ )
|
|
|
|
|
+ log('UPDATE', f'reformat release for {title}')
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|