Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
124
tools/EVerest-main/applications/utils/scripts/check_dependency_versions.py
Executable file
124
tools/EVerest-main/applications/utils/scripts/check_dependency_versions.py
Executable file
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# Copyright Pionix GmbH and Contributors to EVerest
|
||||
#
|
||||
"""
|
||||
author: kai-uwe.hermann@pionix.de
|
||||
Parse snapshot.yaml files check if dependency versions are up2date by checking for newer git tags
|
||||
"""
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import yaml
|
||||
import subprocess
|
||||
from packaging.version import Version
|
||||
|
||||
def get_remote_tags(remote_url: str) -> list:
|
||||
"""Return the remote tags of the repo at path, or an empty list."""
|
||||
remote_tags = []
|
||||
try:
|
||||
result = subprocess.run(["git", "-c", "versionsort.suffix=-", "ls-remote", "--tags", "--sort=-v:refname", "--refs", "--quiet", remote_url],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
|
||||
result_list = result.stdout.decode("utf-8").split("\n")
|
||||
for entry in result_list:
|
||||
ref_and_tag = entry.split("\t")
|
||||
if len(ref_and_tag) > 1:
|
||||
remote_tags.append(ref_and_tag[1].replace("refs/tags/", ""))
|
||||
except subprocess.CalledProcessError:
|
||||
return remote_tags
|
||||
|
||||
return remote_tags
|
||||
|
||||
|
||||
def parse_curl_version(curl_version):
|
||||
parsed_curl_version = curl_version.removeprefix("tiny-curl-")
|
||||
parsed_curl_version = parsed_curl_version.removeprefix("curl-")
|
||||
parsed_curl_version = parsed_curl_version.replace("_", ".")
|
||||
return parsed_curl_version
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='get updated dependency versions from snapshot.yaml')
|
||||
|
||||
parser.add_argument('--input',
|
||||
dest='in_snapshot',
|
||||
help='Path to the snapshot.yaml file')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
in_snapshot = os.path.realpath(os.path.expanduser(args.in_snapshot))
|
||||
|
||||
snapshot = None
|
||||
with open(in_snapshot, encoding='utf-8') as snapshot_file:
|
||||
try:
|
||||
snapshot = yaml.safe_load(snapshot_file)
|
||||
except yaml.YAMLError as e:
|
||||
print(f"Error parsing yaml of {in_snapshot}: {e}")
|
||||
return
|
||||
|
||||
if not snapshot:
|
||||
print(f"snapshot empty?")
|
||||
return
|
||||
|
||||
output = {}
|
||||
|
||||
branch_re = re.compile(r'branch=([^;|^"|\s]*)')
|
||||
|
||||
for key, entry in snapshot.items():
|
||||
branch = entry['branch']
|
||||
git_rev = entry['git_rev']
|
||||
git_tag = entry['git_tag']
|
||||
version = git_tag.removeprefix('wip-release-')
|
||||
version = version.removeprefix('v')
|
||||
version_without_rc, _vsep, _rc = version.partition('-rc')
|
||||
# todo: maybe even strip something like "wip-release-" from git_tag to keep versions sane?
|
||||
# or just do not modify the version if this cannot be parsed properly?
|
||||
# print(f"version: {version} without-rc: {version_without_rc}")
|
||||
git_url = entry['git']
|
||||
remote_tags = get_remote_tags(git_url)
|
||||
tags = []
|
||||
for original_remote_tag in remote_tags:
|
||||
remote_tag = original_remote_tag.removeprefix("v")
|
||||
if key == "libcurl":
|
||||
# special handling for curl
|
||||
remote_tag = parse_curl_version(remote_tag)
|
||||
if key == "pugixml":
|
||||
if remote_tag == "latest":
|
||||
continue
|
||||
|
||||
tags.append((original_remote_tag, remote_tag))
|
||||
|
||||
remote_versions = []
|
||||
version_mapping = {}
|
||||
for (original_remote_tag, remote_tag) in tags:
|
||||
try:
|
||||
ver = Version(remote_tag)
|
||||
version_mapping[ver] = original_remote_tag
|
||||
remote_versions.append(ver)
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
remote_versions.sort(reverse=True)
|
||||
|
||||
try:
|
||||
remote_version = remote_versions[0]
|
||||
parsed_version = ""
|
||||
if key == "libcurl":
|
||||
parsed_version = Version(parse_curl_version(version))
|
||||
else:
|
||||
parsed_version = Version(version)
|
||||
if parsed_version != remote_version:
|
||||
print(f" {key}: remote version is different from version in snapshot! Check if you want to update.")
|
||||
print(f" snapshot version: {version}")
|
||||
print(f" remote version: {remote_version}, original tag: {version_mapping[remote_version]}")
|
||||
except Exception as e:
|
||||
print(f" {key}: cannot parse remote version, please check manually!")
|
||||
print(f" snapshot version: {version}")
|
||||
print(f" thrown exception: {e}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user