From 2cec3b9cba8924150f95b727120757ff86667f61 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Thu, 14 Nov 2024 17:56:58 +0000 Subject: scripts: T6877: add a script for merging multiple flavor files --- docker/Dockerfile | 1 + scripts/utils/merge-flavors | 73 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100755 scripts/utils/merge-flavors 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 . +# +# 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)) -- cgit v1.2.3 From 365ae51ecd8cf39da421eb2e04182524e2cea3d3 Mon Sep 17 00:00:00 2001 From: Viacheslav Hletenko Date: Sat, 16 Nov 2024 11:39:38 +0000 Subject: T6879: Add build amazon-cloudwatch-agent and amazon-cloudwatch-agent --- .github/workflows/trigger_rebuild_packages.yml | 12 ++++++++++++ scripts/package-build/amazon-cloudwatch-agent/.gitignore | 7 +++++++ scripts/package-build/amazon-cloudwatch-agent/build.py | 1 + .../package-build/amazon-cloudwatch-agent/package.toml | 14 ++++++++++++++ scripts/package-build/amazon-ssm-agent/.gitignore | 7 +++++++ scripts/package-build/amazon-ssm-agent/build.py | 1 + scripts/package-build/amazon-ssm-agent/package.toml | 16 ++++++++++++++++ 7 files changed, 58 insertions(+) create mode 100644 scripts/package-build/amazon-cloudwatch-agent/.gitignore create mode 120000 scripts/package-build/amazon-cloudwatch-agent/build.py create mode 100644 scripts/package-build/amazon-cloudwatch-agent/package.toml create mode 100644 scripts/package-build/amazon-ssm-agent/.gitignore create mode 120000 scripts/package-build/amazon-ssm-agent/build.py create mode 100644 scripts/package-build/amazon-ssm-agent/package.toml diff --git a/.github/workflows/trigger_rebuild_packages.yml b/.github/workflows/trigger_rebuild_packages.yml index 4355ecb8..6ccdd878 100644 --- a/.github/workflows/trigger_rebuild_packages.yml +++ b/.github/workflows/trigger_rebuild_packages.yml @@ -23,6 +23,10 @@ jobs: with: base: ${{ github.ref_name }} filters: | + amazon-cloudwatch-agent: + - 'scripts/package-build/amazon-cloudwatch-agent/**' + amazon-ssm-agent: + - 'scripts/package-build/amazon-ssm-agent/**' aws-gwlbtun: - 'scripts/package-build/aws-gwlbtun/**' ddclient: @@ -99,6 +103,14 @@ jobs: } # Trigger builds based on detected changes + if [ "${{ steps.changes.outputs.amazon-cloudwatch-agent }}" == "true" ]; then + trigger_build "amazon-cloudwatch-agent" + fi + + if [ "${{ steps.changes.outputs.amazon-ssm-agent }}" == "true" ]; then + trigger_build "amazon-ssm-agent" + fi + if [ "${{ steps.changes.outputs.aws-gwlbtun }}" == "true" ]; then trigger_build "aws-gwlbtun" fi diff --git a/scripts/package-build/amazon-cloudwatch-agent/.gitignore b/scripts/package-build/amazon-cloudwatch-agent/.gitignore new file mode 100644 index 00000000..7f8e0127 --- /dev/null +++ b/scripts/package-build/amazon-cloudwatch-agent/.gitignore @@ -0,0 +1,7 @@ +amazon-cloudwatch-agent/ +*.buildinfo +*.build +*.changes +*.deb +*.dsc +*.tar.gz diff --git a/scripts/package-build/amazon-cloudwatch-agent/build.py b/scripts/package-build/amazon-cloudwatch-agent/build.py new file mode 120000 index 00000000..3c76af73 --- /dev/null +++ b/scripts/package-build/amazon-cloudwatch-agent/build.py @@ -0,0 +1 @@ +../build.py \ No newline at end of file diff --git a/scripts/package-build/amazon-cloudwatch-agent/package.toml b/scripts/package-build/amazon-cloudwatch-agent/package.toml new file mode 100644 index 00000000..833096d4 --- /dev/null +++ b/scripts/package-build/amazon-cloudwatch-agent/package.toml @@ -0,0 +1,14 @@ +[[packages]] +name = "amazon-cloudwatch-agent" +commit_id = "v1.300050.0" +scm_url = "https://github.com/aws/amazon-cloudwatch-agent" + +build_cmd = """ + +make prepackage package-deb +ARCH=$(dpkg --print-architecture) +TAG=$(git describe --tags --abbrev=0) +COMMIT=$(git rev-parse --short HEAD) +cp ./build/bin/linux/${ARCH}/*.deb ../amazon-cloudwatch-agent_${TAG}_${COMMIT}_${ARCH}.deb + +""" diff --git a/scripts/package-build/amazon-ssm-agent/.gitignore b/scripts/package-build/amazon-ssm-agent/.gitignore new file mode 100644 index 00000000..f70728cf --- /dev/null +++ b/scripts/package-build/amazon-ssm-agent/.gitignore @@ -0,0 +1,7 @@ +amazon-ssm-agent/ +*.buildinfo +*.build +*.changes +*.deb +*.dsc +*.tar.gz diff --git a/scripts/package-build/amazon-ssm-agent/build.py b/scripts/package-build/amazon-ssm-agent/build.py new file mode 120000 index 00000000..3c76af73 --- /dev/null +++ b/scripts/package-build/amazon-ssm-agent/build.py @@ -0,0 +1 @@ +../build.py \ No newline at end of file diff --git a/scripts/package-build/amazon-ssm-agent/package.toml b/scripts/package-build/amazon-ssm-agent/package.toml new file mode 100644 index 00000000..ecd2fdf6 --- /dev/null +++ b/scripts/package-build/amazon-ssm-agent/package.toml @@ -0,0 +1,16 @@ +[[packages]] +name = "amazon-ssm-agent" +commit_id = "3.3.1311.0" +scm_url = "https://github.com/aws/amazon-ssm-agent" + +build_cmd = """ + +ARCH=$(dpkg --print-architecture) +TAG=$(git describe --tags --abbrev=0) +COMMIT=$(git rev-parse --short HEAD) + +make build-linux +make package-deb +cp ./bin/debian_${ARCH}/*.deb ../amazon-ssm-agent_${TAG}_${COMMIT}_${ARCH}.deb + +""" -- cgit v1.2.3