← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~pelpsi/launchpad-buildd:snap-components-support into launchpad-buildd:master

 

Simone Pelosi has proposed merging ~pelpsi/launchpad-buildd:snap-components-support into launchpad-buildd:master.

Commit message:
Added support for snap components
    
`.comp` files must be added to file cache.


Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~pelpsi/launchpad-buildd/+git/launchpad-buildd/+merge/459807
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~pelpsi/launchpad-buildd:snap-components-support into launchpad-buildd:master.
diff --git a/debian/changelog b/debian/changelog
index 4849b34..e8bf844 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
 launchpad-buildd (236) UNRELEASED; urgency=medium
 
+  [ Colin Watson ]
   * Add lxc.cgroup2.* configuration, for compatibility with future
     environments where we use unified cgroup2.  (However, we should keep
     using systemd.unified_cgroup_hierarchy=false until we drop support for
@@ -9,6 +10,9 @@ launchpad-buildd (236) UNRELEASED; urgency=medium
     separately.
   * Document deployment to qastaging in place of dogfood.
 
+  [Simone Pelosi]
+  * Add support for snap components. 
+
  -- Colin Watson <cjwatson@xxxxxxxxxx>  Thu, 16 Nov 2023 16:06:07 +0000
 
 launchpad-buildd (235) focal; urgency=medium
diff --git a/lpbuildd/snap.py b/lpbuildd/snap.py
index d922242..d840093 100644
--- a/lpbuildd/snap.py
+++ b/lpbuildd/snap.py
@@ -139,7 +139,7 @@ class SnapBuildManager(BuildManagerProxyMixin, DebianBuildManager):
                 if self.backend.islink(path):
                     continue
                 if entry.endswith(
-                    (".snap", ".manifest", ".debug", ".dpkg.yaml")
+                    (".snap", ".manifest", ".debug", ".dpkg.yaml", ".comp")
                 ):
                     self.addWaitingFileFromBackend(path)
         if self.build_source_tarball:
diff --git a/lpbuildd/tests/test_snap.py b/lpbuildd/tests/test_snap.py
index 0e44093..42834a3 100644
--- a/lpbuildd/tests/test_snap.py
+++ b/lpbuildd/tests/test_snap.py
@@ -255,6 +255,78 @@ class TestSnapBuildManagerIteration(TestCase):
         self.assertFalse(self.builder.wasCalled("buildFail"))
 
     @defer.inlineCallbacks
+    def test_iterate_with_components(self):
+        # The build manager iterates a build that uploads components from
+        # start to finish.
+        args = {
+            "git_repository": "https://git.launchpad.dev/~example/+git/snap";,
+            "git_path": "master",
+        }
+        expected_options = [
+            "--git-repository",
+            "https://git.launchpad.dev/~example/+git/snap";,
+            "--git-path",
+            "master",
+        ]
+        yield self.startBuild(args, expected_options)
+
+        log_path = os.path.join(self.buildmanager._cachepath, "buildlog")
+        with open(log_path, "w") as log:
+            log.write("I am a build log.")
+
+        self.buildmanager.backend.add_file(
+            "/build/test-snap/test-snap_0_all.snap", b"I am a snap package."
+        )
+        self.buildmanager.backend.add_file(
+            "/build/test-snap/test-snap_0_all.comp", b"I am a component."
+        )
+
+        # After building the package, reap processes.
+        yield self.buildmanager.iterate(0)
+        expected_command = [
+            "sharepath/bin/in-target",
+            "in-target",
+            "scan-for-processes",
+            "--backend=lxd",
+            "--series=xenial",
+            "--arch=i386",
+            self.buildid,
+        ]
+        self.assertEqual(SnapBuildState.BUILD_SNAP, self.getState())
+        self.assertEqual(expected_command, self.buildmanager.commands[-1])
+        self.assertNotEqual(
+            self.buildmanager.iterate, self.buildmanager.iterators[-1]
+        )
+        self.assertFalse(self.builder.wasCalled("buildFail"))
+        self.assertThat(
+            self.builder,
+            HasWaitingFiles.byEquality(
+                {
+                    "test-snap_0_all.comp": b"I am a component.",
+                    "test-snap_0_all.snap": b"I am a snap package.",
+                }
+            ),
+        )
+
+        # Control returns to the DebianBuildManager in the UMOUNT state.
+        self.buildmanager.iterateReap(self.getState(), 0)
+        expected_command = [
+            "sharepath/bin/in-target",
+            "in-target",
+            "umount-chroot",
+            "--backend=lxd",
+            "--series=xenial",
+            "--arch=i386",
+            self.buildid,
+        ]
+        self.assertEqual(SnapBuildState.UMOUNT, self.getState())
+        self.assertEqual(expected_command, self.buildmanager.commands[-1])
+        self.assertEqual(
+            self.buildmanager.iterate, self.buildmanager.iterators[-1]
+        )
+        self.assertFalse(self.builder.wasCalled("buildFail"))
+
+    @defer.inlineCallbacks
     def test_iterate_with_debug(self):
         # The build manager iterates a build that uploads debug symbols from
         # start to finish.

Follow ups