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

Buildkite command step.

Represents a single command step within a group. Steps map directly
to Buildkite command steps and support all standard attributes like
retries, timeouts, concurrency controls, and plugins.

## Fields

  * `:name` (`atom()`) — unique identifier within the parent group
  * `:label` (`String.t() | nil`) — display label in Buildkite UI
  * `:command` (`String.t() | [String.t()] | nil`) — shell command(s) to run
  * `:env` (`map() | nil`) — environment variables for this step
  * `:agents` (`map() | nil`) — agent targeting rules
  * `:plugins` (`list() | nil`) — Buildkite plugins to apply
  * `:secrets` (`[String.t()] | nil`) — secret names to inject
  * `:depends_on` — step-level dependency (atom, tuple, or list)
  * `:timeout_in_minutes` (`pos_integer() | nil`) — step timeout
  * `:concurrency` (`pos_integer() | nil`) — max concurrent jobs
  * `:concurrency_group` (`String.t() | nil`) — concurrency group name
  * `:concurrency_method` (`:ordered | :eager | nil`) — concurrency method
  * `:soft_fail` (`boolean() | list() | nil`) — soft fail configuration
  * `:retry` (`map() | nil`) — retry configuration
  * `:artifact_paths` (`String.t() | [String.t()] | nil`) — artifact paths
  * `:parallelism` (`pos_integer() | nil`) — parallel job count
  * `:priority` (`integer() | nil`) — job priority
  * `:skip` (`boolean() | String.t() | nil`) — skip condition
  * `:cancel_on_build_failing` (`boolean() | nil`) — cancel if build fails
  * `:allow_dependency_failure` (`boolean() | nil`) — run even if deps fail
  * `:only` (`String.t() | [String.t()] | nil`) — branch pattern(s)
    restricting this step to specific branches. The step is excluded from
    the pipeline YAML when the current branch doesn't match.
  * `:branches` (`String.t() | nil`) — branch filter
  * `:if_condition` (`String.t() | nil`) — conditional expression
  * `:matrix` (`list() | map() | nil`) — matrix build configuration
  * `:key` (`String.t() | nil`) — explicit Buildkite step key

## Example

    %Pipette.Step{
      name: :test,
      label: ":elixir: Test",
      command: "mix test",
      timeout_in_minutes: 15,
      retry: %{automatic: [%{exit_status: -1, limit: 2}]}
    }

# `t`

```elixir
@type t() :: %Pipette.Step{
  __identifier__: term(),
  __spark_metadata__: term(),
  agents: map() | nil,
  allow_dependency_failure: boolean() | nil,
  artifact_paths: String.t() | [String.t()] | nil,
  branches: String.t() | nil,
  cancel_on_build_failing: boolean() | nil,
  command: String.t() | [String.t()] | nil,
  concurrency: pos_integer() | nil,
  concurrency_group: String.t() | nil,
  concurrency_method: :ordered | :eager | nil,
  depends_on:
    atom()
    | {atom(), atom()}
    | [atom() | {atom(), atom()}]
    | String.t()
    | [String.t()]
    | nil,
  env: map() | nil,
  if_condition: String.t() | nil,
  key: String.t() | nil,
  label: String.t() | nil,
  matrix: list() | map() | nil,
  name: atom(),
  notify: [map()] | nil,
  only: String.t() | [String.t()] | nil,
  parallelism: pos_integer() | nil,
  plugins: list() | nil,
  priority: integer() | nil,
  retry: map() | nil,
  secrets: [String.t()] | nil,
  skip: boolean() | String.t() | nil,
  soft_fail: boolean() | list() | nil,
  timeout_in_minutes: pos_integer() | nil
}
```

---

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