Documentation
¶
Overview ¶
SPDX-FileCopyrightText: 2026 Forkbomb BV
SPDX-License-Identifier: AGPL-3.0-or-later
SPDX-FileCopyrightText: 2025 Forkbomb BV
SPDX-License-Identifier: AGPL-3.0-or-later
SPDX-FileCopyrightText: 2025 Forkbomb BV
SPDX-License-Identifier: AGPL-3.0-or-later
SPDX-FileCopyrightText: 2025 Forkbomb BV
SPDX-License-Identifier: AGPL-3.0-or-later
Index ¶
- Constants
- func ApplyFixture(workflow *WorkflowDefinition) error
- func ApplyFunction(value any, funcName string) (any, error)
- func ExpressionRefs(s string) []string
- func LinkedStepBlocks(steps []StepDefinition) [][2]int
- func LinkedStepsBlockID(pipelineWorkflowID, firstStepID string) string
- func MergeConfigs(global, step map[string]any) map[string]any
- func ParseEntityIDs(yamlStr string) (workflowengine.EntityIDs, error)
- func ParsePipeline(expr string) (initialValue string, functions []string, err error)
- func ReferencedStepIDs(inputs StepInputs) (ids []string, all bool)
- func ReferencedStepOutputs(def *WorkflowDefinition, stepID string) []string
- func RequiredStepIDs(inputs StepInputs) []string
- func ResolveExpressions(val any, ctx map[string]any) (any, error)
- func ResolveInputs(step *StepDefinition, globalCfg map[string]any, ctx map[string]any) error
- func ResolvePipeline(expr string, ctx map[string]any) (any, error)
- func ValidRunType(value string) bool
- func ValidateLinkedSteps(def *WorkflowDefinition) error
- func ValidateStepIDs(def *WorkflowDefinition) error
- type ActivityOptionsConfig
- type FinallyDefinition
- type FinallyStepDefinition
- type OnErrorStepDefinition
- type OnSuccessStepDefinition
- type PipelineCancellationPolicy
- type RetryPolicy
- type RuntimeConfig
- type StepDefinition
- type StepInputs
- type StepSpec
- type WorkflowDefinition
- type WorkflowOptions
Constants ¶
const ( DefaultIssuerURL = "https://issuer-backend.eudiw.dev" DefaultVerifierURL = "https://capture-wallet.credimi.io" DefaultLogChecker = "eudiw" )
const ( // RunTypeMemoKey carries the pipeline run type through Temporal memo. RunTypeMemoKey = "pipeline_run_type" // RunTypeManual marks runs started directly by a user. RunTypeManual = "manual" // RunTypeScheduled marks runs started by a Temporal schedule. RunTypeScheduled = "scheduled" // RunTypeCI marks runs started by CI integrations. RunTypeCI = "CI" )
const AllStepOutputs = "*"
AllStepOutputs in a ReferencedStepOutputs result means the whole outputs are referenced.
const LinkedStepsWorkflowName = "Run linked steps"
LinkedStepsWorkflowName is the Temporal workflow type that runs a block of linked steps.
const PipelineCancellationPolicySignal = "pipeline-cancellation-policy"
Variables ¶
This section is empty.
Functions ¶
func ApplyFixture ¶
func ApplyFixture(workflow *WorkflowDefinition) error
ApplyFixture substitutes service-profile values throughout a workflow. Keeping this at the parsed workflow boundary lets one FCAF scenario run against multiple issuer/verifier fixtures without duplicating the scenario.
func ExpressionRefs ¶
ExpressionRefs returns the trimmed bodies of every ${{ ... }} expression in s.
func LinkedStepBlocks ¶ added in v1.326.0
func LinkedStepBlocks(steps []StepDefinition) [][2]int
LinkedStepBlocks returns the inclusive [start, end] index ranges of the blocks of at least two steps formed by consecutive linked_to fields.
func LinkedStepsBlockID ¶ added in v1.329.1
LinkedStepsBlockID is the workflow ID of the linked steps block that starts with firstStepID in the pipeline run pipelineWorkflowID. The engine starts the block with it, and readers of the run's history rebuild it to recognize the block.
func MergeConfigs ¶
MergeConfigs merges global config with step-level config. Step keys win, except server-owned keys (workflowengine.IsServerOwnedConfigKey), which keep their global value.
func ParseEntityIDs ¶
func ParseEntityIDs(yamlStr string) (workflowengine.EntityIDs, error)
func ParsePipeline ¶
ParsePipeline parses a pipeline expression in the form "value | function1 | function2", returning the initial value and the remaining pipeline segments as function names.
func ReferencedStepIDs ¶ added in v1.326.0
func ReferencedStepIDs(inputs StepInputs) (ids []string, all bool)
ReferencedStepIDs returns the IDs of the steps whose outputs the step inputs reference, sorted and unique, `optional` references included. all reports a bare `pipeline_output` reference, which needs every step output.
func ReferencedStepOutputs ¶
func ReferencedStepOutputs(def *WorkflowDefinition, stepID string) []string
ReferencedStepOutputs returns the keys of stepID's outputs that expressions anywhere in def reference, sorted and unique. It returns AllStepOutputs when an expression references the step's outputs as a whole or the aggregated pipeline_output, and an empty result when nothing references them.
func RequiredStepIDs ¶
func RequiredStepIDs(inputs StepInputs) []string
RequiredStepIDs returns the IDs of the steps whose outputs the step inputs need, sorted and unique. A reference counts when its expression does not start with the `optional` function; `pipeline_output.<id>` references count for <id>.
func ResolveExpressions ¶
resolveExpressions recursively replaces ${{ ... }} expressions in a value
func ResolveInputs ¶
ResolveInputs builds activity input for a step
func ValidRunType ¶
ValidRunType reports whether value is accepted by the pipeline_results type field.
func ValidateLinkedSteps ¶ added in v1.326.0
func ValidateLinkedSteps(def *WorkflowDefinition) error
ValidateLinkedSteps checks the linked_to fields of the main steps: each names the immediately previous step, and the steps of a block share continue_on_error, carry no hooks, and only the last one sets a retry policy, which drives the block's attempts.
func ValidateStepIDs ¶
func ValidateStepIDs(def *WorkflowDefinition) error
ValidateStepIDs checks that main step IDs identify a single step each, so that a step_id recorded in the run's history maps to exactly one main step. Hook and finally step IDs may repeat among themselves but must not reuse a main step ID. Empty IDs are ignored.
Types ¶
type ActivityOptionsConfig ¶
type ActivityOptionsConfig struct {
ScheduleToCloseTimeout string `yaml:"schedule_to_close_timeout,omitempty" json:"schedule_to_close_timeout,omitempty"` //nolint
StartToCloseTimeout string `yaml:"start_to_close_timeout,omitempty" json:"start_to_close_timeout,omitempty"`
HeartbeatTimeout string `yaml:"heartbeat_timeout,omitempty" json:"heartbeat_timeout,omitempty"`
RetryPolicy RetryPolicy `yaml:"retry_policy,omitempty" json:"retry_policy,omitempty,omitzero"`
}
type FinallyDefinition ¶
type FinallyDefinition struct {
Always []FinallyStepDefinition `yaml:"always,omitempty" json:"always,omitempty"`
OnSuccess []FinallyStepDefinition `yaml:"on_success,omitempty" json:"on_success,omitempty"`
OnFailure []FinallyStepDefinition `yaml:"on_failure,omitempty" json:"on_failure,omitempty"`
}
func (FinallyDefinition) AllSteps ¶
func (f FinallyDefinition) AllSteps() []FinallyStepDefinition
func (FinallyDefinition) IsZero ¶
func (f FinallyDefinition) IsZero() bool
func (*FinallyDefinition) UnmarshalJSON ¶
func (f *FinallyDefinition) UnmarshalJSON(data []byte) error
func (*FinallyDefinition) UnmarshalYAML ¶
func (f *FinallyDefinition) UnmarshalYAML(value *yaml.Node) error
type FinallyStepDefinition ¶
type FinallyStepDefinition struct {
StepSpec `yaml:",inline" json:",inline"`
}
type OnErrorStepDefinition ¶
type OnErrorStepDefinition struct {
StepSpec `yaml:",inline" json:",inline"`
}
type OnSuccessStepDefinition ¶
type OnSuccessStepDefinition struct {
StepSpec `yaml:",inline" json:",inline"`
}
type RetryPolicy ¶
type RetryPolicy struct {
MaximumAttempts int32 `yaml:"maximum_attempts,omitempty" json:"maximum_attempts,omitempty"`
InitialInterval string `yaml:"initial_interval,omitempty" json:"initial_interval,omitempty"`
MaximumInterval string `yaml:"maximum_interval,omitempty" json:"maximum_interval,omitempty"`
BackoffCoefficient float64 `yaml:"backoff_coefficient,omitempty" json:"backoff_coefficient,omitempty"`
}
type RuntimeConfig ¶
type RuntimeConfig struct {
Fixture map[string]string `yaml:"fixture,omitempty" json:"fixture,omitempty"`
Schedule struct {
Interval *time.Duration `yaml:"interval,omitempty" json:"interval,omitempty"`
} `yaml:"schedule,omitempty" json:"schedule,omitempty,omitzero"`
// GlobalDeviceID is retained as an internal Go field while callers are migrated;
// the serialized pipeline contract is exclusively global_device_id.
GlobalDeviceID string `yaml:"global_device_id,omitempty" json:"global_device_id,omitempty"`
DisableAndroidPlayStore bool `yaml:"disable_android_play_store,omitempty" json:"disable_android_play_store,omitempty"`
// NoVideo skips the device screen recording for runs that would outlast the
// recording time limit anyway; the device log and a final screenshot are kept.
NoVideo bool `yaml:"no_video,omitempty" json:"no_video,omitempty"`
Debug bool `yaml:"debug,omitempty" json:"debug,omitempty"`
Temporal struct {
ExecutionTimeout string `yaml:"execution_timeout,omitempty" json:"execution_timeout,omitempty"`
ActivityOptions ActivityOptionsConfig `yaml:"activity_options,omitempty" json:"activity_options,omitempty,omitzero"`
} `yaml:"temporal,omitempty" json:"temporal,omitempty,omitzero"`
}
type StepDefinition ¶
type StepDefinition struct {
StepSpec ` yaml:",inline" json:",inline"`
ContinueOnError bool `yaml:"continue_on_error,omitempty" json:"continue_on_error,omitempty"`
// LinkedTo names the immediately previous main step. Consecutive linked steps form a
// block that runs as one Linked Steps Workflow, retried as a whole by Temporal.
LinkedTo string `yaml:"linked_to,omitempty" json:"linked_to,omitempty"`
OnError []*OnErrorStepDefinition `yaml:"on_error,omitempty" json:"on_error,omitempty"`
OnSuccess []*OnSuccessStepDefinition `yaml:"on_success,omitempty" json:"on_success,omitempty"`
}
type StepInputs ¶
type StepInputs struct {
Config map[string]any `yaml:"config,omitempty" json:"config,omitempty"`
Payload map[string]any `yaml:"payload,omitempty" json:"payload,omitempty"`
}
func (*StepInputs) UnmarshalJSON ¶
func (s *StepInputs) UnmarshalJSON(data []byte) error
func (*StepInputs) UnmarshalYAML ¶
func (s *StepInputs) UnmarshalYAML(value *yaml.Node) error
type StepSpec ¶
type StepSpec struct {
ID string `yaml:"id" json:"id"`
Use string `yaml:"use" json:"use"`
With StepInputs `yaml:"with" json:"with"`
ActivityOptions *ActivityOptionsConfig `yaml:"activity_options,omitempty" json:"activity_options,omitempty"`
Metadata map[string]any `yaml:"metadata,omitempty" json:"metadata,omitempty"`
}
type WorkflowDefinition ¶
type WorkflowDefinition struct {
Version string `yaml:"version,omitempty" json:"version,omitempty"`
Name string `yaml:"name" json:"name"`
Runtime RuntimeConfig `yaml:"runtime,omitempty" json:"runtime,omitempty,omitzero"`
Config map[string]any `yaml:"config,omitempty" json:"config,omitempty"`
Steps []StepDefinition `yaml:"steps,omitempty" json:"steps,omitempty"`
Finally FinallyDefinition `yaml:"finally,omitempty" json:"finally,omitempty,omitzero"`
}
Struct-typed fields carry omitzero next to omitempty: encoding/json ignores omitempty on structs, so without omitzero every serialized definition repeats empty objects. omitempty stays for the YAML encoder and the schema generator, which read it as "optional".
func ParseWorkflow ¶
func ParseWorkflow(yamlStr string) (*WorkflowDefinition, error)
ParseWorkflow parses YAML string into Workflow struct
type WorkflowOptions ¶
type WorkflowOptions struct {
Options client.StartWorkflowOptions `json:"options"`
Timeout time.Duration `json:"timeout,omitempty"`
ActivityOptions workflow.ActivityOptions `json:"activityOptions"`
}