Skip to content

Portability and Bundling

PikoCI is designed to be fully portable. A single binary, a pipeline config, and optionally a SQLite database file are all you need.

Minimal deployment

# Just these files:
pikoci              # the binary
pipeline.hcl        # your pipeline config

Run everything in memory:

./pikoci server \
  --jwt-secret my-secret \
  --db-system mem \
  --pubsub-system mem \
  --pipeline-name my-pipeline \
  --pipeline-config pipeline.hcl

Bundle with SQLite

For persistent state, add a SQLite database:

# These files:
pikoci              # the binary
pipeline.hcl        # your pipeline config
pikoci.db           # SQLite database (created on first run)
./pikoci server \
  --jwt-secret my-secret \
  --db-system sqlite \
  --db-name pikoci.db \
  --pipeline-name my-pipeline \
  --pipeline-config pipeline.hcl

Copy the entire directory to another machine and it runs identically.

Bundle with variables

pikoci
pipeline.hcl
vars.json           # variable values
pikoci.db
./pikoci server \
  --jwt-secret my-secret \
  --db-system sqlite \
  --db-name pikoci.db \
  --pipeline-name my-pipeline \
  --pipeline-config pipeline.hcl \
  --vars vars.json

Cross-platform builds

Build for any supported platform:

# Linux
GOOS=linux GOARCH=amd64 go build -o pikoci .

# macOS
GOOS=darwin GOARCH=amd64 go build -o pikoci .

# ARM (Raspberry Pi, etc.)
GOOS=linux GOARCH=arm64 go build -o pikoci .

Docker (optional)

While PikoCI doesn't require Docker, you can containerize it:

FROM scratch
COPY pikoci /pikoci
COPY pipeline.hcl /pipeline.hcl
ENTRYPOINT ["/pikoci", "server", "--jwt-secret", "my-secret", "--pipeline-name", "my-pipeline", "--pipeline-config", "/pipeline.hcl"]

Key point

PikoCI has no external service dependencies. No Docker Compose, no Kubernetes, no setup scripts. Download the binary, write your pipeline, and run it.