- 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
119 lines
4.4 KiB
Python
Executable File
119 lines
4.4 KiB
Python
Executable File
#!/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 and modify corresponding .bb recipes
|
|
"""
|
|
import argparse
|
|
import os
|
|
import re
|
|
import yaml
|
|
from pathlib import Path
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description='modify .bb files based on a snapshot')
|
|
|
|
parser.add_argument('--input',
|
|
dest='in_snapshot',
|
|
help='Path to the snapshot.yaml file')
|
|
parser.add_argument('--out',
|
|
dest='out_dir',
|
|
help='Relative path to meta-everest')
|
|
|
|
args = parser.parse_args()
|
|
|
|
in_snapshot = os.path.realpath(os.path.expanduser(args.in_snapshot))
|
|
out_dir = Path(os.path.realpath(os.path.expanduser(args.out_dir)))
|
|
|
|
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 = {}
|
|
|
|
print(f"got snapshot: {snapshot}")
|
|
|
|
recipes_core = out_dir / 'recipes-core'
|
|
if not recipes_core.exists():
|
|
print(f"cannot find recipes-core in {recipes_core}")
|
|
return
|
|
|
|
# TODO: provide this via a file as a command line parameter
|
|
mapping = {'Josev': 'josev/python3-iso15118',
|
|
'everest-utils': 'everest-devtools/evcli',
|
|
'EVerest': 'everest/everest-core',
|
|
'everest-framework': 'everest/everest-framework',
|
|
'everest-sqlite': 'everest/everest-sqlite',
|
|
'libcbv2g': 'everest/libcbv2g',
|
|
'libevse-security': 'everest/libevse-security',
|
|
'libfsm': 'everest/libfsm',
|
|
'libiso15118': 'everest/libiso15118',
|
|
'liblog': 'everest/liblog',
|
|
'libnfc-nci': 'everest/libnfc-nci',
|
|
'libocpp': 'everest/libocpp',
|
|
'libslac': 'everest/libslac',
|
|
'libtimer': 'everest/libtimer'}
|
|
|
|
branch_re = re.compile(r'branch=([^;|^"|\s]*)')
|
|
|
|
for key, entry in snapshot.items():
|
|
print(f"key: {key}")
|
|
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('-')
|
|
# 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}")
|
|
if key in mapping:
|
|
file_glob = f'{mapping[key]}_*.bb'
|
|
files = list(recipes_core.glob(file_glob))
|
|
if len(files) == 1:
|
|
bb_path = files[0]
|
|
|
|
print(f"found a matching file: {bb_path}")
|
|
with open(bb_path) as bb_file:
|
|
bb_content = bb_file.read().splitlines()
|
|
bb_content_modified = []
|
|
for index, line in enumerate(bb_content):
|
|
if line.startswith("SRC_URI"):
|
|
def replace(match):
|
|
return f'branch={branch}'
|
|
line = branch_re.sub(replace, line)
|
|
elif line.startswith("SRCREV"):
|
|
line = f"SRCREV = \"{git_rev}\""
|
|
|
|
bb_content_modified.append(line)
|
|
# create new filename
|
|
prefix, sep, postfix = bb_path.name.partition('_')
|
|
new_filename = f'{prefix}_{version_without_rc}.bb'
|
|
new_bb_path = bb_path.parent / new_filename
|
|
if bb_path != new_bb_path:
|
|
print(f"filename is different, so remove the old one")
|
|
bb_path.unlink(missing_ok=True)
|
|
|
|
print(f"writing bb file: {new_bb_path}")
|
|
with open(new_bb_path, mode='w+') as new_bb_file:
|
|
new_bb_file.write('\n'.join(bb_content_modified))
|
|
new_bb_file.write('\n')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|