-
Notifications
You must be signed in to change notification settings - Fork 3
/
build-script.xml
380 lines (361 loc) · 16.1 KB
/
build-script.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
<project name="sfScript">
<!-- SCRIPT TARGETS: Executes a script as a one step of a larger process. -->
<target name="info" depends="initHome" description="Shows the value of each
property used by the buildfile. Requires: All parameters are optional.
From the command line, info is useful for testing the affect of passing a
given parameter on other properties. Some targets set their own properties
before calling initHome or initRepo. Either run info as its own job
(context), or AFTER the desired target runs.">
<echo level="info">Executing info script ...</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/info"/>
<!-- sf -->
<env key="sf_allowMissingFiles" value="${sf_allowMissingFiles}"/>
<env key="sf_apiVersion" value="${sf_apiVersion}"/>
<env key="sf_autoUpdatePackage" value="${sf_autoUpdatePackage}"/>
<env key="sf_checkOnly" value="${sf_checkOnly}"/>
<env key="sf_credentials" value="${sf_credentials}"/>
<env key="sf_deployRoot" value="${sf_deployRoot}"/>
<env key="sf_failOnError" value="${sf_failOnError}"/>
<env key="sf_fullName" value="${sf_fullName}"/>
<env key="sf_host" value="${sf_host}"/>
<env key="sf_ignoreWarnings" value="${sf_ignoreWarnings}"/>
<env key="sf_logType" value="${sf_logType}"/>
<env key="sf_maxPoll" value="${sf_maxPoll}"/>
<env key="sf_package_xml" value="${sf_package_xml}"/>
<env key="sf_packageNames" value="${sf_packageNames}"/>
<env key="sf_password" value="${sf_password}"/>
<env key="sf_password_org" value="${sf_password_org}"/>
<env key="sf_pollWaitMillis" value="${sf_pollWaitMillis}"/>
<env key="sf_prefix" value="${sf_prefix}"/>
<env key="sf_prefix_list" value="${sf_prefix_list}"/>
<env key="sf_purgeOnDelete" value="${sf_purgeOnDelete}"/>
<env key="sf_rollbackOnError" value="${sf_rollbackOnError}"/>
<env key="sf_retrieveTarget" value="${sf_retrieveTarget}"/>
<env key="sf_securityToken" value="${sf_securityToken}"/>
<env key="sf_serverurl" value="${sf_serverurl}"/>
<env key="sf_serverurl_login" value="${sf_serverurl_login}"/>
<env key="sf_serverurl_test" value="${sf_serverurl_test}"/>
<env key="sf_sessionId" value="${sf_sessionId}"/>
<env key="sf_singlePackage" value="${sf_singlePackage}"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
<env key="sf_testLevel" value="${sf_testLevel}"/>
<env key="sf_trace" value="${sf_trace}"/>
<env key="sf_unpackaged" value="${sf_unpackaged}"/>
<env key="sf_unpackaged_xml" value="${sf_unpackaged_xml}"/>
<env key="sf_unzip" value="${sf_unzip}"/>
<env key="sf_username" value="${sf_username}"/>
<env key="sf_username_org" value="${sf_username_org}"/>
<env key="sf_zipfile" value="${sf_zipfile}"/>
<env key="sandbox" value="${sandbox}"/>
<!-- repo -->
<env key="repo_config_email" value="${repo_config_email}"/>
<env key="repo_config_user" value="${repo_config_user}"/>
<env key="repo_full_name" value="${repo_full_name}"/>
<env key="repo_host" value="${repo_host}"/>
<env key="repo_message" value="${repo_message}"/>
<env key="repo_name" value="${repo_name}"/>
<env key="repo_owner" value="${repo_owner}"/>
<env key="repo_password" value="${repo_password}"/>
<env key="repo_path" value="${repo_path}"/>
<env key="repo_post_pull_request_payload_bitbucket"
value="${repo_post_pull_request_payload_bitbucket}"/>
<env key="repo_post_pull_request_payload_github"
value="${repo_post_pull_request_payload_github}"/>
<env key="post_pull_request_script"
value="${post_pull_request_script}"/>
<env key="repo_url" value="${repo_url}"/>
<env key="repo_user" value="${repo_user}"/>
<env key="branch" value="${branch}"/>
<env key="close_source_branch" value="${close_source_branch}"/>
<env key="commitmask" value="${commitmask}"/>
<env key="commitdir" value="${commitdir}"/>
<env key="parentdir" value="${parentdir}"/>
<env key="remote" value="${remote}"/>
<env key="destination" value="${destination}"/>
<env key="destBranch" value="${destBranch}"/>
<env key="sourceBranch" value="${sourceBranch}"/>
<!-- CodeScan -->
<env key="sonar_accountName" value="${sonar_accountName}" />
<env key="sonar_accountName" value="${sonar_teamName}" />
<env key="sonar_apiKey" value="${sonar_apiKey}" />
<env key="sonar_host_url" value="${sonar_host_url}" />
<env key="sonar_login" value="${sonar_login}" />
<env key="sonar_password" value="${sonar_password}" />
<env key="sonar_minSeverity" value="${sonar_minSeverity}" />
<env key="sonar_branchName" value="${sonar_branchName}"/>
<!-- runtime -->
<env key="basedir" value="${basedir}"/>
<env key="home" value ="${home}"/>
<env key="homedir" value="${homedir}"/>
<env key="tool" value="${tool}"/>
<env key="tooldir" value="${tooldir}"/>
<env key="task" value="${task}"/>
</exec>
</target>
<!--
Clones the repo under the basedir and creates the task branch.
-->
<target name="branch" depends="initRepo">
<echo level="info">Executing branch using ...
"${tooldir}/sh/branch"
repo_url="${repo_url}"
repo_name="${repo_name}"
branch="${branch}"
parentdir="${parentdir}"</echo>
<delete dir="${repo_name}"/>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/branch"/>
<env key="repo_url" value="${repo_url}"/>
<env key="repo_name" value="${repo_name}"/>
<env key="branch" value="${branch}"/>
<env key="parentdir" value="${parentdir}"/>
</exec>
</target>
<!--
Executes commit script to checkin metadata.
-->
<target name="commit" depends="initRepo">
<echo level="info">Executing commit using ...
"${tooldir}/sh/commit"
homedir="${homedir}"
repo_url="${repo_url}"
repo_config_email="${repo_config_email}"
repo_config_user="${repo_config_user}"
repo_message="${repo_message}"
basedir="${basedir}"
branch="${branch}"
commitdir="${commitdir}"
remote="${remote}"
task="${task}"</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/commit"/>
<env key="homedir" value="${homedir}"/>
<env key="repo_url" value="${repo_url}"/>
<env key="repo_config_email" value="${repo_config_email}"/>
<env key="repo_config_user" value="${repo_config_user}"/>
<env key="repo_message" value="${repo_message}"/>
<env key="basedir" value="${basedir}"/>
<env key="branch" value="${branch}"/>
<env key="commitdir" value="${commitdir}"/>
<env key="remote" value="${remote}"/>
<env key="task" value="${task}"/>
</exec>
</target>
<!--
Removes problematic metadata components.
-->
<target name="fixComponents" depends="initHome">
<echo>Removing problematic components using ...
sourcedir=${sf_sourcedir}</echo>
<delete file="${sf_sourcedir}/layouts/CaseInteraction-Case Feed Layout.layout"/>
<delete file="${sf_sourcedir}/objects/Idea.object"/>
<delete file="${sf_sourcedir}/settings/Ideas.settings"/>
<delete file="${sf_sourcedir}/settings/PersonalJourney.settings"/>
<delete file="${sf_sourcedir}/workflows/ExternalEventMapping.workflow"/>
<delete file="${sf_sourcedir}/workflows/Idea.workflow"/>
<delete file="${sf_sourcedir}/workflows/Reply.workflow"/>
<delete file="${sf_sourcedir}/workflows/Question.workflow"/>
<delete file="${sf_sourcedir}/workflows/SocialPersona.workflow"/>
<delete file="${sf_sourcedir}/workflows/SocialPost.workflow"/>
</target>
<!--
Removes UNMANAGED field from a retrieved manifest.
-->
<target name="fixManifest">
<echo level="info">Executing fixManifest using ...
"${tooldir}/sh/del_unpackaged_label"
"sf_sourcedir"="${sf_sourcedir}"
</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/del_unpackaged_label"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
</exec>
</target>
<!--
Removes user permission settings from profiles and permission sets.
-->
<target name="fixProfiles">
<echo level="info">Executing fixProfiles using ...
"${tooldir}/sh/fix-profiles"
"homedir"="${homedir}"
</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/del_profile_permset_members"/>
<env key="homedir" value="${homedir}"/>
</exec>
</target>
<!--
Adds Flow Definitions to the manifest, when Flows are defines.
-->
<target name="injectFlowDefinitions" depends="initHome">
<echo level="info">Executing injectFlowDefinitions script using ...
"${tooldir}/sh/inject-profiles"
sf_sourcedir="${sf_sourcedir}"</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/add_flowDefinition_member"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
</exec>
</target>
<!--
Adds a fullName field to the manifest, so that metadata is contained within a named package.
-->
<target name="injectFullName">
<echo level="info">Executing injectFullName script using ...
"${tooldir}/inject-fullName"
sf_sourcedir="${sf_sourcedir}"
sf_fullName="${sf_fullName}"
</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/add_fullName_field"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
<env key="sf_fullName" value="${sf_fullName}"/>
</exec>
</target>
<!--
Adds Admin profile to the manifest.
-->
<target name="injectProfiles" depends="initHome">
<echo level="info">Executing injectProfiles script using ...
"${tooldir}/sh/inject-profiles"
sf_sourcedir="${sf_sourcedir}"</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/add_admin_member"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
</exec>
</target>
<!--
Updates the Account object fieldSet elements to include expected Account fields in either the displayedFields list or the availableFields list.
-->
<target name ="fieldsetsExtend">
<echo level="info">Extending Account fieldsetsExtend using ...
homedir=${homedir}
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/fieldsets_extend.py"/>
<env key="homedir" value="${homedir}"/>
</exec>
</target>
<!--
Removes ListView elements from Account object.
-->
<target name ="listViewRemove">
<echo level="info">Removing ListViews using ...
homedir=${homedir}
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/listviews_remove.py"/>
<env key="homedir" value="${homedir}"/>
</exec>
</target>
<!--
Creates Bitbucket pull request via the REST API.
-->
<target name="postPullRequest" depends="initRepo">
<echo level="info">Creating Pull Request using ...
"${tooldir}/sh/${post_pull_request_script}"
repo_full_name="${repo_full_name}"
repo_password="${repo_password}"
repo_user="${repo_user}"
</echo>
<exec executable="bash" failonerror="${sf_failOnError}">
<arg value="${tooldir}/sh/${post_pull_request_script}"/>
<env key="repo_full_name" value="${repo_full_name}"/>
<env key="repo_password" value="${repo_password}"/>
<env key="repo_post_pull_request_payload_bitbucket"
value="${repo_post_pull_request_payload_bitbucket}"/>
<env key="repo_post_pull_request_payload_github"
value="${repo_post_pull_request_payload_github}"/>
<env key="repo_user" value="${repo_user}"/>
</exec>
</target>
<!--
Exchange prefix references in metadata files so that code can be deployed under a different namespace prefix.
-->
<target name="prefixSwap" depends="initHome">
<echo>Swapping prefixes using ...
sf_sourcedir="${sf_sourcedir}"
sf_prefix_swap="${sf_prefix_swap}"
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/prefix_swap.py"/>
<env key="sf_sourcedir" value="${sf_sourcedir}"/>
<env key="sf_prefix_swap" value="${sf_prefix_swap}"/>
</exec>
</target>
<!--
Compares a source and target profile and outputs a well-formed
target_upgrade.profile granting access to components available
in target that are not granted by source.
-->
<target name="profileDelta" depends="initHome">
<echo>Comparing source and target profiles using ...
profile_path_source="${profile_path_source}"
profile_path_target="${profile_path_target}"
profile_path_output="${profile_path_output}"
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/profile_delta.py"/>
<env key="profile_path_source" value="${profile_path_source}"/>
<env key="profile_path_target" value="${profile_path_target}"/>
<env key="profile_path_output" value="${profile_path_output}"/>
</exec>
</target>
<!--
Removes false permissions from a profile and outputs
a well-formed profile that only grants permissions.
-->
<target name="profilePrune" depends="initHome">
<echo>Comparing source and target profiles using ...
profile_path_source="${profile_path_source}"
profile_path_target="${profile_path_target}"
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/profile_prune.py"/>
<env key="profile_path_source" value="${profile_path_source}"/>
<env key="profile_path_target" value="${profile_path_target}"/>
</exec>
</target>
<!--
Creates a standard .gitignore and package.xml manifest.
-->
<target name="setupConfig" depends="initHome">
<echo>Creating core files using ...
homedir="${homedir}"
tooldir="${tooldir}"
sf_sourcedir="${sf_sourcedir}"</echo>
<concat destfile="${homedir}/.gitignore" append="yes">
<filelist dir="${tooldir}" files="@gitignore"/>
</concat>
<mkdir dir="${sf_sourcedir}"/>
<copy file="${tooldir}/package-all.xml" tofile="${sf_sourcedir}/package.xml"/>
</target>
<!--
Updates the version number on Apex classes to match the latest
version of the managed packages installed in the org.
-->
<target name="versionForward" depends="initHome,retrieveInstalledPackages">
<echo>Conforming versions in local code to latest installed versions of
managed packages using ...
homedir="${homedir}"
sf_prefix_list="${sf_prefix_list}"
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/version_forward.py"/>
<env key="homedir" value="${homedir}"/>
<env key="sf_prefix_list" value="${sf_prefix_list}"/>
</exec>
</target>
<!--
Builds ZLabels class to ensure all Custom Labels are packaged.
-->
<target name="zlabelsBuild">
<echo>Building zLabels class using ...
homedir=${homedir}
</echo>
<exec executable="python" failonerror="${sf_failOnError}">
<arg value="${tooldir}/py/zlabels_build.py"/>
<env key="homedir" value="${homedir}"/>
</exec>
</target>
</project>