Build automation tools

Is there any free build tool which can do the following:

  1. automatically build multi modular maven project every time a branch (pref master) on github (public repo) gets a new commit.
    • download dependencies defined in build script
    • run tests
    • build shaded jars
  2. if build and tests pass all jars will be uploaded to github as a new release

I think you can build it all yourself with gradle. I am not sure about your first point. Gradle would have to periodically be executed to let it check if there is a new commit, if there is one gradle should execute the build task.

You can extend Gradle in many ways. Gradle can’t do it out of the box but you can build it or there already is a plugin that can do this.

  1. maven > gradle, gradle is terrible
  2. you misunderstood my question or i wasnt clear. Im looking for a webservice.

travis (free for open source projects) can build maven projects and push the successful artifacts back to github releases.

2 Likes

First some conceptual background:

[quote=“NeumimTo, post:1, topic:11786”]

  1. automatically build multi modular maven project every time a branch (pref master) on github (public repo) gets a new commit. - download dependencies defined in build script - run tests - build shaded jars
    [/quote]You are looking for continuous integration software. They automatically build your project once triggered by a new commit. Tests, dependencies etc. should be automatically handled by Maven so that the CI only runs the Maven build script (or Gradle, Ant etc.).

[quote=“NeumimTo, post:1, topic:11786”]
2) if build and tests pass all jars will be uploaded to github as a new release
[/quote]This is called continuous delivery. Basically your CI executes some kind of code if your artefact passes all tests. This can be done by the CI itself or the CI tells the build tool to deploy the artefact.

A popular CIs is Jenkins, you would however need to host it yourself (CloudBess uses to provide free hosting for open source projects, but apparently they no longer do so).
Another popular alternative is travis which can be used pretty easily without hosting anything yourself if your project is open source.
Both options can deploy to Github if properly configured (see the respective documentation).

What travis does:
It listens to your repo (or specific branches of your repo) and executes a script when a commit occurs. You can do whatever you want in this script. So uploading/downloading dependencies, testing, uploading the build afterwards isn’t a problem.

Example build.gradle of our API:
https://github.com/SpongePowered/SpongeAPI/blob/master/build.gradle

Another option would be Jenkins: https://jenkins-ci.org/
Or teamcity: TeamCity: the Hassle-Free CI and CD Server by JetBrains

Thank you, travis seems to work flawlessly