pritidesai closed pull request #765: Update deploymentreader.go tests and fix 
bind logic.
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/765
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/.travis.yml b/.travis.yml
index bb7e6ef1..8b98781a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,7 +30,7 @@ install:
 - go get -u github.com/stretchr/testify
 - go get -u github.com/tools/godep
 before_script:
-- GO_FILES=$(find . -iname '*.go' -type f | grep -v /vendor/)
+- GO_FILES=$(find . -iname '*.go' -type f -not -path 
"./wski18n/i18n_resources.go")
 - export BAD_GO=$(gofmt -s -l $(echo $GO_FILES))
 - echo $BAD_GO
 - test -z "$BAD_GO"
diff --git a/cmd/report.go b/cmd/report.go
index 787e16a8..655a4b20 100644
--- a/cmd/report.go
+++ b/cmd/report.go
@@ -62,6 +62,8 @@ func init() {
        RootCmd.AddCommand(reportCmd)
 
        // TODO() REMOVE this flag... the flag -config exists already
+       // TODO() whiskclient alread retrieves wskprops and has a constant 
defined for it SOURCE_WSKPROPS
+       // Please remove or reuse code from whiskclient.go
        reportCmd.Flags().StringVarP(&wskpropsPath, "wskproppath", "w",
                path.Join(os.Getenv("HOME"), ".wskprops"),
                wski18n.T(wski18n.ID_CMD_FLAG_CONFIG))
diff --git a/cmd/version.go b/cmd/version.go
index 7ad5bc58..c0f194a5 100644
--- a/cmd/version.go
+++ b/cmd/version.go
@@ -36,6 +36,7 @@ var versionCmd = &cobra.Command{
        Run: func(cmd *cobra.Command, args []string) {
                wskprint.PrintlnOpenWhiskOutput(
                        // Note: no need to translate the following string
+                       // TODO(#767) - Flags.CliBuild and CliVersion are not 
set during build
                        fmt.Sprintf("wskdeploy build-version: %s--%s",
                                utils.Flags.CliBuild,
                                utils.Flags.CliVersion))
diff --git a/deployers/deploymentreader.go b/deployers/deploymentreader.go
index dd15c8bc..a31addd5 100644
--- a/deployers/deploymentreader.go
+++ b/deployers/deploymentreader.go
@@ -20,8 +20,6 @@ package deployers
 import (
        "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/apache/incubator-openwhisk-wskdeploy/parsers"
-       "github.com/apache/incubator-openwhisk-wskdeploy/utils"
-       "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
@@ -46,7 +44,6 @@ func (reader *DeploymentReader) HandleYaml() error {
 
        deploymentParser := parsers.NewYAMLParser()
        deployment, err := deploymentParser.ParseDeployment(dep.DeploymentPath)
-
        reader.DeploymentDescriptor = deployment
 
        return err
@@ -68,48 +65,67 @@ func (reader *DeploymentReader) BindAssets() error {
        return nil
 }
 
-func (reader *DeploymentReader) bindPackageInputsAndAnnotations() error {
-
+func (reader *DeploymentReader) getPackageMap() map[string]parsers.Package {
        packMap := make(map[string]parsers.Package)
 
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
+       // Create local packages list from Deployment file for us to iterate 
over
+       // either from top-level or under project schema
+       if len(reader.DeploymentDescriptor.GetProject().Packages) == 0 {
+
+               if len(reader.DeploymentDescriptor.Packages) > 0 {
+                       infoMsg := wski18n.T(
+                               
wski18n.ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X,
+                               map[string]interface{}{
+                                       wski18n.KEY_PATH: 
reader.DeploymentDescriptor.Filepath})
+                       wskprint.PrintlnOpenWhiskTrace(false, infoMsg)
                        for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
                                depPacks.Packagename = packName
                                packMap[packName] = depPacks
                        }
                }
        } else {
+
+               infoMsg := wski18n.T(
+                       
wski18n.ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X,
+                       map[string]interface{}{
+                               wski18n.KEY_PATH: 
reader.DeploymentDescriptor.Filepath,
+                               wski18n.KEY_NAME: 
reader.DeploymentDescriptor.GetProject().Name})
+               wskprint.PrintlnOpenWhiskTrace(false, infoMsg)
+
                for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
                        depPacks.Packagename = packName
                        packMap[packName] = depPacks
                }
        }
 
+       return packMap
+}
+
+func (reader *DeploymentReader) bindPackageInputsAndAnnotations() error {
+
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
+
        for packName, pack := range packMap {
 
                serviceDeployPack := 
reader.serviceDeployer.Deployment.Packages[packName]
 
                if serviceDeployPack == nil {
-                       warningString := wski18n.T(
-                               
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                               map[string]interface{}{
-                                       wski18n.KEY_KEY:  wski18n.PACKAGE_NAME,
-                                       wski18n.KEY_NAME: packName})
-                       wskprint.PrintlnOpenWhiskWarning(warningString)
+                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_PACKAGE, packName)
                        break
                }
 
-               keyValArr := make(whisk.KeyValueArr, 0)
+               displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_PACKAGE, 
packName)
 
                if len(pack.Inputs) > 0 {
+
+                       keyValArr := make(whisk.KeyValueArr, 0)
+
                        for name, input := range pack.Inputs {
                                var keyVal whisk.KeyValue
 
                                keyVal.Key = name
-
                                keyVal.Value = 
wskenv.InterpolateStringWithEnvVar(input.Value)
-
                                keyValArr = append(keyValArr, keyVal)
                        }
 
@@ -136,6 +152,9 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
                                // iterate over each annotation from manifest 
file
                                for i, a := range 
serviceDeployPack.Package.Annotations {
                                        if name == a.Key {
+                                               
displayEntityFoundInDeploymentTrace(
+                                                       
parsers.YAML_KEY_ANNOTATION, a.Key)
+
                                                // annotation key is found in 
manifest
                                                keyExistsInManifest = true
                                                // overwrite annotation in 
manifest file with deployment file
@@ -144,13 +163,7 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
                                        }
                                }
                                if !keyExistsInManifest {
-                                       warningString := wski18n.T(
-                                               
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                               map[string]interface{}{
-                                                       wski18n.KEY_KEY:  
parsers.YAML_KEY_ANNOTATION,
-                                                       wski18n.KEY_NAME: name})
-                                       
wskprint.PrintlnOpenWhiskWarning(warningString)
-                                       return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, 
warningString)
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                }
                        }
                }
@@ -160,30 +173,15 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
 
 func (reader *DeploymentReader) bindActionInputsAndAnnotations() error {
 
-       packMap := make(map[string]parsers.Package)
-
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
-                       for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
-                               depPacks.Packagename = packName
-                               packMap[packName] = depPacks
-                       }
-               }
-               //else {
-               //              
packMap[reader.DeploymentDescriptor.Package.Packagename] = 
reader.DeploymentDescriptor.Package
-               //      }
-       } else {
-               for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
-                       depPacks.Packagename = packName
-                       packMap[packName] = depPacks
-               }
-       }
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
 
        for packName, pack := range packMap {
 
                serviceDeployPack := 
reader.serviceDeployer.Deployment.Packages[packName]
 
                if serviceDeployPack == nil {
+                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_PACKAGE, packName)
                        break
                }
 
@@ -203,6 +201,9 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                }
 
                                if wskAction, exists := 
serviceDeployPack.Actions[actionName]; exists {
+
+                                       
displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_ACTION, actionName)
+
                                        depParams := 
make(map[string]whisk.KeyValue)
                                        for _, kv := range keyValArr {
                                                depParams[kv.Key] = kv
@@ -214,6 +215,8 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                                }
                                        }
                                        wskAction.Action.Parameters = keyValArr
+                               } else {
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ACTION, actionName)
                                }
                        }
 
@@ -226,22 +229,24 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                        // iterate over each annotation from 
manifest file
                                        for i, a := range 
wskAction.Action.Annotations {
                                                if name == a.Key {
+
+                                                       
displayEntityFoundInDeploymentTrace(
+                                                               
parsers.YAML_KEY_ANNOTATION, a.Key)
+
                                                        // annotation key is 
found in manifest
                                                        keyExistsInManifest = 
true
+
                                                        // overwrite annotation 
in manifest file with deployment file
                                                        
wskAction.Action.Annotations[i].Value = input
                                                        break
                                                }
                                        }
                                        if !keyExistsInManifest {
-                                               errMsg := wski18n.T(
-                                                       
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_KEY:  parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_NAME: name})
-                                               return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, errMsg)
+                                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                        }
                                }
+                       } else {
+                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ACTION, actionName)
                        }
                }
        }
@@ -250,31 +255,22 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
 
 func (reader *DeploymentReader) bindTriggerInputsAndAnnotations() error {
 
-       packMap := make(map[string]parsers.Package)
-
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
-                       for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
-                               depPacks.Packagename = packName
-                               packMap[packName] = depPacks
-                       }
-               }
-       } else {
-               for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
-                       depPacks.Packagename = packName
-                       packMap[packName] = depPacks
-               }
-       }
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
 
+       // go through all packages in our local package map
        for _, pack := range packMap {
-
                serviceDeployment := reader.serviceDeployer.Deployment
 
+               // for each Deployment file Trigger found in the current package
                for triggerName, trigger := range pack.Triggers {
 
-                       keyValArr := make(whisk.KeyValueArr, 0)
-
+                       // If the Deployment file trigger has Input values we 
will attempt to bind them
                        if len(trigger.Inputs) > 0 {
+
+                               keyValArr := make(whisk.KeyValueArr, 0)
+
+                               // Interpolate values before we bind
                                for name, input := range trigger.Inputs {
                                        var keyVal whisk.KeyValue
 
@@ -284,28 +280,27 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
                                        keyValArr = append(keyValArr, keyVal)
                                }
 
+                               // See if a matching Trigger (name) exists in 
manifest
                                if wskTrigger, exists := 
serviceDeployment.Triggers[triggerName]; exists {
 
+                                       
displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_TRIGGER, triggerName)
+
                                        depParams := 
make(map[string]whisk.KeyValue)
                                        for _, kv := range keyValArr {
                                                depParams[kv.Key] = kv
                                        }
 
-                                       var traceMsg string
                                        for _, keyVal := range 
wskTrigger.Parameters {
-                                               traceMsg = wski18n.T(
-                                                       
wski18n.ID_DEBUG_KEY_VERIFY_X_name_X_key_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_NAME: parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_KEY:  keyVal.Key})
-                                               
wskprint.PrintOpenWhiskVerbose(utils.Flags.Verbose, traceMsg)
-
                                                // TODO() verify logic and add 
Verbose/trace say "found" or "not found"
                                                if _, exists := 
depParams[keyVal.Key]; !exists {
+                                                       
displayEntityFoundInDeploymentTrace(
+                                                               
parsers.YAML_KEY_ANNOTATION, keyVal.Key)
                                                        keyValArr = 
append(keyValArr, keyVal)
                                                }
                                        }
                                        wskTrigger.Parameters = keyValArr
+                               } else {
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_TRIGGER, triggerName)
                                }
                        }
 
@@ -326,14 +321,11 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
                                                }
                                        }
                                        if !keyExistsInManifest {
-                                               errMsg := wski18n.T(
-                                                       
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_KEY:  parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_NAME: name})
-                                               return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, errMsg)
+                                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                        }
                                }
+                       } else {
+                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_TRIGGER, triggerName)
                        }
 
                }
@@ -341,3 +333,21 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
        }
        return nil
 }
+
+func displayEntityNotFoundInDeploymentWarning(entityType string, entityName 
string) {
+       warnMsg := wski18n.T(
+               wski18n.ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
+               map[string]interface{}{
+                       wski18n.KEY_KEY:  entityType,
+                       wski18n.KEY_NAME: entityName})
+       wskprint.PrintOpenWhiskWarning(warnMsg)
+}
+
+func displayEntityFoundInDeploymentTrace(entityType string, entityName string) 
{
+       infoMsg := wski18n.T(
+               wski18n.ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X,
+               map[string]interface{}{
+                       wski18n.KEY_KEY:  entityType,
+                       wski18n.KEY_NAME: entityName})
+       wskprint.PrintlnOpenWhiskTrace(true, infoMsg)
+}
diff --git a/deployers/deploymentreader_test.go 
b/deployers/deploymentreader_test.go
index d5312d1e..cc48f2ca 100644
--- a/deployers/deploymentreader_test.go
+++ b/deployers/deploymentreader_test.go
@@ -20,144 +20,196 @@
 package deployers
 
 import (
+       "fmt"
        "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/stretchr/testify/assert"
        "reflect"
        "testing"
 )
 
