You *really* should look into Transport Packages, which are built into the core of Revolution.
Deleted is probably more important.
This is basically the workflow we are envisioning (with the exception of minor adjustments in the script would be minimal since the script would be written to grab the latest information and would only need to be updated if the scope of the data/files involved in a package changed) and automation is absolutely part of the plan and why we are developing this as a scriptable API, but automation is much like optimization in my view, you do it last.
I can see how this might work - but only if some level of automation was injected, such as the ability to have the package management section of the MODx manager provide a layer of abstraction to build script management, and maybe the ability to push, in addition to pulling transport packages - perhaps to a provider (or maybe SVN would be better). Otherwise, manually maintaining a build script becomes a bottleneck, particularly for minor adjustments. (EDIT: Just realized this is what BobRay was talking about in his last post...now his post makes more sense to me...and yes, this all does open up a can of worms).
Is this the workflow you’re envisioning? Or am I missing something?
Can property sets be represented in build scripts? Is there anything in a MODx db that can’t be in a transport package?
Also, for the parts of a build script that pertain to replicating the state of data from one MODx install to another, can you explain why you didn’t decide to use something simpler, like XML, for example?
We already tried to build a manager UI to create the transport packages, but it got pretty complex ....
For instance, so transport packages can be embedded in other transport packages..Definitely needed, we should be able to do this fairly quickly even now, and install ’bundles’ of packages together, eg demo content.
This is why we want to offer the API as well as provide builders for simple/known tasks. And well, most Extras are not anywhere near the scope of something like PHP. There will be patterns emerging for common tasks that can certainly be automated and turned into configuration file consumers/producers with simple user interfaces.
We already tried to build a manager UI to create the transport packages, but it got pretty complex ....
I can imagine, I’ve seen automated package builders before for packaging into RPM format, they are OK for fairly simple stuff but you couldn’t use one for packaging something like PHP for instance, if you understand what you need to do in these cases its quicker to write the spec file by hand, in our case the build.transport script of course.
First, any Add-On or Core Extension hosted in our Extras can use JIRA, this is why we have the generic projects for each. And how a developer chooses to manage their project and distribute their code is up to them. I don’t see how this has anything to do with packaging; these same issues exist without packaging, only we leave it to the MODx user to resolve manually. At least with packaging we can provide easy ways for users to install/upgrade/uninstall things with some intelligence and without them having to read a small book of manual instructions.
The workflow is crucial here, there’s a difference for instance in stuff you package and stuff that’s supplied to you, if you own a package it’s relatively easy, if you don’t then what happens next? Say you’ve found a minor css bug in a 3PC or core extension, its a quick easy fix. Ok, you fix it, you need to do this to get your production site working, no choice here. This should now be pushed upstream so the owner can look at it, decide whether to adopt it or not and re-issue the package or not. You could re-package it yourself but its now out of step with upstream(could even raise a JIRA here as part of the workflow if needed, doesn’t help for 3PC’s with no JIRA though). If upstream pushes a new package without your change you can’t adopt it without re-applying your fix(patch).
I mean if you use MAMP and a PHP release comes out, you don’t just manually add the new version of PHP to MAMP, you wait for MAMP to release a new package that is known to work as a whole distribution. If combining packages you obviously tested the combination to work before distributing it. If you need to update something in the aggregation, well, you regression test all of the pieces and how they work together. I still don’t see how this has anything to do with whether the component is distributed in a package or manually cut/pasted into a distribution; the need for dependency resolution between disparate components already exists. And I’d sure rather be able to handle dependency resolution in a script I can attach to a new version of a package than have to write complicated manual instructions on how an end-user can resolve these himself.
This all needs to be tracked intelligently or it will be lost in the noise. These are layers over and above how transport packages work, we are into package management in general now. If we allow packaging of disparate items, i.e stuff that’s either not packaged that’s changed or tweaks/bugfixes as described above into ’changesets’(patches?). Ok, we can apply the changeset to production, fine , but what about the next one?. We would need to track not only that the changeset has been applied(we do this now) but what was in it in case the next one changes it(deliberately or otherwise). We are now into dependency resolution, aargh!!
At least with packaging we can provide easy ways for users to install/upgrade/uninstall things with some intelligence and without them having to read a small book of manual instructions.Yes, absolutely.
And I’d sure rather be able to handle dependency resolution in a script I can attach to a new version of a package...I think this would be impossible to do, how would you write the script?. You don’t know the install environment till its installed. Then of course what if we can’t resolve? The ever perennial question, rollback, fail or what.
If we follow the simple, reusable component philosophy when developing our packages, the patterns will emerge for automation and improvement, including how to handle dependency resolution
). Then you could have a repository somewhere and both the local install and the production server would be working copies. 