@@ -45,6 +45,7 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
45
45
raise InvalidPackage . new ( 'Cannot stage package whose state is not ready.' ) if package . state != PackageModel ::READY_STATE
46
46
47
47
requested_buildpacks_disabled! ( lifecycle )
48
+ validate_stack! ( lifecycle , package )
48
49
49
50
staging_details = get_staging_details ( package , lifecycle )
50
51
staging_details . start_after_staging = start_after_staging
@@ -74,11 +75,13 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
74
75
75
76
Repositories ::AppUsageEventRepository . new . create_from_build ( build , 'STAGING_STARTED' )
76
77
app = package . app
77
- Repositories ::BuildEventRepository . record_build_create ( build ,
78
- @user_audit_info ,
79
- app . name ,
80
- app . space_guid ,
81
- app . organization_guid )
78
+ Repositories ::BuildEventRepository . record_build_create (
79
+ build ,
80
+ @user_audit_info ,
81
+ app . name ,
82
+ app . space_guid ,
83
+ app . organization_guid
84
+ )
82
85
end
83
86
84
87
logger . info ( "build created: #{ build . guid } " )
@@ -93,6 +96,22 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
93
96
94
97
private
95
98
99
+ def validate_stack! ( lifecycle , package )
100
+ return unless lifecycle . type == Lifecycles ::BUILDPACK
101
+
102
+ stack = Stack . find ( name : lifecycle . staging_stack )
103
+ return unless stack
104
+
105
+ case stack . state
106
+ when 'DEPRECATED'
107
+ logger . warn ( "Stack '#{ stack . name } ' is deprecated. #{ stack . description } " )
108
+ when 'LOCKED'
109
+ raise CloudController ::Errors ::ApiError . new_from_details ( 'StackLocked' , stack . name , stack . description ) if package . app . processes . empty?
110
+ when 'DISABLED'
111
+ raise CloudController ::Errors ::ApiError . new_from_details ( 'StackDisabled' , stack . name , stack . description )
112
+ end
113
+ end
114
+
96
115
def requested_buildpacks_disabled! ( lifecycle )
97
116
return if lifecycle . type == Lifecycles ::DOCKER
98
117
0 commit comments