launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #32863
[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),