Server settings
Operator settings for patchula --server, in a Pkl file that amends the bundled PatchulaServer.pkl. Print the schema with patchula config server-schema and check a file with patchula config check-server <path>. Secrets are never settings.
| Field | Type | Default | Meaning |
|---|---|---|---|
triggers | Triggers | all on | which events start a batch |
sweepCron | String? | "0 0 * * * *" | six-field cron with seconds; null turns sweeps off |
sweepTimezone | String | "UTC" | IANA timezone for the sweep |
concurrency | Int | 8 | repositories scanned at once, 1 to 100 |
batchSize | Int | 32 | queue entries per batch, 1 to 1000 |
coalescingMs | Int | 1000 | how long the first event waits for company, 0 to 60000 |
recheck | "now"|"next-run"? | null (now) | checkbox wording; flags and environment win |
reportDirectory | String? | null | write each report to a file here instead of logging it |
allowedInstallations | Listing<Int> | any | installation IDs to serve |
allowedRepositories | Listing<String> | any | owner/repo names to serve, case-insensitive |
triggers has push, dashboard, pullRequestEdited, pullRequestClosed, installation and checks, all true by default.
When both allowlists are set, both must match. Work is filtered when it is accepted and again just before it runs.
The schema
pkl
/// Operator-owned API server settings. Secrets are deliberately absent.
module PatchulaServer
triggers: Triggers = new {}
sweepCron: String? = "0 0 * * * *"
sweepTimezone: String = "UTC"
concurrency: Int = 8
batchSize: Int = 32
coalescingMs: Int = 1000
/// null uses server default (now); flags/env take precedence.
recheck: "now"|"next-run"? = null
/// null emits the versioned report as a structured log event.
reportDirectory: String? = null
/// Empty lists allow all installations/repositories the App can access.
allowedInstallations: Listing<Int> = new {}
allowedRepositories: Listing<String> = new {}
class Triggers {
push: Boolean = true
dashboard: Boolean = true
pullRequestEdited: Boolean = true
pullRequestClosed: Boolean = true
installation: Boolean = true
checks: Boolean = true
}