From e0d00860af9b1ea8215d6f26c276c539f9091064 Mon Sep 17 00:00:00 2001 From: Owen W. Taylor Date: Jan 31 2018 10:21:01 +0000 Subject: Add code to generate flatpak-runtime.yaml When generating the report, generate files for each profile, and then add an extra step to insert the profiles into a modulemd template. --- diff --git a/Makefile b/Makefile index 98400b9..6f25ae1 100644 --- a/Makefile +++ b/Makefile @@ -4,14 +4,23 @@ PACKAGE_LISTS = \ out/gnome-Platform.packages \ out/gnome-Sdk.packages +PROFILE_FILES = \ + out/runtime.profile \ + out/runtime-base.profile \ + out/sdk.profile \ + out/sdk-base.profile + FILE_LISTS = \ $(patsubst %.packages,%.files,$(PACKAGE_LISTS)) -all: report.html +all: report.html flatpak-runtime.yaml -report.html: $(PACKAGE_LISTS) package-notes.txt generate-report.py report-template.html +report.html $(PROFILE_FILES): $(PACKAGE_LISTS) package-notes.txt generate-report.py report-template.html ./generate-report.py +flatpak-runtime.yaml: $(PROFILE_FILES) flatpak-runtime.in.yaml generate-modulemd.py + ./generate-modulemd.py + $(FILE_LISTS): %.files: generate-files.sh list-files.py ./generate-files.sh $@ diff --git a/flatpak-runtime.in.yaml b/flatpak-runtime.in.yaml index 473d583..01316a1 100644 --- a/flatpak-runtime.in.yaml +++ b/flatpak-runtime.in.yaml @@ -2,23 +2,38 @@ document: modulemd version: 1 data: summary: 'Flatpak Runtime' - description: 'Libraries and data files shared between applications' + description: >- + This module defines two runtimes for Flatpaks, the 'runtime' profile that + most Flatpaks in Fedora use, and a smaller 'runtime-base' profile that is + intended to be more minimal and (slightly) more API stable. There are also + corresponding sdk and sdk-base profiles that are used to build SDKs that + applications can be built against with flatpak-builder. license: module: [ MIT ] dependencies: buildrequires: - bootstrap: f26 -# base-runtime: f26 - shared-userspace: f26 + platform: f28 requires: - shared-userspace: f26 - base-runtime: f26 + platform: f28 profiles: runtime: rpms: [] + runtime-base: + rpms: [] + sdk: + rpms: [] + sdk-base: + rpms: [] buildroot: rpms: [flatpak-rpm-macros, flatpak-runtime-config] api: - rpms: [] + rpms: + - flatpak-rpm-macros + - flatpak-runtime-config components: - rpms: [] + flatpak-rpm-macros: + rationale: Set up build root for flatpak RPMS + ref: master + flatpak-runtime-config: + rationale: Runtime configuration files + ref: master diff --git a/generate-modulemd.py b/generate-modulemd.py new file mode 100755 index 0000000..b3bb4ef --- /dev/null +++ b/generate-modulemd.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 +import sys +from yaml_utils import ordered_load, ordered_dump + +with open('flatpak-runtime.in.yaml') as f: + modulemd = ordered_load(f) + +def set_profile(profile_name, list_file): + with open(list_file) as f: + packages = [l.strip() for l in f] + print("{}: {} packages".format(profile_name, len(packages)), file=sys.stderr) + modulemd['data']['profiles'][profile_name] = packages + +set_profile('runtime', 'out/runtime.profile') +set_profile('runtime-base', 'out/runtime-base.profile') +set_profile('sdk', 'out/sdk.profile') +set_profile('sdk-base', 'out/sdk-base.profile') + +with open('flatpak-runtime.yaml', 'w') as f: + ordered_dump(modulemd, stream=f, default_flow_style=False, encoding="utf-8") diff --git a/generate-report.py b/generate-report.py index 682087c..c405d30 100755 --- a/generate-report.py +++ b/generate-report.py @@ -369,6 +369,22 @@ unmatched_counts = { } # +# Generate the profiles +# +def generate_profile(outfile, which): + with open(outfile, 'w') as f: + for letter in letters: + for src in letter.packages: + for pkg in src.packages: + if getattr(pkg, which) != 0: + print(pkg.name, file=f) + +generate_profile('out/runtime-base.profile', 'freedesktop_platform') +generate_profile('out/sdk-base.profile', 'freedesktop_sdk') +generate_profile('out/runtime.profile', 'gnome_platform') +generate_profile('out/sdk.profile', 'gnome_sdk') + +# # Generate the report # diff --git a/yaml_utils.py b/yaml_utils.py new file mode 100644 index 0000000..1272836 --- /dev/null +++ b/yaml_utils.py @@ -0,0 +1,25 @@ +import yaml +# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts + +from collections import OrderedDict + +def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict): + class OrderedLoader(Loader): + pass + def construct_mapping(loader, node): + loader.flatten_mapping(node) + return object_pairs_hook(loader.construct_pairs(node)) + OrderedLoader.add_constructor( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + construct_mapping) + return yaml.load(stream, OrderedLoader) + +def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds): + class OrderedDumper(Dumper): + pass + def _dict_representer(dumper, data): + return dumper.represent_mapping( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + data.items()) + OrderedDumper.add_representer(OrderedDict, _dict_representer) + return yaml.dump(data, stream, OrderedDumper, **kwds)