@@ -45,6 +45,7 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
4545 raise InvalidPackage . new ( 'Cannot stage package whose state is not ready.' ) if package . state != PackageModel ::READY_STATE
4646
4747 requested_buildpacks_disabled! ( lifecycle )
48+ validate_stack! ( lifecycle , package )
4849
4950 staging_details = get_staging_details ( package , lifecycle )
5051 staging_details . start_after_staging = start_after_staging
@@ -74,11 +75,13 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
7475
7576 Repositories ::AppUsageEventRepository . new . create_from_build ( build , 'STAGING_STARTED' )
7677 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+ )
8285 end
8386
8487 logger . info ( "build created: #{ build . guid } " )
@@ -93,6 +96,22 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
9396
9497 private
9598
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+
96115 def requested_buildpacks_disabled! ( lifecycle )
97116 return if lifecycle . type == Lifecycles ::DOCKER
98117
0 commit comments