Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Environment ¶
type Environment struct {
LogLevel string `default:"info" split_words:"true"`
LogFormat string `default:"json" split_words:"true"`
LogConsoleEnabled bool `default:"true" split_words:"true"`
Port int `default:"8080"`
DockerHost string `default:"" split_words:"true"`
// DockerSubpathHelperImage is the image the docker engine uses for the
// short-lived helper container that creates a VolumeMount.SubPath
// sub-directory before a step mounts it (internal/atom/docker's
// ensureVolumeSubPath). Defaults to the repo's pinned alpine:3.23 reference
// (internal/guardrails/guardrails_test.go); override it for an
// air-gapped or private-registry-only install so the helper never needs
// to reach Docker Hub.
DockerSubpathHelperImage string `envconfig:"DOCKER_SUBPATH_HELPER_IMAGE" default:"alpine:3.23"`
KubernetesConfig string `default:"" split_words:"true"`
KubernetesNamespace string `default:"default" split_words:"true"`
PodmanURI string `default:"" split_words:"true"`
NodeAddress string `default:"127.0.0.1:9001" split_words:"true"`
NodeLabels string `default:"" split_words:"true"`
DatabaseNodes []string `default:"" split_words:"true"`
APIExternalURL string `envconfig:"API_EXTERNAL_URL" default:""`
DatabasePath string `default:"/var/lib/caesium/dqlite" split_words:"true"`
DatabaseType string `default:"internal" split_words:"true"`
DatabaseDSN string `default:"host=postgres user=postgres password=postgres dbname=caesium port=5432 sslmode=disable" split_words:"true"`
DatabaseMaxOpenConns int `default:"4" split_words:"true"`
DatabaseMaxIdleConns int `default:"2" split_words:"true"`
DatabaseShards int `default:"1" split_words:"true"`
DatabaseVoters int `default:"3" split_words:"true"`
DatabaseStandbys int `default:"3" split_words:"true"`
DatabaseConsoleEnabled bool `default:"false" split_words:"true"`
ManualTriggerAPIKey string `envconfig:"MANUAL_TRIGGER_API_KEY" default:""`
EventIngestAPIKey string `envconfig:"EVENT_INGEST_API_KEY" default:""`
MaxParallelTasks int `split_words:"true"`
TaskFailurePolicy string `default:"halt" split_words:"true"`
TaskTimeout time.Duration `default:"0" split_words:"true"`
ExecutionMode string `default:"local" split_words:"true"`
WorkerEnabled bool `default:"true" split_words:"true"`
WorkerPollInterval time.Duration `default:"15s" split_words:"true"`
WorkerReclaimInterval time.Duration `default:"30s" split_words:"true"`
WorkerLeaseTTL time.Duration `default:"5m" split_words:"true"`
WorkerLeaseRenewInterval time.Duration `default:"0" split_words:"true"`
WorkerPoolSize int `default:"4" split_words:"true"`
ShutdownGracePeriod time.Duration `envconfig:"SHUTDOWN_GRACE_PERIOD" default:"30s"`
InternalWakeupToken string `default:"" split_words:"true"`
WakeupFanoutMode string `default:"full" split_words:"true"`
AtomPollInterval time.Duration `default:"1s" split_words:"true"`
JobdefGitEnabled bool `envconfig:"JOBDEF_GIT_ENABLED" default:"false"`
JobdefGitOnce bool `envconfig:"JOBDEF_GIT_ONCE" default:"false"`
JobdefGitInterval time.Duration `envconfig:"JOBDEF_GIT_INTERVAL" default:"1m"`
JobdefGitSources GitSources `envconfig:"JOBDEF_GIT_SOURCES"`
JobdefSecretsEnableEnv bool `envconfig:"JOBDEF_SECRETS_ENABLE_ENV" default:"true"`
JobdefSecretsEnableKubernetes bool `envconfig:"JOBDEF_SECRETS_ENABLE_KUBERNETES" default:"false"`
JobdefSecretsKubeConfig string `envconfig:"JOBDEF_SECRETS_KUBECONFIG"`
JobdefSecretsKubeNamespace string `envconfig:"JOBDEF_SECRETS_KUBE_NAMESPACE" default:"default"`
JobdefSecretsVaultAddress string `envconfig:"JOBDEF_SECRETS_VAULT_ADDRESS"`
JobdefSecretsVaultToken string `envconfig:"JOBDEF_SECRETS_VAULT_TOKEN"`
JobdefSecretsVaultNamespace string `envconfig:"JOBDEF_SECRETS_VAULT_NAMESPACE"`
JobdefSecretsVaultCACert string `envconfig:"JOBDEF_SECRETS_VAULT_CA_CERT"`
JobdefSecretsVaultSkipVerify bool `envconfig:"JOBDEF_SECRETS_VAULT_SKIP_VERIFY" default:"false"`
JobdefSecretsIdentityHMACKeys string `envconfig:"JOBDEF_SECRETS_IDENTITY_HMAC_KEYS" default:""`
JobdefSecretsIdentityHMACKeyID string `envconfig:"JOBDEF_SECRETS_IDENTITY_HMAC_KEY_ID" default:""`
CacheEnabled bool `default:"false" split_words:"true"`
CacheTTL time.Duration `default:"24h" split_words:"true"`
CachePruneInterval time.Duration `default:"1h" split_words:"true"`
CacheMaxEntries int `default:"10000" split_words:"true"`
// CachePinDigests is the global default for resolving image tags to content
// digests and folding the digest (not the mutable tag) into the cache key.
// Off by default so steady-state runs pay no registry round-trip; a job or
// step may opt in via cache.pinDigests. When on, a tag that moves to a new
// digest produces a cache miss instead of a stale hit.
CachePinDigests bool `envconfig:"CACHE_PIN_DIGESTS" default:"false"`
// CacheDigestTTL bounds how long a resolved tag->digest mapping is reused
// before it is re-resolved. Short by design so steady-state runs avoid the
// registry round-trip while a moving tag is still detected promptly.
CacheDigestTTL time.Duration `envconfig:"CACHE_DIGEST_TTL" default:"5m"`
// OutputRefMaxBytes bounds the payload size a step may reference via the
// ##caesium::output-ref large-object protocol, checked against the size the
// producer reports in the reference marker. 0 (the default) means unbounded —
// the reference itself is tiny (path + digest) and never enters dqlite, so
// this is an operator guard against a runaway producer pinning arbitrarily
// large BYO storage, not a correctness control. A reference whose reported
// size exceeds this is rejected and the step's other outputs still apply.
OutputRefMaxBytes ByteSize `envconfig:"OUTPUT_REF_MAX_BYTES" default:"0"`
// FanOutMaxPartitions is the server hard cap on partitions a producer may
// emit. The effective cap for a step is min(fanOut.maxPartitions, this).
// Overflow fails the producing task; the list is never truncated.
FanOutMaxPartitions int `envconfig:"FANOUT_MAX_PARTITIONS" default:"1024"`
OpenLineageEnabled bool `envconfig:"OPEN_LINEAGE_ENABLED" default:"false"`
OpenLineageTransport string `envconfig:"OPEN_LINEAGE_TRANSPORT" default:"http"`
OpenLineageURL string `envconfig:"OPEN_LINEAGE_URL" default:""`
OpenLineageNamespace string `envconfig:"OPEN_LINEAGE_NAMESPACE" default:"caesium"`
OpenLineageHeaders string `envconfig:"OPEN_LINEAGE_HEADERS" default:""`
OpenLineageFilePath string `envconfig:"OPEN_LINEAGE_FILE_PATH" default:"/var/lib/caesium/lineage.ndjson"`
OpenLineageTimeout time.Duration `envconfig:"OPEN_LINEAGE_TIMEOUT" default:"5s"`
OpenLineageRetryAttempts uint `envconfig:"OPEN_LINEAGE_RETRY_ATTEMPTS" default:"3"`
WebhookMaxBodySize ByteSize `envconfig:"WEBHOOK_MAX_BODY_SIZE" default:"1MB"`
WebhookRateLimitPerMinute int `envconfig:"WEBHOOK_RATE_LIMIT_PER_MINUTE" default:"120"`
WebhookRateLimitBurst int `envconfig:"WEBHOOK_RATE_LIMIT_BURST" default:"20"`
EventRetention time.Duration `envconfig:"EVENT_RETENTION" default:"168h"`
WebhookEventRetention time.Duration `envconfig:"WEBHOOK_EVENT_RETENTION" default:"168h"`
MaxTriggerDepth int `envconfig:"MAX_TRIGGER_DEPTH" default:"10"`
RateLimitPrunerEnabled bool `envconfig:"RATE_LIMIT_PRUNER_ENABLED" default:"false"`
RateLimitPruneInterval time.Duration `envconfig:"RATE_LIMIT_PRUNE_INTERVAL" default:"1m"`
RunQueueEnabled bool `envconfig:"RUN_QUEUE_ENABLED" default:"false"`
RunQueueDequeuerEnabled bool `envconfig:"RUN_QUEUE_DEQUEUER_ENABLED" default:"false"`
RunQueueDequeueInterval time.Duration `envconfig:"RUN_QUEUE_DEQUEUE_INTERVAL" default:"1s"`
RunQueueClaimStaleAfter time.Duration `envconfig:"RUN_QUEUE_CLAIM_STALE_AFTER" default:"2m"`
RunQueueMaxDepth int `envconfig:"RUN_QUEUE_MAX_DEPTH" default:"100"`
FreshnessEnabled bool `envconfig:"FRESHNESS_ENABLED" default:"false"`
FreshnessEvalInterval time.Duration `envconfig:"FRESHNESS_EVAL_INTERVAL" default:"1m"`
FreshnessMaxDerivationsPerTick int `envconfig:"FRESHNESS_MAX_DERIVATIONS_PER_TICK" default:"50"`
ContractEnforcement string `envconfig:"CONTRACT_ENFORCEMENT" default:""`
ContractDeprecationWindow time.Duration `envconfig:"CONTRACT_DEPRECATION_WINDOW" default:"336h"`
// Notification Watcher
NotificationWatcherInterval time.Duration `envconfig:"NOTIFICATION_WATCHER_INTERVAL" default:"15s"`
// Authentication & Authorization
AuthMode string `envconfig:"AUTH_MODE" default:"none"` // none, api-key
AuthKeyHashSecret string `envconfig:"AUTH_KEY_HASH_SECRET" default:""`
AuthRequireTLS bool `envconfig:"AUTH_REQUIRE_TLS" default:"true"`
TLSCert string `envconfig:"TLS_CERT" default:""`
TLSKey string `envconfig:"TLS_KEY" default:""`
TrustedProxies string `envconfig:"TRUSTED_PROXIES" default:""`
AuthRateLimitPerMinute int `envconfig:"AUTH_RATE_LIMIT_PER_MINUTE" default:"10"`
AuthRateLimitBurstAlert int `envconfig:"AUTH_RATE_LIMIT_BURST_ALERT" default:"100"`
AuthPublicBaseURL string `envconfig:"AUTH_PUBLIC_BASE_URL" default:""`
AuthSessionIdleTTL time.Duration `envconfig:"AUTH_SESSION_IDLE_TTL" default:"8h"`
AuthSessionAbsoluteTTL time.Duration `envconfig:"AUTH_SESSION_ABSOLUTE_TTL" default:"24h"`
AuthSessionCookieName string `envconfig:"AUTH_SESSION_COOKIE_NAME" default:"caesium_session"`
AuthRoleMapping string `envconfig:"AUTH_ROLE_MAPPING" default:""`
AuthDefaultRole string `envconfig:"AUTH_DEFAULT_ROLE" default:""`
AuthOIDCEnabled bool `envconfig:"AUTH_OIDC_ENABLED" default:"false"`
AuthOIDCIssuerURL string `envconfig:"AUTH_OIDC_ISSUER_URL" default:""`
AuthOIDCClientID string `envconfig:"AUTH_OIDC_CLIENT_ID" default:""`
AuthOIDCClientSecret string `envconfig:"AUTH_OIDC_CLIENT_SECRET" default:""`
AuthOIDCScopes string `envconfig:"AUTH_OIDC_SCOPES" default:"openid profile email groups"`
AuthOIDCGroupsClaim string `envconfig:"AUTH_OIDC_GROUPS_CLAIM" default:"groups"`
AuthOIDCRedirectURL string `envconfig:"AUTH_OIDC_REDIRECT_URL" default:""`
AuthSAMLEnabled bool `envconfig:"AUTH_SAML_ENABLED" default:"false"`
AuthSAMLIDPMetadataURL string `envconfig:"AUTH_SAML_IDP_METADATA_URL" default:""`
AuthSAMLIDPMetadataXML string `envconfig:"AUTH_SAML_IDP_METADATA_XML" default:""`
AuthSAMLIDPMetadataFile string `envconfig:"AUTH_SAML_IDP_METADATA_FILE" default:""`
AuthSAMLSPEntityID string `envconfig:"AUTH_SAML_SP_ENTITY_ID" default:""`
AuthSAMLSPCert string `envconfig:"AUTH_SAML_SP_CERT" default:""`
AuthSAMLSPKey string `envconfig:"AUTH_SAML_SP_KEY" default:""`
AuthSAMLACSURL string `envconfig:"AUTH_SAML_ACS_URL" default:""`
AuthSAMLMetadataURL string `envconfig:"AUTH_SAML_METADATA_URL" default:""`
AuthSAMLGroupsAttribute string `envconfig:"AUTH_SAML_GROUPS_ATTRIBUTE" default:"groups"`
AuthLDAPEnabled bool `envconfig:"AUTH_LDAP_ENABLED" default:"false"`
AuthLDAPURL string `envconfig:"AUTH_LDAP_URL" default:""`
AuthLDAPStartTLS bool `envconfig:"AUTH_LDAP_START_TLS" default:"false"`
AuthLDAPBindDN string `envconfig:"AUTH_LDAP_BIND_DN" default:""`
AuthLDAPBindPassword string `envconfig:"AUTH_LDAP_BIND_PASSWORD" default:""`
AuthLDAPUserBaseDN string `envconfig:"AUTH_LDAP_USER_BASE_DN" default:""`
AuthLDAPUserFilter string `envconfig:"AUTH_LDAP_USER_FILTER" default:"(uid={username})"`
AuthLDAPGroupBaseDN string `envconfig:"AUTH_LDAP_GROUP_BASE_DN" default:""`
AuthLDAPGroupFilter string `envconfig:"AUTH_LDAP_GROUP_FILTER" default:""`
AuthLDAPGroupAttribute string `envconfig:"AUTH_LDAP_GROUP_ATTRIBUTE" default:"cn"`
AuthLDAPUsernameAttribute string `envconfig:"AUTH_LDAP_USERNAME_ATTRIBUTE" default:"uid"`
AuthLDAPEmailAttribute string `envconfig:"AUTH_LDAP_EMAIL_ATTRIBUTE" default:"mail"`
AuthLDAPDisplayNameAttribute string `envconfig:"AUTH_LDAP_DISPLAY_NAME_ATTRIBUTE" default:"displayName"`
AuthLDAPTimeout time.Duration `envconfig:"AUTH_LDAP_TIMEOUT" default:"10s"`
// Run-owner coordination (Phase 2).
// CAESIUM_RUN_OWNER_ENABLED enables the run-owner coordination mode.
// Default false — the system behaves byte-identically to Phase 1 when off.
RunOwnerEnabled bool `envconfig:"RUN_OWNER_ENABLED" default:"false"`
// CAESIUM_RUN_LEASE_TTL is how long an owner holds a run lease before
// another node may take over. Default 30s; must be > 0 when owner mode
// is enabled.
RunLeaseTTL time.Duration `envconfig:"RUN_LEASE_TTL" default:"30s"`
// CAESIUM_RUN_OWNER_DISPATCH_INTERVAL is the polling cadence for the
// per-node owner dispatch loop. Smaller values reduce task-start latency
// at the cost of more DB reads per second. Default 1s.
RunOwnerDispatchInterval time.Duration `envconfig:"RUN_OWNER_DISPATCH_INTERVAL" default:"1s"`
// CAESIUM_RUN_OWNER_DISPATCH_BATCH caps the number of tasks dispatched per
// tick per owned run. Prevents a large fan-out from stalling the loop.
// Default 64.
RunOwnerDispatchBatch int `envconfig:"RUN_OWNER_DISPATCH_BATCH" default:"64"`
// CAESIUM_RUN_OWNER_DISPATCH_DEADLINE is the task execution deadline added
// to time.Now() in each DispatchRequest. Workers use this to bound how long
// they hold the claim before returning it. Default 5m.
RunOwnerDispatchDeadline time.Duration `envconfig:"RUN_OWNER_DISPATCH_DEADLINE" default:"5m"`
// CAESIUM_INTERNAL_PORT is the port for the dedicated internal mTLS listener
// that hosts the run-owner endpoints (/internal/dispatch, /internal/complete).
// It is separate from the public API port so the public server can remain
// plain HTTP while node-to-node coordination traffic is mutually
// authenticated. Only bound when owner mode is enabled. Default 8443.
InternalPort int `envconfig:"INTERNAL_PORT" default:"8443"`
// CAESIUM_INTERNAL_MTLS_CA/CERT/KEY are PEM file paths configuring mutual TLS
// on the internal listener. CA validates peer (client) certificates;
// CERT/KEY are this node's own identity — presented both as the listener's
// server certificate and as the client certificate when this node POSTs to a
// peer's internal endpoints. All three are required when owner mode is
// enabled (enforced at startup).
InternalMTLSCA string `envconfig:"INTERNAL_MTLS_CA" default:""`
InternalMTLSCert string `envconfig:"INTERNAL_MTLS_CERT" default:""`
InternalMTLSKey string `envconfig:"INTERNAL_MTLS_KEY" default:""`
// CAESIUM_INTERNAL_MTLS_TOKEN optionally separates the auto-provisioning
// PKI token from CAESIUM_INTERNAL_WAKEUP_TOKEN. When empty, the wakeup token
// is used for HKDF key derivation.
InternalMTLSToken string `envconfig:"INTERNAL_MTLS_TOKEN" default:""`
// Auto-provisioned internal mTLS rotation settings. These apply only when
// owner mode is on and explicit mTLS files are not provided.
InternalMTLSCATTL time.Duration `envconfig:"INTERNAL_MTLS_CA_TTL" default:"43800h"`
InternalMTLSLeafTTL time.Duration `envconfig:"INTERNAL_MTLS_LEAF_TTL" default:"720h"`
InternalMTLSLeafRenewBefore time.Duration `envconfig:"INTERNAL_MTLS_LEAF_RENEW_BEFORE" default:"240h"`
InternalMTLSCARenewBefore time.Duration `envconfig:"INTERNAL_MTLS_CA_RENEW_BEFORE" default:"720h"`
InternalMTLSEnrollmentTimeout time.Duration `envconfig:"INTERNAL_MTLS_ENROLLMENT_TIMEOUT" default:"2m"`
// Run-owner checkpointing (Phase 2 B3). The owner persists an in-memory
// state checkpoint whichever comes first of RUN_CHECKPOINT_EVENTS terminal
// transitions or RUN_CHECKPOINT_INTERVAL elapsed. RUN_CHECKPOINT_FULL_EVERY
// is the number of checkpoints between full snapshots (intervening ones are
// deltas); v1 writes full snapshots only, so it is currently advisory.
RunCheckpointEvents int `envconfig:"RUN_CHECKPOINT_EVENTS" default:"100"`
RunCheckpointInterval time.Duration `envconfig:"RUN_CHECKPOINT_INTERVAL" default:"2s"`
RunCheckpointFullEvery int `envconfig:"RUN_CHECKPOINT_FULL_EVERY" default:"10"`
// CAESIUM_RUN_OWNER_IN_MEMORY gates the B3 in-memory advancement path: the
// owner advances the DAG in memory (run.RunState), writes only terminal
// task_runs rows (no per-transition predecessor UPDATEs), and checkpoints for
// fast failover. Default false — when off, completions take the proven
// SQL-advancement path (B2), byte-identical. Requires RUN_OWNER_ENABLED.
RunOwnerInMemory bool `envconfig:"RUN_OWNER_IN_MEMORY" default:"false"`
// Agent-in-the-loop remediation (Phase 0). The whole feature is gated behind
// CAESIUM_AGENT_REMEDIATION_ENABLED — a deployment that never enables it pays
// nothing (the leader-gated incident subscriber and timer sweeper are not
// started). Default false.
AgentRemediationEnabled bool `envconfig:"AGENT_REMEDIATION_ENABLED" default:"false"`
// CAESIUM_AGENT_INCIDENT_COOLDOWN suppresses re-opening an incident for the
// same (job, task, class) key within this window after the previous one
// closed, damping flapping. Default 15m.
AgentIncidentCooldown time.Duration `envconfig:"AGENT_INCIDENT_COOLDOWN" default:"15m"`
// CAESIUM_AGENT_MAX_CONCURRENT_SESSIONS caps globally-active agent sessions,
// enforced by the leader-gated session dispatcher (not per-process, which an
// N-node cluster would multiply). Default 1.
AgentMaxConcurrentSessions int `envconfig:"AGENT_MAX_CONCURRENT_SESSIONS" default:"1"`
// CAESIUM_AGENT_SESSION_TIMEOUT is the wall-clock budget a single agent
// session may run before it is forcibly stopped and marked timed_out.
AgentSessionTimeout time.Duration `envconfig:"AGENT_SESSION_TIMEOUT" default:"10m"`
// CAESIUM_AGENT_DEFAULT_PROFILE optionally names a bootstrap AgentProfile the
// session supervisor launches and whose playbook the triage bundle surfaces.
AgentDefaultProfile string `envconfig:"AGENT_DEFAULT_PROFILE" default:""`
// CAESIUM_AGENT_APPROVAL_REDRIVE_INTERVAL is how often the leader sweeps for
// approved tier-3 actions that were never dispatched (a process death between
// the decision commit and the execute). Default 30s.
AgentApprovalRedriveInterval time.Duration `envconfig:"AGENT_APPROVAL_REDRIVE_INTERVAL" default:"30s"`
// CAESIUM_AGENT_APPROVAL_REDRIVE_GRACE is how long an approved action must
// have sat before the sweep picks it up. It exists so the sweep does not race
// the synchronous dispatch that normally follows a decision; it must
// comfortably exceed one dispatch. Default 2m.
AgentApprovalRedriveGrace time.Duration `envconfig:"AGENT_APPROVAL_REDRIVE_GRACE" default:"2m"`
}
Environment defines the environment variables used by caesium.
func Variables ¶
func Variables() Environment
Variables returns the processed environment variables.
func (Environment) SSOEnabled ¶
func (e Environment) SSOEnabled() bool
SSOEnabled reports whether any SSO provider is configured.
type GitBasicAuth ¶
type GitBasicAuth struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
UsernameRef string `json:"username_ref,omitempty"`
PasswordRef string `json:"password_ref,omitempty"`
}
GitBasicAuth captures HTTPS credential configuration for a Git source.
type GitSSHAuth ¶
type GitSSHAuth struct {
Username string `json:"username,omitempty"`
UsernameRef string `json:"username_ref,omitempty"`
PrivateKey string `json:"private_key,omitempty"`
PrivateKeyRef string `json:"private_key_ref,omitempty"`
Passphrase string `json:"passphrase,omitempty"`
PassphraseRef string `json:"passphrase_ref,omitempty"`
KnownHosts string `json:"known_hosts,omitempty"`
KnownHostsRef string `json:"known_hosts_ref,omitempty"`
KnownHostsPath string `json:"known_hosts_path,omitempty"`
KnownHostsPaths []string `json:"known_hosts_paths,omitempty"`
}
GitSSHAuth captures SSH credential configuration for a Git source.
type GitSourceConfig ¶
type GitSourceConfig struct {
URL string `json:"url"`
Ref string `json:"ref,omitempty"`
Path string `json:"path,omitempty"`
Globs []string `json:"globs,omitempty"`
SourceID string `json:"source_id,omitempty"`
LocalDir string `json:"local_dir,omitempty"`
Interval string `json:"interval,omitempty"`
Once *bool `json:"once,omitempty"`
Auth *GitBasicAuth `json:"auth,omitempty"`
SSH *GitSSHAuth `json:"ssh,omitempty"`
}
GitSourceConfig describes a Git repository used to source job definitions.
func (GitSourceConfig) IntervalDuration ¶
IntervalDuration resolves the per-source interval, falling back to the provided default when unset.
func (GitSourceConfig) IsZero ¶
func (c GitSourceConfig) IsZero() bool
IsZero reports whether the configuration lacks the minimal required fields.
func (GitSourceConfig) OnceValue ¶
func (c GitSourceConfig) OnceValue(defaultOnce bool) bool
OnceValue resolves whether the watcher should execute only once for this source, preferring the per-source value when provided.
type GitSources ¶
type GitSources []GitSourceConfig
GitSources represents a collection of Git sync source configurations parsed from the CAESIUM_JOBDEF_GIT_SOURCES environment variable. The value must be JSON encoded (array of objects matching GitSourceConfig).
func (*GitSources) Decode ¶
func (g *GitSources) Decode(value string) error
Decode implements envconfig.Decoder.