in deployers/servicedeployer.go [368:466]
func (deployer *ServiceDeployer) DeployDependencies() error {
for _, pack := range deployer.Deployment.Packages {
for depName, depRecord := range pack.Dependencies {
output := wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYING_X_name_X,
map[string]interface{}{wski18n.KEY_NAME: depName})
whisk.Debug(whisk.DbgInfo, output)
if depRecord.IsBinding {
bindingPackage := new(whisk.BindingPackage)
bindingPackage.Namespace = pack.Package.Namespace
bindingPackage.Name = depName
pub := false
bindingPackage.Publish = &pub
qName, err := utils.ParseQualifiedName(depRecord.Location, pack.Package.Namespace)
if err != nil {
return err
}
bindingPackage.Binding = whisk.Binding{qName.Namespace, qName.EntityName}
bindingPackage.Parameters = depRecord.Parameters
bindingPackage.Annotations = depRecord.Annotations
error := deployer.createBinding(bindingPackage)
if error != nil {
return error
} else {
output := wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X,
map[string]interface{}{wski18n.KEY_NAME: depName})
whisk.Debug(whisk.DbgInfo, output)
}
} else {
depServiceDeployer, err := deployer.getDependentDeployer(depName, depRecord)
if err != nil {
return err
}
err = depServiceDeployer.ConstructDeploymentPlan()
if err != nil {
return err
}
dependentPackages := []string{}
for k := range depServiceDeployer.Deployment.Packages {
dependentPackages = append(dependentPackages, k)
}
if len(dependentPackages) > 1 {
// TODO(799) i18n
errMessage := "GitHub dependency " + depName + " has multiple packages in manifest file: " +
strings.Join(dependentPackages, ", ") + ". " +
"One GitHub dependency can only be associated with single package in manifest file." +
"There is no way to reference actions from multiple packages of any GitHub dependencies."
return wskderrors.NewYAMLFileFormatError(deployer.ManifestPath, errMessage)
}
if err := depServiceDeployer.deployAssets(); err != nil {
errString := wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X,
map[string]interface{}{wski18n.KEY_NAME: depName})
wskprint.PrintOpenWhiskError(errString)
return err
}
// if the dependency name in the original package
// is different from the package name in the manifest
// file of dependent github repo, create a binding to the origin package
if ok := depServiceDeployer.Deployment.Packages[depName]; ok == nil {
bindingPackage := new(whisk.BindingPackage)
bindingPackage.Namespace = pack.Package.Namespace
bindingPackage.Name = depName
pub := false
bindingPackage.Publish = &pub
qName, err := utils.ParseQualifiedName(dependentPackages[0], depServiceDeployer.Deployment.Packages[dependentPackages[0]].Package.Namespace)
if err != nil {
return err
}
bindingPackage.Binding = whisk.Binding{qName.Namespace, qName.EntityName}
bindingPackage.Parameters = depRecord.Parameters
bindingPackage.Annotations = depRecord.Annotations
err = deployer.createBinding(bindingPackage)
if err != nil {
return err
} else {
output := wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X,
map[string]interface{}{wski18n.KEY_NAME: depName})
whisk.Debug(whisk.DbgInfo, output)
}
}
}
}
}
return nil
}