← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~mwhudson/launchpad:binarypackagejob-args into launchpad:master

 

Michael Hudson-Doyle has proposed merging ~mwhudson/launchpad:binarypackagejob-args into launchpad:master with ~mwhudson/launchpad:add-distroseries-underlying-arch-model as a prerequisite.

Commit message:
include abi_tag and isa_tag as well as arch_tag in default build args

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~mwhudson/launchpad/+git/launchpad/+merge/490644
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~mwhudson/launchpad:binarypackagejob-args into launchpad:master.
diff --git a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
index 3aadc6f..772fde4 100644
--- a/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
+++ b/lib/lp/buildmaster/interfaces/buildfarmjobbehaviour.py
@@ -27,8 +27,12 @@ class BuildArgs(TypedDict, total=False):
     # True if this build should build architecture-independent packages
     # as well as architecture-dependent packages [binarypackage].
     arch_indep: bool
-    # The architecture tag to build for.
+    # The architecture tag to build for. (deprecated)
     arch_tag: str
+    # The architecture (i.e. ABI) tag to build for.
+    abi_tag: str
+    # The ISA tag to build for.
+    isa_tag: str
     # Whether this is a build in a private archive.  (This causes URLs
     # in the build log to be sanitized.)
     archive_private: bool
diff --git a/lib/lp/buildmaster/model/buildfarmjobbehaviour.py b/lib/lp/buildmaster/model/buildfarmjobbehaviour.py
index 279c0a2..9aa0d6a 100644
--- a/lib/lp/buildmaster/model/buildfarmjobbehaviour.py
+++ b/lib/lp/buildmaster/model/buildfarmjobbehaviour.py
@@ -110,8 +110,16 @@ class BuildFarmJobBehaviourBase:
 
         launchpad_server_url = config.vhost.mainsite.hostname
         launchpad_instance = launchpad_urls.get(launchpad_server_url, "devel")
