Coordinator configuration constraints
These 30 checks apply when the coordinator loads or uses its configuration.
Upcoming CI surface
These pages are generated from an unreleased ngit-ci commit. The interface may change before the next release.
Rules
index-relays-non-empty
At least one index relay must be configured.
- Options:
NGIT_CI_INDEX_RELAYS - Rule: at least
1item - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.index-relays-non-empty
index-relay-url-format
Every index relay must be a bare host or use a ws:// or wss:// URL; bare hosts are normalized to wss://.
- Options:
NGIT_CI_INDEX_RELAYS - Rule: format rule
bare_host_or_websocket_url - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.index-relay-url-format
nostr-secret-relay-url-format
Every non-empty Nostr secret inbox relay must parse as a relay URL after bare-host normalization to wss://.
- Options:
NGIT_CI_NOSTR_SECRET_RELAYS - Rule: format rule
nostr_relay_url - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.nostr-secret-relay-url-format
watched-repositories-valid-non-empty
At least one repository selector must parse as an npub or hex public key, optionally followed by an identifier and uppercase alias; invalid entries are skipped.
- Options:
NGIT_CI_REPOS - Rule: custom rule
at_least_one_valid_repository_selector_after_skipping_invalid_entries - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.watched-repositories-valid-non-empty
additional-requester-format
Every additional requester must be an npub or hexadecimal Nostr public key, with no empty entries.
- Options:
NGIT_CI_ADDITIONAL_REQUESTERS - Rule: format rule
comma_separated_npub_or_hex_public_keys - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.additional-requester-format
socket-adapter-requires-socket
The socket-adapter runner requires an adapter socket path.
- Options:
NGIT_CI_RUNNER,NGIT_CI_ADAPTER_SOCKET - Rule: requires the related option when value is
socket-adapter - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.socket-adapter-requires-socket
act-path-non-empty
The act executable path must not be empty.
- Options:
NGIT_CI_ACT_PATH - Rule: must not be empty
- Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.act-path-non-empty
act-cache-max-bytes-positive
The per-repository act cache cap must be greater than zero bytes.
- Options:
NGIT_CI_ACT_CACHE_MAX_BYTES - Rule: greater than
0 bytes - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.act-cache-max-bytes-positive
act-container-daemon-socket-non-empty
The job-container daemon socket must not be empty; '-' explicitly disables the mount.
- Options:
NGIT_CI_ACT_CONTAINER_DAEMON_SOCKET - Rule: must not be empty
- Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.act-container-daemon-socket-non-empty
act-container-options-balanced-quotes
Container options must have balanced shell quotes.
- Options:
NGIT_CI_ACT_CONTAINER_OPTIONS - Rule: format rule
balanced_shell_quotes - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.act-container-options-balanced-quotes
act-platform-mapping-format
Empty or whitespace-only act platform items are ignored; every remaining mapping must contain a non-empty runs-on label and container image separated by '='.
- Options:
NGIT_CI_ACT_PLATFORMS - Rule: format rule
ignore_empty_items_then_require_nonempty_label_equals_nonempty_image - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.act-platform-mapping-format
max-concurrent-jobs-positive
The concurrent-job limit must be greater than zero.
- Options:
NGIT_CI_MAX_CONCURRENT_JOBS - Rule: greater than
0 jobs - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.max-concurrent-jobs-positive
max-queued-jobs-positive
The queued-job limit must be greater than zero.
- Options:
NGIT_CI_MAX_QUEUED_JOBS - Rule: greater than
0 jobs - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.max-queued-jobs-positive
queue-recovery-window-positive
The queue recovery window must be greater than zero seconds.
- Options:
NGIT_CI_QUEUE_RECOVERY_WINDOW_SECS - Rule: greater than
0 seconds - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.queue-recovery-window-positive
queue-state-and-processed-ids-distinct
Queue-state and processed-event IDs must use different files.
- Options:
NGIT_CI_QUEUE_STATE_PATH,NGIT_CI_PROCESSED_IDS_PATH - Rule: distinct values
- Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.queue-state-and-processed-ids-distinct
job-timeout-positive
The job timeout must be greater than zero seconds.
- Options:
NGIT_CI_JOB_TIMEOUT_SECS - Rule: greater than
0 seconds - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.job-timeout-positive
blossom-server-url-format
Every Blossom server must be an HTTP(S) base URL.
- Options:
NGIT_CI_BLOSSOM_SERVERS - Rule: format rule
http_or_https_url - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-server-url-format
blossom-max-log-bytes-positive
The retained per-job log limit must be greater than zero bytes.
- Options:
NGIT_CI_BLOSSOM_MAX_LOG_BYTES - Rule: greater than
0 bytes - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-max-log-bytes-positive
blossom-max-artifact-bytes-positive
The per-artifact-file upload limit must be greater than zero bytes.
- Options:
NGIT_CI_BLOSSOM_MAX_ARTIFACT_BYTES - Rule: greater than
0 bytes - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-max-artifact-bytes-positive
blossom-max-artifacts-per-job-positive
The artifact-file count limit per job result must be greater than zero.
- Options:
NGIT_CI_BLOSSOM_MAX_ARTIFACTS_PER_JOB - Rule: greater than
0 files - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-max-artifacts-per-job-positive
blossom-upload-timeout-positive
The per-blob upload timeout must be greater than zero seconds.
- Options:
NGIT_CI_BLOSSOM_UPLOAD_TIMEOUT_SECS - Rule: greater than
0 seconds - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-upload-timeout-positive
blossom-upload-budget-positive
The post-run upload budget must be greater than zero seconds.
- Options:
NGIT_CI_BLOSSOM_UPLOAD_BUDGET_SECS - Rule: greater than
0 seconds - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-upload-budget-positive
blossom-public-url-format
The Blossom public URL, when set, must use HTTP or HTTPS.
- Options:
NGIT_CI_BLOSSOM_PUBLIC_URL - Rule: format rule
http_or_https_url - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-public-url-format
blossom-public-url-origin-path
The Blossom public URL, when set, must have '/' as its URL path.
- Options:
NGIT_CI_BLOSSOM_PUBLIC_URL - Rule: custom rule
url_path_equals_slash - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.blossom-public-url-origin-path
coordinator-key-format
A supplied coordinator key must be a valid Nostr secret key.
- Options:
NGIT_CI_COORDINATOR_NSEC - Rule: format rule
nostr_secret_key - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.coordinator-key-format
operator-bunker-uri-format
A supplied operator bunker must be a non-empty valid NIP-46 bunker URI.
- Options:
NGIT_CI_OPERATOR_BUNKER - Rule: format rule
nip46_bunker_uri - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.operator-bunker-uri-format
repository-secret-aliases-unique
Repository aliases declared by watched-repository entries must be unique before repository secrets can be loaded.
- Options:
NGIT_CI_REPOS,NGIT_CI_SECRET_<ALIAS>__<NAME> - Rule: custom rule
declared_repository_aliases_unique - Enforced at:
startup - Stable ID:
ngit-ci.configuration.coordinator.constraint.repository-secret-aliases-unique
repository-secret-name-format
Repository secret names must match [A-Z_][A-Z0-9_]*.
- Options:
NGIT_CI_SECRET_<ALIAS>__<NAME> - Rule: matches
^[A-Z_][A-Z0-9_]*$(case-sensitive) - Enforced at:
secret_ingestion - Stable ID:
ngit-ci.configuration.coordinator.constraint.repository-secret-name-format
repository-secret-name-reserved
Repository secret names are case-insensitively reserved when equal to PATH, HOME, CI, DOCKER_HOST, XDG_CONFIG_HOME, XDG_CACHE_HOME, or NIX_CONFIG, or when prefixed by GITHUB_, NGIT_CI_, RUNNER_, or ACTIONS_. Operator sources also skip WORKFLOW_SECRETS_DECRYPTION_BUNKER because maintainer bindings own it.
- Options:
NGIT_CI_SECRET_<ALIAS>__<NAME> - Rule: reject reserved names: exact
PATH,HOME,CI,DOCKER_HOST,XDG_CONFIG_HOME,XDG_CACHE_HOME,NIX_CONFIG; prefixesGITHUB_,NGIT_CI_,RUNNER_,ACTIONS_; operator-source exactWORKFLOW_SECRETS_DECRYPTION_BUNKER(case-insensitive) - Enforced at:
secret_ingestion - Stable ID:
ngit-ci.configuration.coordinator.constraint.repository-secret-name-reserved
github-read-token-format
A GH_READ_TOKEN selected for an authorized run must contain one or more ASCII letters, digits, underscores, or hyphens.
- Options:
NGIT_CI_SECRET_<ALIAS>__<NAME> - Rule: matches
^[A-Za-z0-9_-]+$(case-sensitive) - Enforced at:
authorized_run_setup - Stable ID:
ngit-ci.configuration.coordinator.constraint.github-read-token-format