Solenopsis

pcon edited this page Mar 14, 2013 · 17 revisions

Welcome

Welcome to the Solenopsis wiki!

What does Solenopsis mean?

The word "solenopsis" refers to the genus name for red ants. Why red ants? This project started internally at Red Hat as a means to simplify development and deployment to Salesforce. Initially, the Force.com Migration Tool was chosen which is built on top of Ant. It seemed natural to choose a name that indirectly gave credit to Red Hat: developed at Red Hat...built on top of Ant...red ant...Solenopsis! We continue to use the name Solenopsis as its unique and maintains that close tie to Red Hat. The developers were elated to be afforded the opportunity to take this in-house project to a publicly available open source project. Red Hat++

So what is it?

Solenopsis is a command line interface for deploying (pushing) to a Salesforce org as well as retrieving (pulling) the contents from an org. Where the Force.com Migration Tool provides very simple deploy and retrieval functionality, Solenopsis adds value by:

  • Facilitating org synchronization with a "master" representation. Solenopsis can detect modifications, additions and deletions to an org and automatically build the appropriate manifests for deployment (package.xml/destructiveChanges.xml). Additionally, it will create a deployable artifact containing those manifests and deploy for you. Using the Force.com Migration Tool requires one to manually build those manifest files and deployable (for example a zip file) which you then push to your org (either from your own custom Ant script or some other mechanism).
  • Selectively add/change/remove files to/from an org. You can express files, on the command line, to push out to an org as well as those to remove. The Force.com Migration Tool requires you to build your own manifest files (package.xml/destructiveChanges.xml) that contain those entries.
  • Execute test(s). You can express, on the command line, which tests you'd like run in your org. Using the Force.com Migration Tool, you must explicitly denote this in an Ant script.
  • Generate reports denoting differences in orgs. The Force.com Migration Tool does not offer this functionality.
  • Easy integration with source control systems. Solenopsis can easily sit atop most source control systems and use the files maintained by them to push/pull from an org.
  • Plugability into continuous integration (CI) environments. Since Solenopsis can deploy files located on a file system, any CI environment can be used to monitor changes from a source control system and deploy for you using Solenopsis. As a bonus, since Solenopsis can automatically detect changes to an org, a "destructive push" can be called which will remove things from your org that are no longer part of the files in your source control system.

These are just some of the highlights!

Caveats

  • Solenopsis does not use nor add any source control functionality - with one exception: git status. When Solenopsis was initially conceived, the source control system the developers used was (and is) Git. Because it was desired to be able to quickly push out only those changes as reflected by Git, a few useful commands were provided like git-push and git-destructive-push. These just examine "git status" and build the appropriate manifests/deployable artifact based on what Git reports.
  • Folder based files that are created in your org are not easily pullable for Solenopsis. There is some work involved to make this happen and is better described here.
  • Solenopsis does not work directly with the Metadata API. Instead, it will keep copies of your orgs locally. There are some technical challenges with the Tools.force Migration Tool when interrogating the results of describeMetadata that would have been a major hurdle if processing via Ant. We decided it was simpler to store local copies of an org and operate on those files.
  • Not all of the functionality has been fully tested. For example, when initially conceived, no reports were being used and that functionality was not tested for deploy/retrieve. We recently received a bug that reports were not properly handled when selectively pushing them (its since been fixed). The point is, what the developers have been directly using will work quite well.
  • This project is developed as an out-of-work type project that the developers freely contribute to in their spare time. We will make every attempt to fix bugs as they arise - but its a not-for-profit project and will endeavor to fix issues as quickly as time permits. However, we do take them very seriously.