diff options
author | Christian Breunig <christian@breunig.cc> | 2024-11-17 12:30:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-17 12:30:33 +0100 |
commit | 1e038ab2024ac4b03e1ca909f89e9ffb122cd5a7 (patch) | |
tree | a8d0b172441576d302cb9a3ef92500dc8861f310 | |
parent | 811c287f72d231e5e215fa7a3d3c4dae95261fd2 (diff) | |
parent | 2cec3b9cba8924150f95b727120757ff86667f61 (diff) | |
download | vyos-build-1e038ab2024ac4b03e1ca909f89e9ffb122cd5a7.tar.gz vyos-build-1e038ab2024ac4b03e1ca909f89e9ffb122cd5a7.zip |
Merge pull request #837 from dmbaturin/T6877-flavor-merge
scripts: T6877: add a script for merging multiple flavor files
-rw-r--r-- | docker/Dockerfile | 1 | ||||
-rwxr-xr-x | scripts/utils/merge-flavors | 73 |
2 files changed, 74 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile index ddda5ff8..9b700e0e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -103,6 +103,7 @@ RUN apt-get update && apt-get install -y \ python3-flake8 \ python3-autopep8 \ python3-tomli \ + python3-tomli-w \ yq \ debootstrap \ live-build \ diff --git a/scripts/utils/merge-flavors b/scripts/utils/merge-flavors new file mode 100755 index 00000000..013014e0 --- /dev/null +++ b/scripts/utils/merge-flavors @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Purpose: merges multiple flavor files into one + +import sys + +import tomli +import tomli_w + +def load_flavor(file_path): + with open(file_path, 'rb') as f: + flavor_def = tomli.load(f) + + return flavor_def + +# XXX: at the moment, this script is only used +# to produce a meta-flavor for collecting packages +# used in multiple flavors, +# so it ignores all other flavor fields for now +def merge_flavors(l, r): + if 'packages' in r: + l['packages'] += r['packages'] + + for arch in r.get('architectures', []): + if arch not in l['architectures']: + l['architectures'][arch] = {} + + if 'packages' not in l['architectures'][arch]: + l['architectures'][arch]['packages'] = [] + + if 'packages' in r['architectures'][arch]: + l['architectures'][arch]['packages'] += \ + r['architectures'][arch]['packages'] + + return l + +if __name__ == '__main__': + if len(sys.argv) < 3: + print("Please specify a base flavor and a list of flavor files to merge!") + sys.exit(1) + + base_flavor = load_flavor(sys.argv[1]) + + if 'architectures' not in base_flavor: + base_flavor['architectures'] = {} + + flavor_files = sys.argv[2:] + flavor_defs = map(load_flavor, flavor_files) + + for fd in flavor_defs: + merge_flavors(base_flavor, fd) + + base_flavor['packages'] = list(set(base_flavor['packages'])) + for arch in base_flavor.get('architectures'): + if 'packages' in base_flavor['architectures'][arch]: + base_flavor['architectures'][arch]['packages'] = \ + list(set(base_flavor['architectures'][arch]['packages'])) + + print(tomli_w.dumps(base_flavor)) |