Turn it on
CI is off by default. Open the project’s Settings tab and find CI, or use the CLI:
Changing the settings needs the Admin role.
atoll ci enable keeps the tasks and branches you don’t pass;
--all-branches goes back to every branch. The project must be linked to a repository first.
What runs
Every push to a matching branch, and every pull request that is opened, reopened or gets new commits, starts a run. A run downloads the commit, keeps the project’s root directory and runs./gradlew <tasks> --continue there, so one
failing task doesn’t hide the others. Runs are Linux only.
A new push to a branch cancels that branch’s run if it is still queued or running, so only the newest commit is
tested. Rerun a run to test the same commit again with the current settings and vars.
Pull requests from forks
Pull requests from forks run too, but never get secret env vars; plain ones are passed as usual.Env vars
A run gets:
The project’s deployment vars are not passed. Secret values are masked in the log.
Results
The project’s CI tab lists the runs with their status, branch, commit, message and duration. A run’s page shows its live log and the Gradle tasks that failed (from> Task :x FAILED lines). A run is QUEUED, RUNNING,
PASSED, FAILED (a task failed), CANCELLED or ERROR (the platform couldn’t run it, not a test failure).
atoll ci ls shows them. Reading runs needs the Viewer
role; rerunning and cancelling them needs Developer.
Every run reports a commit status named atoll-ci/<project>: pending while it is queued or running, then success,
failure (a task failed) or error (cancelled, or the platform couldn’t run it). To keep pull requests with failing tests from
being merged, add atoll-ci/<project> as a required status check in the repository’s branch protection rules on
GitHub.
Runs and their logs are kept for 90 days.
Billing
CI time counts as build minutes, like deployment builds, and shows up as such on the org’s usage and invoices. An org that can’t deploy because its free allowance is used up or its spend limit is reached gets no new runs either: each push still shows up as anERROR run with the reason, and the commit gets an error status.
Self-hosting
Runs use the builder image as Kubernetes Jobs with
ATOLL_RUNTIME=kubernetes, and local Gradle otherwise.
Commit statuses need the GitHub App’s Commit statuses permission, which git.md already asks for.