This is the repository of the backend for my builds-page. The page can be found here: https://thebusybiscuit.github.io/builds/
This kinda serves as a "Continous Integration/Deployment" Service for Maven Projects which utilises static GitHub Pages.
The code itself is basically just a basic node.js Program.
It reads repositories from 'resources/repos.json' (How to add your own repository) and connects to the GitHub-API.
If you are interested in the specifics, then feel free to keep on reading.
The first step is to retrieve the latest commit from GitHub's API.
It will compare that commit's timestamp to the locally stored repository.
If the remote version is newer or if there isn't even a local version, we are calculating the new build id.
After that it will proceed to step 2.
After we established that our repository is out of date, this program will git clone
said repository.
It will also locate it's pom.xml file and set the version to "DEV - $id (git $commit)".
This is the easiest step, the program just runs mvn clean package -B
to compile our Maven Project.
It will also catch the state (Success / Failure).
If you enabled Sonar-Integration for this project, then it will also run a sonar-scan on the repository.
Since the page can also display some additional information, the program will now fetch the project's license and tags.
It will also relocate the compiled jar to our main project directory.
Now the program will update our local builds.json file for the project.
It will add the newly compiled build, set the latest and lastSuccessful version
and it's going to tag any builds that match up with our previously fetched tags, with that tag.
Then it will generate a fresh index.html page for the project (from "resources/template.html").
And it will also generate a Status Badge (see "resources/badge.svg").
If we specified a discord webhook, it will also post a message on your discord server.
Now that everything completed, the program will add, commit and push all changed files to this repository.
After it's done, it will clear out any source files that arised during git clone
.
This repository hosts several of my Maven projects, including Slimefun and a couple of Slimefun Addons developed by the community.
If you want your own project to be added, simply submit a Pull Request to this repository with your desired changes and a description of why you want your project to be added.
All you have to do is to modify the resources/repos.json
file, go down to the bottom and add your repository as another JSON object.
Repositories must fulfill the following criteria:
- They must have a valid
pom.xml
file. - They must be publicly available on GitHub and Open-Source.
- They must have a valid
LICENSE
file with a permissive Open-Source license (e.g. MIT, Apache or GNU GPL or similar).
// ...
// Replace this with your username, repo and branch you wish to publish. For example: AwesomeUser/CoolAddon:main
"User/Repo:branch": {
// Some repositories support the usage of sonar-scanner, custom repositories cannot have this feature though (yet)
"sonar": {
"enabled": false
},
// What the builds will be prefixed with. "DEV" would make builds like "CoolAddon - DEV 1 (githash)"
"options": {
"prefix": "DEV"
},
// What your addon supports/depends on. The number key indicates the minium build.
// You can list any text or even links here.
"dependencies": {
"Minecraft Version(s)": {
"1": "1.13.x, 1.14.x, 1.15.x, 1.16.x"
},
"CS-CoreLib Version": {
"1": "<a class=\"link_info\" href=\"/builds/TheBusyBiscuit/CS-CoreLib/master/#100\">dev #100</a>"
},
"Slimefun Version": {
"1": "<a class=\"link_info\" href=\"/builds/TheBusyBiscuit/Slimefun4/master/#600\">dev #600</a>"
},
}
}
}
If you are using CS-CoreLib v2 or Slimefun for your project, you can use our premade Auto-Updater for your project.
You can add our Auto-Updater by placing this inside the onEnable()
method of your main class which extends JavaPlugin
.
if (autoUpdatesEnabled) {
Updater updater = new GitHubBuildsUpdater(this, this.getFile(), "USER/REPO/BRANCH");
updater.start();
}
Make sure to add a config option for enabling/disabling auto-updates though!