+const (
+       // local error messages
+       TEST_ERROR_DEPLOYMENT_PARSE_FAILURE        = "Deployment [%s]: Failed 
to parse."
+       TEST_ERROR_DEPLOYMENT_BIND_TRIGGER_FAILURE = "Deployment [%s]: Failed 
to bind Trigger."
+       TEST_ERROR_DEPLOYMENT_FIND_PROJECT         = "Deployment [%s]: Failed 
to find Project [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_PACKAGES        = "Deployment [%s]: Failed 
to find Packages for project [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_PACKAGE         = "Deployment [%s]: Failed 
to find Package [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_TRIGGER         = "Deployment [%s]: Failed 
to find Trigger [%s]."
+       TEST_ERROR_DEPLOYMENT_SET_ANNOTATION       = "Failed to set Annotation 
value."
+       TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER  = "Failed to set input 
Parameter value."
+       TEST_ERROR_DEPLOYMENT_GET_ANNOTATION       = "Failed to get Annotation 
key."
+       TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER  = "Failed to get input 
Parameter key."
+)
+
+// TODO() these globals are shared by manifest_reader_test.go; these tests 
should be independent of each other
 var sd *ServiceDeployer
 var dr *DeploymentReader
 var deployment_file = "../tests/usecases/github/deployment.yaml"
 var manifest_file = "../tests/usecases/github/manifest.yaml"
 
 func init() {
+       // TODO(): setup "trace" flag here (and in all unit test files)
+}
+
+// Check DeploymentReader could handle deployment yaml successfully.
+func TestDeploymentReader_HandleYaml(t *testing.T) {
+
        sd = NewServiceDeployer()
        sd.DeploymentPath = deployment_file
        sd.ManifestPath = manifest_file
        sd.Check()
        dr = NewDeploymentReader(sd)
-}
 
-// Check DeploymentReader could handle deployment yaml successfully.
-func TestDeploymentReader_HandleYaml(t *testing.T) {
+       TEST_PACKAGE := "GitHubCommits"
        dr.HandleYaml()
-       assert.NotNil(t, 
dr.DeploymentDescriptor.GetProject().Packages["GitHubCommits"], 
"DeploymentReader handle deployment yaml failed.")
+
+       if _, exists := 
dr.DeploymentDescriptor.GetProject().Packages[TEST_PACKAGE]; !exists {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PACKAGE,
+                       dr.serviceDeployer.DeploymentPath, TEST_PACKAGE))
+       }
+
 }
 
-// TODO(750) remove this unused test?
-func TestDeployerCheck(t *testing.T) {
-       sd := NewServiceDeployer()
-       sd.DeploymentPath = "../tests/usecases/badyaml/deployment.yaml"
-       sd.ManifestPath = "../tests/usecases/badyaml/manifest.yaml"
-       // The system will exit thus the test will fail.
-       // sd.Check()
+func createAnnotationArray(t *testing.T, kv whisk.KeyValue) whisk.KeyValueArr {
+       kva := make(whisk.KeyValueArr, 0)
+       kva = append(kva, kv)
+       return kva
 }
 
-func TestDeploymentReader_bindTrigger(t *testing.T) {
-       //init variables
+// Create a ServiceDeployer with a "dummy" DeploymentPlan (i.e., simulate a 
fake manifest parse)
+// load the deployment YAMl into dReader.DeploymentDescriptor
+// bind the deployment inputs and annotations to the named Trigger from 
Deployment to Manifest YAML
+func testLoadAndBindDeploymentYAML(t *testing.T, path string, triggerName 
string, kv whisk.KeyValue) (*ServiceDeployer, *DeploymentReader) {
+
        sDeployer := NewServiceDeployer()
-       sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test.yml"
-       sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
+       sDeployer.DeploymentPath = path
 
-       //parse deployment and bind triggers input and annotation
+       // Create Trigger for "bind" function to use (as a Manifest parse would 
have created)
+       sDeployer.Deployment.Triggers[triggerName] = new(whisk.Trigger)
+       sDeployer.Deployment.Triggers[triggerName].Annotations = 
createAnnotationArray(t, kv)
+
+       //parse deployment and bind triggers input and annotations
        dReader := NewDeploymentReader(sDeployer)
-       dReader.HandleYaml()
-       dReader.bindTriggerInputsAndAnnotations()
+       err := dReader.HandleYaml()
 
-       trigger := sDeployer.Deployment.Triggers["locationUpdate"]
-       for _, param := range trigger.Parameters {
-               switch param.Key {
-               case "name":
-                       assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
-               case "place":
-                       assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
-               default:
-                       assert.Fail(t, "Failed to get inputs key")
+       // DEBUG() Uncomment to display initial DeploymentDescriptor (manifest, 
deployemnt befopre binding)
+       //fmt.Println(utils.ConvertMapToJSONString("BEFORE: 
dReader.DeploymentDescriptor", dReader.DeploymentDescriptor))
+       //fmt.Println(utils.ConvertMapToJSONString("BEFORE: 
sDeployer.Deployment", sDeployer.Deployment))
 
-               }
+       // test load of deployment YAML
+       if err != nil {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_PARSE_FAILURE, 
sDeployer.DeploymentPath))
        }
-       for _, annos := range trigger.Annotations {
-               switch annos.Key {
-               case "bbb":
-                       assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
-               default:
-                       assert.Fail(t, "Failed to get annotation key")
 
-               }
+       // Test that we can bind Triggers and Annotations
+       err = dReader.bindTriggerInputsAndAnnotations()
+
+       // test load of deployment YAML
+       if err != nil {
+               fmt.Println(err)
+               assert.Fail(t, 
fmt.Sprintf(TEST_ERROR_DEPLOYMENT_BIND_TRIGGER_FAILURE, 
sDeployer.DeploymentPath))
        }
+
+       // DEBUG() Uncomment to display resultant DeploymentDescriptor 
(manifest + deployment file binding)
+       //fmt.Println(utils.ConvertMapToJSONString("AFTER: 
dReader.DeploymentDescriptor", dReader.DeploymentDescriptor))
+       //fmt.Println(utils.ConvertMapToJSONString("AFTER: 
sDeployer.Deployment", sDeployer.Deployment))
+
+       return sDeployer, dReader
 }
 
-func TestDeploymentReader_bindTrigger_packages(t *testing.T) {
+func TestDeploymentReader_ProjectBindTrigger(t *testing.T) {
+
        //init variables
-       sDeployer := NewServiceDeployer()
-       sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test-packages.yml"
-       sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
+       TEST_DATA := 
"../tests/dat/deployment_deploymentreader_project_bind_trigger.yml"
+       TEST_TRIGGER := "locationUpdate"
+       TEST_PROJECT := "AppWithTriggerRule"
+       TEST_ANNOTATION_KEY := "bbb"
+       // Create an annotation (in manifest representation) with key we 
expect, with value that should be overwritten
+       TEST_ANNOTATION := whisk.KeyValue{TEST_ANNOTATION_KEY, "foo"}
 
-       //parse deployment and bind triggers input and annotation
-       dReader := NewDeploymentReader(sDeployer)
-       dReader.HandleYaml()
-       dReader.bindTriggerInputsAndAnnotations()
+       // create ServicedEployer
+       sDeployer, dReader := testLoadAndBindDeploymentYAML(t, TEST_DATA, 
TEST_TRIGGER, TEST_ANNOTATION)
+
+       // test Project exists with expected name in Deployment file
+       projectNameDeploy := dReader.DeploymentDescriptor.GetProject().Name
+       if projectNameDeploy != TEST_PROJECT {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PROJECT, 
TEST_PROJECT))
+       }
+
+       // test that the Project has Packages
+       if len(dReader.DeploymentDescriptor.GetProject().Packages) == 0 {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PACKAGES, 
TEST_PROJECT))
+       }
+
+       trigger := sDeployer.Deployment.Triggers[TEST_TRIGGER]
 
-       trigger := sDeployer.Deployment.Triggers["locationUpdate"]
+       // test that Input values from dReader.DeploymentDescriptor wore 
"bound" onto sDeployer.Deployment
        for _, param := range trigger.Parameters {
                switch param.Key {
                case "name":
-                       assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
+                       assert.Equal(t, "Bernie", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
                case "place":
-                       assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
+                       assert.Equal(t, "DC", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
                default:
-                       assert.Fail(t, "Failed to get inputs key")
+                       assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER)
 
                }
        }
+
+       // test that Annotations from dReader.DeploymentDescriptor wore "bound" 
onto sDeployer.Deployment
        for _, annos := range trigger.Annotations {
                switch annos.Key {
-               case "bbb":
-                       assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
+               case TEST_ANNOTATION_KEY:
+                       // Manifest's value should be overwritten
+                       assert.Equal(t, "this is an annotation", annos.Value, 
TEST_ERROR_DEPLOYMENT_SET_ANNOTATION)
                default:
-                       assert.Fail(t, "Failed to get annotation key")
+                       assert.Fail(t, TEST_ERROR_DEPLOYMENT_GET_ANNOTATION)
 
                }
        }
 }
 
-// TODO(749) - rewrite test to remove "package"
-//func TestDeploymentReader_bindTrigger_package(t *testing.T) {
-//     //init variables
-//     sDeployer := NewServiceDeployer()
-//     sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test-package.yml"
-//     sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
-//
-//     //parse deployment and bind triggers input and annotation
-//     dReader := NewDeploymentReader(sDeployer)
-//     dReader.HandleYaml()
-//     dReader.bindTriggerInputsAndAnnotations()
-//
-//     assert.Equal(t, "triggerrule", 
dReader.DeploymentDescriptor.Package.Packagename)
-//     trigger := sDeployer.Deployment.Triggers["locationUpdate"]
-//     for _, param := range trigger.Parameters {
-//             switch param.Key {
-//             case "name":
-//                     assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
-//             case "place":
-//                     assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
-//             default:
-//                     assert.Fail(t, "Failed to get inputs key")
-//
-//             }
-//     }
-//     for _, annos := range trigger.Annotations {
-//             switch annos.Key {
-//             case "bbb":
-//                     assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
-//             default:
-//                     assert.Fail(t, "Failed to get annotation key")
-//
-//             }
-//     }
-//}
+func TestDeploymentReader_PackagesBindTrigger(t *testing.T) {
+       //init variables
+       TEST_DATA := 
"../tests/dat/deployment_deploymentreader_packages_bind_trigger.yml"
+       TEST_TRIGGER := "locationUpdate"
+       TEST_ANOTATION_KEY := "bbb"
+       // Create an annotation (in manifest representation) with key we 
expect, with value that should be overwritten
+       TEST_ANNOTATION := whisk.KeyValue{TEST_ANOTATION_KEY, "bar"}
+
+       sDeployer, _ := testLoadAndBindDeploymentYAML(t, TEST_DATA, 
TEST_TRIGGER, TEST_ANNOTATION)
+
+       // test that Input values from dReader.DeploymentDescriptor wore 
"bound" onto sDeployer.Deployment
+       if trigger, ok := sDeployer.Deployment.Triggers[TEST_TRIGGER]; ok {
+
+               for _, param := range trigger.Parameters {
+                       switch param.Key {
+                       case "name":
+                               assert.Equal(t, "Bernie", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
+                       case "place":
+                               assert.Equal(t, "DC", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
+                       default:
+                               assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER)
+
+                       }
+               }
+               for _, annos := range trigger.Annotations {
+                       switch annos.Key {
+                       case "bbb":
+                               assert.Equal(t, "this is an annotation", 
annos.Value, TEST_ERROR_DEPLOYMENT_SET_ANNOTATION)
+                       default:
+                               assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_ANNOTATION)
+
+                       }
+               }
+       } else {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_TRIGGER,
+                       sDeployer.DeploymentPath,
+                       TEST_TRIGGER))
+       }
+}
 
