hardis:source:deploy
Description
sfdx-hardis wrapper for sfdx force:source:deploy that displays tips to solve deployment errors.
Additional to the base command wrapper: If using --checkonly, add options --checkcoverage and --coverageformatters json-summary to check that org coverage is > 75% (or value defined in .sfdx-hardis.yml property apexTestsMinCoverageOrgWide)
Deployment results
You can also have deployment results as pull request comments, on:
- GitHub (see GitHub Pull Requests comments config)
- Gitlab (see Gitlab integration configuration)
- Azure DevOps (see Azure integration configuration)
Deployment pre or post commands
You can define command lines to run before or after a deployment, with parameters:
- id: Unique Id for the command
- label: Human readable label for the command
- skipIfError: If defined to "true", the post-command won't be run if there is a deployment failure
- context: Defines the context where the command will be run. Can be all (default), check-deployment-only or process-deployment-only
- runOnlyOnceByOrg: If set to true (default), the action runs only once per target org - subsequent deployments skip it. State is tracked in the "Deployment Actions" PR comment.
After every action runs, its result (✅ success, ❌ failed, 👋 manual) is recorded in a dedicated "Deployment Actions" PR comment - ordered by org (integration → uat → preprod → prod) - regardless of runOnlyOnceByOrg.
If the commands are not the same depending on the target org, you can define them into config/branches/.sfdx-hardis-BRANCHNAME.yml instead of root config/.sfdx-hardis.yml
Example:
commandsPreDeploy:
- id: knowledgeUnassign
label: Remove KnowledgeUser right to the user who has it
command: sf data update record --sobject User --where "UserPermissionsKnowledgeUser='true'" --values "UserPermissionsKnowledgeUser='false'" --json
- id: knowledgeAssign
label: Assign Knowledge user to the deployment user
command: sf data update record --sobject User --where "Username='deploy.github@myclient.com'" --values "UserPermissionsKnowledgeUser='true'" --json
commandsPostDeploy:
- id: knowledgeUnassign
label: Remove KnowledgeUser right to the user who has it
command: sf data update record --sobject User --where "UserPermissionsKnowledgeUser='true'" --values "UserPermissionsKnowledgeUser='false'" --json
- id: knowledgeAssign
label: Assign Knowledge user to desired username
command: sf data update record --sobject User --where "Username='admin-yser@myclient.com'" --values "UserPermissionsKnowledgeUser='true'" --json
- id: someActionToRunJustOneTime
label: And to run only if deployment is success
command: sf sfdmu:run ...
skipIfError: true
context: process-deployment-only
runOnlyOnceByOrg: true
Notes:
- You can disable coloring of errors in red by defining env variable SFDX_HARDIS_DEPLOY_ERR_COLORS=false
See documentation of Salesforce command
Agent Mode
Supports non-interactive execution with --agent:
sf hardis:source:deploy --agent
In agent mode, all interactive prompts are skipped and default values are used.
Parameters
| Name | Type | Description | Default | Required | Options |
|---|---|---|---|---|---|
| agent | boolean | Run in non-interactive mode for agents and automation | |||
| checkcoverage | boolean | Check Apex org coverage | |||
| checkonly -c |
boolean | checkonly | |||
| coverageformatters | option | coverageformatters | |||
| debug | boolean | debug | |||
| flags-dir | option | undefined | |||
| forceoverwrite -f |
boolean | forceoverwrite | |||
| ignoreerrors | boolean | ignoreErrors | |||
| ignorewarnings -g |
boolean | ignoreWarnings | |||
| json | boolean | Format output as json. | |||
| junit | boolean | junit | |||
| manifest -x |
option | flagsLong.manifest | |||
| metadata -m |
option | metadata | |||
| postdestructivechanges | option | postdestructivechanges | |||
| predestructivechanges | option | predestructivechanges | |||
| resultsdir | option | resultsdir | |||
| runtests -r |
option | runTests | |||
| soapdeploy | boolean | soapDeploy | |||
| sourcepath -p |
option | sourcePath | |||
| target-org -o |
option | undefined | |||
| testlevel -l |
option | testlevel | NoTestRun | NoTestRun RunSpecifiedTests RunLocalTests RunAllTestsInOrg |
|
| tracksource -t |
boolean | tracksource | |||
| validateddeployrequestid -q |
option | validateDeployRequestId | |||
| verbose | boolean | verbose | |||
| wait -w |
option | wait | 60 | ||
| websocket | option | websocket |
Examples
$ sf hardis:source:deploy -x manifest/package.xml --wait 60 --ignorewarnings --testlevel RunLocalTests --postdestructivechanges ./manifest/destructiveChanges.xml --target-org nicolas.vuillamy@cloudity.com.sfdxhardis --checkonly --checkcoverage --verbose --coverageformatters json-summary
