Best practice for managing APS projects in Git and deploying across environments
I am working with a customer on a project based on Alfresco Process Services 18.104.22.168. We are struggling with the best way to track changes to the project and deploying the project across environments.
Right now, we have everything checked into GitHub Enterprise. We have a folder where we export the app and unzip its XML and JSON files.
Then we have a separate folder for the JAR part of the project where we use a standard Maven-based build.
The challenges are:
1. When downloading the app, the process model and form model files in JSON are on one line. We've started getting in the habit of prettifying the JSON prior to checking in to source code control so that sensible diffs can be done to see what's changed between commits.
2. Updating an existing app can be problematic. The import sometimes fails. Or, if the import succeeds, the publish fails. In some cases, we have to delete everything before deploying, which then changes the app ID among other things. It is rare that it "just works".
3. In cases where we have to "delete everything" it is a massive pain. That's because deleting the app does not delete the items associated with the app (processes, forms, etc.). So one must first delete the app, then delete the parent processes, then the sub-processes, and then the forms. This is VERY time-consuming when you have more than a handful of processes and forms.
4. The modified date changes when processes haven't actually been modified. For example, maybe you want to look at an embedded form. You open the process in the designer, then open the form in the form editor. Then you close the form without saving and then close the process without saving. Now the process shows an updated modified date even though nothing was changed.
5. We have attempted to use the activiti-admin app to define our clusters in our dev, staging, and prod environments so that we can use the "deploy app" button and just point it to the cluster we want to deploy it to. Unfortunately, this rarely works, so we have abandoned it completely.
Those are the top five pain points. I'm wondering what others are doing? How are you tracking changes to your app? How do you go from dev to staging to prod?
Is this use case even considered by the APS team? If so, it is hard to believe that the product got through QA in the state that it is in. (I'm not trying to be rude, and I know there are a lot of people working hard on the product. I'm just wondering if our desire to have repeatable builds and deployments of APS apps across environments is a typical use case).