From 4bc98f48d4d93dadc60481a293e7cbf7c7925c22 Mon Sep 17 00:00:00 2001 From: Valentin Niess Date: Fri, 10 Nov 2023 22:52:55 +0100 Subject: [PATCH] Option to force update --- scripts/update-appimages.py | 72 +++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/scripts/update-appimages.py b/scripts/update-appimages.py index 5ec0cd9..61ff2f3 100755 --- a/scripts/update-appimages.py +++ b/scripts/update-appimages.py @@ -89,14 +89,17 @@ def update(args): # Connect to GitHub if args.token is None: - # Get token from gh app (e.g. for local runs) - p = subprocess.run( - 'gh auth token', - shell = True, - capture_output = True, - check = True - ) - token = p.stdout.decode().strip() + # First, check for token in env + token = os.getenv('GITHUB_TOKEN') + if token is None: + # Else try to get a token from gh app + p = subprocess.run( + 'gh auth token', + shell = True, + capture_output = True, + check = True + ) + token = p.stdout.decode().strip() auth = Auth.Token(token) session = Github(auth=auth) @@ -142,7 +145,7 @@ def update(args): except KeyError: meta = None - if meta is None or meta.version != version: + if (meta is None) or (meta.version != version) or args.all: new_meta = AssetMeta( tag = tag, abi = abi, @@ -157,13 +160,15 @@ def update(args): new_releases.add(rtag) # Check SHA of tags. - p = subprocess.run( - 'git rev-parse HEAD', - shell = True, - capture_output = True, - check = True - ) - sha = p.stdout.decode().strip() + 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}') @@ -175,20 +180,20 @@ def update(args): ) new_sha.append(meta) - # Log foreseen changes. - for tag in new_releases: - meta = ReleaseMeta(tag) - log('FORESEEN', f'create new release for {meta.title()}') - - for meta in new_assets: - log('FORESEEN', f'create asset {meta.appimage_name()}') - if meta.asset: - log('FORESEEN', f'remove asset {meta.asset.name}') - - for meta in new_sha: - log('FORESEEN', f'update git SHA for refs/tags/{meta.tag}') - if args.dry: + # Log foreseen changes and exit + for tag in new_releases: + meta = ReleaseMeta(tag) + log('DRY', f'new release for {meta.title()}') + + for meta in new_assets: + log('DRY', f'create asset {meta.appimage_name()}') + if meta.asset: + log('DRY', f'remove asset {meta.asset.name}') + + for meta in new_sha: + log('DRY', f'refs/tags/{meta.tag} -> {sha}') + return if new_assets: @@ -213,6 +218,7 @@ def update(args): prerelease = True ) releases[tag] = meta + log('UPDATE', f'new release for {title}') # Update assets. for meta in new_assets: @@ -233,12 +239,18 @@ def update(args): sha = sha, force = True ) + log('UPDATE', f'refs/tags/{meta.tag} -> {sha}') if __name__ == '__main__': parser = argparse.ArgumentParser( description = 'Update GitHub releases of Python AppImages' ) + parser.add_argument('-a', '--all', + help = 'force update of all available releases', + action = 'store_true', + default = False + ) parser.add_argument('-d', '--dry', help = 'dry run (only log changes)', action = 'store_true', @@ -248,7 +260,5 @@ if __name__ == '__main__': help = 'GitHub authentication token' ) - # XXX Add --all arg - args = parser.parse_args() update(args)