+// TODO() use local "load" function
 func TestDeploymentReader_BindAssets_ActionAnnotations(t *testing.T) {
        sDeployer := NewServiceDeployer()
        sDeployer.DeploymentPath = 
"../tests/dat/deployment_validate_action_annotations.yaml"
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 0cea27a0..377c4250 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -138,7 +138,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() 
error {
                // Project Name in manifest/deployment file is mandatory for 
managed deployments
                if deployer.ProjectName == "" {
                        errmsg := wski18n.T(wski18n.ID_ERR_KEY_MISSING_X_key_X,
-                               map[string]interface{}{wski18n.KEY_KEY: 
wski18n.PROJECT_NAME})
+                               map[string]interface{}{wski18n.KEY_KEY: 
wski18n.NAME_PROJECT})
 
                        return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, errmsg)
                }
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 56b500c0..d97a2a3b 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -487,7 +487,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                                        errMessage := 
wski18n.T(wski18n.ID_ERR_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
                                                map[string]interface{}{
                                                        wski18n.KEY_RUNTIME:   
action.Runtime,
-                                                       wski18n.KEY_EXTENTION: 
ext,
+                                                       wski18n.KEY_EXTENSION: 
ext,
                                                        wski18n.KEY_ACTION:    
action.Name})
                                        return nil, 
