From dc7e631ac37c8cd9553bf362a70a3bdc9bd32136 Mon Sep 17 00:00:00 2001 From: Rudra-IITM Date: Fri, 2 Feb 2024 01:33:43 +0530 Subject: [PATCH 1/5] Update to fetch leading upstream component's version from source tag --- .github/workflows/updatesnaptests.yml | 1 - action.yml | 6 ----- updatesnap/SnapModule/snapmodule.py | 6 ++++- .../SnapVersionModule/snap_version_module.py | 27 +++---------------- 4 files changed, 9 insertions(+), 31 deletions(-) diff --git a/.github/workflows/updatesnaptests.yml b/.github/workflows/updatesnaptests.yml index e65d00b..3a72904 100644 --- a/.github/workflows/updatesnaptests.yml +++ b/.github/workflows/updatesnaptests.yml @@ -26,7 +26,6 @@ jobs: python3 -m pip install pyyaml python3 -m pip install python-debian python3 -m pip install packaging - python3 -m pip install gitpython - name: Code tests env: GITHUB_USER: ubuntu diff --git a/action.yml b/action.yml index ae04f77..32a3441 100644 --- a/action.yml +++ b/action.yml @@ -41,12 +41,6 @@ runs: ref: stable path: desktop-snaps - - name: Install dependencies - run: | - python3 -m pip install --upgrade pip - python3 -m pip install gitpython - shell: bash - # Step to run the script that will generate a new output_file with an updated tag, if one is available. If there was a change, then we move this to the snapcraft.yaml and note that there was a change. - name: run updatesnapyaml id: updatesnapyaml diff --git a/updatesnap/SnapModule/snapmodule.py b/updatesnap/SnapModule/snapmodule.py index ea697d3..41a3dc7 100644 --- a/updatesnap/SnapModule/snapmodule.py +++ b/updatesnap/SnapModule/snapmodule.py @@ -663,7 +663,7 @@ def process_part(self, part: str) -> Optional[dict]: "missing_format": False, "updates": [], "version_format": {}, - "source_url": None, + "source_tag": None, } if self._config is None: @@ -685,6 +685,8 @@ def process_part(self, part: str) -> Optional[dict]: else: current_tag = None + part_data['source_tag'] = current_tag + version_format = data['version-format'] if ('version-format' in data) else {} if ('ignore' in version_format) and (version_format['ignore']): @@ -916,6 +918,8 @@ def process_metadata(self) -> Optional[dict]: metadata['upstream-url'] = upstream_data['source_url'] if len(upstream_data['updates']) != 0: metadata['upstream-version'] = upstream_data['updates'][0] + else: + metadata['upstream-version'] = upstream_data['source_tag'] if 'grade' in data: metadata['grade'] = data['grade'] diff --git a/updatesnap/SnapVersionModule/snap_version_module.py b/updatesnap/SnapVersionModule/snap_version_module.py index 7ca2cff..13bb360 100644 --- a/updatesnap/SnapVersionModule/snap_version_module.py +++ b/updatesnap/SnapVersionModule/snap_version_module.py @@ -4,16 +4,13 @@ to the package result in an increment of the package release number by 1 """ import subprocess -import os -import shutil import re from datetime import datetime import logging import requests -import git -def process_snap_version_data(git_repo_url, snap_name, version_schema): +def process_snap_version_data(upstreamversion, snap_name, version_schema): """ Returns processed snap version and grade """ # Time stamp of Snap build in Snap Store @@ -47,23 +44,7 @@ def process_snap_version_data(git_repo_url, snap_name, version_schema): next((channel["version"] for channel in snap_info["channel-map"] if channel["channel"]["name"] == "edge")) ) - # Clone the leading upstream repository if it doesn't exist - repo_dir = os.path.basename(git_repo_url.rstrip('.git')) - if not os.path.exists(repo_dir): - try: - git.Repo.clone_from(git_repo_url, repo_dir) - except git.exc.GitError: - logging.warning('Some error occur in cloning leading upstream repo') - os.chdir('..') - return None - - os.chdir(repo_dir) - - upstreamversion = subprocess.run(["git", "describe", "--tags", "--always"], - stdout=subprocess.PIPE, - text=True, check=True).stdout.strip() - os.chdir('..') - shutil.rmtree(repo_dir) + match = re.match(version_schema, upstreamversion) if not match: logging.warning("Version schema does not match with snapping repository version") @@ -86,10 +67,10 @@ def is_version_update(snap, manager_yaml, arguments): if arguments.version_schema == 'None': return False metadata = snap.process_metadata() - if process_snap_version_data(metadata['upstream-url'], + if process_snap_version_data(metadata['upstream-version'], metadata['name'], arguments.version_schema) is not None: snap_version = process_snap_version_data( - metadata['upstream-url'], metadata['name'], arguments.version_schema) + metadata['upstream-version'], metadata['name'], arguments.version_schema) if metadata['version'] != snap_version: snap_version_data = manager_yaml.get_part_metadata('version') if snap_version_data is not None: From 1c02d02f3757b5a2ae98d38435e3ee19dae9d9bf Mon Sep 17 00:00:00 2001 From: Rudra-IITM Date: Fri, 2 Feb 2024 02:35:59 +0530 Subject: [PATCH 2/5] correction in process_metadata --- updatesnap/SnapModule/snapmodule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updatesnap/SnapModule/snapmodule.py b/updatesnap/SnapModule/snapmodule.py index 41a3dc7..7635a4b 100644 --- a/updatesnap/SnapModule/snapmodule.py +++ b/updatesnap/SnapModule/snapmodule.py @@ -917,7 +917,7 @@ def process_metadata(self) -> Optional[dict]: upstream_data = self.process_part(data['adopt-info']) metadata['upstream-url'] = upstream_data['source_url'] if len(upstream_data['updates']) != 0: - metadata['upstream-version'] = upstream_data['updates'][0] + metadata['upstream-version'] = upstream_data['updates'][0]['name'] else: metadata['upstream-version'] = upstream_data['source_tag'] From 5d66e6f46a883e01ca5e0db76723f1555e6ffa20 Mon Sep 17 00:00:00 2001 From: Rudra-IITM Date: Fri, 2 Feb 2024 03:21:04 +0530 Subject: [PATCH 3/5] strict check for upstreamversion greater than prevvsersion --- updatesnap/SnapVersionModule/snap_version_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updatesnap/SnapVersionModule/snap_version_module.py b/updatesnap/SnapVersionModule/snap_version_module.py index 13bb360..2e31489 100644 --- a/updatesnap/SnapVersionModule/snap_version_module.py +++ b/updatesnap/SnapVersionModule/snap_version_module.py @@ -51,7 +51,7 @@ def process_snap_version_data(upstreamversion, snap_name, version_schema): return None upstreamversion = match.group(1).replace('_', '.') - if upstreamversion != prevversion.split('-')[0]: + if upstreamversion > prevversion.split('-')[0]: return f"{upstreamversion}-1" # Determine package release number packagerelease = int( From 74cc6c655ba1f81e43e1975763d288e0ab8f6071 Mon Sep 17 00:00:00 2001 From: Rudra-IITM Date: Fri, 2 Feb 2024 03:22:40 +0530 Subject: [PATCH 4/5] removed trailing whitespace --- updatesnap/SnapVersionModule/snap_version_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updatesnap/SnapVersionModule/snap_version_module.py b/updatesnap/SnapVersionModule/snap_version_module.py index 2e31489..24f915e 100644 --- a/updatesnap/SnapVersionModule/snap_version_module.py +++ b/updatesnap/SnapVersionModule/snap_version_module.py @@ -44,7 +44,7 @@ def process_snap_version_data(upstreamversion, snap_name, version_schema): next((channel["version"] for channel in snap_info["channel-map"] if channel["channel"]["name"] == "edge")) ) - + match = re.match(version_schema, upstreamversion) if not match: logging.warning("Version schema does not match with snapping repository version") From 4dfd3f4552d51a9f9545c31a0aeae1239d12721f Mon Sep 17 00:00:00 2001 From: Rudra-IITM Date: Fri, 2 Feb 2024 14:01:34 +0530 Subject: [PATCH 5/5] check to reframe from unnecessary commit --- .../SnapVersionModule/snap_version_module.py | 17 +++++++++-------- updatesnap/unittests.py | 9 +++++---- updatesnap/updatesnapyaml.py | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/updatesnap/SnapVersionModule/snap_version_module.py b/updatesnap/SnapVersionModule/snap_version_module.py index 24f915e..0401a0a 100644 --- a/updatesnap/SnapVersionModule/snap_version_module.py +++ b/updatesnap/SnapVersionModule/snap_version_module.py @@ -10,7 +10,7 @@ import requests -def process_snap_version_data(upstreamversion, snap_name, version_schema): +def process_snap_version_data(upstreamversion, snap_name, version_schema, has_update): """ Returns processed snap version and grade """ # Time stamp of Snap build in Snap Store @@ -54,23 +54,24 @@ def process_snap_version_data(upstreamversion, snap_name, version_schema): if upstreamversion > prevversion.split('-')[0]: return f"{upstreamversion}-1" # Determine package release number - packagerelease = int( - prevversion.split('-')[-1]) + 1 if gitcommitdate > snapbuilddate \ - else prevversion.split('-')[-1] + if (gitcommitdate > snapbuilddate or has_update): + packagerelease = int(prevversion.split('-')[-1]) + 1 + else: + packagerelease = int(prevversion.split('-')[-1]) return f"{upstreamversion}-{packagerelease}" -def is_version_update(snap, manager_yaml, arguments): +def is_version_update(snap, manager_yaml, arguments, has_update): """ Returns if snap version update available """ has_version_update = False if arguments.version_schema == 'None': return False metadata = snap.process_metadata() - if process_snap_version_data(metadata['upstream-version'], - metadata['name'], arguments.version_schema) is not None: + if process_snap_version_data(metadata['upstream-version'], metadata['name'], + arguments.version_schema, has_update) is not None: snap_version = process_snap_version_data( - metadata['upstream-version'], metadata['name'], arguments.version_schema) + metadata['upstream-version'], metadata['name'], arguments.version_schema, has_update) if metadata['version'] != snap_version: snap_version_data = manager_yaml.get_part_metadata('version') if snap_version_data is not None: diff --git a/updatesnap/unittests.py b/updatesnap/unittests.py index dfa832e..6193c10 100755 --- a/updatesnap/unittests.py +++ b/updatesnap/unittests.py @@ -437,7 +437,7 @@ def test_snap_version_automation(self): version_schema=r'^gutenprint-(\d+_\d+_\d+)', ) logging.basicConfig(level=logging.ERROR) - test = is_version_update(snap, yaml_obj, args) + test = is_version_update(snap, yaml_obj, args, has_update=False) os.remove('version_file') assert test is not None @@ -452,7 +452,7 @@ def test_no_version_in_metadata(self): version_schema=r'^debian/(\d+\.\d+\.\d+)', ) logging.basicConfig(level=logging.ERROR) - test = is_version_update(snap, yaml_obj, args) + test = is_version_update(snap, yaml_obj, args, has_update=False) assert not test def test_correct_snap_version(self): @@ -465,12 +465,13 @@ def test_correct_snap_version(self): version_schema=r'^gutenprint-(\d+_\d+_\d+)', ) - def mock_process_version_data(_git_repo_url, _snap_name, _version_schema): + def mock_process_version_data(_git_repo_url, _snap_name, + _version_schema, _has_update=False): return "5.3.4-1" temp = snap_version_module.process_snap_version_data snap_version_module.process_snap_version_data = mock_process_version_data - test = is_version_update(snap, manager_yaml, args) + test = is_version_update(snap, manager_yaml, args, has_update=False) snap_version_module.process_snap_version_data = temp assert not test diff --git a/updatesnap/updatesnapyaml.py b/updatesnap/updatesnapyaml.py index f4fc8bf..1ada5cd 100755 --- a/updatesnap/updatesnapyaml.py +++ b/updatesnap/updatesnapyaml.py @@ -118,7 +118,7 @@ def main(): has_update = True logging.basicConfig(level=logging.INFO) - if (is_version_update(snap, manager_yaml, arguments) or has_update): + if (is_version_update(snap, manager_yaml, arguments, has_update) or has_update): with open('output_file', 'w', encoding="utf8") as output_file: output_file.write(manager_yaml.get_yaml()) else: