# `Pipette.Pipeline`
[🔗](https://github.com/tommeier/pipette-buildkite-plugin/blob/main/lib/pipette/pipeline.ex#L1)

Pipeline configuration struct.

Holds branches, scopes, groups, triggers, ignore patterns, pipeline-level
config (env, secrets, cache), and force activation rules. Used internally
by the engine — pipeline modules are defined via `use Pipette.DSL` and
converted to this struct by `Pipette.Info.to_pipeline/1`.

## Fields

  * `:branches` — list of `Pipette.Branch` policies controlling activation
    behavior on matching branches
  * `:scopes` — list of `Pipette.Scope` file-to-scope mappings
  * `:groups` — list of `Pipette.Group` step groups (the units of activation)
  * `:triggers` — list of `Pipette.Trigger` downstream pipeline triggers
  * `:ignore` — glob patterns for files that should not activate any group
    (e.g. `["docs/**", "*.md"]`). When all changed files match these
    patterns, the pipeline returns `:noop`
  * `:env` — pipeline-level environment variables (map with atom or string keys)
  * `:secrets` — list of secret names to inject into the pipeline
  * `:cache` — cache configuration (keyword list, e.g. `[paths: ["deps/"]]`)
  * `:force_activate` — map of environment variable names to groups to
    force-activate when the env var is set to `"true"` (e.g.
    `%{"FORCE_DEPLOY" => [:web, :deploy]}`)

# `t`

```elixir
@type t() :: %Pipette.Pipeline{
  __spark_metadata__: term(),
  branches: [Pipette.Branch.t()],
  cache: keyword() | nil,
  env: map() | nil,
  force_activate: %{required(String.t()) =&gt; [atom()] | :all},
  groups: [Pipette.Group.t()],
  ignore: [String.t()],
  scopes: [Pipette.Scope.t()],
  secrets: [String.t()] | nil,
  triggers: [Pipette.Trigger.t()]
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
