Skip to content

Commit

Permalink
Merge pull request #481 from FabianKramm/main
Browse files Browse the repository at this point in the history
feat: add forward ports & address option
  • Loading branch information
FabianKramm authored Jul 5, 2023
2 parents 026c773 + f1d03b7 commit 6b780dc
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 8 deletions.
35 changes: 30 additions & 5 deletions cmd/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import (
"context"
"fmt"
"io"
"net"
"net/url"
"os"
"os/exec"
"strconv"

"github.com/loft-sh/devpod/cmd/flags"
"github.com/loft-sh/devpod/pkg/agent"
Expand Down Expand Up @@ -196,9 +198,32 @@ func startInBrowser(ctx context.Context, devPodConfig *config.Config, client cli
}

// determine port
vscodePort, err := port.FindAvailablePort(openvscode.DefaultVSCodePort)
if err != nil {
return err
var (
vscodeAddress string
vscodePort int
)
if openvscode.Options.GetValue(ideOptions, openvscode.BindAddressOption) == "" {
vscodePort, err = port.FindAvailablePort(openvscode.DefaultVSCodePort)
if err != nil {
return err
}

vscodeAddress = fmt.Sprintf("%d", vscodePort)
} else {
vscodeAddress = openvscode.Options.GetValue(ideOptions, openvscode.BindAddressOption)
_, port, err := net.SplitHostPort(vscodeAddress)
if err != nil {
return fmt.Errorf("parse host:port: %w", err)
} else if port == "" {
return fmt.Errorf("parse ADDRESS: expected host:port, got %s", vscodeAddress)
}

vscodePort, err = strconv.Atoi(port)
if err != nil {
return fmt.Errorf("parse host:port: %w", err)
}

logger.Infof("Bind VSCode to %s...", vscodeAddress)
}

// wait until reachable then open browser
Expand Down Expand Up @@ -259,10 +284,10 @@ func startInBrowser(ctx context.Context, devPodConfig *config.Config, client cli
devPodConfig,
containerClient,
user,
openvscode.Options.GetValue(ideOptions, openvscode.ForwardPortsOption) == "true",
true,
true,
true,
[]string{fmt.Sprintf("%d:%d", vscodePort, openvscode.DefaultVSCodePort)},
[]string{fmt.Sprintf("%s:%d", vscodeAddress, openvscode.DefaultVSCodePort)},
logger,
)
if err != nil {
Expand Down
18 changes: 17 additions & 1 deletion pkg/ide/openvscode/openvscode.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,33 @@ const DownloadAmd64Template = "https://github.com/gitpod-io/openvscode-server/re
const DownloadArm64Template = "https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-%s/openvscode-server-%s-linux-arm64.tar.gz"

const (
ForwardPortsOption = "FORWARD_PORTS"
OpenOption = "OPEN"
BindAddressOption = "BIND_ADDRESS"
VersionOption = "VERSION"
DownloadAmd64Option = "DOWNLOAD_AMD64"
DownloadArm64Option = "DOWNLOAD_ARM64"
)

var Options = ide.Options{
ForwardPortsOption: {
Name: ForwardPortsOption,
Description: "If DevPod should automatically do port-forwarding",
Default: "true",
Enum: []string{
"true",
"false",
},
},
BindAddressOption: {
Name: BindAddressOption,
Description: "The address to bind VSCode web to locally. E.g. 0.0.0.0:12345",
Default: "",
},
VersionOption: {
Name: VersionOption,
Description: "The version for the open vscode binary",
Default: "v1.78.2",
Default: "v1.79.2",
},
OpenOption: {
Name: OpenOption,
Expand Down
5 changes: 3 additions & 2 deletions pkg/tunnel/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/loft-sh/devpod/pkg/config"
config2 "github.com/loft-sh/devpod/pkg/devcontainer/config"
"github.com/loft-sh/devpod/pkg/devcontainer/setup"
"github.com/loft-sh/devpod/pkg/ide/openvscode"
"github.com/loft-sh/devpod/pkg/netstat"
devssh "github.com/loft-sh/devpod/pkg/ssh"
"github.com/loft-sh/log"
Expand All @@ -28,7 +29,7 @@ func RunInContainer(
devPodConfig *config.Config,
containerClient *ssh.Client,
user string,
forwardPorts,
forwardPorts bool,
gitCredentials,
dockerCredentials bool,
extraPorts []string,
Expand Down Expand Up @@ -87,7 +88,7 @@ func RunInContainer(
// create a port forwarder
var forwarder netstat.Forwarder
if forwardPorts {
forwarder = newForwarder(containerClient, forwardedPorts, log)
forwarder = newForwarder(containerClient, append(forwardedPorts, fmt.Sprintf("%d", openvscode.DefaultVSCodePort)), log)
}

// forward credentials to container
Expand Down

0 comments on commit 6b780dc

Please sign in to comment.