Merge ~cjwatson/launchpad-buildd:charmcraft-managed into launchpad-buildd:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 161feb51862fa28c23adf66d06dca9326066cec8
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad-buildd:charmcraft-managed
Merge into: launchpad-buildd:master
Diff against target: 165 lines (+37/-18)
3 files modified
debian/changelog (+1/-0)
lpbuildd/target/build_charm.py (+11/-1)
lpbuildd/target/tests/test_build_charm.py (+25/-17)
Reviewer Review Type Date Requested Status
Cristian Gonzalez (community) Approve
Review via email: mp+405877@code.launchpad.net

Commit message

Run charmcraft in managed mode

Description of the change

Since we're providing Launchpad-flavoured LXD containers for charmcraft rather than having it start its own, we need to run it in managed mode and install a few more dependencies for it.

To post a comment you must log in.
Revision history for this message
Cristian Gonzalez (cristiangsp) wrote :

Looks good!

review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/debian/changelog b/debian/changelog
index 2c14e1e..95e4c8c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ launchpad-buildd (198) UNRELEASED; urgency=medium
3 * Run charmcraft in verbose mode.3 * Run charmcraft in verbose mode.
4 * Honour proxy arguments when building charms.4 * Honour proxy arguments when building charms.
5 * Install charmcraft with --classic.5 * Install charmcraft with --classic.
6 * Run charmcraft in managed mode.
67
7 -- Colin Watson <cjwatson@ubuntu.com> Fri, 09 Jul 2021 14:08:58 +01008 -- Colin Watson <cjwatson@ubuntu.com> Fri, 09 Jul 2021 14:08:58 +0100
89
diff --git a/lpbuildd/target/build_charm.py b/lpbuildd/target/build_charm.py
index 3550117..b2cb740 100644
--- a/lpbuildd/target/build_charm.py
+++ b/lpbuildd/target/build_charm.py
@@ -80,6 +80,11 @@ class BuildCharm(SnapBuildProxyOperationMixin, VCSOperationMixin,
80 if self.backend.is_package_available(dep):80 if self.backend.is_package_available(dep):
81 deps.append(dep)81 deps.append(dep)
82 deps.extend(self.vcs_deps)82 deps.extend(self.vcs_deps)
83 # See charmcraft.provider.CharmcraftBuilddBaseConfiguration.setup.
84 deps.extend([
85 "python3-pip",
86 "python3-setuptools",
87 ])
83 self.backend.run(["apt-get", "-y", "install"] + deps)88 self.backend.run(["apt-get", "-y", "install"] + deps)
84 if self.args.backend in ("lxd", "fake"):89 if self.args.backend in ("lxd", "fake"):
85 self.snap_store_set_proxy()90 self.snap_store_set_proxy()
@@ -115,11 +120,16 @@ class BuildCharm(SnapBuildProxyOperationMixin, VCSOperationMixin,
115 self.args.build_path)120 self.args.build_path)
116 check_path_escape(self.buildd_path, build_context_path)121 check_path_escape(self.buildd_path, build_context_path)
117 env = OrderedDict()122 env = OrderedDict()
123 env["CHARMCRAFT_MANAGED_MODE"] = "1"
118 if self.args.proxy_url:124 if self.args.proxy_url:
119 env["http_proxy"] = self.args.proxy_url125 env["http_proxy"] = self.args.proxy_url
120 env["https_proxy"] = self.args.proxy_url126 env["https_proxy"] = self.args.proxy_url
121 env["GIT_PROXY_COMMAND"] = "/usr/local/bin/snap-git-proxy"127 env["GIT_PROXY_COMMAND"] = "/usr/local/bin/snap-git-proxy"
122 args = ["charmcraft", "build", "-v", "-f", build_context_path]128 args = [
129 "charmcraft", "build", "-v",
130 "-p", build_context_path,
131 "-f", build_context_path,
132 ]
123 self.run_build_command(args, env=env)133 self.run_build_command(args, env=env)
124134
125 def run(self):135 def run(self):
diff --git a/lpbuildd/target/tests/test_build_charm.py b/lpbuildd/target/tests/test_build_charm.py
index dc0dad6..ae1da6a 100644
--- a/lpbuildd/target/tests/test_build_charm.py
+++ b/lpbuildd/target/tests/test_build_charm.py
@@ -117,7 +117,7 @@ class TestBuildCharm(TestCase):
117 build_snap = parse_args(args=args).operation117 build_snap = parse_args(args=args).operation
118 build_snap.install()118 build_snap.install()
119 self.assertThat(build_snap.backend.run.calls, MatchesListwise([119 self.assertThat(build_snap.backend.run.calls, MatchesListwise([
120 RanAptGet("install", "bzr"),120 RanAptGet("install", "bzr", "python3-pip", "python3-setuptools"),
121 RanSnap("install", "--channel=candidate", "core"),121 RanSnap("install", "--channel=candidate", "core"),
122 RanSnap("install", "--channel=beta", "core18"),122 RanSnap("install", "--channel=beta", "core18"),
123 RanSnap("install", "--classic", "--channel=edge", "charmcraft"),123 RanSnap("install", "--classic", "--channel=edge", "charmcraft"),
@@ -133,7 +133,7 @@ class TestBuildCharm(TestCase):
133 build_charm = parse_args(args=args).operation133 build_charm = parse_args(args=args).operation
134 build_charm.install()134 build_charm.install()
135 self.assertThat(build_charm.backend.run.calls, MatchesListwise([135 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
136 RanAptGet("install", "bzr"),136 RanAptGet("install", "bzr", "python3-pip", "python3-setuptools"),
137 RanSnap("install", "--classic", "charmcraft"),137 RanSnap("install", "--classic", "charmcraft"),
138 RanCommand(["mkdir", "-p", "/home/buildd"]),138 RanCommand(["mkdir", "-p", "/home/buildd"]),
139 ]))139 ]))
@@ -147,7 +147,7 @@ class TestBuildCharm(TestCase):
147 build_charm = parse_args(args=args).operation147 build_charm = parse_args(args=args).operation
148 build_charm.install()148 build_charm.install()
149 self.assertThat(build_charm.backend.run.calls, MatchesListwise([149 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
150 RanAptGet("install", "git"),150 RanAptGet("install", "git", "python3-pip", "python3-setuptools"),
151 RanSnap("install", "--classic", "charmcraft"),151 RanSnap("install", "--classic", "charmcraft"),
152 RanCommand(["mkdir", "-p", "/home/buildd"]),152 RanCommand(["mkdir", "-p", "/home/buildd"]),
153 ]))153 ]))
@@ -178,7 +178,7 @@ class TestBuildCharm(TestCase):
178 build_charm = parse_args(args=args).operation178 build_charm = parse_args(args=args).operation
179 build_charm.install()179 build_charm.install()
180 self.assertThat(build_charm.backend.run.calls, MatchesListwise([180 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
181 RanAptGet("install", "git"),181 RanAptGet("install", "git", "python3-pip", "python3-setuptools"),
182 RanCommand(182 RanCommand(
183 ["snap", "ack", "/dev/stdin"], input_text=store_assertion),183 ["snap", "ack", "/dev/stdin"], input_text=store_assertion),
184 RanCommand(["snap", "set", "core", "proxy.store=store-id"]),184 RanCommand(["snap", "set", "core", "proxy.store=store-id"]),
@@ -203,7 +203,9 @@ class TestBuildCharm(TestCase):
203 os.fchmod(proxy_script.fileno(), 0o755)203 os.fchmod(proxy_script.fileno(), 0o755)
204 build_charm.install()204 build_charm.install()
205 self.assertThat(build_charm.backend.run.calls, MatchesListwise([205 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
206 RanAptGet("install", "python3", "socat", "git"),206 RanAptGet(
207 "install", "python3", "socat", "git",
208 "python3-pip", "python3-setuptools"),
207 RanSnap("install", "--classic", "charmcraft"),209 RanSnap("install", "--classic", "charmcraft"),
208 RanCommand(["mkdir", "-p", "/home/buildd"]),210 RanCommand(["mkdir", "-p", "/home/buildd"]),
209 ]))211 ]))
@@ -355,9 +357,10 @@ class TestBuildCharm(TestCase):
355 build_charm.build()357 build_charm.build()
356 self.assertThat(build_charm.backend.run.calls, MatchesListwise([358 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
357 RanBuildCommand(359 RanBuildCommand(
358 ["charmcraft", "build", "-v", "-f",360 ["charmcraft", "build", "-v",
359 "/home/buildd/test-image/."],361 "-p", "/home/buildd/test-image/.",
360 cwd="/home/buildd/test-image"),362 "-f", "/home/buildd/test-image/."],
363 cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1"),
361 ]))364 ]))
362365
363 def test_build_with_path(self):366 def test_build_with_path(self):
@@ -372,9 +375,10 @@ class TestBuildCharm(TestCase):
372 build_charm.build()375 build_charm.build()
373 self.assertThat(build_charm.backend.run.calls, MatchesListwise([376 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
374 RanBuildCommand(377 RanBuildCommand(
375 ["charmcraft", "build", "-v", "-f",378 ["charmcraft", "build", "-v",
376 "/home/buildd/test-image/build-aux/"],379 "-p", "/home/buildd/test-image/build-aux/",
377 cwd="/home/buildd/test-image"),380 "-f", "/home/buildd/test-image/build-aux/"],
381 cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1"),
378 ]))382 ]))
379383
380 def test_build_proxy(self):384 def test_build_proxy(self):
@@ -387,14 +391,16 @@ class TestBuildCharm(TestCase):
387 build_charm = parse_args(args=args).operation391 build_charm = parse_args(args=args).operation
388 build_charm.build()392 build_charm.build()
389 env = {393 env = {
394 "CHARMCRAFT_MANAGED_MODE": "1",
390 "http_proxy": "http://proxy.example:3128/",395 "http_proxy": "http://proxy.example:3128/",
391 "https_proxy": "http://proxy.example:3128/",396 "https_proxy": "http://proxy.example:3128/",
392 "GIT_PROXY_COMMAND": "/usr/local/bin/snap-git-proxy",397 "GIT_PROXY_COMMAND": "/usr/local/bin/snap-git-proxy",
393 }398 }
394 self.assertThat(build_charm.backend.run.calls, MatchesListwise([399 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
395 RanBuildCommand(400 RanBuildCommand(
396 ["charmcraft", "build", "-v", "-f",401 ["charmcraft", "build", "-v",
397 "/home/buildd/test-image/."],402 "-p", "/home/buildd/test-image/.",
403 "-f", "/home/buildd/test-image/."],
398 cwd="/home/buildd/test-image", **env),404 cwd="/home/buildd/test-image", **env),
399 ]))405 ]))
400406
@@ -409,14 +415,16 @@ class TestBuildCharm(TestCase):
409 build_charm.backend.run = FakeRevisionID("42")415 build_charm.backend.run = FakeRevisionID("42")
410 self.assertEqual(0, build_charm.run())416 self.assertEqual(0, build_charm.run())
411 self.assertThat(build_charm.backend.run.calls, MatchesAll(417 self.assertThat(build_charm.backend.run.calls, MatchesAll(
412 AnyMatch(RanAptGet("install", "bzr"),),418 AnyMatch(RanAptGet(
419 "install", "bzr", "python3-pip", "python3-setuptools"),),
413 AnyMatch(RanBuildCommand(420 AnyMatch(RanBuildCommand(
414 ["bzr", "branch", "lp:foo", "test-image"],421 ["bzr", "branch", "lp:foo", "test-image"],
415 cwd="/home/buildd")),422 cwd="/home/buildd")),
416 AnyMatch(RanBuildCommand(423 AnyMatch(RanBuildCommand(
417 ["charmcraft", "build", "-v", "-f",424 ["charmcraft", "build", "-v",
418 "/home/buildd/test-image/."],425 "-p", "/home/buildd/test-image/.",
419 cwd="/home/buildd/test-image")),426 "-f", "/home/buildd/test-image/."],
427 cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1")),
420 ))428 ))
421429
422 def test_run_install_fails(self):430 def test_run_install_fails(self):

Subscribers

People subscribed via source and target branches