Repository: dapr/cli
Pull request #1312 (2023-06-10 10:45:56)

Merge release-1.11 into master
# Description

**To be merged after tag is created.**

Merge commits from release-1.11 into master


Patch:
diff --git a/cmd/run.go b/cmd/run.go
index d603a6a..f664a7e 100644
--- a/cmd/run.go
+++ b/cmd/run.go
@@ -63,6 +63,7 @@ var (
 	enableAPILogging   bool
 	apiListenAddresses string
 	runFilePath        string
+	appChannelAddress  string
 )
 
 const (
@@ -92,6 +93,10 @@ dapr run --app-id myapp
 # Run a gRPC application written in Go (listening on port 3000)
 dapr run --app-id myapp --app-port 3000 --app-protocol grpc -- go run main.go
 
+# Run a gRPC application written in Go (listening on port 3000) with a different app channel address
+dapr run --app-id myapp --app-port 3000 --app-channel-address localhost --app-protocol grpc -- go run main.go
+
+
 # Run sidecar only specifying dapr runtime installation directory
 dapr run --app-id myapp --runtime-path /usr/local/dapr
 
@@ -174,16 +179,17 @@ dapr run --run-file /path/to/directory
 			DaprdInstallPath:   daprRuntimePath,
 		}
 		output, err := runExec.NewOutput(&standalone.RunConfig{
-			AppID:            appID,
-			AppPort:          appPort,
-			HTTPPort:         port,
-			GRPCPort:         grpcPort,
-			ProfilePort:      profilePort,
-			Command:          args,
-			MetricsPort:      metricsPort,
-			UnixDomainSocket: unixDomainSocket,
-			InternalGRPCPort: internalGRPCPort,
-			SharedRunConfig:  *sharedRunConfig,
+			AppID:             appID,
+			AppChannelAddress: appChannelAddress,
+			AppPort:           appPort,
+			HTTPPort:          port,
+			GRPCPort:          grpcPort,
+			ProfilePort:       profilePort,
+			Command:           args,
+			MetricsPort:       metricsPort,
+			UnixDomainSocket:  unixDomainSocket,
+			InternalGRPCPort:  internalGRPCPort,
+			SharedRunConfig:   *sharedRunConfig,
 		})
 		if err != nil {
 			print.FailureStatusEvent(os.Stderr, err.Error())
@@ -457,6 +463,7 @@ func init() {
 	RunCmd.Flags().BoolVar(&enableAPILogging, "enable-api-logging", false, "Log API calls at INFO verbosity. Valid values are: true or false")
 	RunCmd.Flags().StringVar(&apiListenAddresses, "dapr-listen-addresses", "", "Comma separated list of IP addresses that sidecar will listen to")
 	RunCmd.Flags().StringVarP(&runFilePath, "run-file", "f", "", "Path to the run template file for the list of apps to run")
+	RunCmd.Flags().StringVarP(&appChannelAddress, "app-channel-address", "", utils.DefaultAppChannelAddress, "The network address the application listens on")
 	RootCmd.AddCommand(RunCmd)
 }
 
@@ -579,17 +586,17 @@ func executeRun(runTemplateName, runFilePath string, apps []runfileconfig.App) (
 func getAppDaprdWriter(app runfileconfig.App, isAppCommandEmpty bool) io.Writer {
 	var appDaprdWriter io.Writer
 	if isAppCommandEmpty {
-		if app.DaprdLogDestination != runfileconfig.Console {
+		if app.DaprdLogDestination != standalone.Console {
 			appDaprdWriter = io.MultiWriter(os.Stdout, app.DaprdLogWriteCloser)
 		} else {
 			appDaprdWriter = os.Stdout
 		}
 	} else {
-		if app.AppLogDestination != runfileconfig.Console && app.DaprdLogDestination != runfileconfig.Console {
+		if app.AppLogDestination != standalone.Console && app.DaprdLogDestination != standalone.Console {
 			appDaprdWriter = io.MultiWriter(app.AppLogWriteCloser, app.DaprdLogWriteCloser, os.Stdout)
-		} else if app.AppLogDestination != runfileconfig.Console {
+		} else if app.AppLogDestination != standalone.Console {
 			appDaprdWriter = io.MultiWriter(app.AppLogWriteCloser, os.Stdout)
-		} else if app.DaprdLogDestination != runfileconfig.Console {
+		} else if app.DaprdLogDestination != standalone.Console {
 			appDaprdWriter = io.MultiWriter(app.DaprdLogWriteCloser, os.Stdout)
 		} else {
 			appDaprdWriter = os.Stdout
@@ -599,14 +606,14 @@ func getAppDaprdWriter(app runfileconfig.App, isAppCommandEmpty bool) io.Writer
 }
 
 // getLogWriter returns the log writer based on the log destination.
-func getLogWriter(fileLogWriterCloser io.WriteCloser, logDestination runfileconfig.LogDestType) io.Writer {
+func getLogWriter(fileLogWriterCloser io.WriteCloser, logDestination standalone.LogDestType) io.Writer {
 	var logWriter io.Writer
 	switch logDestination {
-	case runfileconfig.Console:
+	case standalone.Console:
 		logWriter = os.Stdout
-	case runfileconfig.File:
+	case standalone.File:
 		logWriter = fileLogWriterCloser
-	case runfileconfig.FileAndConsole:
+	case standalone.FileAndConsole:
 		logWriter = io.MultiWriter(os.Stdout, fileLogWriterCloser)
 	}
 	return logWriter
diff --git a/go.mod b/go.mod
index 394a137..a903106 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
 	github.com/Azure/go-autorest/autorest/adal v0.9.22 // indirect
 	github.com/Pallinder/sillyname-go v0.0.0-20130730142914-97aeae9e6ba1
 	github.com/briandowns/spinner v1.19.0
-	github.com/dapr/dapr v1.11.0-rc.4
+	github.com/dapr/dapr v1.11.0
 	github.com/dapr/go-sdk v1.6.0
 	github.com/docker/docker v20.10.21+incompatible
 	github.com/fatih/color v1.15.0
@@ -22,7 +22,7 @@ require (
 	github.com/shirou/gopsutil v3.21.11+incompatible
 	github.com/spf13/cobra v1.6.1
 	github.com/spf13/viper v1.13.0
-	github.com/stretchr/testify v1.8.2
+	github.com/stretchr/testify v1.8.3
 	golang.org/x/sys v0.8.0
 	gopkg.in/yaml.v2 v2.4.0
 	helm.sh/helm/v3 v3.11.1
@@ -72,10 +72,10 @@ require (
 	github.com/containerd/containerd v1.6.18 // indirect
 	github.com/containerd/continuity v0.3.0 // indirect
 	github.com/cyphar/filepath-securejoin v0.2.3 // indirect
-	github.com/dapr/components-contrib v1.11.0-rc.6 // indirect
-	github.com/dapr/kit v0.0.5 // indirect
+	github.com/dapr/components-contrib v1.11.0-rc.11 // indirect
+	github.com/dapr/kit v0.11.2 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
+	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
 	github.com/docker/cli v20.10.21+incompatible // indirect
 	github.com/docker/distribution v2.8.1+incompatible // indirect
 	github.com/docker/docker-credential-helpers v0.7.0 // indirect
@@ -147,7 +147,7 @@ require (
 	github.com/mattn/go-isatty v0.0.18 // indirect
 	github.com/mattn/go-runewidth v0.0.9 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
-	github.com/microsoft/durabletask-go v0.2.3 // indirect
+	github.com/microsoft/durabletask-go v0.2.4 // indirect
 	github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect
 	github.com/mitchellh/copystructure v1.2.0 // indirect
 	github.com/mitchellh/go-wordwrap v1.0.0 // indirect
@@ -179,7 +179,7 @@ require (
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect
 	github.com/shopspring/decimal v1.2.0 // indirect
-	github.com/sirupsen/logrus v1.9.0 // indirect
+	github.com/sirupsen/logrus v1.9.2 // indirect
 	github.com/sony/gobreaker v0.5.0 // indirect
 	github.com/spf13/afero v1.8.2 // indirect
 	github.com/spf13/cast v1.5.1 // indirect
@@ -210,7 +210,7 @@ require (
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
 	go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
 	golang.org/x/crypto v0.9.0 // indirect
-	golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect
+	golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
 	golang.org/x/net v0.10.0 // indirect
 	golang.org/x/oauth2 v0.8.0 // indirect
 	golang.org/x/sync v0.2.0 // indirect
diff --git a/go.sum b/go.sum
index 8ee190a..bf91ca3 100644
--- a/go.sum
+++ b/go.sum
@@ -336,20 +336,21 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S
 github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
 github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
 github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
-github.com/dapr/components-contrib v1.11.0-rc.6 h1:sJiILsy/UVVeDeYp7tfG41Jw/kut3B98yWPKnxFO0tI=
-github.com/dapr/components-contrib v1.11.0-rc.6/go.mod h1:esIqaJSvemBfMVoO9PVNCKZBEX38SVKRd22RI7XLWOA=
-github.com/dapr/dapr v1.11.0-rc.4 h1:orrtDE0QSLGy5JbKvnZpAjuLTc3iERVKzHRLePpZW4o=
-github.com/dapr/dapr v1.11.0-rc.4/go.mod h1:BZI1EBRrjVUgF9be++d92AnX3RzPrzuaMpEF6YoqveI=
+github.com/dapr/components-contrib v1.11.0-rc.11 h1:PFUTCCfZ+99BIorCNR+mB/CEGnGFNMbI0OhQQ9pbq3E=
+github.com/dapr/components-contrib v1.11.0-rc.11/go.mod h1:prx2ATX6wFnR6Cp1xXGW3J9s5Gyz9AtOrG0xBf7QnHI=
+github.com/dapr/dapr v1.11.0 h1:sKDHKyehNm7xY2z6oXoUIcj2lXqKnlkAYPkvroldrwU=
+github.com/dapr/dapr v1.11.0/go.mod h1:++3iGjeJcpraxZxdZi1EblplcCXgu/Ycz0Q/u+MYvxw=
 github.com/dapr/go-sdk v1.6.0 h1:jg5A2khSCHF8bGZsig5RWN/gD0jjitszc2V6Uq2pPdY=
 github.com/dapr/go-sdk v1.6.0/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4=
-github.com/dapr/kit v0.0.5 h1:BbjO6LksdXAv6iuTVZiHJNkXj9Ii1gS2wA1u785Ypsg=
-github.com/dapr/kit v0.0.5/go.mod h1:VTWiX6nk5RWZ/kqEJD/EGjJU8hdwHZ73r75K510OHBY=
+github.com/dapr/kit v0.11.2 h1:4tJre4OWyOfBFDZeDvEIC+7nYgTRgqpCvo4/bfB2sN8=
+github.com/dapr/kit v0.11.2/go.mod h1:Iq5mKuZnmO+Lyu7MC8755YWv+mp3h7/nomRQcjZfN5k=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
-github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4=
 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
 github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
 github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@@ -822,8 +823,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff
 github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
 github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
 github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
-github.com/microsoft/durabletask-go v0.2.3 h1:Qrwij52Y1qf2jVPEETBZEOoRK69ZMZl5VqwVNKEJh7w=
-github.com/microsoft/durabletask-go v0.2.3/go.mod h1:UtJXHmKalksdccRiN9Y16cHJYYtZN0bqmqOSiy56V8g=
+github.com/microsoft/durabletask-go v0.2.4 h1:jeTz559GSXHmOzp5iTbeIq35YYxKSaDHkJcnl8F9wX4=
+github.com/microsoft/durabletask-go v0.2.4/go.mod h1:UtJXHmKalksdccRiN9Y16cHJYYtZN0bqmqOSiy56V8g=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
 github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
@@ -1062,8 +1063,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
-github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y=
+github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -1119,8 +1120,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
 github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
+github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
@@ -1274,8 +1276,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU=
-golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
diff --git a/pkg/standalone/run.go b/pkg/standalone/run.go
index d8ac1db..2e6d1cc 100644
--- a/pkg/standalone/run.go
+++ b/pkg/standalone/run.go
@@ -31,48 +31,59 @@ import (
 	"github.com/dapr/dapr/pkg/components"
 )
 
+type LogDestType string
+
 const (
+	Console             LogDestType = "console"
+	File                LogDestType = "file"
+	FileAndConsole      LogDestType = "fileAndConsole"
+	DefaultDaprdLogDest             = File
+	DefaultAppLogDest               = FileAndConsole
+
 	sentryDefaultAddress = "localhost:50001"
 	defaultStructTagKey  = "default"
 )
 
 // RunConfig represents the application configuration parameters.
 type RunConfig struct {
-	SharedRunConfig  `yaml:",inline"`
-	AppID            string   `env:"APP_ID" arg:"app-id" yaml:"appID"`
-	AppPort          int      `env:"APP_PORT" arg:"app-port" yaml:"appPort" default:"-1"`
-	HTTPPort         int      `env:"DAPR_HTTP_PORT" arg:"dapr-http-port" yaml:"daprHTTPPort" default:"-1"`
-	GRPCPort         int      `env:"DAPR_GRPC_PORT" arg:"dapr-grpc-port" yaml:"daprGRPCPort" default:"-1"`
-	ProfilePort      int      `arg:"profile-port" yaml:"profilePort" default:"-1"`
-	Command          []string `yaml:"command"`
-	MetricsPort      int      `env:"DAPR_METRICS_PORT" arg:"metrics-port" yaml:"metricsPort" default:"-1"`
-	UnixDomainSocket string   `arg:"unix-domain-socket" yaml:"unixDomainSocket"`
-	InternalGRPCPort int      `arg:"dapr-internal-grpc-port" yaml:"daprInternalGRPCPort" default:"-1"`
+	SharedRunConfig   `yaml:",inline"`
+	AppID             string   `env:"APP_ID" arg:"app-id" yaml:"appID"`
+	AppChannelAddress string   `env:"APP_CHANNEL_ADDRESS" arg:"app-channel-address" ifneq:"127.0.0.1" yaml:"appChannelAddress"`
+	AppPort           int      `env:"APP_PORT" arg:"app-port" yaml:"appPort" default:"-1"`
+	HTTPPort          int      `env:"DAPR_HTTP_PORT" arg:"dapr-http-port" yaml:"daprHTTPPort" default:"-1"`
+	GRPCPort          int      `env:"DAPR_GRPC_PORT" arg:"dapr-grpc-port" yaml:"daprGRPCPort" default:"-1"`
+	ProfilePort       int      `arg:"profile-port" yaml:"profilePort" default:"-1"`
+	Command           []string `yaml:"command"`
+	MetricsPort       int      `env:"DAPR_METRICS_PORT" arg:"metrics-port" yaml:"metricsPort" default:"-1"`
+	UnixDomainSocket  string   `arg:"unix-domain-socket" yaml:"unixDomainSocket"`
+	InternalGRPCPort  int      `arg:"dapr-internal-grpc-port" yaml:"daprInternalGRPCPort" default:"-1"`
 }
 
 // SharedRunConfig represents the application configuration parameters, which can be shared across many apps.
 type SharedRunConfig struct {
-	ConfigFile         string            `arg:"config" yaml:"configFilePath"`
-	AppProtocol        string            `arg:"app-protocol" yaml:"appProtocol" default:"http"`
-	APIListenAddresses string            `arg:"dapr-listen-addresses" yaml:"apiListenAddresses"`
-	EnableProfiling    bool              `arg:"enable-profiling" yaml:"enableProfiling"`
-	LogLevel           string            `arg:"log-level" yaml:"logLevel"`
-	MaxConcurrency     int               `arg:"app-max-concurrency" yaml:"appMaxConcurrency" default:"-1"`
-	PlacementHostAddr  string            `arg:"placement-host-address" yaml:"placementHostAddress"`
-	ComponentsPath     string            `arg:"components-path"` // Deprecated in run template file: use ResourcesPaths instead.
-	ResourcesPath      string            `yaml:"resourcesPath"`  // Deprecated in run template file: use ResourcesPaths instead.
-	ResourcesPaths     []string          `arg:"resources-path" yaml:"resourcesPaths"`
-	AppSSL             bool              `arg:"app-ssl" yaml:"appSSL"`
-	MaxRequestBodySize int               `arg:"dapr-http-max-request-size" yaml:"daprHTTPMaxRequestSize" default:"-1"`
-	HTTPReadBufferSize int               `arg:"dapr-http-read-buffer-size" yaml:"daprHTTPReadBufferSize" default:"-1"`
-	EnableAppHealth    bool              `arg:"enable-app-health-check" yaml:"enableAppHealthCheck"`
-	AppHealthPath      string            `arg:"app-health-check-path" yaml:"appHealthCheckPath"`
-	AppHealthInterval  int               `arg:"app-health-probe-interval" ifneq:"0" yaml:"appHealthProbeInterval"`
-	AppHealthTimeout   int               `arg:"app-health-probe-timeout" ifneq:"0" yaml:"appHealthProbeTimeout"`
-	AppHealthThreshold int               `arg:"app-health-threshold" ifneq:"0" yaml:"appHealthThreshold"`
-	EnableAPILogging   bool              `arg:"enable-api-logging" yaml:"enableApiLogging"`
-	DaprdInstallPath   string            `yaml:"runtimePath"`
-	Env                map[string]string `yaml:"env"`
+	ConfigFile          string            `arg:"config" yaml:"configFilePath"`
+	AppProtocol         string            `arg:"app-protocol" yaml:"appProtocol" default:"http"`
+	APIListenAddresses  string            `arg:"dapr-listen-addresses" yaml:"apiListenAddresses"`
+	EnableProfiling     bool              `arg:"enable-profiling" yaml:"enableProfiling"`
+	LogLevel            string            `arg:"log-level" yaml:"logLevel"`
+	MaxConcurrency      int               `arg:"app-max-concurrency" yaml:"appMaxConcurrency" default:"-1"`
+	PlacementHostAddr   string            `arg:"placement-host-address" yaml:"placementHostAddress"`
+	ComponentsPath      string            `arg:"components-path"` // Deprecated in run template file: use ResourcesPaths instead.
+	ResourcesPath       string            `yaml:"resourcesPath"`  // Deprecated in run template file: use ResourcesPaths instead.
+	ResourcesPaths      []string          `arg:"resources-path" yaml:"resourcesPaths"`
+	AppSSL              bool              `arg:"app-ssl" yaml:"appSSL"`
+	MaxRequestBodySize  int               `arg:"dapr-http-max-request-size" yaml:"daprHTTPMaxRequestSize" default:"-1"`
+	HTTPReadBufferSize  int               `arg:"dapr-http-read-buffer-size" yaml:"daprHTTPReadBufferSize" default:"-1"`
+	EnableAppHealth     bool              `arg:"enable-app-health-check" yaml:"enableAppHealthCheck"`
+	AppHealthPath       string            `arg:"app-health-check-path" yaml:"appHealthCheckPath"`
+	AppHealthInterval   int               `arg:"app-health-probe-interval" ifneq:"0" yaml:"appHealthProbeInterval"`
+	AppHealthTimeout    int               `arg:"app-health-probe-timeout" ifneq:"0" yaml:"appHealthProbeTimeout"`
+	AppHealthThreshold  int               `arg:"app-health-threshold" ifneq:"0" yaml:"appHealthThreshold"`
+	EnableAPILogging    bool              `arg:"enable-api-logging" yaml:"enableApiLogging"`
+	DaprdInstallPath    string            `yaml:"runtimePath"`
+	Env                 map[string]string `yaml:"env"`
+	DaprdLogDestination LogDestType       `yaml:"daprdLogDestination"`
+	AppLogDestination   LogDestType       `yaml:"appLogDestination"`
 }
 
 func (meta *DaprMeta) newAppID() string {
@@ -412,3 +423,15 @@ func GetAppCommand(config *RunConfig) *exec.Cmd {
 
 	return cmd
 }
+
+func (l LogDestType) String() string {
+	return string(l)
+}
+
+func (l LogDestType) IsValid() error {
+	switch l {
+	case Console, File, FileAndConsole:
+		return nil
+	}
+	return fmt.Errorf("invalid log destination type: %s", l)
+}
diff --git a/pkg/standalone/runfileconfig/run_file_config.go b/pkg/standalone/runfileconfig/run_file_config.go
index dba5410..422d4d6 100644
--- a/pkg/standalone/runfileconfig/run_file_config.go
+++ b/pkg/standalone/runfileconfig/run_file_config.go
@@ -14,7 +14,6 @@ limitations under the License.
 package runfileconfig
 
 import (
-	"fmt"
 	"io"
 	"os"
 	"path/filepath"
@@ -23,15 +22,7 @@ import (
 	"github.com/dapr/cli/pkg/standalone"
 )
 
-type LogDestType string
-
 const (
-	Console             LogDestType = "console"
-	File                LogDestType = "file"
-	FileAndConsole      LogDestType = "fileAndConsole"
-	DefaultDaprdLogDest             = File
-	DefaultAppLogDest               = FileAndConsole
-
 	appLogFileNamePrefix   = "app"
 	daprdLogFileNamePrefix = "daprd"
 	logFileExtension       = ".log"
@@ -55,8 +46,6 @@ type App struct {
 	DaprdLogFileName     string
 	AppLogWriteCloser    io.WriteCloser
 	DaprdLogWriteCloser  io.WriteCloser
-	DaprdLogDestination  LogDestType `yaml:"daprdLogDestination"`
-	AppLogDestination    LogDestType `yaml:"appLogDestination"`
 }
 
 // Common represents the configuration options for the common section in the run file.
@@ -75,7 +64,7 @@ func (a *App) GetLogsDir() string {
 func (a *App) CreateAppLogFile() error {
 	var err error
 	var f *os.File
-	if a.AppLogDestination == Console {
+	if a.AppLogDestination == standalone.Console {
 		f = os.Stdout
 	} else {
 		f, err = a.createLogFile(appLogFileNamePrefix)
@@ -92,7 +81,7 @@ func (a *App) CreateAppLogFile() error {
 func (a *App) CreateDaprdLogFile() error {
 	var err error
 	var f *os.File
-	if a.DaprdLogDestination == Console {
+	if a.DaprdLogDestination == standalone.Console {
 		f = os.Stdout
 	} else {
 		f, err = a.createLogFile(daprdLogFileNamePrefix)
@@ -126,15 +115,3 @@ func (a *App) CloseDaprdLogFile() error {
 	}
 	return nil
 }
-
-func (l LogDestType) String() string {
-	return string(l)
-}
-
-func (l LogDestType) IsValid() error {
-	switch l {
-	case Console, File, FileAndConsole:
-		return nil
-	}
-	return fmt.Errorf("invalid log destination type: %s", l)
-}
diff --git a/pkg/standalone/runfileconfig/run_file_config_parser.go b/pkg/standalone/runfileconfig/run_file_config_parser.go
index 6f0a907..207bfd2 100644
--- a/pkg/standalone/runfileconfig/run_file_config_parser.go
+++ b/pkg/standalone/runfileconfig/run_file_config_parser.go
@@ -180,12 +180,12 @@ func (a *RunFileConfig) setAppIDIfEmpty(app *App) error {
 // It also validates the log destination if provided.
 func (a *RunFileConfig) setAndValidateLogDestination(app *App) error {
 	if app.DaprdLogDestination == "" {
-		app.DaprdLogDestination = DefaultDaprdLogDest
+		app.DaprdLogDestination = standalone.DefaultDaprdLogDest
 	} else if err := app.DaprdLogDestination.IsValid(); err != nil {
 		return err
 	}
 	if app.AppLogDestination == "" {
-		app.AppLogDestination = DefaultAppLogDest
+		app.AppLogDestination = standalone.DefaultAppLogDest
 	} else if err := app.AppLogDestination.IsValid(); err != nil {
 		return err
 	}
diff --git a/utils/utils.go b/utils/utils.go
index 9b0814d..6a4d3aa 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -48,6 +48,9 @@ const (
 
 	windowsOsType = "windows"
 	homeDirPrefix = "~/"
+
+	// DefaultAppChannelAddress is the default local network address that user application listen on.
+	DefaultAppChannelAddress = "127.0.0.1"
 )
 
 // IsValidContainerRuntime checks if the input is a valid container runtime.


Test patch:
diff --git a/.github/workflows/kind_e2e.yaml b/.github/workflows/kind_e2e.yaml
index 1a836e3..1d58d13 100644
--- a/.github/workflows/kind_e2e.yaml
+++ b/.github/workflows/kind_e2e.yaml
@@ -50,11 +50,11 @@ jobs:
     name: E2E tests for K8s (KinD)
     runs-on: ubuntu-latest
     env:
-      DAPR_RUNTIME_PINNED_VERSION: 1.11.0-rc.4
+      DAPR_RUNTIME_PINNED_VERSION: 1.11.0
       DAPR_DASHBOARD_PINNED_VERSION: 0.13.0
       DAPR_RUNTIME_LATEST_STABLE_VERSION:
       DAPR_DASHBOARD_LATEST_STABLE_VERSION:
-      DAPR_TGZ: dapr-1.11.0-rc.4.tgz
+      DAPR_TGZ: dapr-1.11.0.tgz
     strategy:
       fail-fast: false # Keep running if one leg fails.
       matrix:
diff --git a/.github/workflows/self_hosted_e2e.yaml b/.github/workflows/self_hosted_e2e.yaml
index 76d2c75..ed9f0d5 100644
--- a/.github/workflows/self_hosted_e2e.yaml
+++ b/.github/workflows/self_hosted_e2e.yaml
@@ -38,7 +38,7 @@ jobs:
       GOARCH: ${{ matrix.target_arch }}
       GOPROXY: https://proxy.golang.org
       ARCHIVE_OUTDIR: dist/archives
-      DAPR_RUNTIME_PINNED_VERSION: "1.11.0-rc.4"
+      DAPR_RUNTIME_PINNED_VERSION: "1.11.0"
       DAPR_DASHBOARD_PINNED_VERSION: 0.13.0
       DAPR_RUNTIME_LATEST_STABLE_VERSION:
       DAPR_DASHBOARD_LATEST_STABLE_VERSION:
diff --git a/pkg/kubernetes/dashboard_chart_test.go b/pkg/kubernetes/dashboard_chart_test.go
index 2addad2..2e21364 100644
--- a/pkg/kubernetes/dashboard_chart_test.go
+++ b/pkg/kubernetes/dashboard_chart_test.go
@@ -41,7 +41,7 @@ func TestDashboardChart(t *testing.T) {
 			expectError:     false,
 		},
 		{
-			runtimeVersion:  "1.11.0-rc.4",
+			runtimeVersion:  "1.11.0",
 			expectDashboard: false,
 			expectError:     false,
 		},
diff --git a/pkg/runexec/runexec_test.go b/pkg/runexec/runexec_test.go
index 6dd7f88..377124e 100644
--- a/pkg/runexec/runexec_test.go
+++ b/pkg/runexec/runexec_test.go
@@ -186,15 +186,16 @@ func TestRun(t *testing.T) {
 		APIListenAddresses: "127.0.0.1",
 	}
 	basicConfig := &standalone.RunConfig{
-		AppID:            "MyID",
-		AppPort:          3000,
-		HTTPPort:         8000,
-		GRPCPort:         50001,
-		Command:          []string{"MyCommand", "--my-arg"},
-		ProfilePort:      9090,
-		MetricsPort:      9001,
-		InternalGRPCPort: 5050,
-		SharedRunConfig:  *sharedRunConfig,
+		AppID:             "MyID",
+		AppPort:           3000,
+		HTTPPort:          8000,
+		GRPCPort:          50001,
+		Command:           []string{"MyCommand", "--my-arg"},
+		ProfilePort:       9090,
+		MetricsPort:       9001,
+		InternalGRPCPort:  5050,
+		AppChannelAddress: "localhost",
+		SharedRunConfig:   *sharedRunConfig,
 	}
 
 	t.Run("run happy http", func(t *testing.T) {
@@ -204,6 +205,7 @@ func TestRun(t *testing.T) {
 		assertCommonArgs(t, basicConfig, output)
 		assert.Equal(t, "MyCommand", output.AppCMD.Args[0])
 		assert.Equal(t, "--my-arg", output.AppCMD.Args[1])
+		assertArgumentEqual(t, "app-channel-address", "localhost", output.DaprCMD.Args)
 		assertAppEnv(t, basicConfig, output)
 	})
 
diff --git a/tests/e2e/standalone/invoke_test.go b/tests/e2e/standalone/invoke_test.go
index 5c829e4..812d0ea 100644
--- a/tests/e2e/standalone/invoke_test.go
+++ b/tests/e2e/standalone/invoke_test.go
@@ -20,6 +20,7 @@ import (
 	"context"
 	"fmt"
 	"net/http"
+	"strconv"
 	"testing"
 
 	"github.com/dapr/go-sdk/service/common"
@@ -28,9 +29,8 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestStandaloneInvoke(t *testing.T) {
-	ensureDaprInstallation(t)
-	s := daprHttp.NewService(":9987")
+func StartTestService(t *testing.T, port int) common.Service {
+	s := daprHttp.NewService(":" + strconv.Itoa(port))
 
 	err := s.AddServiceInvocationHandler("/test", func(ctx context.Context, e *common.InvocationEvent) (*common.Content, error) {
 		val := &common.Content{
@@ -43,7 +43,6 @@ func TestStandaloneInvoke(t *testing.T) {
 
 	assert.NoError(t, err, "unable to AddTopicEventHandler")
 
-	defer s.Stop()
 	go func() {
 		err = s.Start()
 
@@ -52,8 +51,16 @@ func TestStandaloneInvoke(t *testing.T) {
 			err = nil
 		}
 
-		assert.NoError(t, err, "unable to listen on :9987")
+		assert.NoError(t, err, "unable to listen on :%d", port)
 	}()
+	return s
+}
+
+func TestStandaloneInvoke(t *testing.T) {
+	port := 9987
+	ensureDaprInstallation(t)
+	s := StartTestService(t, port)
+	defer s.Stop()
 
 	for _, path := range getSocketCases() {
 		executeAgainstRunningDapr(t, func() {
@@ -105,6 +112,29 @@ func TestStandaloneInvoke(t *testing.T) {
 			t.Log(output)
 			require.NoError(t, err, "dapr stop failed")
 			assert.Contains(t, output, "app stopped successfully: invoke_e2e")
-		}, "run", "--app-id", "invoke_e2e", "--app-port", "9987", "--unix-domain-socket", path)
+		}, "run", "--app-id", "invoke_e2e", "--app-port", strconv.Itoa(port), "--unix-domain-socket", path)
 	}
 }
+
+func TestStandaloneInvokeWithAppChannel(t *testing.T) {
+	port := 9988
+	ensureDaprInstallation(t)
+	s := StartTestService(t, port)
+	defer s.Stop()
+
+	executeAgainstRunningDapr(t, func() {
+		t.Run(fmt.Sprintf("data from file with app channel address set to localhost"), func(t *testing.T) {
+			// empty unix domain socket path
+			output, err := cmdInvoke("invoke_e2e_app_channel", "test", "", "--data-file", "../testdata/message.json")
+			t.Log(output)
+			assert.NoError(t, err, "unable to invoke with  --data-file")
+			assert.Contains(t, output, "App invoked successfully")
+			assert.Contains(t, output, "{\"dapr\": \"is_great\"}")
+		})
+
+		output, err := cmdStopWithAppID("invoke_e2e_app_channel")
+		t.Log(output)
+		require.NoError(t, err, "dapr stop failed")
+		assert.Contains(t, output, "app stopped successfully: invoke_e2e_app_channel")
+	}, "run", "--app-id", "invoke_e2e_app_channel", "--app-port", strconv.Itoa(port), "--app-channel-address", "localhost")
+}
diff --git a/tests/e2e/upgrade/upgrade_test.go b/tests/e2e/upgrade/upgrade_test.go
index 52887e0..53868d2 100644
--- a/tests/e2e/upgrade/upgrade_test.go
+++ b/tests/e2e/upgrade/upgrade_test.go
@@ -71,7 +71,7 @@ var supportedUpgradePaths = []upgradePath{
 			CustomResourceDefs:  []string{"components.dapr.io", "configurations.dapr.io", "subscriptions.dapr.io", "resiliencies.dapr.io"},
 		},
 		next: common.VersionDetails{
-			RuntimeVersion:      "1.11.0-rc.4",
+			RuntimeVersion:      "1.11.0",
 			DashboardVersion:    "0.13.0",
 			ClusterRoles:        []string{"dapr-dashboard", "dapr-injector", "dapr-operator-admin", "dapr-placement", "dapr-sentry"},
 			ClusterRoleBindings: []string{"dapr-operator-admin", "dapr-dashboard", "dapr-injector", "dapr-placement", "dapr-sentry"},
@@ -81,7 +81,7 @@ var supportedUpgradePaths = []upgradePath{
 	// test downgrade.
 	{
 		previous: common.VersionDetails{
-			RuntimeVersion:      "1.11.0-rc.4",
+			RuntimeVersion:      "1.11.0",
 			DashboardVersion:    "0.13.0",
 			ClusterRoles:        []string{"dapr-dashboard", "dapr-injector", "dapr-operator-admin", "dapr-placement", "dapr-sentry"},
 			ClusterRoleBindings: []string{"dapr-operator-admin", "dapr-dashboard", "dapr-injector", "dapr-placement", "dapr-sentry"},