+        if self.distro_arch_series.underlying_architecturetag is not None:
+            abi_tag = self.distro_arch_series.underlying_architecturetag
+            isa_tag = self.distro_arch_series.architecturetag
+        else:
+            abi_tag = isa_tag = self.distro_arch_series.architecturetag
+
         return {
             "arch_tag": self.distro_arch_series.architecturetag,
+            "abi_tag": abi_tag,
+            "isa_tag": isa_tag,
             "archive_private": self.archive.private,
             "build_url": canonical_url(self.build),
             "builder_constraints": removeSecurityProxy(
diff --git a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
index 4de9565..7e8fefa 100644
--- a/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
+++ b/lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py
@@ -13,6 +13,7 @@ from datetime import datetime
 import six
 from fixtures import MockPatchObject
 from testtools import ExpectedException
+from testtools.matchers import ContainsAll
 from testtools.twistedsupport import AsynchronousDeferredRunTest
 from twisted.internet import defer
 from zope.component import getUtility
@@ -108,11 +109,13 @@ class TestBuildFarmJobBehaviourBase(TestCaseWithFactory):
             buildfarmjob = removeSecurityProxy(buildfarmjob)
         return BuildFarmJobBehaviourBase(buildfarmjob)
 
-    def _makeBuild(self):
+    def _makeBuild(self, arch="x86", underlying_arch=None):
         """Create a `Build` object."""
         x86 = getUtility(IProcessorSet).getByName("386")
         distroarchseries = self.factory.makeDistroArchSeries(
-            architecturetag="x86", processor=x86
+            architecturetag=arch,
+            processor=x86,
+            underlying_architecturetag=underlying_arch,
         )
         distroseries = distroarchseries.distroseries
         archive = self.factory.makeArchive(
@@ -153,6 +156,40 @@ class TestBuildFarmJobBehaviourBase(TestCaseWithFactory):
         behaviour.setBuilder(self.factory.makeBuilder(virtualized=False), None)
         self.assertIs(False, behaviour.extraBuildArgs()["fast_cleanup"])
 
+    def test_extraBuildArgs_arch(self):
+        # If the builder is virtualized, extraBuildArgs sends
+        # fast_cleanup: True.
+        behaviour = self._makeBehaviour(self._makeBuild(arch="riscv64"))
+        behaviour.setBuilder(self.factory.makeBuilder(virtualized=True), None)
+        self.assertThat(
+            behaviour.extraBuildArgs().items(),
+            ContainsAll(
+                [
+                    ("arch_tag", "riscv64"),
+                    ("abi_tag", "riscv64"),
+                    ("isa_tag", "riscv64"),
+                ]
+            ),
+        )
+
+    def test_extraBuildArgs_arch_variant(self):
+        # If the builder is virtualized, extraBuildArgs sends
+        # fast_cleanup: True.
+        behaviour = self._makeBehaviour(
+            self._makeBuild(arch="riscv64rva23", underlying_arch="riscv64")
+        )
+        behaviour.setBuilder(self.factory.makeBuilder(virtualized=True), None)
+        self.assertThat(
+            behaviour.extraBuildArgs().items(),
+            ContainsAll(
+                [
+                    ("arch_tag", "riscv64rva23"),
+                    ("abi_tag", "riscv64"),
+                    ("isa_tag", "riscv64rva23"),
+                ]
+            ),
+        )
+
     def test_extractBuildStatus_baseline(self):
         # extractBuildStatus picks the name of the build status out of a
         # dict describing the worker's status.
diff --git a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
index 4751440..1329e45 100644
--- a/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
+++ b/lib/lp/charms/tests/test_charmrecipebuildbehaviour.py
@@ -310,6 +310,8 @@ class TestAsyncCharmRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -355,6 +357,8 @@ class TestAsyncCharmRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -518,6 +522,8 @@ class TestAsyncCharmRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
diff --git a/lib/lp/code/model/tests/test_cibuildbehaviour.py b/lib/lp/code/model/tests/test_cibuildbehaviour.py
index dce979b..0f8a3f7 100644
--- a/lib/lp/code/model/tests/test_cibuildbehaviour.py
+++ b/lib/lp/code/model/tests/test_cibuildbehaviour.py
@@ -296,6 +296,8 @@ class TestAsyncCIBuildBehaviour(StatsMixin, TestCIBuildBehaviourBase):
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "fast_cleanup": Is(True),
@@ -435,6 +437,8 @@ class TestAsyncCIBuildBehaviour(StatsMixin, TestCIBuildBehaviourBase):
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "fast_cleanup": Is(True),
@@ -613,6 +617,8 @@ class TestAsyncCIBuildBehaviour(StatsMixin, TestCIBuildBehaviourBase):
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "fast_cleanup": Is(True),
diff --git a/lib/lp/code/model/tests/test_recipebuilder.py b/lib/lp/code/model/tests/test_recipebuilder.py
index 85ba544..35d2a3e 100644
--- a/lib/lp/code/model/tests/test_recipebuilder.py
+++ b/lib/lp/code/model/tests/test_recipebuilder.py
@@ -204,6 +204,8 @@ class TestAsyncRecipeBuilder(TestRecipeBuilderBase):
         self.assertEqual(
             {
                 "arch_tag": "i386",
+                "abi_tag": "i386",
+                "isa_tag": "i386",
                 "archive_private": False,
                 "archive_purpose": "PPA",
                 "archives": expected_archives,
@@ -308,6 +310,8 @@ class TestAsyncRecipeBuilder(TestRecipeBuilderBase):
         self.assertEqual(
             {
                 "arch_tag": "i386",
+                "abi_tag": "i386",
+                "isa_tag": "i386",
                 "archive_private": False,
                 "archive_purpose": "PPA",
                 "archives": expected_archives,
@@ -359,6 +363,8 @@ class TestAsyncRecipeBuilder(TestRecipeBuilderBase):
         self.assertEqual(
             {
                 "arch_tag": "i386",
+                "abi_tag": "i386",
+                "isa_tag": "i386",
                 "archive_private": False,
                 "archive_purpose": "PPA",
                 "archives": expected_archives,
diff --git a/lib/lp/crafts/tests/test_craftrecipebuildbehaviour.py b/lib/lp/crafts/tests/test_craftrecipebuildbehaviour.py
index 54737e4..a4a5e2e 100644
--- a/lib/lp/crafts/tests/test_craftrecipebuildbehaviour.py
+++ b/lib/lp/crafts/tests/test_craftrecipebuildbehaviour.py
@@ -331,6 +331,8 @@ class TestAsyncCraftRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -378,6 +380,8 @@ class TestAsyncCraftRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -513,6 +517,8 @@ class TestAsyncCraftRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
diff --git a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
index 64d3c01..1d24551 100644
--- a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
+++ b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
@@ -490,6 +490,8 @@ class TestAsyncOCIRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_file": Equals(job.build.recipe.build_file),
                     "build_args": Equals(
                         {"BUILD_VAR": "123", "LAUNCHPAD_BUILD_ARCH": arch_tag}
@@ -569,6 +571,8 @@ class TestAsyncOCIRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_file": Equals(job.build.recipe.build_file),
                     "build_args": Equals(
                         {"BUILD_VAR": "123", "LAUNCHPAD_BUILD_ARCH": arch_tag}
@@ -660,6 +664,8 @@ class TestAsyncOCIRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_file": Equals(job.build.recipe.build_file),
                     "build_args": Equals(
                         {"BUILD_VAR": "123", "LAUNCHPAD_BUILD_ARCH": arch_tag}
diff --git a/lib/lp/rocks/tests/test_rockrecipebuildbehaviour.py b/lib/lp/rocks/tests/test_rockrecipebuildbehaviour.py
index 312ad76..1f5b185 100644
--- a/lib/lp/rocks/tests/test_rockrecipebuildbehaviour.py
+++ b/lib/lp/rocks/tests/test_rockrecipebuildbehaviour.py
@@ -309,6 +309,8 @@ class TestAsyncRockRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -355,6 +357,8 @@ class TestAsyncRockRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
@@ -490,6 +494,8 @@ class TestAsyncRockRecipeBuildBehaviour(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
                     "channels": Equals({}),
diff --git a/lib/lp/snappy/tests/test_snapbuildbehaviour.py b/lib/lp/snappy/tests/test_snapbuildbehaviour.py
index 91ce9cf..9b253d9 100644
--- a/lib/lp/snappy/tests/test_snapbuildbehaviour.py
+++ b/lib/lp/snappy/tests/test_snapbuildbehaviour.py
@@ -769,6 +769,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "branch": Equals(branch.bzr_identity),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
@@ -824,6 +826,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
@@ -870,6 +874,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
@@ -920,6 +926,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
@@ -993,6 +1001,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
@@ -1039,6 +1049,8 @@ class TestAsyncSnapBuildBehaviourBuilderProxy(
                     "archive_private": Is(False),
                     "archives": Equals(expected_archives),
                     "arch_tag": Equals("i386"),
+                    "isa_tag": Equals("i386"),
+                    "abi_tag": Equals("i386"),
                     "build_source_tarball": Is(False),
                     "build_url": Equals(canonical_url(job.build)),
                     "builder_constraints": Equals([]),
diff --git a/lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py b/lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py
index 625bf5b..edae653 100644
--- a/lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py
+++ b/lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py
@@ -164,6 +164,8 @@ class TestBinaryBuildPackageBehaviour(StatsMixin, TestCaseWithFactory):
         extra_args = {
             "arch_indep": arch_indep,
             "arch_tag": das.architecturetag,
+            "abi_tag": das.architecturetag,
+            "isa_tag": das.architecturetag,
             "archive_private": archive.private,
             "archive_purpose": archive_purpose.name,
             "archives": archives,
diff --git a/lib/lp/soyuz/tests/test_livefsbuildbehaviour.py b/lib/lp/soyuz/tests/test_livefsbuildbehaviour.py
index fd1e96b..ea0b4f3 100644
--- a/lib/lp/soyuz/tests/test_livefsbuildbehaviour.py
+++ b/lib/lp/soyuz/tests/test_livefsbuildbehaviour.py
@@ -204,6 +204,8 @@ class TestAsyncLiveFSBuildBehaviour(TestLiveFSBuildBehaviourBase):
                 "archive_private": False,
                 "archives": expected_archives,
                 "arch_tag": "i386",
+                "isa_tag": "i386",
+                "abi_tag": "i386",
                 "build_url": canonical_url(job.build),
                 "builder_constraints": [],
                 "datestamp": "20140425-103800",
diff --git a/lib/lp/translations/tests/test_translationtemplatesbuildbehaviour.py b/lib/lp/translations/tests/test_translationtemplatesbuildbehaviour.py
index f19d0e9..de52348 100644
--- a/lib/lp/translations/tests/test_translationtemplatesbuildbehaviour.py
+++ b/lib/lp/translations/tests/test_translationtemplatesbuildbehaviour.py
@@ -109,6 +109,8 @@ class TestTranslationTemplatesBuildBehaviour(
                 {},
                 {
                     "arch_tag": das.architecturetag,
+                    "isa_tag": das.architecturetag,
+                    "abi_tag": das.architecturetag,
                     "archive_private": False,
                     "branch_url": behaviour.build.branch.composePublicURL(),
                     "build_url": canonical_url(behaviour.build),