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
1diff --git a/debian/changelog b/debian/changelog
2index 2c14e1e..95e4c8c 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -3,6 +3,7 @@ launchpad-buildd (198) UNRELEASED; urgency=medium
6 * Run charmcraft in verbose mode.
7 * Honour proxy arguments when building charms.
8 * Install charmcraft with --classic.
9+ * Run charmcraft in managed mode.
10
11 -- Colin Watson <cjwatson@ubuntu.com> Fri, 09 Jul 2021 14:08:58 +0100
12
13diff --git a/lpbuildd/target/build_charm.py b/lpbuildd/target/build_charm.py
14index 3550117..b2cb740 100644
15--- a/lpbuildd/target/build_charm.py
16+++ b/lpbuildd/target/build_charm.py
17@@ -80,6 +80,11 @@ class BuildCharm(SnapBuildProxyOperationMixin, VCSOperationMixin,
18 if self.backend.is_package_available(dep):
19 deps.append(dep)
20 deps.extend(self.vcs_deps)
21+ # See charmcraft.provider.CharmcraftBuilddBaseConfiguration.setup.
22+ deps.extend([
23+ "python3-pip",
24+ "python3-setuptools",
25+ ])
26 self.backend.run(["apt-get", "-y", "install"] + deps)
27 if self.args.backend in ("lxd", "fake"):
28 self.snap_store_set_proxy()
29@@ -115,11 +120,16 @@ class BuildCharm(SnapBuildProxyOperationMixin, VCSOperationMixin,
30 self.args.build_path)
31 check_path_escape(self.buildd_path, build_context_path)
32 env = OrderedDict()
33+ env["CHARMCRAFT_MANAGED_MODE"] = "1"
34 if self.args.proxy_url:
35 env["http_proxy"] = self.args.proxy_url
36 env["https_proxy"] = self.args.proxy_url
37 env["GIT_PROXY_COMMAND"] = "/usr/local/bin/snap-git-proxy"
38- args = ["charmcraft", "build", "-v", "-f", build_context_path]
39+ args = [
40+ "charmcraft", "build", "-v",
41+ "-p", build_context_path,
42+ "-f", build_context_path,
43+ ]
44 self.run_build_command(args, env=env)
45
46 def run(self):
47diff --git a/lpbuildd/target/tests/test_build_charm.py b/lpbuildd/target/tests/test_build_charm.py
48index dc0dad6..ae1da6a 100644
49--- a/lpbuildd/target/tests/test_build_charm.py
50+++ b/lpbuildd/target/tests/test_build_charm.py
51@@ -117,7 +117,7 @@ class TestBuildCharm(TestCase):
52 build_snap = parse_args(args=args).operation
53 build_snap.install()
54 self.assertThat(build_snap.backend.run.calls, MatchesListwise([
55- RanAptGet("install", "bzr"),
56+ RanAptGet("install", "bzr", "python3-pip", "python3-setuptools"),
57 RanSnap("install", "--channel=candidate", "core"),
58 RanSnap("install", "--channel=beta", "core18"),
59 RanSnap("install", "--classic", "--channel=edge", "charmcraft"),
60@@ -133,7 +133,7 @@ class TestBuildCharm(TestCase):
61 build_charm = parse_args(args=args).operation
62 build_charm.install()
63 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
64- RanAptGet("install", "bzr"),
65+ RanAptGet("install", "bzr", "python3-pip", "python3-setuptools"),
66 RanSnap("install", "--classic", "charmcraft"),
67 RanCommand(["mkdir", "-p", "/home/buildd"]),
68 ]))
69@@ -147,7 +147,7 @@ class TestBuildCharm(TestCase):
70 build_charm = parse_args(args=args).operation
71 build_charm.install()
72 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
73- RanAptGet("install", "git"),
74+ RanAptGet("install", "git", "python3-pip", "python3-setuptools"),
75 RanSnap("install", "--classic", "charmcraft"),
76 RanCommand(["mkdir", "-p", "/home/buildd"]),
77 ]))
78@@ -178,7 +178,7 @@ class TestBuildCharm(TestCase):
79 build_charm = parse_args(args=args).operation
80 build_charm.install()
81 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
82- RanAptGet("install", "git"),
83+ RanAptGet("install", "git", "python3-pip", "python3-setuptools"),
84 RanCommand(
85 ["snap", "ack", "/dev/stdin"], input_text=store_assertion),
86 RanCommand(["snap", "set", "core", "proxy.store=store-id"]),
87@@ -203,7 +203,9 @@ class TestBuildCharm(TestCase):
88 os.fchmod(proxy_script.fileno(), 0o755)
89 build_charm.install()
90 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
91- RanAptGet("install", "python3", "socat", "git"),
92+ RanAptGet(
93+ "install", "python3", "socat", "git",
94+ "python3-pip", "python3-setuptools"),
95 RanSnap("install", "--classic", "charmcraft"),
96 RanCommand(["mkdir", "-p", "/home/buildd"]),
97 ]))
98@@ -355,9 +357,10 @@ class TestBuildCharm(TestCase):
99 build_charm.build()
100 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
101 RanBuildCommand(
102- ["charmcraft", "build", "-v", "-f",
103- "/home/buildd/test-image/."],
104- cwd="/home/buildd/test-image"),
105+ ["charmcraft", "build", "-v",
106+ "-p", "/home/buildd/test-image/.",
107+ "-f", "/home/buildd/test-image/."],
108+ cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1"),
109 ]))
110
111 def test_build_with_path(self):
112@@ -372,9 +375,10 @@ class TestBuildCharm(TestCase):
113 build_charm.build()
114 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
115 RanBuildCommand(
116- ["charmcraft", "build", "-v", "-f",
117- "/home/buildd/test-image/build-aux/"],
118- cwd="/home/buildd/test-image"),
119+ ["charmcraft", "build", "-v",
120+ "-p", "/home/buildd/test-image/build-aux/",
121+ "-f", "/home/buildd/test-image/build-aux/"],
122+ cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1"),
123 ]))
124
125 def test_build_proxy(self):
126@@ -387,14 +391,16 @@ class TestBuildCharm(TestCase):
127 build_charm = parse_args(args=args).operation
128 build_charm.build()
129 env = {
130+ "CHARMCRAFT_MANAGED_MODE": "1",
131 "http_proxy": "http://proxy.example:3128/",
132 "https_proxy": "http://proxy.example:3128/",
133 "GIT_PROXY_COMMAND": "/usr/local/bin/snap-git-proxy",
134 }
135 self.assertThat(build_charm.backend.run.calls, MatchesListwise([
136 RanBuildCommand(
137- ["charmcraft", "build", "-v", "-f",
138- "/home/buildd/test-image/."],
139+ ["charmcraft", "build", "-v",
140+ "-p", "/home/buildd/test-image/.",
141+ "-f", "/home/buildd/test-image/."],
142 cwd="/home/buildd/test-image", **env),
143 ]))
144
145@@ -409,14 +415,16 @@ class TestBuildCharm(TestCase):
146 build_charm.backend.run = FakeRevisionID("42")
147 self.assertEqual(0, build_charm.run())
148 self.assertThat(build_charm.backend.run.calls, MatchesAll(
149- AnyMatch(RanAptGet("install", "bzr"),),
150+ AnyMatch(RanAptGet(
151+ "install", "bzr", "python3-pip", "python3-setuptools"),),
152 AnyMatch(RanBuildCommand(
153 ["bzr", "branch", "lp:foo", "test-image"],
154 cwd="/home/buildd")),
155 AnyMatch(RanBuildCommand(
156- ["charmcraft", "build", "-v", "-f",
157- "/home/buildd/test-image/."],
158- cwd="/home/buildd/test-image")),
159+ ["charmcraft", "build", "-v",
160+ "-p", "/home/buildd/test-image/.",
161+ "-f", "/home/buildd/test-image/."],
162+ cwd="/home/buildd/test-image", CHARMCRAFT_MANAGED_MODE="1")),
163 ))
164
165 def test_run_install_fails(self):

Subscribers

People subscribed via source and target branches