Poja automates the full delivery pipeline for your Spring Boot application. Every push to a tracked branch triggers a sequence of checks, a build, and a deployment — with no pipeline configuration required on your part.
How branches map to environments
Poja uses your Git branches directly as deployment targets:
Branch | Environment |
|---|---|
| Preprod (staging) |
| Prod (live) |
Pushing a commit to either branch is the only action needed to trigger a deployment. No manual triggers, no deployment scripts.
Any other branch (feature branches, hotfixes) runs CI only — tests and format checks — but does not deploy.
The two workflows
Poja generates two GitHub Actions workflows in .github/workflows/ when it creates your repository. You do not need to edit them.
ci.yml — triggered on every push, every branch
Runs in parallel:
Format job
Runs ./format.sh and checks that no files were modified. If your code is not correctly formatted, this job fails.
Test job
Runs ./gradlew test. This includes:
Unit tests
Integration tests (Testcontainers spins up a real PostgreSQL instance)
JaCoCo coverage verification
JaCoCo min coverage
Minimum code coverage can be configured via the Jacoco Min Coverage field on your environment’s configuration, if your code coverage drops below the specified value, the job will fail
cd-compute.yml — triggered on push to preprod or prod
Step | Description |
|---|---|
Build your application | Runs |
Upload artifact | Zips the artifact and uploads it to a Poja-managed S3 bucket |
Trigger deployment | Calls Poja's API to deploy the uploaded artifact to your environment |
The full CD pipeline completes in under 10 minutes.
Code formatting
Poja ships a formatter based on Google Java Format.
Run it locally before pushing to avoid a CI failure:
# macOS / Linux
./format.sh
# Windows
.\format.bat
The format CI job runs ./format.sh and then checks git diff --exit-code. If any file differs from the formatted version, the job fails.
.png)