@@ -20,13 +20,14 @@ func run(args []string) error {
2020
2121func newRootCommand () * cobra.Command {
2222 var name string
23+ var host string
2324 var privileged bool
2425
2526 root := & cobra.Command {
2627 Use : "devwrap --name <name> -- <cmd...>" ,
2728 Short : "Local dev reverse proxy helper" ,
28- Long : "Run local apps behind Caddy and map <name>.localhost . Use @PORT in your command arguments to inject the allocated app port." ,
29- Example : " devwrap --name myapp -- pnpm dev\n devwrap --name api -- uvicorn app:app --port @PORT\n devwrap -p" ,
29+ Long : "Run local apps behind Caddy and map routes to local app ports . Use @PORT in your command arguments to inject the allocated app port." ,
30+ Example : " devwrap --name myapp -- pnpm dev\n devwrap --name api -- uvicorn app:app --port @PORT\n devwrap --name web --host web.dev.test -- pnpm dev \n devwrap - p" ,
3031 SilenceUsage : true ,
3132 SilenceErrors : true ,
3233 Args : cobra .ArbitraryArgs ,
@@ -46,7 +47,7 @@ func newRootCommand() *cobra.Command {
4647 }
4748 return errors .New ("missing command after '--'" )
4849 }
49- return runApp (name , args , privileged )
50+ return runApp (name , host , args , privileged )
5051 },
5152 }
5253
@@ -62,6 +63,7 @@ func newRootCommand() *cobra.Command {
6263 })
6364
6465 root .Flags ().StringVar (& name , "name" , "" , "App route name (e.g. myapp)" )
66+ root .Flags ().StringVar (& host , "host" , "" , "Custom hostname (default: <name>.localhost)" )
6567 root .Flags ().BoolVarP (& privileged , "privileged" , "p" , false , "Use sudo to spawn proxy if Caddy is not already running" )
6668 root .PersistentFlags ().BoolVar (& outputJSON , "json" , false , "Output JSON for scripting" )
6769
@@ -143,16 +145,21 @@ func helpOnArgValidationError(next cobra.PositionalArgs) cobra.PositionalArgs {
143145 }
144146}
145147
146- func runApp (name string , cmdArgs []string , privileged bool ) error {
148+ func runApp (name , host string , cmdArgs []string , privileged bool ) error {
147149 if err := validateName (name ); err != nil {
148150 return err
149151 }
150152
153+ resolvedHost , err := hostForApp (name , host )
154+ if err != nil {
155+ return err
156+ }
157+
151158 if err := ensureCaddyOrDaemon (privileged ); err != nil {
152159 return err
153160 }
154161
155- lease , err := acquireLease (name , os .Getpid ())
162+ lease , err := acquireLease (name , resolvedHost , os .Getpid ())
156163 if err != nil {
157164 if checkDaemonReachable () {
158165 if path , logErr := daemonLogPath (); logErr == nil {
0 commit comments