Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré <git@apitzsch.eu>2023-01-06 22:38:42 +0300
committerPhilipp Hörist <philipp@hoerist.com>2023-01-06 22:38:42 +0300
commitfc4675b9009d3d3e235c4447178c4011a6f525a0 (patch)
tree9d04b4b93b66c49be5a789f7d21b09e57c16f551 /scripts
parentad50d091bc39de19d4e402eaf924efbb61f0aa0e (diff)
other: Add script to update flatpak manifests
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/update_flatpak_manifest.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/scripts/update_flatpak_manifest.py b/scripts/update_flatpak_manifest.py
new file mode 100755
index 000000000..27c1ce16f
--- /dev/null
+++ b/scripts/update_flatpak_manifest.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+
+from typing import Optional
+
+import json
+import logging
+import sys
+from urllib.request import urlopen
+
+import ruamel.yaml
+
+PYPI_INDEX = 'https://pypi.org/pypi'
+
+YAML = ruamel.yaml.YAML()
+YAML.indent(mapping=2, sequence=4, offset=2)
+YAML.preserve_quotes = True
+
+logging.basicConfig(level='INFO', format='%(levelname)s: %(message)s')
+
+def get_package_type(module: ruamel.yaml.comments.CommentedMap) -> str:
+ url = module['sources'][0]['url']
+ if '.whl' in url:
+ return 'bdist_wheel'
+ return 'sdist'
+
+def get_current_version(module: ruamel.yaml.comments.CommentedMap
+ ) -> Optional[str]:
+ name = module['name'].replace('python3-','')
+ url = module['sources'][0]['url']
+ if url.endswith('.git'):
+ return None
+ file_name = url.split('/')[-1]
+ file_name = file_name.replace(name, '')
+ return file_name.split('-')[1].replace('.tar.gz', '')
+
+def get_latest_version(package_name: str,
+ package_type: str
+ ) -> tuple[str, Optional[str]]:
+ with urlopen(f'{PYPI_INDEX}/{package_name}/json') as f:
+ data = f.read()
+ d = json.loads(data)
+ version = d['info']['version']
+ sha = None
+ for entry in d['releases'][version]:
+ if entry['packagetype'] == package_type:
+ if sha is not None:
+ return version, None
+ sha = entry['digests']['sha256']
+ return version, sha
+
+def update_module(module: ruamel.yaml.comments.CommentedMap) -> None:
+ if not module['name'].startswith('python3-'):
+ logging.warning('Check %s manually', module['name'])
+ return
+
+ package_type = get_package_type(module)
+ current_version = get_current_version(module)
+ if current_version is None:
+ return
+
+ name = module['name'].replace('python3-','')
+ latest_version, sha = get_latest_version(name, package_type)
+
+ if current_version == latest_version:
+ return
+
+ if 'only-arches' in module:
+ logging.warning('Update %s manually', module['name'])
+ return
+
+ if sha is None:
+ logging.warning('Could not get a unique SHA sum for %s', module['name'])
+ return
+
+ module['build-commands'][0] = module['build-commands'][0].replace(
+ current_version, latest_version)
+ module['sources'][0]['url'] = module['sources'][0]['url'].replace(
+ current_version, latest_version)
+ module['sources'][0]['sha256'] = sha
+
+def update_modules(data) -> None:
+ for module in data['modules']:
+ if isinstance(module, ruamel.yaml.comments.CommentedMap):
+ update_module(module)
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ sys.exit('Input yaml file is missing')
+
+ try:
+ with open(sys.argv[1]) as f:
+ data = YAML.load(f)
+ except (FileNotFoundError,
+ ruamel.yaml.parser.ParserError,
+ ruamel.yaml.scanner.ScannerError
+ ) as error:
+ sys.exit(error)
+
+ update_modules(data)
+
+ with open(sys.argv[1], 'w') as f:
+ YAML.dump(data, f)