taler-deployment

Deployment scripts and configuration files
Log | Files | Refs | README

commit 00e573e955bda689eea20ec4d7cd58506945d0c7
parent 717425dae741d4e7fcf7f45a3871ac442d965721
Author: Florian Dold <florian@dold.me>
Date:   Thu, 27 Jun 2024 18:42:15 +0200

packaging-ng: properly compute deps based on what changed

Diffstat:
Mpackaging/ng/buildscripts/generic.sh | 13-------------
Mpackaging/ng/taler-pkg | 57+++++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 41 insertions(+), 29 deletions(-)

diff --git a/packaging/ng/buildscripts/generic.sh b/packaging/ng/buildscripts/generic.sh @@ -14,21 +14,8 @@ fi echo Building $1 with generic build logic >&2 -if [ -e /pkgdir/$PACKAGE.built.tag ]; then - BUILT_TAG="$(cat /pkgdir/$PACKAGE.built.tag)" -else - BUILT_TAG="" -fi - TAG=$(cat /buildconfig/$PACKAGE.tag) -if [[ $BUILT_TAG = $TAG ]]; then - echo Tag $TAG already built, skipping - exit 0 -fi - -echo Building $TAG, old tag ${BUILT_TAG:-<none>} - cd /pkgdir dpkg-scanpackages . | xz - >/pkgdir/Packages.xz echo "deb [trusted=yes] file:/pkgdir ./" >/etc/apt/sources.list.d/taler-packaging-local.list diff --git a/packaging/ng/taler-pkg b/packaging/ng/taler-pkg @@ -37,7 +37,7 @@ deps = { def toposort(roots): - """Toposort components based on deps""" + """Toposort transitive closure of roots based on deps""" out = [] stack = list(roots) pmark = set() @@ -72,7 +72,21 @@ def build(cfg): pkgdir = Path(f"packages/{distro}").absolute() subprocess.run(["podman", "build", "-t", image_tag, "-f", dockerfile], check=True) - buildorder = toposort(components) + outdated_components = [] + + # First, find out components that need to be built + for component in components: + ver_requested = open(f"buildconfig/{component}.tag").read().strip() + built_tag_file = pkgdir / f"{component}.built.tag" + ver_built = None + if built_tag_file.exists(): + ver_built = open(built_tag_file).read().strip() + if ver_built != ver_requested: + outdated_components.append(component) + print(component, ver_built, '->', ver_requested) + + buildorder = toposort(outdated_components) + print("build order:", buildorder) for component in buildorder: print("building", component) @@ -101,23 +115,34 @@ def build(cfg): def print_latest(cfg): subprocess.run(["./helpers/print-latest-versions"], check=True) +def show_order(cfg): + buildorder = toposort(list(cfg.roots)) + print("build order:", buildorder) + +def main(): + parser = argparse.ArgumentParser(prog="taler-pkg", description="Taler Packaging Helper") + + subparsers = parser.add_subparsers(help="Run a subcommand", metavar="SUBCOMMAND") -parser = argparse.ArgumentParser(prog="taler-pkg", description="Taler Packaging Helper") + parser_build = subparsers.add_parser("build", help="Build packages for distro.") + parser_build.set_defaults(func=build) + parser_build.add_argument("distro") -subparsers = parser.add_subparsers(help="subcommands", metavar="<command>") + parser_show_latest = subparsers.add_parser( + "show-latest", help="Show latest version of packages." + ) + parser_show_latest.set_defaults(func=print_latest) -parser_build = subparsers.add_parser("build", help="Build packages") -parser_build.set_defaults(func=build) -parser_build.add_argument("distro") + parser_show_order= subparsers.add_parser("show-order", help="Show build order.") + parser_show_order.set_defaults(func=show_order) + parser_show_order.add_argument("roots", nargs="+") -parser_show_latest = subparsers.add_parser( - "show-latest", help="Show latest version of packages" -) -parser_show_latest.set_defaults(func=print_latest) + args = parser.parse_args() -args = parser.parse_args() + if "func" not in args: + parser.print_help() + else: + args.func(args) -if "func" not in args: - parser.print_help() -else: - args.func(args) +if __name__ == "__main__": + main()