diff --git a/internal/boxcli/services.go b/internal/boxcli/services.go index 37153ac7c32..49dbd8c8497 100644 --- a/internal/boxcli/services.go +++ b/internal/boxcli/services.go @@ -124,6 +124,15 @@ func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command { }, } + pcportCommand := &cobra.Command{ + Use: "pcport", + Short: "Display the port that process-compose is running on", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + return showProcessComposePort(cmd, flags) + }, + } + flags.envFlag.register(servicesCommand) flags.config.registerPersistent(servicesCommand) servicesCommand.PersistentFlags().BoolVar( @@ -141,6 +150,7 @@ func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command { servicesCommand.AddCommand(restartCommand) servicesCommand.AddCommand(startCommand) servicesCommand.AddCommand(stopCommand) + servicesCommand.AddCommand(pcportCommand) return servicesCommand } @@ -274,3 +284,16 @@ func startProcessManager( }, ) } + +func showProcessComposePort(cmd *cobra.Command, flags servicesCmdFlags) error { + box, err := devbox.Open(&devopt.Opts{ + Dir: flags.config.path, + Environment: flags.config.environment, + Stderr: cmd.ErrOrStderr(), + }) + if err != nil { + return errors.WithStack(err) + } + + return box.ShowProcessComposePort(cmd.Context(), cmd.OutOrStdout()) +} diff --git a/internal/devbox/services.go b/internal/devbox/services.go index 10237905bd0..d03638e331e 100644 --- a/internal/devbox/services.go +++ b/internal/devbox/services.go @@ -3,6 +3,7 @@ package devbox import ( "context" "fmt" + "io" "strconv" "text/tabwriter" @@ -272,3 +273,13 @@ func (d *Devbox) runDevboxServicesScript(ctx context.Context, cmdArgs []string) cmdArgs = append([]string{"services"}, cmdArgs...) return d.RunScript(ctx, devopt.EnvOptions{}, "devbox", cmdArgs) } + +func (d *Devbox) ShowProcessComposePort(ctx context.Context, writer io.Writer) error { + port, err := services.GetProcessManagerPort(d.projectDir) + if err != nil { + return err // Error already contains user-friendly message from services layer + } + + fmt.Fprintf(writer, "%d\n", port) + return nil +}