CI server written in Golo
This is a POC
git clone
this repository- run:
golo golo --classpath jars/*.jar --files config.golo main.golo
or./jarvis-ci.sh
- download ngrok
./ngrok http 8888
- copy the ngrok url | eg: http://23c3dc84.ngrok.io/
- get the url of your server
- currently Jarvis-CI is listening on
8888
- create/fork a repository like this: https://github.com/k33g/fantastic-train
- create a webhook in the repository on which you want to apply CI
- go to
Settings/Webhooks & services
- click on
Add webhook
- add the payload URL: your server url +
golo_ci
| eg: http://23c3dc84.ngrok.io/golo_ci - set content-type to
application/json
- set events to "Send me everything"
- click on
Add webhook
- add the payload URL: your server url +
- go to
- go to your settings
- click on "Personal access tokens"
- generate a token and copy it to the
config.golo
module config
function config = {
return DynamicObject()
: token("your_token_here")
: http_port(8888)
: host("api.github.com")
}
If you use Enterprise, your config.golo
file will be like that:
function config = {
return DynamicObject()
: token("56fc42a6646aebe8af59e2bc980e8744bec5579d")
: http_port(8888)
: enterprise(true)
: host("ghe.k33g")
: scheme("http")
: port(-1)
}
- add a
ci.golo
file with this content
## ci.golo
function check = |context| {
context: info("{0}", "=== Jarvis-CI ===")
context: info("Repository {0}", context: repo(): name())
context: info("Current branch {0}", context: repo(): branchName())
let path = currentDir() + "/" + context: tmp_dir()
context: info("path: {0}", path)
# Stage: initialize
context: info("{0}", "1- initialize")
if context: sh("./npm_install.sh {0}", path): equals(0) {
context: success("{0}", "packages installation OK")
# Stage: tests
context: info("{0}", "2- tests")
if context: sh("./npm_run.sh {0} {1}", path, "test"): equals(0) {
context: success("{0}", "tests OK")
return DynamicObject(): initialize("ok"): tests("ok"): status("success"): description("you are the best!"): context("jarvis-ci")
} else {
context: warning("{0}", "tests KO")
return DynamicObject(): initialize("ok"): tests("ko"): status("failure"): description("ouch!"): context("jarvis-ci")
}
} else {
context: fail("{0}", "packages installation KO")
return DynamicObject(): initialize("ko"): tests("ko"): status("failure"): description("ouch!"): context("jarvis-ci")
}
}
Now, each time you commit on a branch, the remote repository is cloned, and the branch is checked out, then, the ci.golo
file of the current branch is executed.
Remark: If you don't precise status, It won't be checking on the PR
Currently, Jarvis-CI works only with simple Node.js projects (It's a POC)
Jarvis-CI is only a messenger, so you only have to create necessary .sh
files and write your own ci.golo
integration script.
- Web UI
- ...