Advertisement
Guest User

Untitled

a guest
Nov 30th, 2022
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.57 KB | None | 0 0
  1. <project name="CI-DevMerge" default="deployRunNoTests" basedir="." xmlns:sf="antlib:com.salesforce">
  2. <taskdef uri="antlib:com.salesforce"
  3. resource="com/salesforce/antlib.xml"
  4. classpath="${basedir}/lib/ant-salesforce.jar"
  5. />
  6. <property file="build.properties"/>
  7. <property environment="env"/>
  8. <!-- Flow Management for CI from post: http://salesforce.stackexchange.com/questions/81657/deployment-issues-with-process-builder-flows/81948#81948 -->
  9. <target name="prepBuildDir">
  10. <delete dir="build"/>
  11. <mkdir dir="build"/>
  12. <sync todir="build">
  13. <fileset dir="src">
  14. <exclude name="flows/*"/>
  15. <exclude name="flowDefinitions/*"/>
  16. </fileset>
  17. </sync>
  18. </target>
  19.  
  20. <target name="prepFlows" depends="prepBuildDir,retrieveCurrentFlows,findFlowsToDeploy"/>
  21.  
  22. <target name="retrieveCurrentFlows">
  23. <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="build" unpackaged="flowDefinitions.xml" />
  24. </target>
  25.  
  26. <!--
  27. Compare retrieved flowDefinitions to ones in src
  28. If different and activeVersionNumber in src is greater, copy flow with activeVersionNumber to build/flows
  29. -->
  30. <target name="findFlowsToDeploy">
  31. <script language="javascript"><![CDATA[
  32. var File = java.io.File;
  33.  
  34. function version(xml) {
  35. var matches = (''+ xml).match(/activeVersionNumber>(\d+)</);
  36. if (matches) {
  37. return parseInt(matches[1], 10);
  38. }
  39. }
  40.  
  41. function getFileContents(javaFile) {
  42. var contents = '';
  43. var lines = java.nio.file.Files.readAllLines(java.nio.file.Paths.get(javaFile.getPath()), java.nio.charset.Charset.forName('UTF-8'));
  44. for (var i = 0; i < lines.size(); i++) {
  45. contents += lines.get(i);
  46. }
  47. return contents;
  48. }
  49.  
  50. function getFlowVersion(flowFile) {
  51. var content = getFileContents(flowFile);
  52. return version(content);
  53. }
  54.  
  55. function addFileToFileset(fileset, path) {
  56. java.lang.System.out.println('Flow needs to be deployed: ' + path);
  57. fileset.appendIncludes([path]);
  58. }
  59.  
  60. function copyFiles(files, dest) {
  61. var copyTask = project.createTask('copy');
  62. if (typeof files === 'string') {
  63. copyTask.setFile(new File(files));
  64. } else {
  65. copyTask.add(files);
  66. }
  67. copyTask.setTodir(new File(dest));
  68. copyTask.setOverwrite(true);
  69. copyTask.perform();
  70. }
  71.  
  72. function createFileset(dir) {
  73. var fileset = project.createDataType('fileset');
  74. fileset.setDir(new File(dir));
  75. return fileset;
  76. };
  77.  
  78. function flowName(flowDefinition, version) {
  79. return flowDefinition.replace('.flowDefinition', '') + '-' + version + '.flow';
  80. }
  81.  
  82. var flowsToDeploy = createFileset('src/flows');
  83. var flowDefinitions = createFileset('src/flowDefinitions');
  84.  
  85. var srcFiles = flowDefinitions.getDirectoryScanner(project).getIncludedFiles();
  86. var flowFileNamesToDeploy = srcFiles.map(function(filename) {
  87. var orgFlow = new File('./build/flowDefinitions/', filename);
  88. var gitFlow = new File('./src/flowDefinitions/', filename);
  89. var gitVersion = getFlowVersion(gitFlow);
  90. if (!orgFlow.exists()) {
  91. return flowName(filename, gitVersion);
  92. }
  93. var orgVersion = getFlowVersion(orgFlow);
  94. if (gitVersion > orgVersion) {
  95. return flowName(filename, gitVersion);
  96. }
  97. return null;
  98. })
  99. .filter(function(filename) {
  100. return !!filename;
  101. });
  102. flowFileNamesToDeploy.forEach(addFileToFileset.bind(null, flowsToDeploy));
  103.  
  104. var flowDefinitionFileNamesToDeploy = srcFiles.filter(function(filename) {
  105. var orgFlow = new File('./build/flowDefinitions/', filename);
  106. // Flow Definitions cannot be created by a deploy
  107. if (! orgFlow.exists()) {
  108. java.lang.System.out.println('Not going to deploy new flow definition: ' + filename);
  109. }
  110. return orgFlow.exists();
  111. });
  112. flowDefinitionFileNamesToDeploy.forEach(addFileToFileset.bind(null, flowDefinitions));
  113.  
  114. // Overwrite fetched package.xml
  115. copyFiles('src/package.xml', 'build');
  116. if (!flowDefinitions.hasPatterns()) {
  117. java.lang.System.out.println('No Flow Definitions to deploy');
  118. } else {
  119. copyFiles(flowDefinitions, 'build/flowDefinitions');
  120. }
  121.  
  122. if (!flowsToDeploy.hasPatterns()) {
  123. java.lang.System.out.println('No Flows to deploy');
  124. } else {
  125. copyFiles(flowsToDeploy, 'build/flows');
  126. }
  127. ]]></script>
  128. </target>
  129.  
  130.  
  131. <target name="Clean_up_Profiles">
  132. <echo message="Updating Profiles to remove stupid crap" />
  133. <!--Remove reference to SocialPostLayout -->
  134. <replace casesensitive="false"
  135. dir="${basedir}/src/profiles">
  136. <replacetoken><![CDATA[<layoutAssignments>
  137. <layout>SocialPost-Social Post Layout</layout>
  138. </layoutAssignments>]]></replacetoken>
  139. <replacevalue><![CDATA[]]></replacevalue>
  140. </replace>
  141. <!--Remove reference to SocialPersona -->
  142. <replace casesensitive="false"
  143. dir="${basedir}/src/profiles">
  144. <replacetoken><![CDATA[<tabVisibilities>
  145. <tab>standard-SocialPersona</tab>
  146. <visibility>DefaultOff</visibility>
  147. </tabVisibilities>]]></replacetoken>
  148. <replacevalue><![CDATA[]]></replacevalue>
  149. </replace>
  150. <!--Set a default record type for ContentVersion -->
  151. <replace casesensitive="false"
  152. dir="${basedir}/src/profiles">
  153. <replacetoken><![CDATA[<recordTypeVisibilities>
  154. <default>false</default>
  155. <recordType>ContentVersion.Website_Executive_Image</recordType>
  156. <visible>true</visible>]]></replacetoken>
  157. <replacevalue><![CDATA[<recordTypeVisibilities>
  158. <default>true</default>
  159. <recordType>ContentVersion.Website_Executive_Image</recordType>
  160. <visible>true</visible>]]></replacevalue>
  161. </replace>
  162.  
  163.  
  164. </target>
  165.  
  166. <target name="cleanup_files">
  167. <echo message="Removing references to shit that breaks the build" />
  168. <!--Remove reference to SocialPostLayout -->
  169. <replace casesensitive="false"
  170. dir="${basedir}/src/objects">
  171. <replacetoken><![CDATA[<actionOverrides>
  172. <actionName>MapHighlightAction</actionName>
  173. <type>Default</type>
  174. </actionOverrides>]]></replacetoken>
  175. <replacevalue><![CDATA[]]></replacevalue>
  176. </replace>
  177.  
  178.  
  179. <replace casesensitive="false"
  180. dir="${basedir}/src/objects">
  181. <replacetoken><![CDATA[<actionOverrides>
  182. <actionName>NewsHighlightAction</actionName>
  183. <type>Default</type>
  184. </actionOverrides>]]></replacetoken>
  185. <replacevalue><![CDATA[]]></replacevalue>
  186. </replace>
  187. <!-- removing that stupid ass Ideas Last 7 days view because its always breaking builds -->
  188. <replace casesensitive="false"
  189. dir="${basedir}/src/objects">
  190. <replacetoken><![CDATA[<listViews>
  191. <fullName>Ideas_Last_7_Days</fullName>
  192. <columns>IDEA.CREATED_DATE</columns>
  193. <columns>IDEA.TITLE</columns>
  194. <columns>IDEA.CREATED_BY_NICKNAME</columns>
  195. <columns>VOTE_STATS.WEIGHTED_SUM</columns>
  196. <columns>IDEA.NUM_COMMENTS</columns>
  197. <columns>IDEA.STATUS</columns>
  198. <columns>IDEA.CATEGORIES</columns>
  199. <columns>COMMUNITY.NAME</columns>
  200. <columns>IDEA.IDEA_THEME</columns>
  201. <filterScope>Everything</filterScope>
  202. <filters>
  203. <field>IDEA.CREATED_DATE</field>
  204. <operation>equals</operation>
  205. <value>LAST_N_DAYS:7</value>
  206. </filters>
  207. <label>Last 7 Days</label>
  208. </listViews>]]></replacetoken>
  209. <replacevalue><![CDATA[]]></replacevalue>
  210. </replace>
  211. </target>
  212.  
  213.  
  214.  
  215. <target name="delete_files">
  216. <echo message="Deleting default crap files" />
  217. <delete file="${basedir}/src/workflows/SocialPost.workflow"/>
  218. <delete file="${basedir}/src/layouts/SocialPost-Social Post Layout.layout"/>
  219. <delete file="${basedir}/src/layouts/FeedItem-Feed Item Layout.layout"/>
  220. <delete file="${basedir}/src/layouts/FlowInterview-Flow Interview Layout.layout"/>
  221. <!-- Delete insights app as depnedent pieces are not promotable -->
  222. <delete file="${basedir}/src/applications/standard__Insights.app"/>
  223. <delete file="${basedir}/src/applications/standard__Work.app"/>
  224. <!-- Ideas Reports cause an unknown error. Removing them -->
  225. <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
  226. <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
  227. <delete file="${basedir}/src/dashboards/Ideas_Dashboards-meta.xml"/>
  228. <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
  229.  
  230. </target>
  231.  
  232. <target name="minified_cleanup">
  233. <echo message="No files to delete" />
  234.  
  235. <echo message="Removing Invalid References"/>
  236. <replace casesensitive="false"
  237. dir="${basedir}/src/objects">
  238. <replacetoken><![CDATA[<actionOverrides>
  239. <actionName>MapHighlightAction</actionName>
  240. <type>Default</type>
  241. </actionOverrides>]]></replacetoken>
  242. <replacevalue><![CDATA[]]></replacevalue>
  243. </replace>
  244.  
  245.  
  246. <replace casesensitive="false"
  247. dir="${basedir}/src/objects">
  248. <replacetoken><![CDATA[<actionOverrides>
  249. <actionName>NewsHighlightAction</actionName>
  250. <type>Default</type>
  251. </actionOverrides>]]></replacetoken>
  252. <replacevalue><![CDATA[]]></replacevalue>
  253. </replace>
  254. <!-- removing that stupid ass Ideas Last 7 days view because its always breaking builds -->
  255. <replace casesensitive="false"
  256. dir="${basedir}/src/objects">
  257. <replacetoken><![CDATA[<listViews>
  258. <fullName>Ideas_Last_7_Days</fullName>
  259. <columns>IDEA.CREATED_DATE</columns>
  260. <columns>IDEA.TITLE</columns>
  261. <columns>IDEA.CREATED_BY_NICKNAME</columns>
  262. <columns>VOTE_STATS.WEIGHTED_SUM</columns>
  263. <columns>IDEA.NUM_COMMENTS</columns>
  264. <columns>IDEA.STATUS</columns>
  265. <columns>IDEA.CATEGORIES</columns>
  266. <columns>COMMUNITY.NAME</columns>
  267. <columns>IDEA.IDEA_THEME</columns>
  268. <filterScope>Everything</filterScope>
  269. <filters>
  270. <field>IDEA.CREATED_DATE</field>
  271. <operation>equals</operation>
  272. <value>LAST_N_DAYS:7</value>
  273. </filters>
  274. <label>Last 7 Days</label>
  275. </listViews>]]></replacetoken>
  276. <replacevalue><![CDATA[]]></replacevalue>
  277. </replace>
  278.  
  279. </target>
  280. <target name="deployCodeCheckOnly">
  281. <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="src" checkOnly="true"/>
  282. </target>
  283.  
  284. <target name="local_sandbox_deletes">
  285. <echo message="Deleting non compatible local update files and directories. Remember to repull from master after this action" />
  286. <delete dir="${basedir}/src/permissionsets"/>
  287.  
  288.  
  289. </target>
  290.  
  291. <target name="bundle_resources">
  292. <java jar="${basedir}/lib/DeployResourceBundle.jar" fork="true">
  293. <arg value="${basedir}"/>
  294. </java>
  295. </target>
  296.  
  297.  
  298. <target name="updateLocalSandbox" depends="delete_files, local_sandbox_deletes">
  299.  
  300. <sf:deploy username="${sf.username}"
  301. password="${sf.password}"
  302. serverurl="${sf.serverurl}"
  303. runAllTests="false"
  304. logType="Detail"
  305. deployRoot="src"
  306. maxPoll="${sf.maxPoll}" />
  307. </target>
  308.  
  309.  
  310. <!-- default deploy runs with tests and no tests. -->
  311. <target name="deployRunAllTests">
  312. <sf:deploy username="${sf.username}"
  313. password="${sf.password}"
  314. serverurl="${sf.serverurl}"
  315. runAllTests="true"
  316. logType="Detail"
  317. deployRoot="build"
  318. maxPoll="${sf.maxPoll}" />
  319. </target>
  320.  
  321. <target name="deployRunNoTests">
  322. <sf:deploy username="${sf.username}"
  323. password="${sf.password}"
  324. serverurl="${sf.serverurl}"
  325. runAllTests="false"
  326. logType="Detail"
  327. deployRoot="build"
  328. maxPoll="${sf.maxPoll}" />
  329. </target>
  330.  
  331. </project>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement