github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7pushaction/actor.go (about)

     1  // Package v7pushaction contains the business logic for orchestrating a V2 app
     2  // push.
     3  package v7pushaction
     4  
     5  import (
     6  	"regexp"
     7  )
     8  
     9  // Warnings is a list of warnings returned back from the cloud controller
    10  type Warnings []string
    11  
    12  // Actor handles all business logic for Cloud Controller v2 operations.
    13  type Actor struct {
    14  	SharedActor SharedActor
    15  	V2Actor     V2Actor
    16  	V7Actor     V7Actor
    17  
    18  	PushPlanFuncs []UpdatePushPlanFunc
    19  
    20  	ChangeApplicationFuncs []ChangeApplicationFunc
    21  	StartFuncs             []ChangeApplicationFunc
    22  	NoStartFuncs           []ChangeApplicationFunc
    23  
    24  	startWithProtocol *regexp.Regexp
    25  	urlValidator      *regexp.Regexp
    26  }
    27  
    28  const ProtocolRegexp = "^https?://|^tcp://"
    29  const URLRegexp = "^(?:https?://|tcp://)?(?:(?:[\\w-]+\\.)|(?:[*]\\.))+\\w+(?:\\:\\d+)?(?:/.*)*(?:\\.\\w+)?$"
    30  
    31  // NewActor returns a new actor.
    32  func NewActor(v2Actor V2Actor, v3Actor V7Actor, sharedActor SharedActor) *Actor {
    33  	actor := &Actor{
    34  		SharedActor: sharedActor,
    35  		V2Actor:     v2Actor,
    36  		V7Actor:     v3Actor,
    37  
    38  		startWithProtocol: regexp.MustCompile(ProtocolRegexp),
    39  		urlValidator:      regexp.MustCompile(URLRegexp),
    40  	}
    41  
    42  	actor.PushPlanFuncs = []UpdatePushPlanFunc{
    43  		SetupApplicationForPushPlan,
    44  		SetupDockerImageCredentialsForPushPlan,
    45  		SetupBitsPathForPushPlan,
    46  		actor.SetupAllResourcesForPushPlan,
    47  		SetupNoStartForPushPlan,
    48  		SetupSkipRouteCreationForPushPlan,
    49  		SetupScaleWebProcessForPushPlan,
    50  		SetupUpdateWebProcessForPushPlan,
    51  	}
    52  
    53  	actor.ChangeApplicationFuncs = []ChangeApplicationFunc{
    54  		actor.UpdateApplication,
    55  		actor.UpdateRoutesForApplication,
    56  		actor.ScaleWebProcessForApplication,
    57  		actor.UpdateWebProcessForApplication,
    58  		actor.CreateBitsPackageForApplication,
    59  		actor.CreateDockerPackageForApplication,
    60  	}
    61  
    62  	actor.StartFuncs = []ChangeApplicationFunc{
    63  		actor.StagePackageForApplication,
    64  		actor.SetDropletForApplication,
    65  	}
    66  
    67  	actor.NoStartFuncs = []ChangeApplicationFunc{
    68  		actor.StopApplication,
    69  	}
    70  
    71  	return actor
    72  }