wskderrors.NewInvalidRuntimeError(errMessage,
                                                
splitFilePath[len(splitFilePath)-1], action.Name,
@@ -542,7 +542,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                                                warnStr := 
wski18n.T(wski18n.ID_ERR_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
                                                        map[string]interface{}{
                                                                
wski18n.KEY_RUNTIME:   action.Runtime,
-                                                               
wski18n.KEY_EXTENTION: ext,
+                                                               
wski18n.KEY_EXTENSION: ext,
                                                                
wski18n.KEY_ACTION:    action.Name})
                                                
wskprint.PrintOpenWhiskWarning(warnStr)
 
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index fb526ddb..79748307 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -26,17 +26,17 @@ import (
 // DO NOT translate
 const (
        YAML_KEY_ACTION     = "action"
-       YAML_KEY_ANNOTATION = "annotoation"
+       YAML_KEY_ANNOTATION = "annotation"
        YAML_KEY_API        = "api"
        YAML_KEY_FEED       = "feed"
        YAML_KEY_MANIFEST   = "manifest"
        YAML_KEY_NAMESPACE  = "namespace"
+       YAML_KEY_PACKAGE    = "package"
        YAML_KEY_PACKAGES   = "packages"
        YAML_KEY_PROJECT    = "project"
        YAML_KEY_RULE       = "rule"
        YAML_KEY_SEQUENCE   = "sequence"
        YAML_KEY_TRIGGER    = "trigger"
-       YAML_KEY_PACKAGE    = "package"
        YAML_KEY_SOURCE     = "source" // deprecated
 )
 
diff --git a/tests/dat/deployment-deploymentreader-test-package.yml 
b/tests/dat/deployment-deploymentreader-test-package.yml
deleted file mode 100644
index 15c5d4e9..00000000
--- a/tests/dat/deployment-deploymentreader-test-package.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
-# license agreements.  See the NOTICE file distributed with this work for 
additional
-# information regarding copyright ownership.  The ASF licenses this file to you
-# 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.
-#
-
-package:
-      name: triggerrule
-      actions:
-        greeting:
-          inputs:
-            name: Amy
-            place: Paris
-          annotations:
-            aaa: this is an annotation
-      triggers:
-        locationUpdate:
-          inputs:
-            name: Bernie
-            place: DC
-          annotations:
-            bbb: this is an annotation
diff --git a/tests/dat/deployment-deploymentreader-test-packages.yml 
b/tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
similarity index 69%
rename from tests/dat/deployment-deploymentreader-test-packages.yml
rename to tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
index 6c76f03a..31749b0c 100644
--- a/tests/dat/deployment-deploymentreader-test-packages.yml
+++ b/tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
@@ -15,18 +15,18 @@
 #
 
 packages:
-    triggerrule:
-      actions:
-        greeting:
-          inputs:
-            name: Amy
-            place: Paris
-          annotations:
-            aaa: this is an annotation
-      triggers:
-        locationUpdate:
-          inputs:
-            name: Bernie
-            place: DC
-          annotations:
-            bbb: this is an annotation
+  triggerrule:
+    actions:
+      greeting:
+        inputs:
+          name: Amy
+          place: Paris
+        annotations:
+          aaa: this is an annotation
+    triggers:
+      locationUpdate:
+        inputs:
+          name: Bernie
+          place: DC
+        annotations:
+          bbb: this is an annotation
diff --git a/tests/dat/deployment-deploymentreader-test.yml 
b/tests/dat/deployment_deploymentreader_project_bind_trigger.yml
similarity index 100%
rename from tests/dat/deployment-deploymentreader-test.yml
rename to tests/dat/deployment_deploymentreader_project_bind_trigger.yml
diff --git 
a/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
 
b/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
deleted file mode 100644
index cd3168b5..00000000
--- 
a/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
-# license agreements.  See the NOTICE file distributed with this work for 
additional
-# information regarding copyright ownership.  The ASF licenses this file to you
-# 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.
-#
-
-project:
-    name: TestActionAnnotations
-    packages:
-        packageActionAnnotations:
-            actions:
-                helloworld:
-                    inputs:
-                        name: Amy
-                        place: New York
-                    annotations:
-                        action_annotation_5: this is annotation 5
-                        action_annotation_6: this is annotation 6
-        packageActionAnnotationsWithWebAction:
-            actions:
-                helloworld:
-                    inputs:
-                        name: Amy
-                        place: New York
-                    annotations:
-                        action_annotation_5: this is annotation 5
-                        action_annotation_6: this is annotation 6
-                        web-export: true
diff --git 
a/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
 
b/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
index 78f86fb4..842c4e8e 100644
--- 
a/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
+++ 
b/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
@@ -37,11 +37,3 @@ func TestActionAnnotations(t *testing.T) {
        _, err = wskdeploy.Undeploy(manifestPath, deploymentPath)
        assert.Equal(t, nil, err, "Failed to undeploy based on the manifest and 
deployment files.")
 }
-
-func TestInvalidActionAnnotations(t *testing.T) {
-       manifestPath := os.Getenv("GOPATH") + path + "manifest.yaml"
-       deploymentPath := os.Getenv("GOPATH") + path + 
"deployment-with-invalid-annotations.yaml"
-       wskdeploy := common.NewWskdeploy()
-       _, err := wskdeploy.Deploy(manifestPath, deploymentPath)
-       assert.NotNil(t, err, "Failed to validate invalid annotations in 
deployment file")
-}
diff --git a/utils/conversion.go b/utils/conversion.go
index e6c1e345..8b3ce5d4 100644
--- a/utils/conversion.go
+++ b/utils/conversion.go
@@ -51,13 +51,8 @@ func convertMapValue(value interface{}) interface{} {
        }
 }
 
-func PrintTypeInfo(name string, value interface{}) {
-       info := fmt.Sprintf("Name=[%s], Value=[%v], Type=[%T]\n", name, value, 
value)
-       fmt.Print(info)
-}
-
+// TODO() add a Print function to wskprint that calls this and adds the label
 func ConvertMapToJSONString(name string, mapIn interface{}) string {
-       PrintTypeInfo(name, mapIn)
        strMapOut, _ := json.MarshalIndent(mapIn, "", "  ")
-       return string(strMapOut)
+       return fmt.Sprintf("%s: %s", name, string(strMapOut))
 }
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 564ef274..b8c1bdc8 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -29,25 +29,14 @@ const (
        DEPLOYMENT         = "deployment"
        CONFIGURATION      = "Configuration"
        MANIFEST           = "manifest"
-       NAME_ACTION        = "Action Name"
-       NAME_FEED          = "Feed Name"
-       NAME_RULE          = "Rule Name"
-       NAME_RUNTIME       = "Runtime Name"
-       NAME_TRIGGER       = "Trigger Name"
+       NAME_PROJECT       = "project name"
        NAMESPACES         = "Namespaces"
        PACKAGE_BINDING    = "package binding"
        PACKAGE_LICENSE    = "package license"
-       PACKAGE_NAME       = "package name"
        PACKAGE_VERSION    = "package version"
        PACKAGES           = "Packages"
-       PROJECT_NAME       = "project name"
-       REGISTRY           = "registry"
-       REGISTRY_URL       = "registry URL"
-       REPOSITORY         = "repository"
        RULES              = "Rules"
        TRIGGER_FEED       = "trigger feed"
-       TRIGGERS           = "Triggers"
-       WHISK_PROPS        = "wskprops"
        APIGW_ACCESS_TOKEN = "API Gateway Access Token"
 )
 
@@ -61,15 +50,11 @@ const (
        ID_MSG_PREFIX_WARNING = "msg_prefix_warning" // "Warning"
 
        // Cobra command descriptions
-       ID_CMD_DESC_LONG_PUBLISH      = "msg_cmd_desc_long_publish"
-       ID_CMD_DESC_LONG_REPORT       = "msg_cmd_desc_long_report"
-       ID_CMD_DESC_LONG_ROOT         = "msg_cmd_desc_long_root"
-       ID_CMD_DESC_SHORT_ADD         = "msg_cmd_desc_short_add"
-       ID_CMD_DESC_SHORT_ADD_X_key_X = "msg_cmd_desc_short_add_entity"
-       ID_CMD_DESC_SHORT_PUBLISH     = "msg_cmd_desc_short_publish"
-       ID_CMD_DESC_SHORT_REPORT      = "msg_cmd_desc_short_report"
-       ID_CMD_DESC_SHORT_ROOT        = "msg_cmd_desc_short_root"
-       ID_CMD_DESC_SHORT_VERSION     = "msg_cmd_desc_short_version"
+       ID_CMD_DESC_LONG_REPORT   = "msg_cmd_desc_long_report"
+       ID_CMD_DESC_LONG_ROOT     = "msg_cmd_desc_long_root"
+       ID_CMD_DESC_SHORT_REPORT  = "msg_cmd_desc_short_report"
+       ID_CMD_DESC_SHORT_ROOT    = "msg_cmd_desc_short_root"
+       ID_CMD_DESC_SHORT_VERSION = "msg_cmd_desc_short_version"
 
        // Cobra Flag messages
        ID_CMD_FLAG_API_HOST    = "msg_cmd_flag_api_host"
@@ -143,7 +128,6 @@ const (
 
        // Errors
        ID_ERR_DEPENDENCY_UNKNOWN_TYPE                               = 
"msg_err_dependency_unknown_type"
-       ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X              = 
"msg_err_deployment_name_not_found"
        ID_ERR_ENTITY_CREATE_X_key_X_err_X_code_X                    = 
"msg_err_entity_create"
        ID_ERR_ENTITY_DELETE_X_key_X_err_X_code_X                    = 
"msg_err_entity_delete"
        ID_ERR_FEED_INVOKE_X_err_X_code_X                            = 
"msg_err_feed_invoke"
@@ -178,54 +162,50 @@ const (
        ID_WARN_WHISK_PROPS_DEPRECATED                            = 
"msg_warn_whisk_properties"
        ID_WARN_ENTITY_NAME_EXISTS_X_key_X_name_X                 = 
"msg_warn_entity_name_exists"
        ID_WARN_PACKAGES_NOT_FOUND_X_path_X                       = 
"msg_warn_packages_not_found"
+       ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X          = 
"msg_warn_deployment_name_not_found"
 
        // Verbose (Debug/Trace) messages
-       ID_DEBUG_KEY_VERIFY_X_name_X_key_X     = "msg_dbg_key_verify"
-       ID_DEBUG_DEPLOYING_USING               = "msg_dbg_deploying_using"
-       ID_DEBUG_UNDEPLOYING_USING             = "msg_dbg_undeploying_using"
-       ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X = 
"msg_dbg_searching_project_directory"
+       ID_DEBUG_DEPLOYING_USING                              = 
"msg_dbg_deploying_using"
+       ID_DEBUG_UNDEPLOYING_USING                            = 
"msg_dbg_undeploying_using"
+       ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X                = 
"msg_dbg_searching_project_directory"
+       ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X         = 
"msg_dbg_deployment_name_found"
+       ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X           = 
"msg_dbg_packages_found_root"
+       ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X = 
"msg_dbg_packages_found_project"
 )
 
 // Known keys used for text replacement in i18n translated strings
 const (
-       KEY_ACTION             = "action"
-       KEY_CMD                = "cmd"
-       KEY_CODE               = "code"
-       KEY_DEPLOYMENT_NAME    = "dname"
-       KEY_DEPLOYMENT_PATH    = "dpath"
-       KEY_ERR                = "err"
-       KEY_EXTENTION          = "ext"
-       KEY_FILE_TYPE          = "filetype"
-       KEY_HOST               = "host"
-       KEY_KEY                = "key"
-       KEY_LIMIT              = "limit"
-       KEY_MANIFEST_NAME      = "mname"
-       KEY_MANIFEST_PATH      = "mpath"
-       KEY_NAME               = "name"
-       KEY_NAMESPACE          = "namespace"
-       KEY_NEW                = "newkey"
-       KEY_OLD                = "oldkey"
-       KEY_PATH               = "path"
-       KEY_PROJECT            = "project"
-       KEY_RUNTIME            = "runtime"
-       KEY_SOURCE             = "source"
-       KEY_URL                = "url"
-       KEY_URL_TYPE           = "urltype"
-       KEY_VALUE              = "value"
-       KEY_VALUE_MIN          = "min" // TODO() attempt to use this for Limit 
value range errors
-       KEY_VALUE_MAX          = "max" // TODO() attempt to use this for Limit 
value range errors
-       KEY_API                = "api"
-       KEY_APIGW_ACCESS_TOKEN = "apigw_access_token"
+       KEY_ACTION          = "action"
+       KEY_CMD             = "cmd"
+       KEY_CODE            = "code"
+       KEY_DEPLOYMENT_NAME = "dname"
+       KEY_DEPLOYMENT_PATH = "dpath"
+       KEY_ERR             = "err"
+       KEY_EXTENSION       = "ext"
+       KEY_FILE_TYPE       = "filetype"
+       KEY_HOST            = "host"
+       KEY_KEY             = "key"
+       KEY_LIMIT           = "limit"
+       KEY_MANIFEST_NAME   = "mname"
+       KEY_MANIFEST_PATH   = "mpath"
+       KEY_NAME            = "name"
+       KEY_NAMESPACE       = "namespace"
+       KEY_NEW             = "newkey"
+       KEY_OLD             = "oldkey"
+       KEY_PATH            = "path"
+       KEY_PROJECT         = "project"
+       KEY_RUNTIME         = "runtime"
+       KEY_SOURCE          = "source"
+       KEY_VALUE           = "value"
+       KEY_VALUE_MIN       = "min" // TODO() attempt to use this for Limit 
value range errors
+       KEY_VALUE_MAX       = "max" // TODO() attempt to use this for Limit 
value range errors
+       KEY_API             = "api"
 )
 
 // Used to unit test that translations exist with these IDs
 var I18N_ID_SET = [](string){
-       ID_CMD_DESC_LONG_PUBLISH,
        ID_CMD_DESC_LONG_REPORT,
        ID_CMD_DESC_LONG_ROOT,
-       ID_CMD_DESC_SHORT_ADD,
-       ID_CMD_DESC_SHORT_ADD_X_key_X,
-       ID_CMD_DESC_SHORT_PUBLISH,
        ID_CMD_DESC_SHORT_REPORT,
        ID_CMD_DESC_SHORT_ROOT,
        ID_CMD_DESC_SHORT_VERSION,
@@ -246,11 +226,12 @@ var I18N_ID_SET = [](string){
        ID_CMD_FLAG_TOGGLE_HELP,
        ID_CMD_FLAG_VERBOSE,
        ID_DEBUG_DEPLOYING_USING,
-       ID_DEBUG_KEY_VERIFY_X_name_X_key_X,
+       ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X,
+       ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X,
+       ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X,
        ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X,
        ID_DEBUG_UNDEPLOYING_USING,
        ID_ERR_DEPENDENCY_UNKNOWN_TYPE,
-       ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
        ID_ERR_ENTITY_CREATE_X_key_X_err_X_code_X,
        ID_ERR_ENTITY_DELETE_X_key_X_err_X_code_X,
        ID_ERR_JSON_MISSING_KEY_CMD,
@@ -303,6 +284,7 @@ var I18N_ID_SET = [](string){
        ID_MSG_UNMARSHAL_NETWORK_X_url_X,
        ID_WARN_COMMAND_RETRY,
        ID_WARN_CONFIG_INVALID_X_path_X,
+       ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
        ID_WARN_ENTITY_NAME_EXISTS_X_key_X_name_X,
        ID_WARN_KEY_DEPRECATED_X_oldkey_X_filetype_X_newkey_X,
        ID_WARN_KEY_MISSING_X_key_X_value_X,
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 74eed755..440b0726 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -1,20 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
 // Code generated by go-bindata.
 // sources:
 // wski18n/resources/de_DE.all.json
@@ -109,12 +92,12 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\x6b\x8f\x1b\xb7\xf1\xbb\x7f\xc5\xc0\x28\xe0\x04\x38\xcb\x4e\x8a\x02\x85\x81\x43\xe1\xd6\x6e\x72\x4d\xec\x33\xee\xec\x04\x81\x73\x58\x53\xcb\x91\xc4\x68\x97\x5c\x90\xdc\x93\x95\x83\xfa\xdb\x8b\xe1\x63\x77\xa5\x3b\xee\x52\x72\x82\xe6\x4b\xe4\xe3\x70\xde\x9c\xe7\x7e\x7c\x04\x70\xf7\x08\x00\xe0\xb1\xe0\x8f\x5f\xc0\xe3\xda\x2c\x8b\x46\xe3\x42\x7c\x2e\x50\x6b\xa5\x1f\x9f\xf9\x53\xab\x99\x34\x15\xb3\x42\x49\x02\x7b\xed\xce\x1e\x01\xec\xce\x46\x30\x08\xb9\x50\x09\x04\x17\x74\x34\x75\xdf\xb4\x65\x89\xc6\x24\x50\x5c\x87\xd3\x29\x2c\x1b\xa6\xa5\x90\xcb\x04\x96\x9f\xc3\x69\x12\x4b\x59\xf3\x82\xa3\x29\x8b\x4a\xc9\x65\xd1\xb4\xf3\x4a\x98\x55\x02\xd9\x3b\x7f\x0a\x0c\x1a\x56\xae\xd9\x12\xc1\x2a\xb0\x2b\x04\x8d\x4b\x61\xac\xde\x82\x41\x0b\x42\xc2\x7f\x9f\xcd\x36\x66\xdd\x68\xd5\x98\x59\x2e\x69\x8d\x8d\xd2\x36\x41\xf9\xca\x1d\x1a\x50\x12\x38\x36\x95\xda\x22\x07\x94\x56\x58\x81\x06\xbe\x12\x33\x9c\x9d\xc1\x3b\xcf\x93\x39\x83\x97\x25\xdd\x33\x67\xf0\x5e\x8b\xe5\x12\xb5\x39\x83\xab\xb6\xa2\x13\xb4\xe5\xec\x6b\x60\x06\x36\x58\x55\xf4\x7f\x8d\x25\x4a\xeb\x6e\xdc\x3a\x6a\x86\xf8\x27\x99\x4c\x83\xa5\x58\x08\xe4\x20\x59\x8d\xa6\x61\x25\xe6\xcb\xa2\x54\x4a\x92\x97\x60\x95\xaa\x48\x71\x5e\x90\x33\x68\xa5\xff\x05\x4c\x72\x30\x5b\x59\x82\x6a\x50\x6e\x56\xc2\xac\xa3\x9e\x0d\xb4\x46\xc8\x25\x30\xa8\x99\x14\x0b\x34\xd6\x01\xab\x86\xb0\xb2\x2a\xa0\xaa\x49\x92\x85\xa8\x3a\xf0\x5f\x5e\xbe\xf9\x31\x87\x67\xb3\x52\xda\x9e\x62\x7b\xd6\x59\x3e\x9f\xcc\xa8\x9d\xdf\x69\x75\x2b\x38\x1a\x60\x60\xda\xba\x66\x7a\x0b\x1e\x1e\xd4\x02\x36\x2b\x66\x9f\x18\x98\x23\x0e\xbc\xe0\xcb\xac\x15\x58\x9a\x34\x17\xf9\xb5\x55\xb0\xc2\xaa\x09\xa4\x61\xab\x5a\x9d\x65\x29\xb2\x48\x3e\x2f\x8c\xf3\x14\x2b\x9c\x03\x93\xc0\x9c\x73\x9f\xc1\x02\x91\x9f\x81\xf5\x1e\x0e\x4a\x83\x6e\xab\xee\x41\x46\xe2\xc7\x90\x2d\xdc\x83\xda\x8e\x51\x7f\xc6\x24\xdc\xdd\xcd\xd6\xb8\xdd\xed\x0e\x49\x39\x39\xb3\xe9\xdd\xa2\x36\x84\x39\xe5\x06\x42\x5a\x87\x3d\xc0\x81\x6c\xeb\x39\x89\xb9\x80\x8d\x59\x7b\x0b\x8c\xd3\x5a\x54\x6c\x59\xb0\x46\x14\x2b\x65\x52\xc6\xf5\x96\x7b\xf9\xee\x02\x3e\x7d\x7f\x79\xfd\xfe\x53\x26\xc6\x71\xde\x07\x48\x7f\x7a\x7d\x75\x7d\x71\xf9\x36\x0b\x6f\x6b\x57\xc5\x1a\x53\xda\xa7\x63\xa5\xc5\xef\xee\x0f\xf0\xe9\x87\xd7\xbf\xe4\x20\x2d\x51\xdb\xc2\x99\xe5\x61\xac\x0d\xb3\x2b\x52\x29\x29\x7a\x46\xc0\x19\x36\xf4\x88\x95\x5c\x88\x54\xca\xf1\x87\x0e\x15\x7c\xc5\x71\xc1\xda\xca\x82\x30\xf0\x97\xef\x2f\xdf\xbc\xee\x13\xc3\xd7\x39\x5a\xa9\x2a\xb5\x29\x02\x8e\x54\xa2\x74\x40\xd0\x01\x4d\x63\xed\xa3\xe5\x98\x5e\xba\x08\xdd\x85\xd5\x0c\xd4\x42\x5a\xd4\xf4\x42\x6f\x53\x3a\xf7\xdc\x0e\xe0\xa0\xd1\xaa\x6e\xb2\x18\x5f\xe3\x36\xdb\x9c\x6b\xdc\xe6\x32\xed\xb5\x5c\x33\xc9\x96\x98\x0a\x3e\x9e\xed\x46\xab\xdf\xb0\xb4\x7d\xea\xb5\x0a\xe6\x14\x02\xf4\x1a\x39\x44\x0c\xd3\x14\xbb\xf0\x34\xae\xff\x23\x42\x8b\x43\xdb\x85\xfe\x04\xde\xfe\x7c\x1a\x57\x10\x75\x82\x43\x83\xfa\x16\x75\x85\xc6\x44\xdd\x64\xa0\x36\x56\x8b\x24\x66\xaf\xe8\xd6\xa0\x26\x97\x16\x12\x39\xe8\x56\x5a\x51\x77\xb1\x30\x83\x82\x55\xcb\x65\x85\x05\xa5\xab\x04\x99\xf7\x0e\x02\xbe\xa7\x84\x56\xa3\x31\x6c\x99\xef\x29\xb7\xa8\xe7\xca\xa4\x94\x1c\x4e\x41\xb5\xb6\x69\xc7\xd4\xe1\xc2\x44\x51\x0b\x43\x09\xd3\x05\xc0\x74\xfc\x7b\xbf\x42\x20\x08\x72\xbc\xd2\x07\x41\x72\x70\x61\x40\x2a\x0b\x1e\x55\xab\x91\xcf\x7e\x1d\x53\xcf\x01\xc5\x46\x8c\xe4\x06\xa2\x48\x41\x9c\x40\xbe\x8c\xce\x94\x57\x12\xa5\x0e\xe6\x34\x52\x41\x94\xb1\x8e\xe4\x50\x9e\x8f\x77\x77\x33\xfa\xbd\xdb\xdd\x9c\xc1\x42\xab\x9a\x12\xbb\x51\xad\x2e\x71\xb7\xcb\xa2\xe9\x0d\x36\x45\x93\xc0\xa2\xad\x0c\xda\xd3\x68\x75\xea\x99\xa2\xb6\xa7\x47\x12\xb1\xfb\xc3\xe9\x72\x36\x62\xb9\x29\x98\x6b\xc6\x0a\xab\xd6\x28\x27\x45\xa6\x1b\xe0\x6f\x80\xbb\x71\x9a\xf0\xad\xac\x99\x36\x2b\x56\x15\x95\x2a\x59\x95\xa0\xf8\x21\x42\xc1\x65\x83\xf2\x67\x57\x7d\x84\x88\x61\x3c\x3d\x77\x1b\x6e\x59\xd5\xa2\xc9\x24\x28\xd1\x6e\x94\x5e\x9f\x4c\xd2\xe5\x37\x89\x16\x98\x25\x71\x5b\x5d\x4d\xc8\xda\xa7\xda\xa2\x64\xb2\xc4\xaa\x4a\xa6\xa2\xcb\x1f\x66\xf0\x2f\x0f\x43\x95\x76\x7f\x33\x97\xc0\x82\x89\x34\xf6\x57\x7d\xce\xe7\x82\x87\xb7\x58\x37\x15\x5a\x04\xd3\x92\x49\x17\x6d\x55\x6d\x67\x70\xd5\x4a\xf8\xd4\x15\xa3\x5d\x17\xf7\x89\xd2\x82\xc6\x5a\x51\x66\x67\xda\x0a\x56\x55\xdb\xbe\x5d\x61\xc6\xa0\x1d\xb7\xc2\x80\x53\xdf\xfb\x14\xc6\x32\xdb\xa6\xca\x9f\xa7\x4f\x9f\x3e\x3d\x3f\x3f\x3f\x1f\xd8\x62\x20\xc3\xb5\xbb\x0a\x04\x40\x80\x59\x54\xdd\x5c\x02\x79\x8e\x8a\xa2\x6a\x38\x84\x61\x86\x57\xce\xb8\x93\x9d\x6e\xeb\xe1\xdd\x7c\x22\xa3\xf6\xfe\x30\x80\x1c\xb7\x78\x36\xbd\x29\xfd\xed\x91\x3c\x41\x83\xb1\x2c\x2a\x5c\xab\x39\x5d\xce\x7e\x70\x1d\x29\x45\x43\x2a\x5b\x76\xbb\x1b\x58\x28\x9d\xfb\x6e\x0e\x88\x0d\x05\x3d\x8a\x5c\xb6\xe9\x7c\x17\x5a\xc4\x17\x33\x31\x25\xeb\xba\xd1\x18\xec\x89\xde\x8a\x85\x29\xc1\x50\xa5\xdd\x1b\xcc\xa7\x9e\x1e\xab\xbd\x8a\xe7\xf0\x20\x03\xb3\xd9\x48\xc3\x1f\x48\x44\x85\xfc\x91\x22\xf6\x38\x73\x84\x8c\xd0\x69\x31\x3f\xf4\x10\x27\x08\xca\xb1\x41\xc9\x51\x96\xc7\xe8\xb3\xbf\x34\x24\x74\x1c\x9d\xfe\x15\x26\x95\xfa\xea\x41\x32\x5f\xe2\x39\x0f\x73\x41\xb1\xa7\xd5\xa9\xd2\x6f\x10\x49\xd5\x22\x21\xfa\xff\x31\x0d\x45\x79\x8e\x73\x94\x2f\xb3\xe0\xfd\x48\xfa\xc7\xd8\x30\xf3\x69\xa4\x38\x19\xb7\xe3\x5e\x44\x3f\xd1\x92\x13\x41\x98\x3a\xeb\x53\xd3\x9a\xe3\xc8\x27\x99\xae\x73\x1f\xe3\x05\x78\xab\xc9\x92\x81\xec\x30\x55\xfc\x79\xfe\x16\x65\x5c\xa8\x56\xf2\x22\xf0\x3b\x3e\x93\x7c\x45\x40\xc9\xd8\xb4\x59\x89\x72\x05\x1b\x37\xe4\x27\xbe\xb8\x2f\x4d\xed\x0a\xa1\x6c\xb5\x26\xc5\x44\x01\xe3\x5c\xc3\x25\x2d\xff\x9b\x30\x30\xe3\x64\x21\xfd\x65\xa7\x2f\x3f\xcd\x99\x68\x2e\x7f\x95\xef\x2a\x64\xc6\xcd\x7e\x6e\x05\x47\xc7\x14\xc1\x13\xef\x2e\x5d\x76\xc5\xdc\x0b\x98\xa6\x35\xda\x3a\xdf\xa3\xc5\xe4\x61\x2b\xed\x7a\x94\x0c\x42\x61\xee\x9a\x30\x86\x82\xad\x6a\x41\xa3\xb3\xfc\x86\x49\xdb\x8f\xd0\xc0\xae\x84\xf9\x07\x7c\xb5\x7d\xf6\xf6\xeb\x0c\x3a\x53\x1d\xf3\x7d\x91\x06\x8d\xdf\xc7\x38\x72\x74\x0d\x0f\x75\x5e\xcb\x16\x8d\xbd\xc9\xa0\x1b\x8d\x7c\x94\x84\xdd\xfa\x26\x53\xc6\xc0\x5e\x11\x16\x06\xa9\x09\x78\x58\xb2\x38\x87\x18\x0c\x51\x35\xba\x91\x13\x3f\x03\x56\x0d\xdb\xaf\xee\x5d\x13\x3b\xba\xbb\x11\x77\x35\x4c\x63\xf7\x18\x9f\xf5\xa1\x10\xb8\xd0\x58\xda\x10\x1e\xb5\xdf\x69\x4c\x2d\x50\x5e\x5f\x5d\x5d\x5e\x5d\x27\xf8\x3e\x3f\xfc\x0f\x3c\x38\xdc\x3b\x38\x3f\x1f\x29\x50\xb4\xde\x8f\xc4\x6b\xa9\x36\xb2\xb0\xdb\x66\x24\x93\xc6\x88\x4b\x50\xa4\xaa\x70\x6b\x06\xfd\xca\x00\x94\xac\xb6\x60\xda\xc6\x6f\x13\x9f\xb9\x59\xfd\xcc\x6c\x8d\xc5\x1a\xe6\x42\x72\x21\x97\x06\x94\x86\xa5\xb0\xab\x76\x3e\x2b\x55\xdd\x2d\x76\xc6\x2b\x2a\xcf\x70\x0c\xcd\xa4\xc2\x42\x2a\xeb\x83\xd9\xc8\xa8\xe0\xc1\xc0\x25\xe4\xe1\xe4\xd9\x45\x6a\x87\x8b\x0e\xf7\x37\x4b\x53\x6c\x85\x62\xaf\xd4\xc8\x6c\x4a\x7b\x6e\xdf\x0d\x0e\x64\x2f\x9c\x6e\x84\x5d\x81\x5b\x94\xc7\x21\xe1\x0b\x3a\x44\xad\x77\x3b\xb7\x81\xf4\x67\xa5\xe2\xfe\x80\x7e\x4c\x34\xfa\x03\x96\x7c\x8c\x1f\x65\x89\xdf\x8b\xf0\x7f\x12\x4b\x0b\x44\x5e\x08\x79\xab\xd6\x29\x86\xfe\xed\xd2\x2d\xbd\x78\x0f\xe6\x62\x36\x5d\x83\xcd\xca\x2d\x24\x03\xa7\x71\x23\xe7\x8f\xfe\x1c\x6e\xd7\xb8\xed\xc6\x8b\x35\x93\x9c\x59\xa5\xc7\x46\xa7\x1d\x8c\x9b\xc4\x7d\x8c\xca\xbc\xa1\x67\x12\xf0\x4c\xd2\xec\x1a\xc1\x29\xbf\x7e\x33\x74\xcf\x81\xe7\x32\x0a\x47\x76\x35\xec\x0c\x27\x89\xba\x87\x54\x0b\x53\x33\x5b\xa6\x36\xd3\x7b\xef\x88\x2e\x70\x47\x82\x8f\x3c\x27\x77\x1e\xbb\x53\xae\xd0\xcf\x5c\x1d\x11\x67\x56\x17\x75\x09\xa8\x1e\x20\xd9\x7b\x76\xfe\x34\x8a\x31\x2e\x44\x18\x8d\x91\x7b\xb1\x4a\xa4\xd4\x76\xe1\x4f\x29\xfa\x04\x93\x74\x83\x7f\xa2\x15\x7e\x13\x2f\xfd\xae\x7b\x8f\x2b\xa5\x1d\xef\x7e\x3f\xec\xee\xf8\x9f\x39\x7a\x8e\x2c\x4e\xa8\xfa\xea\x18\x86\x0e\xf4\xea\x9e\x82\xe7\xe8\x89\x01\x3f\x00\xf5\xaa\xc4\xcf\x16\xa5\x89\x4c\xe3\x67\x1b\x67\x06\x5f\x22\x8a\x29\x96\x98\x2a\xbf\xfa\xa7\xbc\x44\xbf\x66\x0e\x29\xa1\x5f\xb6\x84\x39\x66\x9f\x60\x29\xed\x8a\x72\xf0\x7c\x27\x19\x69\x75\x75\xbc\xc9\xfd\xb0\x94\x52\xd8\x6e\x07\x1f\xae\x7e\x74\xc2\xbb\xf1\xa9\xf3\x41\xfa\x17\xe9\xcc\x03\xdc\xe4\x65\x00\x62\xa4\x66\xd5\x42\xe9\x3a\xd9\x2f\xbc\x89\xe7\x63\x1c\xcc\xe0\xbd\xde\x02\x5b\x32\x21\x67\xb3\x49\xb2\xbf\x19\x25\xbb\x28\x55\xd6\x7c\x64\xbd\xfd\x9f\xeb\xcb\xb7\x20\x64\xd3\x5a\xe0\xcc\x32\x78\x13\xb4\xf1\xa4\xac\xf9\x13\x8a\x59\xe3\x94\x58\x23\x3a\x42\x1b\x9c\x17\xde\x59\x52\x1f\x32\x3c\xe0\x54\x71\xeb\xc2\x60\x83\xf3\xee\x0b\x8b\x97\xef\x2e\x3c\x58\x23\x08\xa6\x64\xd2\xd7\x0f\x73\xf4\xa9\x12\x79\xf8\xd8\xa3\xbf\x34\x83\x50\x99\xb6\x0d\x67\xf6\xe0\xe3\x08\x72\xb8\x52\xc9\x5b\xd4\xf6\x80\xbc\x55\x43\x1c\x53\x8a\x1d\x8a\x7b\x92\xa8\xd1\xd9\x9c\x8b\xef\xb1\x98\x25\xf4\x9c\x19\xe4\xa0\xe4\x30\xdc\xdc\x47\x35\xa9\x0a\x21\xcb\xaa\xe5\x78\xc0\x1e\x33\x7b\x56\x48\x2a\xe3\xe7\x97\x57\x6f\x2f\xde\x7e\x97\x5f\x87\xc6\x0b\xc7\x55\xa2\x1b\xa6\x65\x51\xaa\x9a\x32\x68\xa1\xd1\x26\xd3\xec\x15\x9d\xc5\xc1\x67\x59\x73\x27\xcb\xc2\xa2\xf6\x29\xfe\x85\x8f\x6d\x14\x38\x6e\xc6\xec\x1b\xe8\xb9\xcd\xd3\xd1\xc1\x63\xf8\xe5\xc5\x70\xfe\xca\xd1\x62\x69\x27\x26\x1f\x8e\x32\x15\x16\x1c\x1b\x8d\x25\x59\xba\xd0\xd8\x54\xac\x4c\x06\x0d\xca\xbc\x44\x47\x55\x3c\xd4\x13\x6e\xd1\xe7\x1d\x63\x2f\x52\x79\x9e\x36\xa2\xaa\xc0\x28\x25\xc9\x9b\x7a\x32\x67\xd0\x04\x4f\x31\xbe\xaa\x72\xc5\x30\x6e\xf6\x70\x1a\x8b\x2c\x53\x80\xa0\x8e\x53\xea\x21\xb3\x52\x6d\xc5\x89\x3d\x83\x76\x06\x7e\x94\xbd\xdf\x50\x12\xb4\xfb\xe5\x87\x5a\x59\x1c\x39\xf8\x09\x7b\x12\x5f\x9e\x02\xa5\xbe\xfb\x75\x1a\xc5\x27\x77\xff\x18\x92\x54\xab\x19\x76\x3b\x6a\xc1\x29\xa2\xee\x7e\xb4\x6a\x9c\x9c\xc4\xef\xb2\x86\x1f\x64\x4d\x33\x56\x89\x5a\xd8\x42\x2c\xa5\xd2\x49\x96\xa2\x5f\x87\xc0\xe2\xae\x38\xae\xdc\xaf\xc3\x5a\x4c\x18\x08\xe8\x72\xa9\x97\x2b\x26\x97\xc8\xe6\xc9\xcf\x68\x7e\xec\x28\x76\xc5\x9f\x89\x72\x57\x5b\x3f\x34\xeb\x70\xcc\xe0\x82\xc8\x53\x01\x9d\xe1\x0b\x8e\x03\x53\x54\x6a\x59\x18\xf1\x7b\x8a\x81\x4a\x2d\xaf\xc5\xef\x48\xba\xf5\x17\xf6\x24\xee\x5d\x94\x49\xb7\x67\xa5\x66\x63\x8e\x76\x83\x28\xe1\xb9\x6b\x2a\xbe\x79\x9e\xcd\x4a\x8d\xb5\xd2\xdb\x31\x6e\x3c\xc4\xa9\x0c\x7d\xf3\xed\xdf\x1d\x4b\x7f\xfb\xe6\xdb\x6c\x9e\xa8\xfe\x52\x6d\xaa\x78\x0b\xa7\x27\x31\xf3\xdc\xeb\xe7\xaf\xcf\xe9\xbf\x69\x7e\xdc\x78\xa0\x68\xb4\x6a\x50\x5b\x81\xa9\x39\x74\x0c\x83\x83\x78\xe5\xa7\x8e\x56\x0b\xec\xe6\x8e\x7e\xd6\xd0\x23\x8b\xf3\xc9\x87\x63\x62\x0c\x89\x5c\x39\x87\xa3\xc8\x28\x2c\xa8\xd6\x1a\xc1\x9d\x21\xde\x6b\x76\x2b\x0c\xcc\x5b\x51\xf1\xf1\xd9\x84\x13\xc5\x87\x03\x4d\x6e\x9b\x15\x0a\x3a\xef\xdf\x0b\x08\xf2\x20\xaa\x07\x6d\xbb\x89\xcb\xdd\xdd\x2c\xfc\x35\xaa\x9b\x3a\x24\x21\x43\xa3\x4b\xff\x60\xe5\x44\xd9\xec\x58\x8d\xbd\x88\x7f\x64\xa9\x30\x11\x5b\x91\x00\x45\x05\xc5\x41\x57\xf2\x40\x99\x92\x6c\x3c\x4e\xea\x36\x1c\xb7\x61\x96\xe1\x1a\x55\xfc\x2c\x4c\xf2\x33\xc5\x7b\x6d\xea\x5e\x88\x61\x95\x46\xc6\xb7\xe0\x51\x74\xb5\x93\xc1\x0a\x4b\x0b\x4c\x2a\xbb\x42\x3f\x9a\x9b\x66\x29\x4e\xac\xb2\x26\x50\xf7\xbb\xda\x58\x35\x94\x4a\x5a\xe6\x3e\x40\x93\x6a\x7a\x0a\xf6\xea\xf5\x3f\x3f\x7c\x97\x5d\x8c\x39\xe8\xe3\x2a\x31\x3e\xf7\x1f\x40\xde\xa2\x16\x8b\x54\x15\xf6\x93\x3b\x0c\x8d\xd4\x7d\x07\x0e\xda\x1d\x8f\xd4\x44\xa8\xdb\x66\xf9\xb5\xf7\xe4\xd6\xd2\x41\xbd\x98\xc2\x3a\xd8\xa3\x8d\xe2\x1d\x6e\xd3\xf2\x30\x1b\x64\xba\x5c\x11\xde\xb0\xbe\x28\xfc\x64\x37\x3d\x16\xba\x8e\x37\xba\xe5\x47\x77\xe3\xde\xee\xbe\xd7\x60\xaf\xba\x47\x37\x8f\xfe\x17\x00\x00\xff\xff\xfc\x20\x12\xb6\x5e\x33\x00\x00")
+var _wski18nResourcesEn_usAllJson = 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5a\x6d\x6f\x1b\x37\xf2\x7f\x9f\x4f\x31\x08\xfe\x40\x5a\xc0\x51\xd2\xfe\x71\xc0\x21\x80\x71\xc8\x5d\xd2\x36\xd7\x26\x0e\xec\xf8\x8a\x22\x35\x36\xd4\x72\xb4\xcb\x6a\x97\x5c\x90\x5c\x2b\xaa\xa1\xef\x7e\x18\x92\xfb\x20\xd9\xdc\xa5\x94\x06\xd7\x37\x55\xcc\xe1\xcc\x6f\x86\xe4\x3c\xee\xc7\x47\x00\x77\x8f\x00\x00\x1e\x0b\xfe\xf8\x05\x3c\xae\x4d\x91\x35\x1a\x57\xe2\x73\x86\x5a\x2b\xfd\xf8\xcc\xaf\x5a\xcd\xa4\xa9\x98\x15\x4a\x12\xd9\x6b\xb7\xf6\x08\x60\x77\x36\xc1\x41\xc8\x95\x8a\x30\x78\x43\x4b\x73\xfb\x4d\x9b\xe7\x68\x4c\x84\xc5\x55\x58\x9d\xe3\xb2\x61\x5a\x0a\x59\x44\xb8\xfc\x1a\x56\xa3\x5c\xf2\x9a\x67\x1c\x4d\x9e\x55\x4a\x16\x99\xc6\x46\x69\x1b\xe1\x75\xe9\x16\x0d\x28\x09\x1c\x9b\x4a\x6d\x91\x03\x4a\x2b\xac\x40\x03\xdf\x88\x05\x2e\xce\xe0\x3d\xcb\xd7\xac\x40\x73\x06\x2f\x73\xda\x67\xce\xe0\x83\x16\x45\x81\xda\x9c\xc1\x65\x5b\xd1\x0a\xda\x7c\xf1\x2d\x30\x03\x1b\xac\x2a\xfa\xbf\xc6\x1c\xa5\x75\x3b\x6e\x9d\x34\x03\x42\x82\x2d\x11\x4c\x83\xb9\x58\x09\xe4\x20\x59\x8d\xa6\x61\x39\x2e\x92\x75\x51\x2a\xa6\xc9\x4b\xb0\x4a\x55\x60\x55\x50\xe4\x0c\x5a\xe9\x7f\x01\x93\x1c\xcc\x56\xe6\xa0\x1a\x94\x9b\x52\x98\x35\x34\x41\x27\x68\x8d\x90\x05\x30\xa8\x99\x14\x2b\x34\xd6\x11\xab\x86\xb8\xb2\x2a\xb0\xaa\x49\x93\x95\xa8\x7a\xf2\xdf\x5e\xbe\xfd\x25\x05\xb3\x29\x95\xb6\xd3\x07\xf0\x5e\xab\x5b\xc1\xd1\x00\x03\xd3\xd6\x35\xd3\x5b\xf0\xf4\xa0\x56\xb0\x29\x99\x7d\x62\x60\x89\x38\x3a\x9e\x2f\x33\x63\x80\x34\x6b\x47\x83\x96\x6c\x59\x62\xd5\x04\xd1\xb0\x55\xad\x4e\x32\x21\x99\x2a\x1d\xcb\x2d\x6a\x43\xb2\x63\xf6\x11\xd2\x3a\x85\x03\x1d\xc8\xb6\x5e\xa2\x76\xe6\x31\x6b\x0f\x6d\x5a\xd6\xaa\x62\x45\xc6\x1a\x91\x95\xca\xc4\xb4\xf6\x2a\xbd\x7c\xff\x06\x3e\xfd\x74\x71\xf5\xe1\x53\x22\xc7\x69\xec\x23\xa6\xff\x79\x7d\x79\xf5\xe6\xe2\x5d\x12\xdf\xd6\x96\xd9\x1a\xb7\x11\xa6\xb4\xac\xb4\xf8\xd3\xfd\x01\x3e\xfd\xfc\xfa\xb7\x14\xa6\x39\x6a\x9b\xd1\xb9\x44\xb8\x36\xcc\x96\x64\x52\x32\xf4\x82\x88\xdd\x21\xa6\x30\x56\x72\x25\x62\x9e\xca\x2f\x3a\x56\xf0\x0d\xc7\x15\x6b\x2b\x0b\xc2\xc0\xff\xfd\x74\xf1\xf6\xf5\xb3\xc5\xc6\xac\x1b\xad\x1a\xf3\x6d\x8a\x55\xaa\x4a\x6d\xb2\xc0\x23\xe6\x5f\x1d\x11\xf4\x44\xf3\x5c\x87\xf7\x3d\x65\x97\xde\xa7\xf4\x8e\x20\x81\xb5\x90\x16\x35\x23\xf7\x17\xb3\xb9\x47\x3b\xa2\x83\x46\xab\xba\x49\x02\xbe\xc6\x6d\xf2\x71\xae\x71\x9b\x0a\xda\x5b\xb9\x66\x92\x15\xc8\x27\x61\x37\x5a\xfd\x81\xb9\x1d\x82\x85\x55\xb0\x44\xa8\x99\x5e\x23\x87\x8e\xc3\xbc\xc4\xce\x69\xcc\xd8\x7f\xcf\xb7\x24\xb0\xed\x7d\x62\x84\xef\xb0\x3e\xcf\x2b\xa8\x3a\x83\xd0\xa0\xbe\x45\x5d\xa1\x31\x9d\x6d\x12\x58\x1b\xab\x45\x94\xb3\x37\x74\x6b\x50\xd3\x95\x16\x12\x39\xe8\x56\x5a\x51\xf7\xbe\x30\x41\x82\x55\x45\x51\x61\x46\x7e\x3c\x22\xe6\x83\xa3\x80\x9f\xc8\xd3\xd7\x68\x0c\x2b\xd2\x6f\xca\x2d\xea\xa5\x32\x31\x23\x87\x55\x50\xad\x6d\xda\x29\x73\x38\x37\x91\xd5\xc2\x50\x24\x71\x0e\x30\xee\xff\x3e\x94\x08\x44\x41\x17\x2f\xf7\x4e\x90\x2e\xb8\x30\x20\x95\x05\xcf\xaa\xd5\xc8\x17\xbf\x4f\x99\xe7\x40\x62\x23\x26\x62\x03\x49\x24\x27\x4e\x24\x5f\x26\x67\xee\x56\x92\xa4\x9e\xe6\x34\x51\x41\x95\xa9\x44\xf6\x50\x9f\x8f\x77\x77\x0b\xfa\xbd\xdb\xdd\x9c\xc1\x4a\xab\x1a\xee\xee\x16\x46\xb5\x3a\xc7\xdd\x2e\x49\xa6\x3f\xb0\x39\x99\x44\xd6\x9d\x95\x41\x7b\x9a\xac\xde\x3c\x73\xd2\xf6\xec\x48\x2a\xf6\x7f\x38\x5d\xcf\x46\x14\x9b\x8c\xb9\x1c\x3e\xb3\x6a\x8d\x72\x56\x65\xda\x01\x7e\x07\xb8\x1d\xa7\x29\xdf\xca\x9a\x69\x53\xb2\x2a\xab\x54\xce\xaa\x88\xc4\xeb\x8e\x0a\x2e\x1a\x94\xbf\xba\xec\x23\x78\x0c\xe3\xe5\xb9\xdd\x70\xcb\xaa\x16\x4d\xa2\x40\x89\x76\xa3\xf4\xfa\x64\x91\x2e\xbe\x49\xb4\xc0\x2c\xa9\xdb\xea\x6a\x46\xd7\x21\xd4\x66\x39\x93\x39\x56\x55\x34\x14\x5d\xfc\xbc\x80\x7f\x79\x1a\x4a\x41\x87\x9d\xa9\x02\x56\x4c\xc4\xb9\xbf\x1a\x62\x3e\x17\x3c\xbc\xc5\xba\xa9\xd0\x22\x98\x96\x8e\x74\xd5\x56\xd5\x76\x01\x97\xad\x84\x4f\x7d\x32\xda\xd7\x1d\x9f\x28\x2c\x68\xac\x15\x45\x76\xa6\xad\x60\x55\xb5\x1d\xf2\x78\x66\x0c\xda\xe9\x53\x18\x21\xf5\x45\x41\x66\x2c\xb3\x6d\x2c\xfd\x79\xfa\xf4\xe9\xd3\xf3\xf3\xf3\xf3\xd1\x59\x8c\x74\xb8\x72\x5b\x81\x08\x88\x30\x49\xaa\x2b\x67\x91\xa7\x98\xa8\x33\x0d\x87\x50\x03\x7b\xe3\x4c\x5f\xb2\xd3\xcf\x7a\xbc\x37\x5d\xc8\xe4\x79\x5f\x8f\x28\xa7\x4f\x3c\x59\xde\x9c\xfd\xf6\x44\x9e\x60\xc1\x2e\x2d\xca\x5c\x0d\x36\x9f\xce\x5e\xbb\x52\x8d\xbc\x21\xa5\x2d\xbb\xdd\x0d\xac\x94\x4e\x7d\x37\x07\xc2\xc6\x8a\x1e\x25\x2e\xf9\xe8\x5c\x6e\xb9\xcd\xba\x17\x33\xd3\x5c\xb9\xbb\xa3\x4c\x77\xb7\xeb\x9d\x3d\xc9\x2b\x59\x28\x9f\xc7\x26\xed\xdf\x60\xba\xf4\x78\x37\xe6\x55\xb7\x0e\x0f\x02\x58\x2c\x26\x2a\xe1\x20\xa2\x33\xc8\x5f\xa9\xe2\xc0\x33\x45\xc9\x8e\x3a\xae\xe6\xf5\x40\x71\x82\xa2\x1c\x1b\x94\x1c\x65\x7e\x8c\x3d\x87\x4d\x63\x41\xc7\xc9\x19\x5e\x61\xd4\xa8\xaf\x1e\x14\xf3\x25\x37\xe7\x61\x14\xe4\x7b\x5a\x1d\x4b\xfd\x46\x9e\x54\xad\x22\xaa\xff\x0f\xc3\x50\xa7\xcf\x71\x17\xe5\xcb\x4e\xf0\xbe\x27\xfd\x6b\xce\x30\xf1\x69\xc4\x90\x4c\x9f\xe3\x9e\x47\x3f\xf1\x24\x67\x9c\x30\x55\xd6\xa7\x86\x35\x87\xc8\x07\x99\xbe\x72\x9f\xc2\x02\xbc\xd5\x74\x92\x41\xec\x38\x54\x7c\xbd\xfb\xd6\xe9\xb8\x52\xad\xe4\x59\xc0\x1b\x5c\x55\xf4\x02\x54\x68\xa3\xbe\x69\x53\x8a\xbc\x84\x8d\x6b\x4b\x13\x2e\xee\x53\x53\x5b\x22\xe4\xad\xd6\x64\x98\x4e\xc1\xae\xaf\xe1\x82\x96\xff\x4d\x1c\x98\x71\xba\x90\xfd\x92\xc3\x97\xef\xe6\xcc\x14\x97\xbf\xcb\xf7\x15\x32\xe3\x7a\x3f\xb7\x82\xa3\x03\x45\xf4\x84\xdd\x85\xcb\x3e\x99\x7b\x01\xf3\xb2\x26\x4b\xe7\x7b\xb2\x98\x3c\x2c\xa5\x5d\x8d\x92\x20\x28\xf4\x5d\x23\x87\xa1\x60\xab\x5a\xd0\xe8\x4e\x7e\xc3\xa4\x1d\x5a\x68\x60\x4b\x61\xfe\x01\xdf\x6c\x9f\xbd\xfb\x36\x41\xce\x5c\xc5\x7c\x5f\xa5\x51\xe1\xf7\xb1\x6b\x39\xba\x82\x87\x2a\xaf\xa2\x45\x63\x6f\x12\xe4\x76\x87\x7c\x94\x86\xfd\xc0\x21\x51\xc7\x00\x2f\x0b\x9d\xf4\x58\x07\xdc\xaf\x3a\xbd\x60\xd4\x44\xd5\xe8\x5a\x4e\xfc\x0c\x58\x35\x2e\xbf\xfa\x77\x4d\x70\x74\xbf\x23\x08\x01\xa6\xb1\x7f\x8c\xcf\x06\x57\x08\x5c\x68\xcc\x6d\x70\x8f\xda\x37\xfb\xe7\x26\x0b\xaf\x2f\x2f\x2f\x2e\xaf\x22\xb8\xcf\x0f\xff\x03\x4f\x0e\xf7\x16\xce\xcf\x27\x12\x14\xad\xf7\x3d\xf1\x5a\xaa\x8d\xcc\xec\xb6\x99\x88\xa4\x9d\xc7\x25\x2a\x32\x55\xd8\xb5\x80\x61\x64\x00\x4a\x56\x5b\x30\x6d\xe3\xe7\x5f\xcf\x5c\xaf\x7e\x61\xb6\xc6\x62\x0d\x4b\x21\xb9\x90\x85\x01\xa5\xa1\x10\xb6\x6c\x97\x8b\x5c\xd5\xfd\xc4\x63\x3a\xa3\xd2\xba\xcb\xaa\x72\x8d\xcc\xc6\x60\xba\x79\x24\x38\x92\x3d\xbf\xb5\x11\xb6\x04\x37\xc8\xec\xba\x71\x2f\x68\x11\xb5\xde\xed\xdc\x70\xca\xaf\xe5\x8a\xfb\x05\xfa\x31\x53\x51\x8f\x20\x79\x67\x3a\x09\x89\xdf\x73\xa5\x5f\x09\xd2\x0a\x91\x67\x42\xde\xaa\x75\x0c\xd0\x0f\x2e\xae\xd1\xd3\xf2\x64\xce\x39\xd2\x36\xd8\x94\x6e\x24\x16\x90\x5a\x3f\x8e\x0c\x4b\x5f\x07\xed\x1a\xb7\x7d\x1f\xaf\x66\x92\x33\xab\xf4\x54\x8f\xb2\xa7\x71\x2d\xaf\x8f\x9d\x31\x6f\xe8\x3e\x06\x3e\xb3\x32\xfb\x8a\x4b\x2a\xeb\xa3\x61\x44\xe0\xdb\x71\x7b\xdc\x05\x73\x47\x0d\x8c\xde\xbd\x2d\xc7\x25\xd8\xac\x50\x7a\xf4\xa4\x69\xcd\x6c\x5e\x4e\x28\xd8\x5f\x0f\xda\xc0\x9d\x08\xde\x05\x5c\x21\x0f\x27\x26\x7e\xbd\x2b\x03\xb9\x42\xdf\xdc\x74\x42\xdc\xb1\x3a\xf7\x46\x44\xf5\x88\xc9\x5e\xdb\xdf\xaf\x76\x6a\x4c\x2b\x11\x7a\x50\x74\xbd\x58\x25\x62\x66\x7b\xe3\x57\xe9\x99\x87\x23\xe9\x3b\xec\x24\x2b\xfc\x26\x2c\xc3\xb4\x75\x0f\x95\xd2\x0e\x3b\x73\x73\x71\xb7\xc7\xff\x4c\xb1\x73\x07\x71\xc6\xd4\x97\xc7\x00\x3a\xb0\xab\x7b\x0a\x1e\xd1\x13\x03\xbe\xd3\xe8\x4d\x89\x9f\x2d\x4a\xd3\x81\xc6\xcf\xb6\x2b\xce\xbf\x44\x15\x93\x15\x18\xcb\x73\x86\xa7\x5c\xa0\x9f\xe7\x06\xdf\x3b\x4c\x35\x42\xc3\x70\x88\x64\x14\xdf\x44\x3e\x7a\xbe\xb3\x40\x5a\x5d\x1d\x7f\xe4\xbe\x2b\x49\xb1\x62\xb7\x83\xeb\xcb\x5f\x9c\xf2\xae\x4f\xe9\xee\x20\xfd\x8b\x6c\xe6\x09\x6e\xfc\x74\x3b\x05\x48\xcd\xaa\x95\xd2\x75\x34\x31\x7f\xdb\xad\x4f\x21\x58\xc0\x07\xbd\x05\x56\x30\x21\x17\x8b\x59\xb1\x7f\x18\x25\x7b\x2f\x95\xd7\x7c\x62\x8e\xfc\xef\xab\x8b\x77\x20\x64\xd3\x5a\xe0\xcc\x32\x78\x1b\xac\xf1\x24\xaf\xf9\x13\xf2\x59\xd3\x92\x58\x23\x7a\x41\x1b\x5c\x66\xfe\xb2\xc4\xbe\x29\x78\xe0\x52\x75\xe3\x0d\x06\x1b\x5c\x86\x6b\x77\xe6\xe6\x12\x8e\xac\x11\x44\x93\x33\xe9\x03\xf5\x12\x7d\xa8\x44\x1e\x3e\x37\x18\x36\x2d\x20\xa4\x80\x6d\xc3\x99\xc5\x03\x9f\x61\x15\xe4\x4a\xde\xa2\xb6\x07\xe2\xad\x1a\xf3\x98\x33\xec\x58\xdd\x93\x54\xed\x2e\x9b\xbb\xe2\x7b\x10\x93\x94\x5e\x32\x83\x1c\x94\x1c\xbb\x9b\xfb\xac\x66\x4d\x21\x64\x5e\xb5\x1c\x0f\xe0\x31\xb3\x77\x0a\x51\x63\xfc\xfa\xf2\xf2\xdd\x9b\x77\x3f\xa6\x27\x7c\xdd\x86\xe3\x52\xbe\x0d\xd3\x32\xcb\x55\x4d\x11\x34\xd3\x68\xa3\x61\xf6\x92\xd6\xba\x0e\x63\x5e\x73\xa7\xcb\xca\xa2\xf6\x21\xfe\x85\xf7\x6d\xe4\x38\x6e\xa6\xce\x37\xc8\x73\x23\x9e\xa3\x9d\xc7\xf8\x13\x87\x71\xa3\x93\xa3\xc5\xdc\xce\xb4\x18\x9c\x64\x4a\x2c\x38\x36\x1a\x73\x3a\xe9\x4c\x63\x53\xb1\x3c\xea\x34\x28\xf2\x92\x1c\x55\xf1\x90\x4f\xb8\x89\x9a\xbf\x18\x7b\x9e\xca\x63\xda\x88\xaa\x02\xa3\x94\xa4\xdb\x34\x88\x39\x83\x26\xdc\x14\xe3\xb3\x2a\x57\x2e\xe3\x66\x8f\xa7\xb1\xc8\x12\x15\x08\xe6\x38\x25\x1f\x32\xa5\x6a\x2b\x4e\xf0\x0c\xda\x05\xf8\x9e\xf1\x7e\xe5\x46\xd4\xee\x97\xef\x1e\x25\x21\x72\xf4\x33\xe7\x49\xb8\xbc\x04\x0a\x7d\xf7\xf3\x34\xf2\x4f\x6e\xff\x31\x22\x29\x57\x33\xec\x76\xf2\x04\xe7\x84\xba\xfd\xdd\xa9\x76\x2d\x8a\xee\x03\xa8\xf1\x97\x4f\xf3\xc0\x2a\x51\x0b\x9b\x89\x42\x2a\x1d\x85\xd4\xdd\xeb\xe0\x58\xdc\x16\x87\xca\xfd\x3a\xcc\xc5\x84\x81\xc0\x2e\x55\x7a\x5e\x32\x59\x20\x5b\x46\xbf\x57\xf9\xa5\x97\xd8\x27\x7f\xa6\xd3\xbb\xda\xfa\xee\x54\xcf\x63\x01\x6f\x48\x3c\x25\xd0\x09\x77\xc1\x21\x30\x59\xa5\x8a\xcc\x88\x3f\x63\x00\x2a\x55\x5c\x89\x3f\x91\x6c\xeb\x37\xec\x69\x3c\x5c\x51\x26\xdd\x40\x93\x8a\x8d\x25\xda\x0d\xa2\x84\xe7\xae\xa8\xf8\xee\x79\x32\x94\x1a\x6b\xa5\xb7\x53\x68\x3c\xc5\xa9\x80\xbe\xfb\xfe\xef\x0e\xd2\xdf\xbe\xfb\x3e\x19\x13\xe5\x5f\xaa\x8d\x25\x6f\x61\xf5\x24\x30\xcf\xbd\x7d\xfe\xff\x39\xfd\x37\x8f\xc7\xd5\xe1\x59\xa3\x55\x83\xda\x0a\x8c\x35\x7c\x3b\x37\x38\xf2\x57\xbe\xbd\x67\xb5\xc0\xbe\xc1\xe7\x8b\xfa\x81\x59\xd7\x08\x7c\xd8\x27\x76\x2e\x91\x2b\x77\xe1\xc8\x33\x0a\x0b\xaa\xb5\x46\x70\x77\x10\x1f\x34\xbb\x15\x06\x96\xad\xa8\xf8\x74\x13\xc0\xa9\xe2\xdd\x81\xa6\x6b\x9b\xe4\x0a\xfa\xdb\xbf\xe7\x10\xe4\x81\x57\x0f\xd6\x76\xad\x8d\xbb\xbb\x45\xf8\x6b\x67\x6e\xaa\x90\x84\x0c\x85\x2e\xfd\x83\xe5\x33\x69\xb3\x83\xda\xd5\x22\xfe\x91\xc5\xdc\x44\x57\x8a\x04\x2a\x4a\x28\x0e\xaa\x92\x07\xd2\x94\x68\xe1\x71\x52\xb5\xe1\xd0\x86\x5e\x86\x2b\x54\xf1\xb3\x30\xd1\xef\x01\xef\x95\xa9\x7b\x2e\x86\x55\x1a\x19\xdf\x82\x67\xd1\xe7\x4e\x06\x2b\xcc\x2d\x30\xa9\x6c\x89\xbe\x07\x36\x0f\xa9\x6b\x0d\xcd\x56\xea\x21\x14\x1e\x54\xb5\x5d\xd6\x90\x2b\x69\x99\xfb\xd2\x4b\xaa\xb4\x76\x93\x93\x3e\x1a\x05\x38\xa3\xa4\x80\x78\xb0\x51\x1e\x22\xce\x61\xed\x4e\x4f\x6b\x68\x2a\x04\xa2\xfd\xcc\x33\x86\xf1\xd5\xeb\x7f\x5e\xff\x98\x9c\x30\x3a\xea\xe3\xb2\x45\xbe\x2c\x86\x99\xa2\x1f\x4d\xcf\x4e\x16\x1d\xd5\x8b\xc9\xe1\xcf\xb2\x18\xcf\xba\x26\xf9\x8e\x27\x5e\x69\x9c\x0d\x32\x9d\x97\xc4\x37\x8c\x18\x32\xdf\x7d\x8d\x77\x94\xae\xba\x1d\xfd\x80\xa2\xdf\x71\x6f\xbe\x3e\x78\x8f\x99\xf8\x38\x98\x6e\xb8\x3a\x7f\xf5\xb5\x39\xe1\xca\x74\xd0\xfa\x37\xe5\xe7\x40\x13\xdf\xac\xbf\x7a\xa0\xd7\x14\x2c\xf2\x02\x7e\x70\x08\x86\xaf\xd5\x5d\x7b\x9b\x98\x1d\x0b\x60\xfa\x3b\xd0\xe3\x31\x8c\x47\x4d\xdd\x68\x34\x40\x7a\x74\xf3\xe8\xbf\x01\x00\x00\xff\xff\x0d\x20\x90\xa6\xe8\x32\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
        return bindataRead(
@@ -129,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
13150, mode: os.FileMode(420), modTime: time.Unix(1519437986, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
13032, mode: os.FileMode(420), modTime: time.Unix(1520362388, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -149,7 +132,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -169,7 +152,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 
101, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 
101, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -189,7 +172,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -209,7 +192,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -229,7 +212,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -249,7 +232,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -269,7 +252,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -289,7 +272,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -346,14 +329,14 @@ func AssetNames() []string {
 
 // _bindata is a table, holding each asset generator, mapped to its name.
 var _bindata = map[string]func() (*asset, error){
-       "wski18n/resources/de_DE.all.json":   wski18nResourcesDe_deAllJson,
-       "wski18n/resources/en_US.all.json":   wski18nResourcesEn_usAllJson,
-       "wski18n/resources/es_ES.all.json":   wski18nResourcesEs_esAllJson,
-       "wski18n/resources/fr_FR.all.json":   wski18nResourcesFr_frAllJson,
-       "wski18n/resources/it_IT.all.json":   wski18nResourcesIt_itAllJson,
-       "wski18n/resources/ja_JA.all.json":   wski18nResourcesJa_jaAllJson,
-       "wski18n/resources/ko_KR.all.json":   wski18nResourcesKo_krAllJson,
-       "wski18n/resources/pt_BR.all.json":   wski18nResourcesPt_brAllJson,
+       "wski18n/resources/de_DE.all.json": wski18nResourcesDe_deAllJson,
+       "wski18n/resources/en_US.all.json": wski18nResourcesEn_usAllJson,
+       "wski18n/resources/es_ES.all.json": wski18nResourcesEs_esAllJson,
+       "wski18n/resources/fr_FR.all.json": wski18nResourcesFr_frAllJson,
+       "wski18n/resources/it_IT.all.json": wski18nResourcesIt_itAllJson,
+       "wski18n/resources/ja_JA.all.json": wski18nResourcesJa_jaAllJson,
+       "wski18n/resources/ko_KR.all.json": wski18nResourcesKo_krAllJson,
+       "wski18n/resources/pt_BR.all.json": wski18nResourcesPt_brAllJson,
        "wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
        "wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
 }
@@ -397,20 +380,19 @@ type bintree struct {
        Func     func() (*asset, error)
        Children map[string]*bintree
 }
-
 var _bintree = &bintree{nil, map[string]*bintree{
-       "wski18n": {nil, map[string]*bintree{
-               "resources": {nil, map[string]*bintree{
-                       "de_DE.all.json":   {wski18nResourcesDe_deAllJson, 
map[string]*bintree{}},
-                       "en_US.all.json":   {wski18nResourcesEn_usAllJson, 
map[string]*bintree{}},
-                       "es_ES.all.json":   {wski18nResourcesEs_esAllJson, 
map[string]*bintree{}},
-                       "fr_FR.all.json":   {wski18nResourcesFr_frAllJson, 
map[string]*bintree{}},
-                       "it_IT.all.json":   {wski18nResourcesIt_itAllJson, 
map[string]*bintree{}},
-                       "ja_JA.all.json":   {wski18nResourcesJa_jaAllJson, 
map[string]*bintree{}},
-                       "ko_KR.all.json":   {wski18nResourcesKo_krAllJson, 
map[string]*bintree{}},
-                       "pt_BR.all.json":   {wski18nResourcesPt_brAllJson, 
map[string]*bintree{}},
-                       "zh_Hans.all.json": {wski18nResourcesZh_hansAllJson, 
map[string]*bintree{}},
-                       "zh_Hant.all.json": {wski18nResourcesZh_hantAllJson, 
map[string]*bintree{}},
+       "wski18n": &bintree{nil, map[string]*bintree{
+               "resources": &bintree{nil, map[string]*bintree{
+                       "de_DE.all.json": 
&bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
+                       "en_US.all.json": 
&bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
+                       "es_ES.all.json": 
&bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
+                       "fr_FR.all.json": 
&bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
+                       "it_IT.all.json": 
&bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
+                       "ja_JA.all.json": 
&bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
+                       "ko_KR.all.json": 
&bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
+                       "pt_BR.all.json": 
&bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
+                       "zh_Hans.all.json": 
&bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
+                       "zh_Hant.all.json": 
&bintree{wski18nResourcesZh_hantAllJson, map[string]*bintree{}},
                }},
        }},
 }}
@@ -461,3 +443,4 @@ func _filePath(dir, name string) string {
        cannonicalName := strings.Replace(name, "\\", "/", -1)
        return filepath.Join(append([]string{dir}, 
strings.Split(cannonicalName, "/")...)...)
 }
+
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index b98062ad..7d1a2d77 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -15,10 +15,6 @@
     "id": "msg_prefix_warning",
     "translation": "Warning"
   },
-  {
-    "id": "msg_cmd_desc_long_publish",
-    "translation": "Publish a package to the registry set in ~/.wskprops."
-  },
   {
     "id": "msg_cmd_desc_long_report",
     "translation": "Reports on deployed entities (i.e., Packages, Actions, 
Triggers, Rules, etc.) as well as recent Activations in the specified 
namespace."
@@ -27,10 +23,6 @@
     "id": "msg_cmd_desc_long_root",
     "translation": "A tool to deploy, undeploy and sync openwhisk packages 
using a manifest and optional deployment files using YAML."
   },
-  {
-    "id": "msg_cmd_desc_short_publish",
-    "translation": "Publish a package to a registry."
-  },
   {
     "id": "msg_cmd_desc_short_report",
     "translation": "Provides a summary report of what's been deployed in the 
specified namespace."
@@ -39,14 +31,6 @@
     "id": "msg_cmd_desc_short_root",
     "translation": "A tool set to help deploy your openwhisk packages using a 
manifest file."
   },
-  {
-    "id": "msg_cmd_desc_short_add",
-    "translation": "Add an action, feed, trigger or rule to the manifest"
-  },
-  {
-    "id": "msg_cmd_desc_short_add_entity",
-    "translation": "Add a/an {{.key}} to the manifest file"
-  },
   {
     "id": "msg_cmd_desc_short_version",
     "translation": "Print the version number of wskdeploy"
@@ -267,10 +251,6 @@
     "id": "msg_err_dependency_unknown_type",
     "translation": "Dependency type is unknown.  wskdeploy only supports 
/whisk.system bindings or github.com packages.\n"
   },
-  {
-    "id": "msg_err_deployment_name_not_found",
-    "translation": "The {{.key}} [{{.name}}] in deployment file not found in 
manifest file.\n"
-  },
   {
     "id": "msg_err_entity_create",
     "translation": "Error creating {{.key}} with error message: {{.err}} and 
error code: {{.code}}.\n"
@@ -396,12 +376,12 @@
     "translation": "The manifest file [{{.path}}] contained no packages.\n"
   },
   {
-    "id": "DEBUG",
-    "translation": "================= DEBUG ==================="
+    "id": "msg_warn_deployment_name_not_found",
+    "translation": "The {{.key}} [{{.name}}] in the deployment file was not 
found in the manifest file.\n"
   },
   {
-    "id": "msg_dbg_key_verify",
-    "translation": "Verifying {{.name}} [{{.key}}] exists...\n"
+    "id": "DEBUG",
+    "translation": "================= DEBUG ==================="
   },
   {
     "id": "msg_dbg_deploying_using",
@@ -414,5 +394,17 @@
   {
     "id": "msg_dbg_searching_project_directory",
     "translation": "Searching project directory [{{.path}}] for 
[{{.key}}]...\n"
+  },
+  {
+    "id": "msg_dbg_deployment_name_found",
+    "translation": "The {{.key}} [{{.name}}] in the deployment file was found 
in the manifest file.\n"
+  },
+  {
+    "id": "msg_dbg_packages_found_root",
+    "translation": "Deployment file [{{.path}}]: Found packages under root.\n"
+  },
+  {
+    "id": "msg_dbg_packages_found_project",
+    "translation": "Deployment file [{{.path}}]: Found packages under project 
[{{.name}}].\n"
   }
 ]
diff --git a/wskprint/console.go b/wskprint/console.go
index 94e0f5d4..6e745650 100644
--- a/wskprint/console.go
+++ b/wskprint/console.go
@@ -22,6 +22,8 @@ import (
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
        "github.com/fatih/color"
        "github.com/mattn/go-colorable"
+       "os"
+       "strings"
 )
 
 const (
@@ -101,3 +103,17 @@ func PrintOpenWhiskVerbose(verbose bool, message string) {
 func PrintlnOpenWhiskVerbose(verbose bool, message string) {
        PrintOpenWhiskVerbose(verbose, message+"\n")
 }
+
+// Display "trace" output if either param is true OR we are running Go test 
verbose (i.e., "go test -v")
+// arg[0] = 
[/var/folders/nj/2blqqtm500l5ch2d5k0hvqvm0000gn/T/go-build041478919/github.com/apache/incubator-openwhisk-wskdeploy/deployers/_test/deployers.test
+// arg[1] = -test.v=true
+// arg[2] = -test.run=TestDeploymentReader_PackagesBindTrigger]
+// TODO() introduce "trace" as an optional flag (perhaps hidden or picked up 
from environment)
+func PrintlnOpenWhiskTrace(trace bool, message string) {
+       GO_TEST_VERBOSE := false
+       if len(os.Args) >= 2 {
+               // TODO() move this to an init() routine
+               GO_TEST_VERBOSE = strings.Contains(os.Args[1], "-test.v=true")
+       }
+       PrintOpenWhiskVerbose(GO_TEST_VERBOSE || trace, message+"\n")
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to