Creates a symlink for devbox in .devbox/bin so that devbox can be available inside a pure shell
(d *Devbox)
| 14 | // Creates a symlink for devbox in .devbox/bin |
| 15 | // so that devbox can be available inside a pure shell |
| 16 | func createDevboxSymlink(d *Devbox) error { |
| 17 | // Get absolute path for where devbox is called |
| 18 | devboxPath, err := os.Executable() |
| 19 | if err != nil { |
| 20 | return errors.Wrap(err, "failed to create devbox symlink. Devbox command won't be available inside the shell") |
| 21 | } |
| 22 | // ensure .devbox/bin directory exists |
| 23 | binPath := dotdevboxBinPath(d) |
| 24 | if err := os.MkdirAll(binPath, 0o755); err != nil { |
| 25 | return errors.WithStack(err) |
| 26 | } |
| 27 | // Create a symlink between devbox and .devbox/bin |
| 28 | err = os.Symlink(devboxPath, filepath.Join(binPath, "devbox")) |
| 29 | if err != nil && !errors.Is(err, fs.ErrExist) { |
| 30 | return errors.Wrap(err, "failed to create devbox symlink. Devbox command won't be available inside the shell") |
| 31 | } |
| 32 | return nil |
| 33 | } |
| 34 | |
| 35 | func dotdevboxBinPath(d *Devbox) string { |
| 36 | return filepath.Join(d.ProjectDir(), ".devbox/bin") |
no test coverage detected