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:
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()