Improve CI Workflow
Indemnity83 opened this issue · 1 comments
Need to improve the CI process I've got going here, its pretty hacked together and drops a lot of the information I wanted to have passed through. So I'm going to outline my 'interface' for doing CI then work on implementation.
Ideally everything should be possible from the console using gradle and as few other plugins as possible.
Basic Requirements
- Github should be the only place code is stored, and all automation should be triggered from the repo
- The CI system used should be agnostic, this way it can be moved to another build system later if necessary
- Artifacts should be uploaded to Curse automatically when the build is interesting, meaning it meets either of the following:
- Built from master, support or release branches
- Commit history matches ^fix|^feat|BREAKING
- Curse should be the only place that artifacts are stored (this is to keep a handle on download counts)
- An incremental changelog should be generated for all the commits since the last build.
- The incremental changelog should be formatted, and included as the change log for the curse upload
- Publishing a patch should be as easy as
gradle patch
- Publishing a release should be as easy as
gradle startRelease
.. run some checks ..gradle finishRelease
- Any version information, anywhere in the mod, should come from the project.properties file
- mcmod.info
- References.java (or irontank.java)
- README.md
Developer Requirements
In order for this to work there are a couple things that need to be done on the developers end. Ultimatly, this should save time. If its not, then it needs to be re-evaulated.
- All commits need to follow the AngularJS Commit Message Format. This is so that the changelog can be managed automatically.
- I need to re-write the Versioning document I have and remove the
support
branch stuff, after thinking through it on this issue I don't see it being necessary. Instead therelease
branch will just stick around and be the patch base.
Gradle Tasks
Task | Summary |
---|---|
bumpPatch | increments patch by one and saves to project.properties file |
bumpMinor | increments minor by one, resets patch to 0 and saves to project.properties file |
bumpMajor | increments major by one, resets minor and patch to 0 and saves to project.properties file |
patch | merge current release into master , merge master into develop , bumpPatch in release |
startRelease | create a new release branch from develop (should be major.minor from develop) |
finishRelease | merge release into master with a tag, merge release into develop , bumpPatch in release and bumpMinor in develop |