launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #23355
[Merge] lp:~cjwatson/launchpad-buildd/snap-private into lp:launchpad-buildd
Colin Watson has proposed merging lp:~cjwatson/launchpad-buildd/snap-private into lp:launchpad-buildd.
Commit message:
Don't set SNAPCRAFT_BUILD_INFO=1 when building private snaps.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #1639975 in launchpad-buildd: "support for building private snaps"
https://bugs.launchpad.net/launchpad-buildd/+bug/1639975
For more details, see:
https://code.launchpad.net/~cjwatson/launchpad-buildd/snap-private/+merge/364068
--
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~cjwatson/launchpad-buildd/snap-private into lp:launchpad-buildd.
=== modified file 'debian/changelog'
--- debian/changelog 2019-02-11 12:22:42 +0000
+++ debian/changelog 2019-03-06 22:46:42 +0000
@@ -6,6 +6,8 @@
for core16 and core18.
* Move /usr/share/launchpad-buildd/slavebin to
/usr/share/launchpad-buildd/bin.
+ * Don't set SNAPCRAFT_BUILD_INFO=1 when building private snaps
+ (LP: #1639975).
-- Colin Watson <cjwatson@xxxxxxxxxx> Fri, 08 Feb 2019 15:09:35 +0000
=== modified file 'lpbuildd/snap.py'
--- lpbuildd/snap.py 2019-02-07 11:52:09 +0000
+++ lpbuildd/snap.py 2019-03-06 22:46:42 +0000
@@ -266,6 +266,7 @@
self.revocation_endpoint = extra_args.get("revocation_endpoint")
self.build_source_tarball = extra_args.get(
"build_source_tarball", False)
+ self.private = extra_args.get("private", False)
self.proxy_service = None
super(SnapBuildManager, self).initiate(files, chroot, extra_args)
@@ -349,6 +350,8 @@
args.extend(["--git-path", self.git_path])
if self.build_source_tarball:
args.append("--build-source-tarball")
+ if self.private:
+ args.append("--private")
args.append(self.name)
self.runTargetSubProcess("buildsnap", *args)
=== modified file 'lpbuildd/target/build_snap.py'
--- lpbuildd/target/build_snap.py 2019-02-11 12:22:42 +0000
+++ lpbuildd/target/build_snap.py 2019-03-06 22:46:42 +0000
@@ -73,6 +73,9 @@
help=(
"build a tarball containing all source code, including "
"external dependencies"))
+ parser.add_argument(
+ "--private", default=False, action="store_true",
+ help="build a private snap")
parser.add_argument("name", help="name of snap to build")
def __init__(self, args, parser):
@@ -202,9 +205,8 @@
env = OrderedDict()
env["SNAPCRAFT_LOCAL_SOURCES"] = "1"
env["SNAPCRAFT_SETUP_CORE"] = "1"
- # XXX cjwatson 2017-11-24: Once we support building private snaps,
- # we'll need to make this optional in some way.
- env["SNAPCRAFT_BUILD_INFO"] = "1"
+ if not self.args.private:
+ env["SNAPCRAFT_BUILD_INFO"] = "1"
env["SNAPCRAFT_IMAGE_INFO"] = self.image_info
env["SNAPCRAFT_BUILD_ENVIRONMENT"] = "host"
if self.args.proxy_url:
@@ -227,9 +229,8 @@
"""Run all build, stage and snap phases."""
logger.info("Running build phase...")
env = OrderedDict()
- # XXX cjwatson 2017-11-24: Once we support building private snaps,
- # we'll need to make this optional in some way.
- env["SNAPCRAFT_BUILD_INFO"] = "1"
+ if not self.args.private:
+ env["SNAPCRAFT_BUILD_INFO"] = "1"
env["SNAPCRAFT_IMAGE_INFO"] = self.image_info
env["SNAPCRAFT_BUILD_ENVIRONMENT"] = "host"
if self.args.proxy_url:
=== modified file 'lpbuildd/target/tests/test_build_snap.py'
--- lpbuildd/target/tests/test_build_snap.py 2019-02-11 12:22:42 +0000
+++ lpbuildd/target/tests/test_build_snap.py 2019-03-06 22:46:42 +0000
@@ -377,6 +377,25 @@
cwd="/build"),
]))
+ def test_pull_private(self):
+ args = [
+ "buildsnap",
+ "--backend=fake", "--series=xenial", "--arch=amd64", "1",
+ "--branch", "lp:foo", "--private", "test-snap",
+ ]
+ build_snap = parse_args(args=args).operation
+ build_snap.pull()
+ env = {
+ "SNAPCRAFT_LOCAL_SOURCES": "1",
+ "SNAPCRAFT_SETUP_CORE": "1",
+ "SNAPCRAFT_IMAGE_INFO": "{}",
+ "SNAPCRAFT_BUILD_ENVIRONMENT": "host",
+ }
+ self.assertThat(build_snap.backend.run.calls, MatchesListwise([
+ RanBuildCommand(
+ ["snapcraft", "pull"], cwd="/build/test-snap", **env),
+ ]))
+
def test_build(self):
args = [
"buildsnap",
@@ -415,6 +434,20 @@
RanBuildCommand(["snapcraft"], cwd="/build/test-snap", **env),
]))
+ def test_build_private(self):
+ args = [
+ "buildsnap",
+ "--backend=fake", "--series=xenial", "--arch=amd64", "1",
+ "--branch", "lp:foo", "--private", "test-snap",
+ ]
+ build_snap = parse_args(args=args).operation
+ build_snap.build()
+ self.assertThat(build_snap.backend.run.calls, MatchesListwise([
+ RanBuildCommand(
+ ["snapcraft"], cwd="/build/test-snap",
+ SNAPCRAFT_IMAGE_INFO="{}", SNAPCRAFT_BUILD_ENVIRONMENT="host"),
+ ]))
+
# XXX cjwatson 2017-08-07: Test revoke_token. It may be easiest to
# convert it to requests first.
=== modified file 'lpbuildd/tests/test_snap.py'
--- lpbuildd/tests/test_snap.py 2019-02-11 12:22:42 +0000
+++ lpbuildd/tests/test_snap.py 2019-03-06 22:46:42 +0000
@@ -245,6 +245,45 @@
self.buildmanager.iterate, self.buildmanager.iterators[-1])
self.assertFalse(self.slave.wasCalled("buildFail"))
+ @defer.inlineCallbacks
+ def test_iterate_private(self):
+ # The build manager iterates a private build from start to finish.
+ yield self.startBuild({"private": True}, ["--private"])
+
+ 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.")
+
+ # 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.slave.wasCalled("buildFail"))
+ self.assertThat(self.slave, HasWaitingFiles.byEquality({
+ "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.slave.wasCalled("buildFail"))
+
def getListenerURL(self, listener):
port = listener.getHost().port
return b"http://localhost:%d/" % port