Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <project name="CI-DevMerge" default="deployRunNoTests" basedir="." xmlns:sf="antlib:com.salesforce">
- <taskdef uri="antlib:com.salesforce"
- resource="com/salesforce/antlib.xml"
- classpath="${basedir}/lib/ant-salesforce.jar"
- />
- <property file="build.properties"/>
- <property environment="env"/>
- <!-- Flow Management for CI from post: http://salesforce.stackexchange.com/questions/81657/deployment-issues-with-process-builder-flows/81948#81948 -->
- <target name="prepBuildDir">
- <delete dir="build"/>
- <mkdir dir="build"/>
- <sync todir="build">
- <fileset dir="src">
- <exclude name="flows/*"/>
- <exclude name="flowDefinitions/*"/>
- </fileset>
- </sync>
- </target>
- <target name="prepFlows" depends="prepBuildDir,retrieveCurrentFlows,findFlowsToDeploy"/>
- <target name="retrieveCurrentFlows">
- <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="build" unpackaged="flowDefinitions.xml" />
- </target>
- <!--
- Compare retrieved flowDefinitions to ones in src
- If different and activeVersionNumber in src is greater, copy flow with activeVersionNumber to build/flows
- -->
- <target name="findFlowsToDeploy">
- <script language="javascript"><![CDATA[
- var File = java.io.File;
- function version(xml) {
- var matches = (''+ xml).match(/activeVersionNumber>(\d+)</);
- if (matches) {
- return parseInt(matches[1], 10);
- }
- }
- function getFileContents(javaFile) {
- var contents = '';
- var lines = java.nio.file.Files.readAllLines(java.nio.file.Paths.get(javaFile.getPath()), java.nio.charset.Charset.forName('UTF-8'));
- for (var i = 0; i < lines.size(); i++) {
- contents += lines.get(i);
- }
- return contents;
- }
- function getFlowVersion(flowFile) {
- var content = getFileContents(flowFile);
- return version(content);
- }
- function addFileToFileset(fileset, path) {
- java.lang.System.out.println('Flow needs to be deployed: ' + path);
- fileset.appendIncludes([path]);
- }
- function copyFiles(files, dest) {
- var copyTask = project.createTask('copy');
- if (typeof files === 'string') {
- copyTask.setFile(new File(files));
- } else {
- copyTask.add(files);
- }
- copyTask.setTodir(new File(dest));
- copyTask.setOverwrite(true);
- copyTask.perform();
- }
- function createFileset(dir) {
- var fileset = project.createDataType('fileset');
- fileset.setDir(new File(dir));
- return fileset;
- };
- function flowName(flowDefinition, version) {
- return flowDefinition.replace('.flowDefinition', '') + '-' + version + '.flow';
- }
- var flowsToDeploy = createFileset('src/flows');
- var flowDefinitions = createFileset('src/flowDefinitions');
- var srcFiles = flowDefinitions.getDirectoryScanner(project).getIncludedFiles();
- var flowFileNamesToDeploy = srcFiles.map(function(filename) {
- var orgFlow = new File('./build/flowDefinitions/', filename);
- var gitFlow = new File('./src/flowDefinitions/', filename);
- var gitVersion = getFlowVersion(gitFlow);
- if (!orgFlow.exists()) {
- return flowName(filename, gitVersion);
- }
- var orgVersion = getFlowVersion(orgFlow);
- if (gitVersion > orgVersion) {
- return flowName(filename, gitVersion);
- }
- return null;
- })
- .filter(function(filename) {
- return !!filename;
- });
- flowFileNamesToDeploy.forEach(addFileToFileset.bind(null, flowsToDeploy));
- var flowDefinitionFileNamesToDeploy = srcFiles.filter(function(filename) {
- var orgFlow = new File('./build/flowDefinitions/', filename);
- // Flow Definitions cannot be created by a deploy
- if (! orgFlow.exists()) {
- java.lang.System.out.println('Not going to deploy new flow definition: ' + filename);
- }
- return orgFlow.exists();
- });
- flowDefinitionFileNamesToDeploy.forEach(addFileToFileset.bind(null, flowDefinitions));
- // Overwrite fetched package.xml
- copyFiles('src/package.xml', 'build');
- if (!flowDefinitions.hasPatterns()) {
- java.lang.System.out.println('No Flow Definitions to deploy');
- } else {
- copyFiles(flowDefinitions, 'build/flowDefinitions');
- }
- if (!flowsToDeploy.hasPatterns()) {
- java.lang.System.out.println('No Flows to deploy');
- } else {
- copyFiles(flowsToDeploy, 'build/flows');
- }
- ]]></script>
- </target>
- <target name="Clean_up_Profiles">
- <echo message="Updating Profiles to remove stupid crap" />
- <!--Remove reference to SocialPostLayout -->
- <replace casesensitive="false"
- dir="${basedir}/src/profiles">
- <replacetoken><![CDATA[<layoutAssignments>
- <layout>SocialPost-Social Post Layout</layout>
- </layoutAssignments>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <!--Remove reference to SocialPersona -->
- <replace casesensitive="false"
- dir="${basedir}/src/profiles">
- <replacetoken><![CDATA[<tabVisibilities>
- <tab>standard-SocialPersona</tab>
- <visibility>DefaultOff</visibility>
- </tabVisibilities>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <!--Set a default record type for ContentVersion -->
- <replace casesensitive="false"
- dir="${basedir}/src/profiles">
- <replacetoken><![CDATA[<recordTypeVisibilities>
- <default>false</default>
- <recordType>ContentVersion.Website_Executive_Image</recordType>
- <visible>true</visible>]]></replacetoken>
- <replacevalue><![CDATA[<recordTypeVisibilities>
- <default>true</default>
- <recordType>ContentVersion.Website_Executive_Image</recordType>
- <visible>true</visible>]]></replacevalue>
- </replace>
- </target>
- <target name="cleanup_files">
- <echo message="Removing references to shit that breaks the build" />
- <!--Remove reference to SocialPostLayout -->
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<actionOverrides>
- <actionName>MapHighlightAction</actionName>
- <type>Default</type>
- </actionOverrides>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<actionOverrides>
- <actionName>NewsHighlightAction</actionName>
- <type>Default</type>
- </actionOverrides>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <!-- removing that stupid ass Ideas Last 7 days view because its always breaking builds -->
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<listViews>
- <fullName>Ideas_Last_7_Days</fullName>
- <columns>IDEA.CREATED_DATE</columns>
- <columns>IDEA.TITLE</columns>
- <columns>IDEA.CREATED_BY_NICKNAME</columns>
- <columns>VOTE_STATS.WEIGHTED_SUM</columns>
- <columns>IDEA.NUM_COMMENTS</columns>
- <columns>IDEA.STATUS</columns>
- <columns>IDEA.CATEGORIES</columns>
- <columns>COMMUNITY.NAME</columns>
- <columns>IDEA.IDEA_THEME</columns>
- <filterScope>Everything</filterScope>
- <filters>
- <field>IDEA.CREATED_DATE</field>
- <operation>equals</operation>
- <value>LAST_N_DAYS:7</value>
- </filters>
- <label>Last 7 Days</label>
- </listViews>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- </target>
- <target name="delete_files">
- <echo message="Deleting default crap files" />
- <delete file="${basedir}/src/workflows/SocialPost.workflow"/>
- <delete file="${basedir}/src/layouts/SocialPost-Social Post Layout.layout"/>
- <delete file="${basedir}/src/layouts/FeedItem-Feed Item Layout.layout"/>
- <delete file="${basedir}/src/layouts/FlowInterview-Flow Interview Layout.layout"/>
- <!-- Delete insights app as depnedent pieces are not promotable -->
- <delete file="${basedir}/src/applications/standard__Insights.app"/>
- <delete file="${basedir}/src/applications/standard__Work.app"/>
- <!-- Ideas Reports cause an unknown error. Removing them -->
- <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
- <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
- <delete file="${basedir}/src/dashboards/Ideas_Dashboards-meta.xml"/>
- <delete file="${basedir}/src/reports/IdeasReports-meta.xml"/>
- </target>
- <target name="minified_cleanup">
- <echo message="No files to delete" />
- <echo message="Removing Invalid References"/>
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<actionOverrides>
- <actionName>MapHighlightAction</actionName>
- <type>Default</type>
- </actionOverrides>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<actionOverrides>
- <actionName>NewsHighlightAction</actionName>
- <type>Default</type>
- </actionOverrides>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- <!-- removing that stupid ass Ideas Last 7 days view because its always breaking builds -->
- <replace casesensitive="false"
- dir="${basedir}/src/objects">
- <replacetoken><![CDATA[<listViews>
- <fullName>Ideas_Last_7_Days</fullName>
- <columns>IDEA.CREATED_DATE</columns>
- <columns>IDEA.TITLE</columns>
- <columns>IDEA.CREATED_BY_NICKNAME</columns>
- <columns>VOTE_STATS.WEIGHTED_SUM</columns>
- <columns>IDEA.NUM_COMMENTS</columns>
- <columns>IDEA.STATUS</columns>
- <columns>IDEA.CATEGORIES</columns>
- <columns>COMMUNITY.NAME</columns>
- <columns>IDEA.IDEA_THEME</columns>
- <filterScope>Everything</filterScope>
- <filters>
- <field>IDEA.CREATED_DATE</field>
- <operation>equals</operation>
- <value>LAST_N_DAYS:7</value>
- </filters>
- <label>Last 7 Days</label>
- </listViews>]]></replacetoken>
- <replacevalue><![CDATA[]]></replacevalue>
- </replace>
- </target>
- <target name="deployCodeCheckOnly">
- <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="src" checkOnly="true"/>
- </target>
- <target name="local_sandbox_deletes">
- <echo message="Deleting non compatible local update files and directories. Remember to repull from master after this action" />
- <delete dir="${basedir}/src/permissionsets"/>
- </target>
- <target name="bundle_resources">
- <java jar="${basedir}/lib/DeployResourceBundle.jar" fork="true">
- <arg value="${basedir}"/>
- </java>
- </target>
- <target name="updateLocalSandbox" depends="delete_files, local_sandbox_deletes">
- <sf:deploy username="${sf.username}"
- password="${sf.password}"
- serverurl="${sf.serverurl}"
- runAllTests="false"
- logType="Detail"
- deployRoot="src"
- maxPoll="${sf.maxPoll}" />
- </target>
- <!-- default deploy runs with tests and no tests. -->
- <target name="deployRunAllTests">
- <sf:deploy username="${sf.username}"
- password="${sf.password}"
- serverurl="${sf.serverurl}"
- runAllTests="true"
- logType="Detail"
- deployRoot="build"
- maxPoll="${sf.maxPoll}" />
- </target>
- <target name="deployRunNoTests">
- <sf:deploy username="${sf.username}"
- password="${sf.password}"
- serverurl="${sf.serverurl}"
- runAllTests="false"
- logType="Detail"
- deployRoot="build"
- maxPoll="${sf.maxPoll}" />
- </target>
- </project>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement