We have a lot of build dependencies setup that implement a build chain. For example: Continuous => Debug|Release => Publish => Deploy, where Deploy depends on Publish, Publish depends on the Debug & Release builds, etc.
One thing that is not clear is what changes will be deployed when the Deploy build is run. It would be ideal if the Deploy build could determine the changes made since the last time it was invoked, even if Publish has been run in the mean time. It would also be nice to know if there is a build that needs to be deployed. For example: a change in a 3rd party dependency may cause a rebuild of the Continuous build, even if there are no source changes, but that still means the project needs to be deployed again.
One way I could think of is to attach the VCS roots from the Debug|Release builds (they both use the same roots/checkout paths) to the Publish and Deploy builds. The problem is that the Publish and Deploy builds will checkout the code, which I don't want since they don't compile anything, they simply pull the artifacts from the dependency build.
The other way I can think of is to write a custom VCS plugin that does the change collection. This looks a like a good deal of work, even if only the server side needs to be implemented. If this is the best option, then any guidance/hints/advice would be appreciated. I imagine a custom VCS plugin would be necessary to determine if the change was due to a 3rd party dependency change, rather than a source code change.
Is it possible to write a VCS plugin that does not actually checkout any code?
Since we use Subversion, perhaps I could extend the existing Subversion VCS plugin and override the necessary parts to exclude the checkout and include other changes (i.e. 3rd party deps)?
I've only just started investigating VCS plugins, so I am not sure what the capabilities are yet.