github.com/sleungcy/cli@v7.1.0+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 operations. 13 type Actor struct { 14 SharedActor SharedActor 15 V7Actor V7Actor 16 17 PreparePushPlanSequence []UpdatePushPlanFunc 18 ChangeApplicationSequence func(plan PushPlan) []ChangeApplicationFunc 19 TransformManifestSequence []HandleFlagOverrideFunc 20 21 startWithProtocol *regexp.Regexp 22 urlValidator *regexp.Regexp 23 } 24 25 const ProtocolRegexp = "^https?://|^tcp://" 26 const URLRegexp = "^(?:https?://|tcp://)?(?:(?:[\\w-]+\\.)|(?:[*]\\.))+\\w+(?:\\:\\d+)?(?:/.*)*(?:\\.\\w+)?$" 27 28 // NewActor returns a new actor. 29 func NewActor(v3Actor V7Actor, sharedActor SharedActor) *Actor { 30 actor := &Actor{ 31 SharedActor: sharedActor, 32 V7Actor: v3Actor, 33 34 startWithProtocol: regexp.MustCompile(ProtocolRegexp), 35 urlValidator: regexp.MustCompile(URLRegexp), 36 } 37 38 actor.TransformManifestSequence = []HandleFlagOverrideFunc{ 39 // app name override must come first, so it can trim the manifest 40 // from multiple apps down to just one 41 HandleAppNameOverride, 42 43 HandleInstancesOverride, 44 HandleStartCommandOverride, 45 46 // Type must come before endpoint because endpoint validates against type 47 HandleHealthCheckTypeOverride, 48 HandleHealthCheckEndpointOverride, 49 50 HandleHealthCheckTimeoutOverride, 51 HandleMemoryOverride, 52 HandleDiskOverride, 53 HandleNoRouteOverride, 54 HandleRandomRouteOverride, 55 HandleTaskOverride, 56 57 // this must come after all routing related transforms 58 HandleDefaultRouteOverride, 59 60 HandleDockerImageOverride, 61 HandleDockerUsernameOverride, 62 HandleStackOverride, 63 HandleBuildpacksOverride, 64 HandleStrategyOverride, 65 HandleAppPathOverride, 66 HandleDropletPathOverride, 67 } 68 69 actor.PreparePushPlanSequence = []UpdatePushPlanFunc{ 70 SetDefaultBitsPathForPushPlan, 71 SetupDropletPathForPushPlan, 72 actor.SetupAllResourcesForPushPlan, 73 SetupDeploymentStrategyForPushPlan, 74 SetupNoStartForPushPlan, 75 SetupNoWaitForPushPlan, 76 SetupTaskAppForPushPlan, 77 } 78 79 actor.ChangeApplicationSequence = func(plan PushPlan) []ChangeApplicationFunc { 80 var sequence []ChangeApplicationFunc 81 sequence = append(sequence, actor.GetPrepareApplicationSourceSequence(plan)...) 82 sequence = append(sequence, actor.GetRuntimeSequence(plan)...) 83 return sequence 84 } 85 86 return actor 87 }