Skip to content

Commit

Permalink
fix: pass JAVA_RUNFILES to javaparser process
Browse files Browse the repository at this point in the history
  • Loading branch information
ar3s3ru committed Dec 7, 2023
1 parent a271ac4 commit b01bab0
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 4 deletions.
1 change: 1 addition & 0 deletions java/gazelle/private/servermanager/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ go_library(
"//java/gazelle/private/javaparser/proto/gazelle/java/javaparser/v0:javaparser",
"@com_github_rs_zerolog//:zerolog",
"@io_bazel_rules_go//go/runfiles:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
"@org_golang_google_grpc//:go_default_library",
],
)
68 changes: 64 additions & 4 deletions java/gazelle/private/servermanager/servermanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"os/exec"
"path/filepath"
"strconv"
"strings"
"sync"
"time"

Expand All @@ -17,7 +18,13 @@ import (
"google.golang.org/grpc"
)

const javaparser = "contrib_rules_jvm/java/src/com/github/bazel_contrib/contrib_rules_jvm/javaparser/generators/Main"
const (
javaparserPath = "contrib_rules_jvm/java/src/com/github/bazel_contrib/contrib_rules_jvm/javaparser/generators/Main"

runfilesManifestFileKey = "RUNFILES_MANIFEST_FILE"
runfilesDirKey = "RUNFILES_DIR"
javaRunfilesKey = "JAVA_RUNFILES"
)

type ServerManager struct {
logger zerolog.Logger
Expand Down Expand Up @@ -65,9 +72,17 @@ func (m *ServerManager) Connect() (*grpc.ClientConn, error) {
"--idle-timeout", "30",
)

m.logger.Info().
runfilesEnv, err := m.runfilesEnv()
if err != nil {
return nil, fmt.Errorf("failed to get runfiles env vars for javaparser: %w", err)
}

cmd.Env = append(cmd.Env, runfilesEnv...)

m.logger.Debug().
Str("cmd", cmd.String()).
Msg("starting javaparser with command")
Strs("env", cmd.Env).
Msg("Starting javaparser with command")

// Send JavaParser stdout to stderr for two reasons:
// 1. We don't want to pollute our own stdout
Expand Down Expand Up @@ -97,14 +112,59 @@ func (m *ServerManager) Connect() (*grpc.ClientConn, error) {
}

func (m *ServerManager) locateJavaparser() (string, error) {
path, err := runfiles.Rlocation(javaparser)
path, err := runfiles.Rlocation(javaparserPath)
if err != nil {
return "", fmt.Errorf("failed to find javaparser in runfiles: %w", err)
}

return path, nil
}

func (m *ServerManager) runfilesEnv() ([]string, error) {
envVars, err := runfiles.Env()
if err != nil {
return nil, fmt.Errorf("failed to get runfiles env: %w", err)
}

m.logger.Debug().
Strs("res", envVars).
Msg("resolved runfiles env")

var (
hasJavaRunfiles bool
runfilesManifest string
)

res := make([]string, 0, len(envVars)+2) // NOTE: potentially adding two more env vars.

for _, envVar := range envVars {
if runfilesManifest == "" && strings.HasPrefix(envVar, runfilesManifestFileKey) {
runfilesManifest = strings.ReplaceAll(envVar, runfilesManifestFileKey+"=", "")
}

if !hasJavaRunfiles && strings.HasPrefix(envVar, runfilesDirKey) {
hasJavaRunfiles = true
path := strings.ReplaceAll(envVar, javaRunfilesKey+"=", "")
res = append(res, javaRunfilesKey+"="+path)
}

if !hasJavaRunfiles && strings.HasPrefix(envVar, javaRunfilesKey) {
hasJavaRunfiles = true
}

res = append(res, envVar)
}

if !hasJavaRunfiles && runfilesManifest != "" {
manifestDirPath := strings.ReplaceAll(runfilesManifest, runfilesManifestFileKey+"=", "")
runfilesDirPath := strings.ReplaceAll(manifestDirPath, "_manifest", "")

res = append(res, javaRunfilesKey+"="+runfilesDirPath)
}

return res, nil
}

func readPort(path string) (int32, error) {
startTime := time.Now()
for {
Expand Down

0 comments on commit b01bab0

Please sign in to comment.