Skip to content

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 1 item
  • 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; prefixes GITHUB_, NGIT_CI_, RUNNER_, ACTIONS_; operator-source exact WORKFLOW_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

Git collaboration, without the platform.