We are starting our journey to re-implement all our business units on Kinetic. In doing so, we are going to have our fair share of customizations to Kinetic.
What is everyone else doing in terms of version control? I am trying to lead an effort to make sure everything we customize is heavily documented and has some kind of change control behind it.
I created a C# program to export the .xml, .cs, and thumbnail that’s in the Ice.BpDirective table, so I can upload that to GitHub and have some kind of change log / versioning behind my BPM changes.
I’ll try to be novel and keep it short. I’m a big proponent of adopting modern development practices, which of course includes source control. There’s a very old Epicor Idea that has a lot of votes and Epicor was going to share some plans by Summer of 2024…
Source control is great, but mostly what we have done is exporting components and store them. Useful, but to really get the benefit of source control is to treat it like source code and be able to deploy from a repository. One thought is to use the REST output (JSON or XML) and use that to export and import. @klincecum has done great work on the exporting, but to deploy we’ll need some help.
Another repository thought is to push an export file (directive, BAQ, etc.) to GitHub. A GitHub action would extract the archive, maybe un-BZip it where necessary, make a folder representation of the export file and convert certain elements (code, images, etc.) into their native formats. Now the export file and its contents would be in a repository in a state usable by diff tools and have a known commit hash/ID.
BTW, Epicor has added some level of version control in Application Studio allowing users to do commits and reverts. However, the code is still kept in the database and clobbered databases is one of the most common forms of loss of source code.
That would be nice to see some sort of official solution to this all, but oh well!
Thats basically what I am doing now is exporting and storing components in GitHub.
Definitely going to take a look at @klincecum 's work on the export part.
I would love to get to a point of deploying them via an action.
I found that in the Smart Client there is a Solution.exe command line tool that allows you to import Solution Workbench .cab files. I was going to try and work on getting an Actions Runner to take a .cab file from a commit, and use that utility to deploy it into my environment.
Now the missing piece with that would be how can we script or automate the creation of the solution cab
Right. But the format is pretty close to how it’s stored in the database if I recall. That isn’t the most friendly way to view source code items in Git. So, yes, we could create a solution file, but would lose the ability to compare changes from base to customization or customization to customization to merge previous customizations into the current base.
I do think that building solution cabs as needed is far superior than building solutions and storing them. The main reason is that if a common object was customized by different solutions, then installing a solution would clobber the previously installed shared object.