← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~cjwatson/launchpad-buildd/extra-snaps into lp:launchpad-buildd

 

Colin Watson has proposed merging lp:~cjwatson/launchpad-buildd/extra-snaps into lp:launchpad-buildd.

Commit message:
Accept an "extra_snaps" entry in livefs arguments.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad-buildd/extra-snaps/+merge/373498

This is passed to livecd-rootfs to configure ubuntu-image to include additional snaps.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~cjwatson/launchpad-buildd/extra-snaps into lp:launchpad-buildd.
=== modified file 'debian/changelog'
--- debian/changelog	2019-08-23 09:58:21 +0000
+++ debian/changelog	2019-10-02 10:31:49 +0000
@@ -1,3 +1,10 @@
+launchpad-buildd (178) UNRELEASED; urgency=medium
+
+  * Accept an "extra_snaps" entry in livefs arguments, which is passed to
+    livecd-rootfs to configure ubuntu-image to include additional snaps.
+
+ -- Colin Watson <cjwatson@xxxxxxxxxx>  Wed, 02 Oct 2019 11:26:45 +0100
+
 launchpad-buildd (177) xenial; urgency=medium
 
   * Fix recipe building to not rely on /CurrentlyBuilding existing in base

=== modified file 'lpbuildd/livefs.py'
--- lpbuildd/livefs.py	2019-06-05 14:10:20 +0000
+++ lpbuildd/livefs.py	2019-10-02 10:31:49 +0000
@@ -41,6 +41,7 @@
         self.image_format = extra_args.get("image_format")
         self.locale = extra_args.get("locale")
         self.extra_ppas = extra_args.get("extra_ppas", [])
+        self.extra_snaps = extra_args.get("extra_snaps", [])
         self.channel = extra_args.get("channel")
         self.image_targets = extra_args.get("image_targets", [])
         self.repo_snapshot_stamp = extra_args.get("repo_snapshot_stamp")
@@ -68,6 +69,8 @@
             args.extend(["--locale", self.locale])
         for ppa in self.extra_ppas:
             args.extend(["--extra-ppa", ppa])
+        for snap in self.extra_snaps:
+            args.extend(["--extra-snap", snap])
         if self.channel:
             args.extend(["--channel", self.channel])
         for image_target in self.image_targets:

=== modified file 'lpbuildd/target/build_livefs.py'
--- lpbuildd/target/build_livefs.py	2019-01-28 15:12:54 +0000
+++ lpbuildd/target/build_livefs.py	2019-10-02 10:31:49 +0000
@@ -70,6 +70,9 @@
             "--extra-ppa", dest="extra_ppas", default=[], action="append",
             help="use this additional PPA")
         parser.add_argument(
+            "--extra-snap", dest="extra_snaps", default=[], action="append",
+            help="use this additional snap")
+        parser.add_argument(
             "--channel", metavar="CHANNEL",
             help="pull snaps from channel CHANNEL for ubuntu-core image")
         parser.add_argument(
@@ -156,6 +159,8 @@
                 lb_env["PROPOSED"] = "1"
             if self.args.extra_ppas:
                 lb_env["EXTRA_PPAS"] = " ".join(self.args.extra_ppas)
+            if self.args.extra_snaps:
+                lb_env["EXTRA_SNAPS"] = " ".join(self.args.extra_snaps)
             if self.args.http_proxy:
                 proxy_dict = {
                     "http_proxy": self.args.http_proxy,

=== modified file 'lpbuildd/target/tests/test_build_livefs.py'
--- lpbuildd/target/tests/test_build_livefs.py	2019-06-05 14:10:20 +0000
+++ lpbuildd/target/tests/test_build_livefs.py	2019-10-02 10:31:49 +0000
@@ -191,6 +191,38 @@
                  "--arch", "amd64", "--release", "xenial"]),
             ]))
 
+    def test_build_extra_ppas_and_snaps(self):
+        args = [
+            "buildlivefs",
+            "--backend=fake", "--series=xenial", "--arch=amd64", "1",
+            "--project=ubuntu-core",
+            "--extra-ppa=owner1/name1", "--extra-ppa=owner2/name2",
+            "--extra-snap=snap1", "--extra-snap=snap2",
+            ]
+        build_livefs = parse_args(args=args).operation
+        build_livefs.build()
+        self.assertThat(build_livefs.backend.run.calls, MatchesListwise([
+            RanBuildCommand(["rm", "-rf", "auto", "local"]),
+            RanBuildCommand(["mkdir", "-p", "auto"]),
+            RanBuildCommand(
+                ["ln", "-s",
+                 "/usr/share/livecd-rootfs/live-build/auto/config", "auto/"]),
+            RanBuildCommand(
+                ["ln", "-s",
+                 "/usr/share/livecd-rootfs/live-build/auto/build", "auto/"]),
+            RanBuildCommand(
+                ["ln", "-s",
+                 "/usr/share/livecd-rootfs/live-build/auto/clean", "auto/"]),
+            RanBuildCommand(["lb", "clean", "--purge"]),
+            RanBuildCommand(
+                ["lb", "config"],
+                PROJECT="ubuntu-core", ARCH="amd64", SUITE="xenial",
+                EXTRA_PPAS="owner1/name1 owner2/name2",
+                EXTRA_SNAPS="snap1 snap2"),
+            RanBuildCommand(
+                ["lb", "build"], PROJECT="ubuntu-core", ARCH="amd64"),
+            ]))
+
     def test_build_debug(self):
         args = [
             "buildlivefs",

=== modified file 'lpbuildd/tests/test_livefs.py'
--- lpbuildd/tests/test_livefs.py	2019-06-05 14:10:20 +0000
+++ lpbuildd/tests/test_livefs.py	2019-10-02 10:31:49 +0000
@@ -58,7 +58,7 @@
         return self.buildmanager._state
 
     @defer.inlineCallbacks
-    def startBuild(self, options=None):
+    def startBuild(self, args=None, options=None):
         # The build manager's iterate() kicks off the consecutive states
         # after INIT.
         extra_args = {
@@ -67,6 +67,8 @@
             "pocket": "release",
             "arch_tag": "i386",
             }
+        if args is not None:
+            extra_args.update(args)
         original_backend_name = self.buildmanager.backend_name
         self.buildmanager.backend_name = "fake"
         self.buildmanager.initiate({}, "chroot.tar.gz", extra_args)
@@ -133,6 +135,22 @@
         self.assertFalse(self.builder.wasCalled("buildFail"))
 
     @defer.inlineCallbacks
+    def test_iterate_extra_ppas_and_snaps(self):
+        # The build manager can be told to pass requests for extra PPAs and
+        # snaps through to the backend.
+        yield self.startBuild(
+            args={
+                "extra_ppas": ["owner1/name1", "owner2/name2"],
+                "extra_snaps": ["snap1", "snap2"],
+                },
+            options=[
+                "--extra-ppa", "owner1/name1",
+                "--extra-ppa", "owner2/name2",
+                "--extra-snap", "snap1",
+                "--extra-snap", "snap2",
+                ])
+
+    @defer.inlineCallbacks
     def test_iterate_snap_store_proxy(self):
         # The build manager can be told to use a snap store proxy.
         self.builder._config.set(


Follow ups