# 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: ~6.x-0
      repository: '@local'
    - name: dcaemod-genprocessor
      version: ~6.x-0
      repository: 'file://components/dcaemod-genprocessor'
      condition: dcaemod-genprocessor.enabled
    - name: dcaemod-distributor-api
      version: ~6.x-0
      repository: 'file://components/dcaemod-distributor-api'
    - name: dcaemod-designtool
      version: ~6.x-0
      repository: 'file://components/dcaemod-designtool'
    - name: dcaemod-onboarding-api
      version: ~6.x-0
      repository: 'file://components/dcaemod-onboarding-api'
    - name: dcaemod-runtime-api
      version: ~6.x-0
      repository: 'file://components/dcaemod-runtime-api'
    - name: dcaemod-nifi-registry
      version: ~6.x-0
      repository: 'file://components/dcaemod-nifi-registry'