# Copyright (c) 2020 AT&T Intellectual Property.  All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

dependencies:
    - name: common
      version: ~7.x-0
      repository: '@local'
    - name: dcaemod-genprocessor
      version: ~7.x-0
      repository: 'file://components/dcaemod-genprocessor'
      condition: dcaemod-genprocessor.enabled
    - name: dcaemod-distributor-api
      version: ~7.x-0
      repository: 'file://components/dcaemod-distributor-api'
      condition: dcaemod-distributor-api.enabled
    - name: dcaemod-designtool
      version: ~7.x-0
      repository: 'file://components/dcaemod-designtool'
      condition: dcaemod-designtool.enabled
    - name: dcaemod-onboarding-api
      version: ~7.x-0
      repository: 'file://components/dcaemod-onboarding-api'
      condition: dcaemod-onboarding-api.enabled
    - name: dcaemod-runtime-api
      version: ~7.x-0
      repository: 'file://components/dcaemod-runtime-api'
      condition: dcaemod-runtime-api.enabled
    - name: dcaemod-nifi-registry
      version: ~7.x-0
      repository: 'file://components/dcaemod-nifi-registry'
      condition: dcaemod-nifi-registry.enabled
    - name: dcaemod-healthcheck
      version: ~7.x-0
      repository: 'file://components/dcaemod-healthcheck'
      condition: dcaemod-healthcheck.enabled