summaryrefslogtreecommitdiff
path: root/internal/executable/executable.go
diff options
context:
space:
mode:
authorIgor <idrozdov@gitlab.com>2019-10-21 16:25:53 +0000
committerIgor <idrozdov@gitlab.com>2019-10-21 16:25:53 +0000
commit629e3bf9c31687f7b824cf29ba07ad2ce402e280 (patch)
tree0f80f7394231d39970f23a08ba9ba2ce7051e22c /internal/executable/executable.go
parent7d5229db263a62661653431881bef8b46984d0de (diff)
parentede41ee451dd0aa6d0ecd958c7fadbdb3b63f3e4 (diff)
downloadgitlab-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.go60
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
+}