DEV Community

Cover image for PikoCI v0.5.0: worker tagging, in_parallel, Linux packages, and more
Francesc Gil
Francesc Gil

Posted on

PikoCI v0.5.0: worker tagging, in_parallel, Linux packages, and more

Six months into building PikoCI and v0.5.0 is the biggest release yet. This one is almost entirely about workers: routing work to the right place, running things in parallel, and knowing what your workers are doing.

Worker tagging

You can now route jobs and resource checks to specific workers using tags. Add tags = ["gpu"] to a job in your pipeline HCL, start a worker with --tags gpu, and that job will only run on workers with the matching tag. Matching uses AND logic: all job tags must be present on the worker.

job "train-model" {
  tags = ["gpu"]
  task "train" {
    run "exec" {
      path = "python"
      args = ["train.py"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workers can also be made exclusive. The --exclusive-tags flag restricts a worker to only handle tagged work, keeping it free for the jobs that need it.

Worker health monitoring

Workers now send periodic heartbeats to the server. A new admin dashboard shows all connected workers with status, platform, version, and uptime. If a worker goes stale (no heartbeat for 90 seconds), a warning appears and admins can remove it from the UI or via the API.

There is also a pikoci_workers Prometheus gauge with a status label if you want to alert on missing workers.

in_parallel step

Run multiple steps concurrently within a job. Useful for running tests against multiple configurations simultaneously, or for parallelizing independent tasks.

job "test" {
  in_parallel {
    limit     = 3
    fail_fast = true

    task "test-postgres" {
      run "exec" { path = "make" args = ["test-postgres"] }
    }
    task "test-mysql" {
      run "exec" { path = "make" args = ["test-mysql"] }
    }
    task "test-sqlite" {
      run "exec" { path = "make" args = ["test-sqlite"] }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

limit caps how many run simultaneously. fail_fast cancels remaining steps on the first failure.

pipeline validate

Validate a pipeline HCL file without a running server.

pikoci pipeline validate pipeline.hcl
pikoci pipeline validate pipeline.hcl --var env=staging
Enter fullscreen mode Exit fullscreen mode

Useful for pre-commit hooks and CI checks on the pipeline config itself. Catches syntax errors, structural errors, and invalid cross-references, all reported at once with line numbers.

Linux packages

PikoCI now ships as .deb and .rpm packages alongside the existing binaries. Both amd64 and arm64. A SHA256SUMS file is included in every release.

fs resource type

A built-in resource type for watching local files and directories. Triggers jobs when file contents change via SHA256 hash comparison.

resource_type "fs" {
  source = "pikoci://fs"
}

resource "fs" "config" {
  params {
    path = "/etc/myapp/config.yaml"
  }
}
Enter fullscreen mode Exit fullscreen mode

Useful for local development workflows and watching config files.

Worker communication now uses gRPC

Workers connect to the server via a persistent gRPC stream instead of the previous queue-based system. Job dispatch is instant, cancellation signals reach the worker in milliseconds instead of waiting for a polling interval, and log streaming happens on the same connection. No external queue needed for distributed workers.

A dedicated post covering the full migration from queues to gRPC is coming soon.

Other fixes

New jobs no longer replay the entire version backlog on creation: they record a baseline at creation time and only see newer versions. Downstream jobs now trigger immediately when upstream builds succeed, instead of waiting for the next scheduler tick. Cross-reference validation catches invalid references at save time with suggestions for typos.


github.com/pikoci/pikoci ยท pikoci.com ยท Apache 2.0

v0.5.0 release notes

Top comments (0)