Parcourir la source

Option to force update

Valentin Niess il y a 2 ans
Parent
commit
4bc98f48d4
1 fichiers modifiés avec 39 ajouts et 29 suppressions
  1. 39 29
      scripts/update-appimages.py

+ 39 - 29
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()}')
+    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('FORESEEN', f'create asset {meta.appimage_name()}')
-        if meta.asset:
-            log('FORESEEN', f'remove asset {meta.asset.name}')
+        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('FORESEEN', f'update git SHA for refs/tags/{meta.tag}')
+        for meta in new_sha:
+            log('DRY', f'refs/tags/{meta.tag} -> {sha}')
 
-    if args.dry:
         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)