launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #32326
[Merge] ~alvarocs/launchpad-buildd:charms-platform-name into launchpad-buildd:master
Alvaro Crespo Serrano has proposed merging ~alvarocs/launchpad-buildd:charms-platform-name into launchpad-buildd:master.
Commit message:
Add 'recipe_platform_name' as argument to pass it to the builder
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~alvarocs/launchpad-buildd/+git/launchpad-buildd/+merge/483410
--
Your team Launchpad code reviewers is requested to review the proposed merge of ~alvarocs/launchpad-buildd:charms-platform-name into launchpad-buildd:master.
diff --git a/lpbuildd/charm.py b/lpbuildd/charm.py
index c3243bf..64f22b2 100644
--- a/lpbuildd/charm.py
+++ b/lpbuildd/charm.py
@@ -36,6 +36,7 @@ class CharmBuildManager(BuildManagerProxyMixin, DebianBuildManager):
self.proxy_url = extra_args.get("proxy_url")
self.revocation_endpoint = extra_args.get("revocation_endpoint")
self.proxy_service = None
+ self.recipe_platform_name = extra_args.get("recipe_platform_name")
super().initiate(files, chroot, extra_args)
@@ -55,6 +56,8 @@ class CharmBuildManager(BuildManagerProxyMixin, DebianBuildManager):
args.extend(["--git-path", self.git_path])
if self.build_path is not None:
args.extend(["--build-path", self.build_path])
+ if self.recipe_platform_name:
+ args.extend(["--recipe-platform-name", self.recipe_platform_name])
args.append(self.name)
self.runTargetSubProcess("build-charm", *args)
diff --git a/lpbuildd/target/build_charm.py b/lpbuildd/target/build_charm.py
index 1bcbd1e..f3dfc7a 100644
--- a/lpbuildd/target/build_charm.py
+++ b/lpbuildd/target/build_charm.py
@@ -41,6 +41,11 @@ class BuildCharm(
"--build-path", default=".", help="location of charm to build."
)
parser.add_argument("name", help="name of charm to build")
+ parser.add_argument(
+ "--recipe_platform_name",
+ type=str,
+ help="platform name used by the craft tool"
+ )
def __init__(self, args, parser):
super().__init__(args, parser)
@@ -105,6 +110,8 @@ class BuildCharm(
)
check_path_escape(self.buildd_path, build_context_path)
env = self.build_proxy_environment(proxy_url=self.args.proxy_url)
+ if self.args.recipe_platform_name:
+ env["CRAFT_PLATFORM"] = self.args.recipe_platform_name
args = ["charmcraft", "pack", "-v", "--destructive-mode"]
self.run_build_command(args, env=env, cwd=build_context_path)
diff --git a/lpbuildd/target/tests/test_build_charm.py b/lpbuildd/target/tests/test_build_charm.py
index fa0d169..0b4264d 100644
--- a/lpbuildd/target/tests/test_build_charm.py
+++ b/lpbuildd/target/tests/test_build_charm.py
@@ -608,6 +608,35 @@ class TestBuildCharm(TestCase):
),
)
+ def test_build_with_recipe_platform_name(self):
+ args = [
+ "build-charm",
+ "--backend=fake",
+ "--series=xenial",
+ "--arch=amd64",
+ "1",
+ "--branch",
+ "lp:foo",
+ "--recipe_platform_name",
+ "ubuntu-22.04-amd64",
+ "test-image",
+ ]
+ build_charm = parse_args(args=args).operation
+ build_charm.backend.add_dir("/build/test-directory")
+ build_charm.build()
+ self.assertThat(
+ build_charm.backend.run.calls,
+ MatchesListwise(
+ [
+ RanBuildCommand(
+ ["charmcraft", "pack", "-v", "--destructive-mode"],
+ cwd="/home/buildd/test-image/.",
+ CRAFT_PLATFORM="ubuntu-22.04-amd64",
+ ),
+ ]
+ ),
+ )
+
def test_run_succeeds(self):
args = [
"build-charm",
diff --git a/lpbuildd/tests/test_charm.py b/lpbuildd/tests/test_charm.py
index c1e0e14..efc6f3f 100644
--- a/lpbuildd/tests/test_charm.py
+++ b/lpbuildd/tests/test_charm.py
@@ -244,6 +244,74 @@ class TestCharmBuildManagerIteration(TestCase):
)
self.assertFalse(self.builder.wasCalled("buildFail"))
+ @defer.inlineCallbacks
+ def test_iterate_recipe_platform_name(self):
+ # Test that recipe_platform_name is correctly passed through.
+ args = {
+ "git_repository": "https://git.launchpad.dev/~example/+git/charm",
+ "recipe_platform_name": "ubuntu-22.04-amd64",
+ }
+ expected_options = [
+ "--git-repository",
+ "https://git.launchpad.dev/~example/+git/charm",
+ "--recipe-platform-name",
+ "ubuntu-22.04-amd64",
+ ]
+ yield self.startBuild(args, expected_options)
+
+ log_path = os.path.join(self.buildmanager._cachepath, "buildlog")
+ with open(log_path, "w") as log:
+ log.write("Build log for recipe platform name test.")
+
+ self.buildmanager.backend.add_file(
+ "/home/buildd/test-charm/test-charm_1_all.charm", b"I am charming."
+ )
+
+ # 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(CharmBuildState.BUILD_CHARM, 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-charm_1_all.charm": b"I am charming.",
+ }
+ ),
+ )
+
+ # 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(CharmBuildState.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"))
+
@responses.activate
def test_revokeProxyToken(self):
responses.add(
Follow ups