Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@ func newRootCommand() *cobra.Command {
return fmt.Errorf("%w", err)
}

if err := runtimeContext.AttachResolvedRegistry(); err != nil {
return err
}

// Restart spinner for remaining initialization
if showSpinner {
spinner = ui.NewSpinner()
Expand Down
20 changes: 13 additions & 7 deletions cmd/workflow/activate/activate.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ func New(runtimeContext *runtime.Context) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
handler := newHandler(runtimeContext)

if runtimeContext.ResolvedRegistry != nil {
if err := runtimeContext.ResolvedRegistry.RequireOnChainRegistry("activate"); err != nil {
return err
}
}

inputs, err := handler.ResolveInputs(runtimeContext.Viper)
if err != nil {
return err
Expand Down Expand Up @@ -108,9 +114,9 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) {
return Inputs{
WorkflowName: h.settings.Workflow.UserWorkflowSettings.WorkflowName,
WorkflowOwner: h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress,
DonFamily: h.environmentSet.DonFamily,
WorkflowRegistryContractAddress: h.environmentSet.WorkflowRegistryAddress,
WorkflowRegistryContractChainName: h.environmentSet.WorkflowRegistryChainName,
DonFamily: h.runtimeContext.ResolvedRegistry.DonFamily,
WorkflowRegistryContractAddress: h.runtimeContext.ResolvedRegistry.Address,
WorkflowRegistryContractChainName: h.runtimeContext.ResolvedRegistry.ChainName,
}, nil
}

Expand Down Expand Up @@ -182,10 +188,10 @@ func (h *handler) Execute() error {
switch txOut.Type {
case client.Regular:
ui.Success(fmt.Sprintf("Transaction confirmed: %s", txOut.Hash))
ui.URL(fmt.Sprintf("%s/tx/%s", h.environmentSet.WorkflowRegistryChainExplorerURL, txOut.Hash))
ui.URL(fmt.Sprintf("%s/tx/%s", h.runtimeContext.ResolvedRegistry.ExplorerURL, txOut.Hash))
ui.Line()
ui.Success("Workflow activated successfully")
ui.Dim(fmt.Sprintf(" Contract address: %s", h.environmentSet.WorkflowRegistryAddress))
ui.Dim(fmt.Sprintf(" Contract address: %s", h.runtimeContext.ResolvedRegistry.Address))
ui.Dim(fmt.Sprintf(" Transaction hash: %s", txOut.Hash))
ui.Dim(fmt.Sprintf(" Workflow Name: %s", workflowName))
ui.Dim(fmt.Sprintf(" Workflow ID: %s", hex.EncodeToString(latest.WorkflowId[:])))
Expand All @@ -207,9 +213,9 @@ func (h *handler) Execute() error {
ui.Line()

case client.Changeset:
chainSelector, err := settings.GetChainSelectorByChainName(h.environmentSet.WorkflowRegistryChainName)
chainSelector, err := settings.GetChainSelectorByChainName(h.runtimeContext.ResolvedRegistry.ChainName)
if err != nil {
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.environmentSet.WorkflowRegistryChainName, err)
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.runtimeContext.ResolvedRegistry.ChainName, err)
}
mcmsConfig, err := settings.GetMCMSConfig(h.settings, chainSelector)
if err != nil {
Expand Down
16 changes: 11 additions & 5 deletions cmd/workflow/delete/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ func New(runtimeContext *runtime.Context) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
handler := newHandler(runtimeContext, cmd.InOrStdin())

if runtimeContext.ResolvedRegistry != nil {
if err := runtimeContext.ResolvedRegistry.RequireOnChainRegistry("delete"); err != nil {
return err
}
}

inputs, err := handler.ResolveInputs(runtimeContext.Viper)
if err != nil {
return err
Expand Down Expand Up @@ -114,8 +120,8 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) {
WorkflowName: h.settings.Workflow.UserWorkflowSettings.WorkflowName,
WorkflowOwner: h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress,
SkipConfirmation: v.GetBool(settings.Flags.SkipConfirmation.Name),
WorkflowRegistryContractChainName: h.environmentSet.WorkflowRegistryChainName,
WorkflowRegistryContractAddress: h.environmentSet.WorkflowRegistryAddress,
WorkflowRegistryContractChainName: h.runtimeContext.ResolvedRegistry.ChainName,
WorkflowRegistryContractAddress: h.runtimeContext.ResolvedRegistry.Address,
}, nil
}

Expand Down Expand Up @@ -193,7 +199,7 @@ func (h *handler) Execute() error {
switch txOut.Type {
case client.Regular:
ui.Success("Transaction confirmed")
ui.URL(fmt.Sprintf("%s/tx/%s", h.environmentSet.WorkflowRegistryChainExplorerURL, txOut.Hash))
ui.URL(fmt.Sprintf("%s/tx/%s", h.runtimeContext.ResolvedRegistry.ExplorerURL, txOut.Hash))
ui.Success(fmt.Sprintf("Deleted workflow ID: %s", hex.EncodeToString(wf.WorkflowId[:])))

case client.Raw:
Expand All @@ -212,9 +218,9 @@ func (h *handler) Execute() error {
ui.Line()

case client.Changeset:
chainSelector, err := settings.GetChainSelectorByChainName(h.environmentSet.WorkflowRegistryChainName)
chainSelector, err := settings.GetChainSelectorByChainName(h.runtimeContext.ResolvedRegistry.ChainName)
if err != nil {
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.environmentSet.WorkflowRegistryChainName, err)
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.runtimeContext.ResolvedRegistry.ChainName, err)
}
mcmsConfig, err := settings.GetMCMSConfig(h.settings, chainSelector)
if err != nil {
Expand Down
6 changes: 3 additions & 3 deletions cmd/workflow/deploy/artifacts.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ func (h *handler) uploadArtifacts() error {

gql := graphqlclient.New(h.credentials, h.environmentSet, h.log)

chainSelector, err := settings.GetChainSelectorByChainName(h.environmentSet.WorkflowRegistryChainName)
chainSelector, err := settings.GetChainSelectorByChainName(h.runtimeContext.ResolvedRegistry.ChainName)
if err != nil {
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.environmentSet.WorkflowRegistryChainName, err)
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.runtimeContext.ResolvedRegistry.ChainName, err)
}

storageClient := storageclient.New(gql, h.environmentSet.WorkflowRegistryAddress, h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress, chainSelector, h.log)
storageClient := storageclient.New(gql, h.runtimeContext.ResolvedRegistry.Address, h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress, chainSelector, h.log)
if h.settings.StorageSettings.CREStorage.ServiceTimeout != 0 {
storageClient.SetServiceTimeout(h.settings.StorageSettings.CREStorage.ServiceTimeout)
}
Expand Down
1 change: 1 addition & 0 deletions cmd/workflow/deploy/compile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ func createTestSettings(workflowOwnerAddress, workflowOwnerType, workflowName, w
WorkflowOwnerAddress string `mapstructure:"workflow-owner-address" yaml:"workflow-owner-address"`
WorkflowOwnerType string `mapstructure:"workflow-owner-type" yaml:"workflow-owner-type"`
WorkflowName string `mapstructure:"workflow-name" yaml:"workflow-name"`
DeploymentRegistry string `mapstructure:"deployment-registry" yaml:"deployment-registry"`
}{
WorkflowOwnerAddress: workflowOwnerAddress,
WorkflowOwnerType: workflowOwnerType,
Expand Down
12 changes: 9 additions & 3 deletions cmd/workflow/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@ func New(runtimeContext *runtime.Context) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
h := newHandler(runtimeContext, cmd.InOrStdin())

if runtimeContext.ResolvedRegistry != nil {
if err := runtimeContext.ResolvedRegistry.RequireOnChainRegistry("deploy"); err != nil {
return err
}
}

inputs, err := h.ResolveInputs(runtimeContext.Viper)
if err != nil {
return err
Expand Down Expand Up @@ -173,7 +179,7 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) {
WorkflowOwner: h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress,
WorkflowTag: workflowTag,
ConfigURL: configURL,
DonFamily: h.environmentSet.DonFamily,
DonFamily: h.runtimeContext.ResolvedRegistry.DonFamily,

WorkflowPath: h.settings.Workflow.WorkflowArtifactSettings.WorkflowPath,
KeepAlive: false,
Expand All @@ -182,8 +188,8 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) {
OutputPath: v.GetString("output"),
WasmPath: v.GetString("wasm"),

WorkflowRegistryContractChainName: h.environmentSet.WorkflowRegistryChainName,
WorkflowRegistryContractAddress: h.environmentSet.WorkflowRegistryAddress,
WorkflowRegistryContractChainName: h.runtimeContext.ResolvedRegistry.ChainName,
WorkflowRegistryContractAddress: h.runtimeContext.ResolvedRegistry.Address,
OwnerLabel: v.GetString("owner-label"),
SkipConfirmation: v.GetBool(settings.Flags.SkipConfirmation.Name),
SkipTypeChecks: v.GetBool(cmdcommon.SkipTypeChecksCLIFlag),
Expand Down
8 changes: 4 additions & 4 deletions cmd/workflow/deploy/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ func (h *handler) handleUpsert(params client.RegisterWorkflowV2Parameters) error
switch txOut.Type {
case client.Regular:
ui.Success("Transaction confirmed")
ui.URL(fmt.Sprintf("%s/tx/%s", h.environmentSet.WorkflowRegistryChainExplorerURL, txOut.Hash))
ui.URL(fmt.Sprintf("%s/tx/%s", h.runtimeContext.ResolvedRegistry.ExplorerURL, txOut.Hash))
ui.Line()
ui.Success("Workflow deployed successfully")
ui.Line()
ui.Bold("Details:")
ui.Dim(fmt.Sprintf(" Contract address: %s", h.environmentSet.WorkflowRegistryAddress))
ui.Dim(fmt.Sprintf(" Contract address: %s", h.runtimeContext.ResolvedRegistry.Address))
ui.Dim(fmt.Sprintf(" Transaction hash: %s", txOut.Hash))
ui.Dim(fmt.Sprintf(" Workflow Name: %s", workflowName))
ui.Dim(fmt.Sprintf(" Workflow ID: %s", h.workflowArtifact.WorkflowID))
Expand All @@ -99,9 +99,9 @@ func (h *handler) handleUpsert(params client.RegisterWorkflowV2Parameters) error
ui.Line()

case client.Changeset:
chainSelector, err := settings.GetChainSelectorByChainName(h.environmentSet.WorkflowRegistryChainName)
chainSelector, err := settings.GetChainSelectorByChainName(h.runtimeContext.ResolvedRegistry.ChainName)
if err != nil {
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.environmentSet.WorkflowRegistryChainName, err)
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.runtimeContext.ResolvedRegistry.ChainName, err)
}
mcmsConfig, err := settings.GetMCMSConfig(h.settings, chainSelector)
if err != nil {
Expand Down
18 changes: 12 additions & 6 deletions cmd/workflow/pause/pause.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ func New(runtimeContext *runtime.Context) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
handler := newHandler(runtimeContext)

if runtimeContext.ResolvedRegistry != nil {
if err := runtimeContext.ResolvedRegistry.RequireOnChainRegistry("pause"); err != nil {
return err
}
}

inputs, err := handler.ResolveInputs(runtimeContext.Viper)
if err != nil {
return err
Expand Down Expand Up @@ -107,8 +113,8 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) {
return Inputs{
WorkflowName: h.settings.Workflow.UserWorkflowSettings.WorkflowName,
WorkflowOwner: h.settings.Workflow.UserWorkflowSettings.WorkflowOwnerAddress,
WorkflowRegistryContractChainName: h.environmentSet.WorkflowRegistryChainName,
WorkflowRegistryContractAddress: h.environmentSet.WorkflowRegistryAddress,
WorkflowRegistryContractChainName: h.runtimeContext.ResolvedRegistry.ChainName,
WorkflowRegistryContractAddress: h.runtimeContext.ResolvedRegistry.Address,
}, nil
}

Expand Down Expand Up @@ -176,11 +182,11 @@ func (h *handler) Execute() error {
switch txOut.Type {
case client.Regular:
ui.Success("Transaction confirmed")
ui.URL(fmt.Sprintf("%s/tx/%s", h.environmentSet.WorkflowRegistryChainExplorerURL, txOut.Hash))
ui.URL(fmt.Sprintf("%s/tx/%s", h.runtimeContext.ResolvedRegistry.ExplorerURL, txOut.Hash))
ui.Success("Workflows paused successfully")
ui.Line()
ui.Bold("Details:")
ui.Dim(fmt.Sprintf(" Contract address: %s", h.environmentSet.WorkflowRegistryAddress))
ui.Dim(fmt.Sprintf(" Contract address: %s", h.runtimeContext.ResolvedRegistry.Address))
ui.Dim(fmt.Sprintf(" Transaction hash: %s", txOut.Hash))
ui.Dim(fmt.Sprintf(" Workflow Name: %s", workflowName))
for _, w := range activeWorkflowIDs {
Expand All @@ -204,9 +210,9 @@ func (h *handler) Execute() error {
ui.Line()

case client.Changeset:
chainSelector, err := settings.GetChainSelectorByChainName(h.environmentSet.WorkflowRegistryChainName)
chainSelector, err := settings.GetChainSelectorByChainName(h.runtimeContext.ResolvedRegistry.ChainName)
if err != nil {
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.environmentSet.WorkflowRegistryChainName, err)
return fmt.Errorf("failed to get chain selector for chain %q: %w", h.runtimeContext.ResolvedRegistry.ChainName, err)
}
mcmsConfig, err := settings.GetMCMSConfig(h.settings, chainSelector)
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions cmd/workflow/simulate/simulate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ func createSimulateTestSettings(workflowName, workflowPath, configPath string) *
WorkflowOwnerAddress string `mapstructure:"workflow-owner-address" yaml:"workflow-owner-address"`
WorkflowOwnerType string `mapstructure:"workflow-owner-type" yaml:"workflow-owner-type"`
WorkflowName string `mapstructure:"workflow-name" yaml:"workflow-name"`
DeploymentRegistry string `mapstructure:"deployment-registry" yaml:"deployment-registry"`
}{
WorkflowName: workflowName,
},
Expand Down
35 changes: 27 additions & 8 deletions internal/runtime/runtime_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ var (
)

type Context struct {
Logger *zerolog.Logger
Viper *viper.Viper
ClientFactory client.Factory
Settings *settings.Settings
Credentials *credentials.Credentials
EnvironmentSet *environments.EnvironmentSet
TenantContext *tenantctx.EnvironmentContext
Workflow WorkflowRuntime
Logger *zerolog.Logger
Viper *viper.Viper
ClientFactory client.Factory
Settings *settings.Settings
Credentials *credentials.Credentials
EnvironmentSet *environments.EnvironmentSet
TenantContext *tenantctx.EnvironmentContext
ResolvedRegistry *settings.ResolvedRegistry
Workflow WorkflowRuntime
}

type WorkflowRuntime struct {
Expand Down Expand Up @@ -111,6 +112,24 @@ func (ctx *Context) AttachTenantContext(validationCtx context.Context) error {
return nil
}

// AttachResolvedRegistry resolves the deployment-registry from workflow
// settings against the tenant context registries. Must be called after
// AttachSettings and AttachTenantContext.
func (ctx *Context) AttachResolvedRegistry() error {
deploymentRegistry := ""
if ctx.Settings != nil {
deploymentRegistry = ctx.Settings.Workflow.UserWorkflowSettings.DeploymentRegistry
}

resolved, err := settings.ResolveRegistry(deploymentRegistry, ctx.TenantContext, ctx.EnvironmentSet)
if err != nil {
return fmt.Errorf("failed to resolve deployment registry: %w", err)
}

ctx.ResolvedRegistry = resolved
return nil
}

func (ctx *Context) AttachEnvironmentSet() error {
var err error

Expand Down
Loading
Loading