Merge ~twom/launchpad:oci-build-path into launchpad:master

Proposed by Tom Wardill
Status: Merged
Approved by: Tom Wardill
Approved revision: f2d6ee3dfb7b0210d8a1f589e6dc4bfd1c883fdd
Merged at revision: ddbd9c3b69f8af5344c36071df5f265cff37e5b1
Proposed branch: ~twom/launchpad:oci-build-path
Merge into: launchpad:master
Diff against target: 159 lines (+27/-6)
6 files modified
lib/lp/oci/interfaces/ocirecipe.py (+8/-0)
lib/lp/oci/model/ocirecipe.py (+8/-3)
lib/lp/oci/model/ocirecipebuildbehaviour.py (+1/-0)
lib/lp/oci/tests/test_ocirecipe.py (+4/-2)
lib/lp/oci/tests/test_ocirecipebuildbehaviour.py (+2/-0)
lib/lp/testing/factory.py (+4/-1)
Reviewer Review Type Date Requested Status
Kristian Glass (community) Approve
Thiago F. Pappacena (community) Approve
Review via email: mp+389241@code.launchpad.net

Commit message

Add OCIRecipe.build_path

Description of the change

Add build context directory to OCIRecipe to be passed to the buildd as a build argument.

This can't land until https://code.launchpad.net/~twom/launchpad/+git/launchpad/+merge/389228 is on production.

To post a comment you must log in.
Revision history for this message
Thiago F. Pappacena (pappacena) wrote :

LGTM

