Current section
Files
Jump to
Current section
Files
lib/pipette/constructors.ex
defmodule Pipette.Constructors do
@moduledoc """
Convenience constructors for building pipeline structs at runtime.
Use these in `extra_groups` callbacks and tests where you need to
create `Pipette.Step` and `Pipette.Group` structs outside the DSL:
import Pipette.Constructors
def discover_packages(ctx, changed_files) do
[group(:pkg_foo, label: "Foo", key: "pkg-foo", steps: [
step(:test, label: "Test", command: "mix test", key: "pkg-foo-test")
])]
end
These are thin wrappers around `struct!/2` — identical to the
convenience functions that existed in `Pipette.DSL` before v0.4.0.
"""
@doc "Build a `%Pipette.Branch{}` with the given pattern."
@spec branch(String.t(), keyword()) :: Pipette.Branch.t()
def branch(pattern, opts \\ []),
do: struct!(Pipette.Branch, Keyword.put(opts, :pattern, pattern))
@doc "Build a `%Pipette.Scope{}` with the given name."
@spec scope(atom(), keyword()) :: Pipette.Scope.t()
def scope(name, opts \\ []),
do: struct!(Pipette.Scope, Keyword.put(opts, :name, name))
@doc "Build a `%Pipette.Group{}` with the given name."
@spec group(atom(), keyword()) :: Pipette.Group.t()
def group(name, opts \\ []),
do: struct!(Pipette.Group, Keyword.put(opts, :name, name))
@doc "Build a `%Pipette.Step{}` with the given name."
@spec step(atom(), keyword()) :: Pipette.Step.t()
def step(name, opts \\ []),
do: struct!(Pipette.Step, Keyword.put(opts, :name, name))
@doc "Build a `%Pipette.Trigger{}` with the given name."
@spec trigger(atom(), keyword()) :: Pipette.Trigger.t()
def trigger(name, opts \\ []),
do: struct!(Pipette.Trigger, Keyword.put(opts, :name, name))
end