Iron Tanks

Iron Tanks

663k Downloads

Improve CI Workflow

Indemnity83 opened this issue · 1 comments

commented

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 the release 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
commented

Between the recent commits and revisions to the Wiki, I'm considering this closed; even though I greatly diverged from the plan I laid out two years ago.

Live and learn 🥇