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

Proposed by Tom Wardill
Status: Merged
Approved by: Tom Wardill
Approved revision: 2facb6d9b0a71626fef923e395e5296470d111cd
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~twom/launchpad:oci-build-path-ui
Merge into: launchpad:master
Diff against target: 235 lines (+41/-7)
9 files modified
lib/lp/oci/browser/ocirecipe.py (+6/-1)
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/templates/ocirecipe-index.pt (+5/-0)
lib/lp/oci/templates/ocirecipe-new.pt (+3/-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
Ioana Lasc (community) Approve
Review via email: mp+389415@code.launchpad.net

Commit message

Add build_path to OCI UI

To post a comment you must log in.
Revision history for this message
Ioana Lasc (ilasc) wrote :

looks good to me.

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/browser/ocirecipe.py b/lib/lp/oci/browser/ocirecipe.py
2index 3dd764c..15a2b14 100644
3--- a/lib/lp/oci/browser/ocirecipe.py
4+++ b/lib/lp/oci/browser/ocirecipe.py
5@@ -505,6 +505,7 @@ class IOCIRecipeEditSchema(Interface):
6 "description",
7 "git_ref",
8 "build_file",
9+ "build_path",
10 "build_daily",
11 "require_virtualized",
12 "allow_internet",
13@@ -523,6 +524,7 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
14 "description",
15 "git_ref",
16 "build_file",
17+ "build_path",
18 "build_daily",
19 )
20 custom_widget_git_ref = GitRefWidget
21@@ -557,6 +559,7 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
22 return {
23 "owner": self.user,
24 "build_file": "Dockerfile",
25+ "build_path": ".",
26 "processors": [
27 p for p in getUtility(IProcessorSet).getAll()
28 if p.build_by_default],
29@@ -580,7 +583,8 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
30 recipe = getUtility(IOCIRecipeSet).new(
31 name=data["name"], registrant=self.user, owner=data["owner"],
32 oci_project=self.context, git_ref=data["git_ref"],
33- build_file=data["build_file"], description=data["description"],
34+ build_file=data["build_file"], build_path=data["build_path"],
35+ description=data["description"],
36 build_daily=data["build_daily"], processors=data["processors"])
37 self.next_url = canonical_url(recipe)
38
39@@ -638,6 +642,7 @@ class OCIRecipeEditView(BaseOCIRecipeEditView, EnableProcessorsMixin):
40 "description",
41 "git_ref",
42 "build_file",
43+ "build_path",
44 "build_daily",
45 )
46 custom_widget_git_ref = GitRefWidget
47diff --git a/lib/lp/oci/interfaces/ocirecipe.py b/lib/lp/oci/interfaces/ocirecipe.py
48index 37f74a2..b290f42 100644
49--- a/lib/lp/oci/interfaces/ocirecipe.py
50+++ b/lib/lp/oci/interfaces/ocirecipe.py
51@@ -383,6 +383,14 @@ class IOCIRecipeEditableAttributes(IHasOwner):
52 required=True,
53 readonly=False))
54
55+ build_path = exported(TextLine(
56+ title=_("Build directory context"),
57+ description=_("Directory to use for build context "
58+ "and OCIRecipe.build_file location."),
59+ constraint=path_does_not_escape,
60+ required=True,
61+ readonly=False))
62+
63 build_daily = exported(Bool(
64 title=_("Build daily"),
65 required=True,
66diff --git a/lib/lp/oci/model/ocirecipe.py b/lib/lp/oci/model/ocirecipe.py
67index 0125114..e95c8c6 100644
68--- a/lib/lp/oci/model/ocirecipe.py
69+++ b/lib/lp/oci/model/ocirecipe.py
70@@ -145,6 +145,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
71 git_repository = Reference(git_repository_id, "GitRepository.id")
72 git_path = Unicode(name="git_path", allow_none=True)
73 build_file = Unicode(name="build_file", allow_none=False)
74+ build_path = Unicode(name="build_path", allow_none=False)
75
76 require_virtualized = Bool(name="require_virtualized", default=True,
77 allow_none=False)
78@@ -156,7 +157,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
79 def __init__(self, name, registrant, owner, oci_project, git_ref,
80 description=None, official=False, require_virtualized=True,
81 build_file=None, build_daily=False, date_created=DEFAULT,
82- allow_internet=True):
83+ allow_internet=True, build_path=None):
84 if not getFeatureFlag(OCI_RECIPE_ALLOW_CREATE):
85 raise OCIRecipeFeatureDisabled()
86 super(OCIRecipe, self).__init__()
87@@ -173,6 +174,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
88 self.date_last_modified = date_created
89 self.git_ref = git_ref
90 self.allow_internet = allow_internet
91+ self.build_path = build_path
92
93 def __repr__(self):
94 return "<OCIRecipe ~%s/%s/+oci/%s/+recipe/%s>" % (
95@@ -532,7 +534,7 @@ class OCIRecipeSet:
96 def new(self, name, registrant, owner, oci_project, git_ref, build_file,
97 description=None, official=False, require_virtualized=True,
98 build_daily=False, processors=None, date_created=DEFAULT,
99- allow_internet=True):
100+ allow_internet=True, build_path=None):
101 """See `IOCIRecipeSet`."""
102 if not registrant.inTeam(owner):
103 if owner.is_team:
104@@ -550,11 +552,14 @@ class OCIRecipeSet:
105 if self.exists(owner, oci_project, name):
106 raise DuplicateOCIRecipeName
107
108+ if build_path is None:
109+ build_path = "."
110+
111 store = IMasterStore(OCIRecipe)
112 oci_recipe = OCIRecipe(
113 name, registrant, owner, oci_project, git_ref, description,
114 official, require_virtualized, build_file, build_daily,
115- date_created, allow_internet)
116+ date_created, allow_internet, build_path)
117 store.add(oci_recipe)
118
119 if processors is None:
120diff --git a/lib/lp/oci/model/ocirecipebuildbehaviour.py b/lib/lp/oci/model/ocirecipebuildbehaviour.py
121index fce6dd3..844a2c8 100644
122--- a/lib/lp/oci/model/ocirecipebuildbehaviour.py
123+++ b/lib/lp/oci/model/ocirecipebuildbehaviour.py
124@@ -96,6 +96,7 @@ class OCIRecipeBuildBehaviour(SnapProxyMixin, BuildFarmJobBehaviourBase):
125 logger=logger))
126
127 args['build_file'] = build.recipe.build_file
128+ args['build_path'] = build.recipe.build_path
129
130 if build.recipe.git_ref is not None:
131 args["git_repository"] = (
132diff --git a/lib/lp/oci/templates/ocirecipe-index.pt b/lib/lp/oci/templates/ocirecipe-index.pt
133index 21a6939..c2ef69e 100644
134--- a/lib/lp/oci/templates/ocirecipe-index.pt
135+++ b/lib/lp/oci/templates/ocirecipe-index.pt
136@@ -56,6 +56,11 @@
137 <span tal:content="context/build_file"/>
138 <a tal:replace="structure view/menu:overview/edit/fmt:icon"/>
139 </dd>
140+ <dt>Build context directory:</dt>
141+ <dd>
142+ <span tal:content="context/build_path"/>
143+ <a tal:replace="structure view/menu:overview/edit/fmt:icon"/>
144+ </dd>
145 </dl>
146 <dl id="build-schedule">
147 <dt>Build schedule:</dt>
148diff --git a/lib/lp/oci/templates/ocirecipe-new.pt b/lib/lp/oci/templates/ocirecipe-new.pt
149index e5f2686..0bc156a 100644
150--- a/lib/lp/oci/templates/ocirecipe-new.pt
151+++ b/lib/lp/oci/templates/ocirecipe-new.pt
152@@ -29,6 +29,9 @@
153 <tal:widget define="widget nocall:view/widgets/build_file">
154 <metal:block use-macro="context/@@launchpad_form/widget_row" />
155 </tal:widget>
156+ <tal:widget define="widget nocall:view/widgets/build_path">
157+ <metal:block use-macro="context/@@launchpad_form/widget_row" />
158+ </tal:widget>
159 <tal:widget define="widget nocall:view/widgets/build_daily">
160 <metal:block use-macro="context/@@launchpad_form/widget_row" />
161 </tal:widget>
162diff --git a/lib/lp/oci/tests/test_ocirecipe.py b/lib/lp/oci/tests/test_ocirecipe.py
163index 880c351..024b8e7 100644
164--- a/lib/lp/oci/tests/test_ocirecipe.py
165+++ b/lib/lp/oci/tests/test_ocirecipe.py
166@@ -799,7 +799,8 @@ class TestOCIRecipeSet(TestCaseWithFactory):
167 description='a description',
168 official=False,
169 require_virtualized=False,
170- build_file='build file')
171+ build_file='build file',
172+ build_path='build path')
173 self.assertEqual(target.registrant, registrant)
174 self.assertEqual(target.owner, owner)
175 self.assertEqual(target.oci_project, oci_project)
176@@ -992,7 +993,8 @@ class TestOCIRecipeWebservice(OCIConfigHelperMixin, TestCaseWithFactory):
177 git_ref_link=Equals(self.getAbsoluteURL(recipe.git_ref)),
178 description=Equals(recipe.description),
179 build_file=Equals(recipe.build_file),
180- build_daily=Equals(recipe.build_daily)
181+ build_daily=Equals(recipe.build_daily),
182+ build_path=Equals(recipe.build_path)
183 )))
184
185 def test_api_patch_oci_recipe(self):
186diff --git a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
187index 3fdf8b4..bbc1ee6 100644
188--- a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
189+++ b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
190@@ -242,6 +242,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
191 "archives": Equals(expected_archives),
192 "arch_tag": Equals("i386"),
193 "build_file": Equals(job.build.recipe.build_file),
194+ "build_path": Equals(job.build.recipe.build_path),
195 "build_url": Equals(canonical_url(job.build)),
196 "fast_cleanup": Is(True),
197 "git_repository": Equals(ref.repository.git_https_url),
198@@ -272,6 +273,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
199 "archives": Equals(expected_archives),
200 "arch_tag": Equals("i386"),
201 "build_file": Equals(job.build.recipe.build_file),
202+ "build_path": Equals(job.build.recipe.build_path),
203 "build_url": Equals(canonical_url(job.build)),
204 "fast_cleanup": Is(True),
205 "git_repository": Equals(ref.repository.git_https_url),
206diff --git a/lib/lp/testing/factory.py b/lib/lp/testing/factory.py
207index 45d64f0..fb9d56b 100644
208--- a/lib/lp/testing/factory.py
209+++ b/lib/lp/testing/factory.py
210@@ -4999,7 +4999,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
211 oci_project=None, git_ref=None, description=None,
212 official=False, require_virtualized=True,
213 build_file=None, date_created=DEFAULT,
214- allow_internet=True):
215+ allow_internet=True, build_path=None):
216 """Make a new OCIRecipe."""
217 if name is None:
218 name = self.getUniqueString(u"oci-recipe-name")
219@@ -5015,6 +5015,8 @@ class BareLaunchpadObjectFactory(ObjectFactory):
220 [git_ref] = self.makeGitRefs()
221 if build_file is None:
222 build_file = self.getUniqueUnicode(u"build_file_for")
223+ if build_path is None:
224+ build_path = self.getUniqueUnicode(u"build_path_for")
225 return getUtility(IOCIRecipeSet).new(
226 name=name,
227 registrant=registrant,
228@@ -5022,6 +5024,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
229 oci_project=oci_project,
230 git_ref=git_ref,
231 build_file=build_file,
232+ build_path=build_path,
233 description=description,
234 official=official,
235 require_virtualized=require_virtualized,

Subscribers

People subscribed via source and target branches

to status/vote changes: