{"id":30200,"date":"2023-03-01T08:40:33","date_gmt":"2023-03-01T16:40:33","guid":{"rendered":"https:\/\/salesforcedevops.net\/?p=30200"},"modified":"2023-03-01T12:03:27","modified_gmt":"2023-03-01T20:03:27","slug":"sfdx-hardis-open-source-salesforce-release-management","status":"publish","type":"post","link":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/","title":{"rendered":"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bonus: <a href=\"https:\/\/origin.salesforcedevops.net\/index.php\/2023\/02\/28\/sfdx-hardis-a-demo-with-nicolas-vuillamy-from-cloudity\/\">Check out this post for a full video demo of SFDX-HARDIS!<\/a><\/p>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">If you\u2019re like me, then you\u2019ve been frustrated dealing with the Salesforce release management experience. It\u2019s like we Salesforce users couldn\u2019t use all that good devops stuff happening in Java, Python, JavaScript and other, more popular versioning experiences.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As we looked at that landscape, my team and I at <a href=\"https:\/\/cloudity.com\/\">Cloudity<\/a> became so frustrated about how awkward it was to do Salesforce release management. That is when we decided to do something about it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When confronted with how complex it was to use Salesforce tooling, we created a custom layer called <em>sfdx-hardis<\/em> for an advanced, manageable CI\/CD. In this article I tell the story of how we decided to build sfdx-hardis and I\u2019ll also help you see if it\u2019s a good system for you to explore.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-2692ce2a      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#the-sfdx-hardis-story\" class=\"uagb-toc-link__trigger\">The sfdx-hardis Story<\/a><li class=\"uagb-toc__list\"><a href=\"#how-we-decided\" class=\"uagb-toc-link__trigger\">How We Decided<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#do-you-need-sfdx-hardis\" class=\"uagb-toc-link__trigger\">Do you need sfdx-hardis?<\/a><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#sfdx-hardis-application-scenarios\" class=\"uagb-toc-link__trigger\">sfdx-hardis Application Scenarios<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#setup-manager-role\" class=\"uagb-toc-link__trigger\">Setup Manager Role<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#as-a-release-manager\" class=\"uagb-toc-link__trigger\">As a release manager<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#as-a-user\" class=\"uagb-toc-link__trigger\">As a user<\/a><\/li><\/ul><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#how-does-it-work\" class=\"uagb-toc-link__trigger\">How does it work?<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#salesforce-dx-plugin-sfdx-hardis\" class=\"uagb-toc-link__trigger\">Salesforce DX plugin: sfdx-hardis<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#visual-studio-code-extension-vscode-sfdx-hardis\" class=\"uagb-toc-link__trigger\">Visual Studio Code Extension: VsCode SFDX Hardis<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#conclusion\" class=\"uagb-toc-link__trigger\">Conclusion<\/a><\/ul><\/ul><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-sfdx-hardis-story\">The sfdx-hardis Story<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I started working on Salesforce in 2017. We were <strong>10 colleagues working in the same org<\/strong>, and despite our desperate attempts at synchronization, it was kind of <strong>a nightmare to control who does what, where, and why<\/strong>, and don\u2019t even get me started on <strong>performance<\/strong>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some things we did were awkward, to say the least. We used <strong>Ant <\/strong>deployments scripts with <strong>command lines copy-pasted<\/strong> from a Word file, and <strong>manually written package.xml<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When <strong>Salesforce DX<\/strong> was released, it was like a light appeared at the end of the tunnel. We would finally be able to work with <strong>CI\/CD with Git and Pipelines, <\/strong>as it has been the standard for the past 10 years with any other technology!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>joy wouldn\u2019t last, however.<\/strong> SFDX is a nice tool, but except for \u201chello world\u201d cases, the <strong>calls to SFDX commands must be dynamic, and thus, scripted. <\/strong>We encountered these problems:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Manual updates of metadata XML<\/strong> files to avoid deployment errors<\/li>\n\n\n\n<li>Problems with <strong>overwriting metadata<\/strong> that has been manually updated in production<\/li>\n\n\n\n<li><strong>Adoption issues<\/strong> with <strong>non technical users<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This meant we had to <strong>script, script, and script over again<\/strong> (in Bash, Groovy or JavaScript, depending on the weather and mood), until efficiently reducing the essential manual operations, and reaching an acceptable state for the CI\/CD Pipeline. The <strong>pipeline with its custom scripts<\/strong> had to be <strong>directly maintained in the project repository<\/strong>, which was efficient but <strong>time consuming<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-we-decided\">How We Decided<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When I started at <a href=\"https:\/\/www.hardis-group.com\/\">Hardis Group<\/a>\u2019s Salesforce Practice (now <a href=\"https:\/\/cloudity.com\/\"><strong>Cloudity<\/strong><\/a>) as a new CTO, some of our customers had already been moving into CI\/CD as a Salesforce best practice. So, some CI\/CD projects were already set, with <strong>home-made pipelines and scripts<\/strong> directly maintained in the project repositories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We had to choose amongst the available options in the ecosystem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Purchase licenses of a DevOps market tool<\/strong> like Copado, Gearset, Flosum, Autorabit, Blue Canvas, Prodly, or Opsera.<\/li>\n\n\n\n<li><strong>Or<\/strong>, continue to <strong>use home-made CI\/CD pipelines<\/strong> (and maintain them on each project)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We came up with this decision matrix to help us choose!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"335\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image.png\" alt=\"\" class=\"wp-image-30202\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-300x107.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-768x274.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><em>Summary of our analysis at the time<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We weren\u2019t thrilled about the commercial options because our clients don\u2019t all have the budget. So most <strong>wouldn\u2019t have agreed to purchasing expensive additional licenses<\/strong> on something they didn\u2019t fully comprehend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As we had internal knowledge regarding home-made CI\/CD pipelines, we decided to go ahead and commence the project!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But as we did not want to have to maintain scripts on each client repository. That inspired the idea to <strong>package an open-source engine that would be used everywhere<\/strong>, and <strong>repositories would only contain the configuration<\/strong> applied by the engine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is how the <a href=\"https:\/\/sfdx-hardis.cloudity.com\/\">Salesforce DX plugin sfdx-hardis<\/a> was born!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"460\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-1.png\" alt=\"\" class=\"wp-image-30203\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-1.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-1-300x147.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-1-768x376.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/sfdx-hardis.cloudity.com\/\"><em>sfdx-hardis online documentation<\/em><\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Salesforce DX plugins are usually used via the command line, and some of our <strong>Business Consultant<\/strong> colleagues were not happy. That was because they <strong>were not used to command lines<\/strong>. So we decided to <strong>create an UI to work with clicks, <\/strong>not command lines. That is how we got started with the  <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=NicolasVuillamy.vscode-sfdx-hardis\">Visual Studio Code Extension for sfdx-hardis<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"544\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension-1024x544.png\" alt=\"sfdx-hardis VS Code Extension\" class=\"wp-image-30231\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension-1024x544.png 1024w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension-300x159.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension-768x408.png 768w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension-1536x816.png 1536w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/vscode-sfdx-hardis-extension.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">sfdx-hardis VS Code Extension<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-do-you-need-sfdx-hardis\"><strong>Do you need sfdx-hardis?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Are you tired of change sets, maintaining your pipeline scripts, or don\u2019t want to or can\u2019t pay for third party DevOps products? Then maybe it is time to switch from manual org-based deployments to automated source-based deployments!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After crossing the bridge to source-based deployments, you will <strong>benefit long before you deploy to production<\/strong> with these important developer patterns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Versioning<\/strong>: Trace who did what, when, where and why<\/li>\n\n\n\n<li><strong>Deployment checks<\/strong>, including Apex tests code coverage<\/li>\n\n\n\n<li><strong>Code quality checks:<\/strong> Reduce the number of bugs in production<\/li>\n\n\n\n<li><strong>Conflict management<\/strong>: avoid overwriting your colleagues\u2019 work<\/li>\n\n\n\n<li><strong>Automated deployments:<\/strong> let the CI servers deploy them for you, with minimal manual actions<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In this diagram, I am giving you a before and after look at how introducing a devops pipeline changes Salesforce release management. In our case, we introduce a set of activities which make up the continuous integration and continuous deployment (CI\/CD) process. These activities are run on a scripted command server that orchestrates the entire process.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The CI\/CD process gives us important capabilities, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Thanks to the <strong>automated checks<\/strong>, anything that succeeded to<strong> reach the Integration (Integ) org <\/strong>will then be<strong> deployed seamlessly to UAT, then to Production org<\/strong><\/li>\n\n\n\n<li>What you <strong>test on UAT<\/strong> will coincide with<strong> what will be deployed<\/strong> in Production<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"563\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd-1024x563.png\" alt=\"sfdx-hardis change sets vs ci\/cd\" class=\"wp-image-30226\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd-1024x563.png 1024w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd-300x165.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd-768x422.png 768w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd-1536x845.png 1536w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/change-sets-vs-cicd.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">sfdx-hardis change sets vs ci\/cd<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sfdx-hardis-application-scenarios\"><strong>sfdx-hardis Application Scenarios<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here are some of the common patterns found in using sfdx-hardis. But before getting started you need a few prerequisites:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Access to a <strong>GIT &amp; CI\/CD server<\/strong>. This is the server that runs scripts to manage the CI\/CD process. sfdx-hardis has <strong>built-in integrations with<\/strong><a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\"><strong> <\/strong><strong>Gitlab CI<\/strong><\/a><strong> <\/strong>and<a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/devops\/pipelines\"><strong> <\/strong><strong>Azure Pipelines<\/strong><\/a>. You can also adapt it to<a href=\"https:\/\/github.com\/features\/actions\"> Github Actions<\/a>,<a href=\"https:\/\/bitbucket.org\/product\/en\/features\/pipelines\"> Bitbucket Pipelines<\/a> and<a href=\"https:\/\/www.jenkins.io\/\"> Jenkins<\/a>.<\/li>\n\n\n\n<li>A designated<strong> release manager<\/strong>&nbsp; who can run <strong>Git<\/strong> and <strong>Salesforce DX<\/strong>.<\/li>\n\n\n\n<li><strong>The will to evolve<\/strong>: Your teams must be mature enough to accept to be trained to use versioning and forget about using change sets, for the project\u2019s greater good!<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s go and see how sfdx-hardis works depending on your role in a Salesforce application development team.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Setup Manager Role<\/strong><\/li>\n\n\n\n<li><strong>Release Manager Role <\/strong>(can also be the setup manager)<\/li>\n\n\n\n<li><strong>User Roles<\/strong> (Business consultants, developers)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-setup-manager-role\"><strong>Setup Manager Role<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The setup manager will <strong>initialize the technical elements of the Salesforce CI\/CD project <\/strong>(Git repository, Branch strategy, CI\/CD pipeline, Authentication between CI server &amp; Salesforce orgs\u2026).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is an example of <strong>advanced branch strategy<\/strong>, with <strong>parallel management of BUILD and RUN for a project<\/strong>, but depending on the project\u2019s complexity, it is also possible to define a much <strong>simpler branch strategy<\/strong> with a pre-production (branch &amp; org) and a production (branch &amp; org).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"440\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-4.png\" alt=\"\" class=\"wp-image-30208\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-4.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-4-300x140.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-4-768x359.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><em>Parallel BUILD &amp; RUN strategy<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">All the steps for setup are detailed in<a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-setup-home\/\"> sfdx-hardis Setup Guide<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"483\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-5.png\" alt=\"\" class=\"wp-image-30209\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-5.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-5-300x154.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-5-768x395.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-setup-home\/\"><em>Setup Manager Guide online documentation<\/em><\/a><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-as-a-release-manager\"><strong>As a release manager<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The release manager\u2019s part will be to <strong>assist other users<\/strong>, <strong>validate merge requests<\/strong> and proceed to <strong>deployments between major branches<\/strong> (ex: UAT to production)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All Release Manager operations are detailed in <a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-release-home\/\">sfdx-hardis Release Manager Guide<\/a>, with tutorials and videos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"483\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-6.png\" alt=\"\" class=\"wp-image-30210\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-6.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-6-300x154.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-6-768x395.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-release-home\/\"><em>Release Manager Guide online documentation<\/em><\/a><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-as-a-user\"><strong>As a user<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The user\u2019s role is to provide <strong>new features<\/strong> and <strong>fixes<\/strong>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They will work in <strong>source-tracked sandboxes<\/strong> (or scratch orgs), and use VsCode SFDX Hardis visual menu to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Initialize a new git branch<\/li>\n\n\n\n<li>Connect to a Salesforce org<\/li>\n\n\n\n<li>Pull updates from org<\/li>\n\n\n\n<li>Prepare their merge requests<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"431\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-7.png\" alt=\"\" class=\"wp-image-30211\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-7.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-7-300x138.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-7-768x352.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><em>Screenshot of \u201cNew task\u201d menu<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Developers will obviously have access to many more operations! All user operations are detailed in<a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-use-home\/\"> sfdx-hardis User Guide<\/a>, with tutorials and videos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"483\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-8.png\" alt=\"\" class=\"wp-image-30212\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-8.png 940w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-8-300x154.png 300w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-8-768x395.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-use-home\/\"><em>User Guide online documentation<\/em><\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-does-it-work\"><strong>How does it work?<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No, it&#8217;s not magic! Here is a quick tour of how sfdx-hardis works!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-salesforce-dx-plugin-sfdx-hardis\"><strong>Salesforce DX plugin: sfdx-hardis<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>sfdx-hardis<\/strong> is just an orchestrator of native SFDX commands, git commands and other SFDX plugins commands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It has been made to <strong>assist users by prompting inputs and questions<\/strong> when necessary, and displays in logs every background command so <strong>techies can see what is run behind the scenes in live<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It automates operations and updates XML when necessary, for example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Automatically generate<\/strong> <strong>package.xml<\/strong> and <strong>destructiveChanges.xml <\/strong>before committing (thanks to<a href=\"https:\/\/github.com\/scolladon\/sfdx-git-delta\"> sfdx-git-delta<\/a> !)<\/li>\n\n\n\n<li><strong>Automatically install managed packages<\/strong> during deployments<\/li>\n\n\n\n<li><strong>Automatically import data<\/strong> during deployments (thanks to <a href=\"https:\/\/github.com\/forcedotcom\/SFDX-Data-Move-Utility\">sfdmu<\/a> !)<\/li>\n\n\n\n<li><a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-config-cleaning\/#minimize-profiles\"><strong>Remove permissions on profiles<\/strong><\/a>, to avoid issues <a href=\"https:\/\/admin.salesforce.com\/blog\/2023\/permissions-updates-learn-moar-spring-23\">in 2026 with their deprecation<\/a><\/li>\n\n\n\n<li><strong>Auto-fix XML sources<\/strong> so they can be deployed<\/li>\n\n\n\n<li><a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-config-overwrite\/\"><strong>Avoid overwriting elements in deployment target orgs<\/strong><\/a> when they are directly maintained in production<\/li>\n\n\n\n<li><strong>Initialize sandboxes and scratch orgs<\/strong> with assignments, sample data\u2026<\/li>\n\n\n\n<li><a href=\"https:\/\/sfdx-hardis.cloudity.com\/hardis\/scratch\/pull\/\">Force pull updates<\/a> that are not detected by SFDX tracking<\/li>\n\n\n\n<li>Generate certificates, deploy a connected app and provide config variables to<a href=\"https:\/\/sfdx-hardis.cloudity.com\/salesforce-ci-cd-setup-auth\/\"> <strong>create a secure connection between CI server and orgs<\/strong><\/a><\/li>\n\n\n\n<li>Provide <strong>human readable<\/strong> instructions to <a href=\"https:\/\/sfdx-hardis.cloudity.com\/deployTips\/\"><strong>solve deployment errors<\/strong><\/a><\/li>\n\n\n\n<li>And <a href=\"https:\/\/sfdx-hardis.cloudity.com\/commands\/\">many more<\/a>!<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Most<strong> of the configuration is in a single YAML<\/strong> file in your repository, with <a href=\"https:\/\/sfdx-hardis.cloudity.com\/sfdx-hardis-config-file\/\">enhanced documentation<\/a> and auto-completion while editing, and its content is <strong>usually directly updated by sfdx-hardis configuration commands<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you use the create sfdx-hardis project command, it adds ready to use pipelines:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/hardisgroupcom\/sfdx-hardis\/blob\/main\/defaults\/ci\/.gitlab-ci.yml\">gitlab-ci.yml<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/azure-pipelines-checks.yml\">azure-pipelines-checks.yml<\/a> and<a href=\"https:\/\/github.com\/hardisgroupcom\/sfdx-hardis\/blob\/main\/defaults\/ci\/azure-pipelines-deployment.yml\"> azure-pipelines-deployment.yml<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"279\" src=\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-9.png\" alt=\"\" class=\"wp-image-30213\" srcset=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-9.png 560w, https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/image-9-300x149.png 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><figcaption class=\"wp-element-caption\"><em>Example of merge request control pipeline job<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It is also shipped with a command that creates an additional <strong>monitoring repository<\/strong>, that will create a backup of all org metadata every night, so you can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Track manual updates<\/strong> by admin users in production<\/li>\n\n\n\n<li><strong>Anticipate issues<\/strong> related to Critical Updates, like <a href=\"https:\/\/medium.com\/@nicolasvuillamy\/handle-salesforce-api-versions-deprecation-like-a-pro-335065f52238\">legacy API versions deprecation<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/FiIDXaFilR_ifYBMbTb0GbwCDjIifUOm3AzVSVPKg__uSQJzVovhUvdC2f3uIyQNq1bm9vJFVeZ1vmFh0txV9_L46dhVnomc40Is4gWMlc5jiSt0wUvipRpG9XMBkjNX4n0tGbh6n0aTjCMVBGs4vMI\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-visual-studio-code-extension-vscode-sfdx-hardis\"><strong>Visual Studio Code Extension: VsCode SFDX Hardis<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">VsCode SFDX Hardis is mainly a menu launching command lines, but not only:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integration between sfdx-hardis CLI prompts and <strong>VsCode prompt UIs<\/strong>, for a better user experience<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/jvqiAp_-pWxr38ZIkYxpBbeWfp_dbN2A5c8Xx2qWqrX6umLaYFPtBAoQAi0Sb2lo_kEHUS01HAGs7GTqJGBYDfSYyLnaUalphOlaJaIRwAhEy8yCs87ohCpWPAbcOWtsnNhgEEJghj7-n3uzeRgXN74\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check <strong>presence and compliance of dependencies<\/strong> (Node.js, sfdx-cli, SFDX plugins\u2026) and <strong>assist users<\/strong> when they must be <strong>installed <\/strong>or <strong>upgraded<\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/kR8qWgANweBn4oZ5Ao5lcQO0IeVsd8_6KYUFbTwdlBxq9t3IPN6RIw_Tp0poNihhhkyNaE2JqDrH5LRrAf8reZpfDCMv32B9tprvsFV4U_lE49gfcnRHdV5bbNrYd6NousnOxOUvMriz3E4m8vE6Hw4\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><em>Dependencies panel<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>All VsCode SFDX Hardis code is open-source and available on its<\/em> <a href=\"https:\/\/github.com\/hardisgroupcom\/vscode-sfdx-hardis\"><em>public repository<\/em><\/a><em>.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/RiqzTJXu-KQ8SJRysRyiTzz6e31aO_RJZie4C6tG_R9TmfKvRkrCvtjfmIg16MsqPFRDzv8vfUfT2PynXCbbCgNHhyF_CyORYjJPDk1f3zAehsbWz5BWDWHK5M8DjqqEMX5Vl6LFULStLhVndMrBy3U\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As we <strong>successfully use it<\/strong> on<strong> many of our large client projects<\/strong>, we consider our CI\/CD product to be <strong>mature enough<\/strong> to be <strong>officially shared with the trailblazer community<\/strong>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is <a href=\"https:\/\/cloudity.com\/\"><strong>Cloudity<\/strong><\/a>\u2019s humble gift to the Salesforce Ohana: <strong>all we ask for in return is feedback<\/strong>, and perhaps some<a href=\"https:\/\/github.com\/hardisgroupcom\/sfdx-hardis\"> <strong>Github Stars<\/strong><\/a> \ud83d\ude42<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pull requests<\/strong> are of course<strong> very welcome<\/strong> for anyone willing to contribute, even if you are a competitor, that\u2019s how open-source community works: we all work together towards the greater good and all benefit from it \ud83d\ude42<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Special thanks to:<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.linkedin.com\/in\/julie-camdessus-9254b7b6\/\"><em>Julie Camdessus<\/em><\/a><em> &amp; <\/em><a href=\"https:\/\/www.linkedin.com\/in\/alexiane-debaenst-210890a8\/\"><em>Alexiane Debaenst<\/em><\/a><em> for correcting my clumsy english \ud83d\ude42<\/em><\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/in\/vernonkeenan\/\"><em>Vernon<\/em><\/a><em> for giving me the opportunity to post on <\/em><a href=\"https:\/\/origin.salesforcedevops.net\/\"><em>salesforcedevops.net<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/in\/maxime-guenego\/\"><em>Maxime Guenego<\/em><\/a><em>, <\/em><a href=\"https:\/\/www.linkedin.com\/in\/fernandez-clement\/\"><em>Cl\u00e9ment Fernandez<\/em><\/a><em>, <\/em><a href=\"https:\/\/www.linkedin.com\/in\/remy-vultaggio\/\"><em>Remy Vultaggio Focher<\/em><\/a><em> &amp; <\/em><a href=\"https:\/\/www.linkedin.com\/in\/fabientaillon\/\"><em>Fabien Taillon<\/em><\/a><em> for proofreading<\/em><\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/in\/fleurgimond\/\"><em>Fleur Gimond<\/em><\/a><em> for the logo built at the last minute !<\/em><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Bonus: Check out this post for a full video demo of SFDX-HARDIS! If you\u2019re like me, then you\u2019ve been frustrated dealing with the Salesforce release management experience. It\u2019s like we&hellip;<\/p>\n","protected":false},"author":2,"featured_media":30215,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[5],"tags":[1432,1431],"post_series":[],"class_list":["post-30200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-product-profile","tag-cloudity","tag-sfdx-hardis","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.2 (Yoast SEO v22.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net<\/title>\n<meta name=\"description\" content=\"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net\" \/>\n<meta property=\"og:description\" content=\"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\" \/>\n<meta property=\"og:site_name\" content=\"SalesforceDevops.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/salesforcedevopsnet\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-01T16:40:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-01T20:03:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Nicolas Vuillamy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@salesforcedevop\" \/>\n<meta name=\"twitter:site\" content=\"@salesforcedevop\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicolas Vuillamy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\"},\"author\":{\"name\":\"Nicolas Vuillamy\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/44dd39b8d3d04d13b2c4ef2d6a251119\"},\"headline\":\"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management\",\"datePublished\":\"2023-03-01T16:40:33+00:00\",\"dateModified\":\"2023-03-01T20:03:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\"},\"wordCount\":1772,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg\",\"keywords\":[\"Cloudity\",\"sfdx-hardis\"],\"articleSection\":[\"Product Profile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#respond\"]}],\"copyrightYear\":\"2023\",\"copyrightHolder\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\",\"url\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\",\"name\":\"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net\",\"isPartOf\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg\",\"datePublished\":\"2023-03-01T16:40:33+00:00\",\"dateModified\":\"2023-03-01T20:03:27+00:00\",\"description\":\"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage\",\"url\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg\",\"contentUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg\",\"width\":1200,\"height\":675,\"caption\":\"sfdx-hardis by cloudity\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#website\",\"url\":\"https:\/\/cms.salesforcedevops.net\/\",\"name\":\"SalesforceDevops.net\",\"description\":\"Elevating Salesforce Devops with Insights and Innovation\",\"publisher\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cms.salesforcedevops.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\",\"name\":\"SalesforceDevops.net\",\"url\":\"https:\/\/cms.salesforcedevops.net\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg\",\"contentUrl\":\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg\",\"width\":325,\"height\":101,\"caption\":\"SalesforceDevops.net\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/salesforcedevopsnet\",\"https:\/\/twitter.com\/salesforcedevop\",\"https:\/\/www.linkedin.com\/in\/vernonkeenan\",\"https:\/\/www.youtube.com\/channel\/UCOgOn9rD5gyXSOmV7-Q0n7g\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/44dd39b8d3d04d13b2c4ef2d6a251119\",\"name\":\"Nicolas Vuillamy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/a79\/a79f6ae5e3e2bf264ea66e2aa1b3dae1x96.jpg\",\"contentUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/a79\/a79f6ae5e3e2bf264ea66e2aa1b3dae1x96.jpg\",\"caption\":\"Nicolas Vuillamy\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/nicolas-vuillamy\/\"],\"url\":\"https:\/\/cms.salesforcedevops.net\/index.php\/author\/nvuillam\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net","description":"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/","og_locale":"en_US","og_type":"article","og_title":"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net","og_description":"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling","og_url":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/","og_site_name":"SalesforceDevops.net","article_publisher":"https:\/\/www.facebook.com\/salesforcedevopsnet","article_published_time":"2023-03-01T16:40:33+00:00","article_modified_time":"2023-03-01T20:03:27+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg","type":"image\/jpeg"}],"author":"Nicolas Vuillamy","twitter_card":"summary_large_image","twitter_creator":"@salesforcedevop","twitter_site":"@salesforcedevop","twitter_misc":{"Written by":"Nicolas Vuillamy","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#article","isPartOf":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/"},"author":{"name":"Nicolas Vuillamy","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/44dd39b8d3d04d13b2c4ef2d6a251119"},"headline":"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management","datePublished":"2023-03-01T16:40:33+00:00","dateModified":"2023-03-01T20:03:27+00:00","mainEntityOfPage":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/"},"wordCount":1772,"commentCount":2,"publisher":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage"},"thumbnailUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg","keywords":["Cloudity","sfdx-hardis"],"articleSection":["Product Profile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#respond"]}],"copyrightYear":"2023","copyrightHolder":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/","url":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/","name":"SFDX-HARDIS: an Open-Source Tool for Salesforce Release Management - SalesforceDevops.net","isPartOf":{"@id":"https:\/\/cms.salesforcedevops.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage"},"thumbnailUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg","datePublished":"2023-03-01T16:40:33+00:00","dateModified":"2023-03-01T20:03:27+00:00","description":"SFDX-HARDIS is an advanced way to manage your Salesforce Devops pipelines using a sophisticated layer on top of standard Salesforce DX Tooling","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/03\/01\/sfdx-hardis-open-source-salesforce-release-management\/#primaryimage","url":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg","contentUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg","width":1200,"height":675,"caption":"sfdx-hardis by cloudity"},{"@type":"WebSite","@id":"https:\/\/cms.salesforcedevops.net\/#website","url":"https:\/\/cms.salesforcedevops.net\/","name":"SalesforceDevops.net","description":"Elevating Salesforce Devops with Insights and Innovation","publisher":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cms.salesforcedevops.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cms.salesforcedevops.net\/#organization","name":"SalesforceDevops.net","url":"https:\/\/cms.salesforcedevops.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/","url":"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg","contentUrl":"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg","width":325,"height":101,"caption":"SalesforceDevops.net"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/salesforcedevopsnet","https:\/\/twitter.com\/salesforcedevop","https:\/\/www.linkedin.com\/in\/vernonkeenan","https:\/\/www.youtube.com\/channel\/UCOgOn9rD5gyXSOmV7-Q0n7g"]},{"@type":"Person","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/44dd39b8d3d04d13b2c4ef2d6a251119","name":"Nicolas Vuillamy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/image\/","url":"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/a79\/a79f6ae5e3e2bf264ea66e2aa1b3dae1x96.jpg","contentUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/a79\/a79f6ae5e3e2bf264ea66e2aa1b3dae1x96.jpg","caption":"Nicolas Vuillamy"},"sameAs":["https:\/\/www.linkedin.com\/in\/nicolas-vuillamy\/"],"url":"https:\/\/cms.salesforcedevops.net\/index.php\/author\/nvuillam\/"}]}},"uagb_featured_image_src":{"full":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"thumbnail":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover-150x150.jpg",150,150,true],"medium":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover-300x169.jpg",300,169,true],"medium_large":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover-768x432.jpg",768,432,true],"large":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover-1024x576.jpg",980,551,true],"1536x1536":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"2048x2048":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"lightbox":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"search_results":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover-125x125.jpg",125,125,true],"blog_entry":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",750,422,false],"blog_post":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",750,422,false],"blog_post_full":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"blog_related":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false],"gallery":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/03\/hardis-cover.jpg",1200,675,false]},"uagb_author_info":{"display_name":"Nicolas Vuillamy","author_link":"https:\/\/cms.salesforcedevops.net\/index.php\/author\/nvuillam\/"},"uagb_comment_info":2,"uagb_excerpt":"Bonus: Check out this post for a full video demo of SFDX-HARDIS! If you\u2019re like me, then you\u2019ve been frustrated dealing with the Salesforce release management experience. It\u2019s like we&hellip;","_links":{"self":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/30200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/comments?post=30200"}],"version-history":[{"count":12,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/30200\/revisions"}],"predecessor-version":[{"id":30266,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/30200\/revisions\/30266"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/media\/30215"}],"wp:attachment":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/media?parent=30200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/categories?post=30200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/tags?post=30200"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/post_series?post=30200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}