Skip to content

appsettings.yaml schema

Two files. appsettings.yaml (committed) holds defaults and non-secret config. secrets/appsettings.secrets.yaml (gitignored) holds tokens, passwords, and anything else you don't want in source control.

The second file is loaded on top of the first if it exists — overrides win.

Application

Application:
  rulesFileName: rules.yaml         # path to the rules file, relative to cwd
  maintenanceTeam: ""               # comma-separated emails — see Redirector
  supervisors: ""                   # comma-separated emails — see Redirector
  subjectPrefix: ""                 # prepended to every email subject (e.g. "[PREESTA] ")

Jira

Jira:
  rootUri: https://yourcompany.atlassian.net/    # required
  apiToken: "ATATT3xFf..."                       # preferred for Cloud + Server 9.x
  # userName: "you@example.com"                  # Server fallback
  # password: "..."
  maxResults: 300                                # per-search ceiling

If apiToken is set, Preesta authenticates via Basic ApiToken (Atlassian's Cloud convention). Otherwise falls back to userName:password.

Linear

Linear:
  apiKey: "lin_api_..."         # required to enable Linear pipeline
  workspace: "your-slug"        # used for "Open in Linear →" links (viewId mode only)

GitHub

Github:
  token: "ghp_..."     # required to enable GitHub pipeline

Scopes needed on the PAT: repo (or public_repo) + user:email (or read:user). See GitHub tracker page.

GitLab

Gitlab:
  token: "glpat-..."                                   # required
  apiBase: "https://gitlab.example.com/api/graphql"    # optional, defaults to gitlab.com

Shortcut

Shortcut:
  apiToken: "sct_rw_workspace_..."   # required; sct_rw_ for write, sct_ro_ for read-only

SMTP

Smtp:
  Host:         smtp.gmail.com  # required
  From:         you@example.com # required
  User:         you@example.com # optional pair with Password (skip both for unauth relays)
  Password:     "app-password"
  Port:         0               # optional; 0 = auto-pick by SecurityMode
  SecurityMode: Auto            # optional; Auto|None|SslOnConnect|StartTls|StartTlsWhenAvailable

Telegram

Telegram:
  botToken: "8640...:AAEV..."    # required to enable Telegram pipeline

Slack

Slack:
  botToken: "xoxb-..."           # required to enable Slack pipeline

Logger

Serilog configuration block — see Serilog.Settings.Configuration for the schema. Default in appsettings.yaml writes to Console with a literate ANSI theme; production deployments typically add a file sink or Sentry sink.

Pipeline gating

A tracker pipeline is registered in DI only if its required credentials are set. Missing credentials silently disable the pipeline — no error, no warning, no log noise. This is by design: a single deployment commonly exposes only one or two trackers, and the rest shouldn't generate noise.

The gating rules:

Pipeline Required
Jql (Jira) Jira:rootUri + (Jira:apiToken or Jira:userName + Jira:password)
Release same as Jira
Linear Linear:apiKey
Github Github:token
Gitlab Gitlab:token
Shortcut Shortcut:apiToken
Email (SMTP) Smtp: section present
Telegram Telegram:botToken
Slack Slack:botToken

Validation refuses to start if all three delivery channels (Smtp, Telegram, Slack) are absent — rules without any delivery channel match issues but have nowhere to send them, which is always a misconfiguration.