review: Approve
Revision history for this message
Kristian Glass (doismellburning) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/oci/interfaces/ocirecipe.py b/lib/lp/oci/interfaces/ocirecipe.py
2index 37f74a2..b290f42 100644
3--- a/lib/lp/oci/interfaces/ocirecipe.py
4+++ b/lib/lp/oci/interfaces/ocirecipe.py
5@@ -383,6 +383,14 @@ class IOCIRecipeEditableAttributes(IHasOwner):
6 required=True,
7 readonly=False))
8
9+ build_path = exported(TextLine(
10+ title=_("Build directory context"),
11+ description=_("Directory to use for build context "
12+ "and OCIRecipe.build_file location."),
13+ constraint=path_does_not_escape,
14+ required=True,
15+ readonly=False))
16+
17 build_daily = exported(Bool(
18 title=_("Build daily"),
19 required=True,
20diff --git a/lib/lp/oci/model/ocirecipe.py b/lib/lp/oci/model/ocirecipe.py
21index 0125114..e95c8c6 100644
22--- a/lib/lp/oci/model/ocirecipe.py
23+++ b/lib/lp/oci/model/ocirecipe.py
24@@ -145,6 +145,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
25 git_repository = Reference(git_repository_id, "GitRepository.id")
26 git_path = Unicode(name="git_path", allow_none=True)
27 build_file = Unicode(name="build_file", allow_none=False)
28+ build_path = Unicode(name="build_path", allow_none=False)
29
30 require_virtualized = Bool(name="require_virtualized", default=True,
31 allow_none=False)
32@@ -156,7 +157,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
33 def __init__(self, name, registrant, owner, oci_project, git_ref,
34 description=None, official=False, require_virtualized=True,
35 build_file=None, build_daily=False, date_created=DEFAULT,
36- allow_internet=True):
37+ allow_internet=True, build_path=None):
38 if not getFeatureFlag(OCI_RECIPE_ALLOW_CREATE):
39 raise OCIRecipeFeatureDisabled()
40 super(OCIRecipe, self).__init__()
41@@ -173,6 +174,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
42 self.date_last_modified = date_created
43 self.git_ref = git_ref
44 self.allow_internet = allow_internet
45+ self.build_path = build_path
46
47 def __repr__(self):
48 return "<OCIRecipe ~%s/%s/+oci/%s/+recipe/%s>" % (
49@@ -532,7 +534,7 @@ class OCIRecipeSet:
50 def new(self, name, registrant, owner, oci_project, git_ref, build_file,
51 description=None, official=False, require_virtualized=True,
52 build_daily=False, processors=None, date_created=DEFAULT,
53- allow_internet=True):
54+ allow_internet=True, build_path=None):
55 """See `IOCIRecipeSet`."""
56 if not registrant.inTeam(owner):
57 if owner.is_team:
58@@ -550,11 +552,14 @@ class OCIRecipeSet:
59 if self.exists(owner, oci_project, name):
60 raise DuplicateOCIRecipeName
61
62+ if build_path is None:
63+ build_path = "."
64+
65 store = IMasterStore(OCIRecipe)
66 oci_recipe = OCIRecipe(
67 name, registrant, owner, oci_project, git_ref, description,
68 official, require_virtualized, build_file, build_daily,
69- date_created, allow_internet)
70+ date_created, allow_internet, build_path)
71 store.add(oci_recipe)
72
73 if processors is None:
74diff --git a/lib/lp/oci/model/ocirecipebuildbehaviour.py b/lib/lp/oci/model/ocirecipebuildbehaviour.py
75index fce6dd3..844a2c8 100644
76--- a/lib/lp/oci/model/ocirecipebuildbehaviour.py
77+++ b/lib/lp/oci/model/ocirecipebuildbehaviour.py
78@@ -96,6 +96,7 @@ class OCIRecipeBuildBehaviour(SnapProxyMixin, BuildFarmJobBehaviourBase):
79 logger=logger))
80
81 args['build_file'] = build.recipe.build_file
82+ args['build_path'] = build.recipe.build_path
83
84 if build.recipe.git_ref is not None:
85 args["git_repository"] = (
86diff --git a/lib/lp/oci/tests/test_ocirecipe.py b/lib/lp/oci/tests/test_ocirecipe.py
87index 880c351..024b8e7 100644
88--- a/lib/lp/oci/tests/test_ocirecipe.py
89+++ b/lib/lp/oci/tests/test_ocirecipe.py
90@@ -799,7 +799,8 @@ class TestOCIRecipeSet(TestCaseWithFactory):
91 description='a description',
92 official=False,
93 require_virtualized=False,
94- build_file='build file')
95+ build_file='build file',
96+ build_path='build path')
97 self.assertEqual(target.registrant, registrant)
98 self.assertEqual(target.owner, owner)
99 self.assertEqual(target.oci_project, oci_project)
100@@ -992,7 +993,8 @@ class TestOCIRecipeWebservice(OCIConfigHelperMixin, TestCaseWithFactory):
101 git_ref_link=Equals(self.getAbsoluteURL(recipe.git_ref)),
102 description=Equals(recipe.description),
103 build_file=Equals(recipe.build_file),
104- build_daily=Equals(recipe.build_daily)
105+ build_daily=Equals(recipe.build_daily),
106+ build_path=Equals(recipe.build_path)
107 )))
108
109 def test_api_patch_oci_recipe(self):
110diff --git a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
111index 3fdf8b4..bbc1ee6 100644
112--- a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
113+++ b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
114@@ -242,6 +242,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
115 "archives": Equals(expected_archives),
116 "arch_tag": Equals("i386"),
117 "build_file": Equals(job.build.recipe.build_file),
118+ "build_path": Equals(job.build.recipe.build_path),
119 "build_url": Equals(canonical_url(job.build)),
120 "fast_cleanup": Is(True),
121 "git_repository": Equals(ref.repository.git_https_url),
122@@ -272,6 +273,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
123 "archives": Equals(expected_archives),
124 "arch_tag": Equals("i386"),
125 "build_file": Equals(job.build.recipe.build_file),
126+ "build_path": Equals(job.build.recipe.build_path),
127 "build_url": Equals(canonical_url(job.build)),
128 "fast_cleanup": Is(True),
129 "git_repository": Equals(ref.repository.git_https_url),
130diff --git a/lib/lp/testing/factory.py b/lib/lp/testing/factory.py
131index 431cce1..a6a04bc 100644
132--- a/lib/lp/testing/factory.py
133+++ b/lib/lp/testing/factory.py
134@@ -4999,7 +4999,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
135 oci_project=None, git_ref=None, description=None,
136 official=False, require_virtualized=True,
137 build_file=None, date_created=DEFAULT,
138- allow_internet=True):
139+ allow_internet=True, build_path=None):
140 """Make a new OCIRecipe."""
141 if name is None:
142 name = self.getUniqueString(u"oci-recipe-name")
143@@ -5015,6 +5015,8 @@ class BareLaunchpadObjectFactory(ObjectFactory):
144 [git_ref] = self.makeGitRefs()
145 if build_file is None:
146 build_file = self.getUniqueUnicode(u"build_file_for")
147+ if build_path is None:
148+ build_path = self.getUniqueUnicode(u"build_path_for")
149 return getUtility(IOCIRecipeSet).new(
150 name=name,
151 registrant=registrant,
152@@ -5022,6 +5024,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
153 oci_project=oci_project,
154 git_ref=git_ref,
155 build_file=build_file,
156+ build_path=build_path,
157 description=description,
158 official=official,
159 require_virtualized=require_virtualized,

Subscribers

People subscribed via source and target branches

to status/vote changes: