diff options
author | Igor <idrozdov@gitlab.com> | 2019-10-21 16:25:53 +0000 |
---|---|---|
committer | Igor <idrozdov@gitlab.com> | 2019-10-21 16:25:53 +0000 |
commit | 629e3bf9c31687f7b824cf29ba07ad2ce402e280 (patch) | |
tree | 0f80f7394231d39970f23a08ba9ba2ce7051e22c /internal/executable/executable.go | |
parent | 7d5229db263a62661653431881bef8b46984d0de (diff) | |
parent | ede41ee451dd0aa6d0ecd958c7fadbdb3b63f3e4 (diff) | |
download | gitlab-shell-629e3bf9c31687f7b824cf29ba07ad2ce402e280.tar.gz |
Merge branch '173-move-go-code-up-one-level' into 'master'
Move Go code up one level
See merge request gitlab-org/gitlab-shell!350
Diffstat (limited to 'internal/executable/executable.go')
-rw-r--r-- | internal/executable/executable.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/internal/executable/executable.go b/internal/executable/executable.go new file mode 100644 index 0000000..c6355b9 --- /dev/null +++ b/internal/executable/executable.go @@ -0,0 +1,60 @@ +package executable + +import ( + "os" + "path/filepath" +) + +const ( + BinDir = "bin" + Healthcheck = "check" + GitlabShell = "gitlab-shell" + AuthorizedKeysCheck = "gitlab-shell-authorized-keys-check" + AuthorizedPrincipalsCheck = "gitlab-shell-authorized-principals-check" +) + +type Executable struct { + Name string + RootDir string +} + +var ( + // osExecutable is overridden in tests + osExecutable = os.Executable +) + +func New(name string) (*Executable, error) { + path, err := osExecutable() + if err != nil { + return nil, err + } + + rootDir, err := findRootDir(path) + if err != nil { + return nil, err + } + + executable := &Executable{ + Name: name, + RootDir: rootDir, + } + + return executable, nil +} + +func findRootDir(path string) (string, error) { + // Start: /opt/.../gitlab-shell/bin/gitlab-shell + // Ends: /opt/.../gitlab-shell + rootDir := filepath.Dir(filepath.Dir(path)) + pathFromEnv := os.Getenv("GITLAB_SHELL_DIR") + + if pathFromEnv != "" { + if _, err := os.Stat(pathFromEnv); os.IsNotExist(err) { + return "", err + } + + rootDir = pathFromEnv + } + + return rootDir, nil +} |