Skip to content

Commit 935f8ee

Browse files
mikeland73gcurtis
andauthored
[gen] Add gen alias command (#2009)
## Summary Add a command that allows creating aliases to devbox scripts. This lets users source aliases from any project they want. It's opt-in, works in POSIX and fish. Aliases make it easy to call the scripts for other projects or directories. How it works: ```bash eval "$(devbox gen alias)" devbox-build ``` It builds the alias name using the project name in devbox.json. Alternatively the user can specify a prefix ```bash eval "$(devbox gen alias --prefix dx)" dx-build ``` ## How was it tested? ```bash eval "$(devbox gen alias --prefix dx)" dx-build cd $HOME && dx-build ``` --------- Signed-off-by: Mike Landau <[email protected]> Co-authored-by: Greg Curtis <[email protected]>
1 parent 7a67909 commit 935f8ee

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

internal/boxcli/generate.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
package boxcli
55

66
import (
7+
"cmp"
8+
"fmt"
9+
"regexp"
10+
711
"github.com/pkg/errors"
812
"github.com/spf13/cobra"
913

14+
"go.jetpack.io/devbox/internal/boxcli/usererr"
1015
"go.jetpack.io/devbox/internal/cloud"
1116
"go.jetpack.io/devbox/internal/devbox"
1217
"go.jetpack.io/devbox/internal/devbox/devopt"
@@ -28,6 +33,11 @@ type GenerateReadmeCmdFlags struct {
2833
template string
2934
}
3035

36+
type GenerateAliasCmdFlags struct {
37+
config configFlags
38+
prefix string
39+
}
40+
3141
func generateCmd() *cobra.Command {
3242
flags := &generateCmdFlags{}
3343

@@ -38,6 +48,7 @@ func generateCmd() *cobra.Command {
3848
Args: cobra.MaximumNArgs(0),
3949
PersistentPreRunE: ensureNixInstalled,
4050
}
51+
command.AddCommand(genAliasCmd())
4152
command.AddCommand(devcontainerCmd())
4253
command.AddCommand(dockerfileCmd())
4354
command.AddCommand(debugCmd())
@@ -180,6 +191,51 @@ func genReadmeCmd() *cobra.Command {
180191
return command
181192
}
182193

194+
func genAliasCmd() *cobra.Command {
195+
flags := &GenerateAliasCmdFlags{}
196+
197+
command := &cobra.Command{
198+
Use: "alias",
199+
Short: "Generate shell script aliases for this project",
200+
Long: "Generate shell script aliases for this project. " +
201+
"Usage is typically `eval \"$(devbox gen alias)\"`.",
202+
Args: cobra.ExactArgs(0),
203+
RunE: func(cmd *cobra.Command, args []string) error {
204+
box, err := devbox.Open(&devopt.Opts{
205+
Dir: flags.config.path,
206+
Stderr: cmd.ErrOrStderr(),
207+
})
208+
if err != nil {
209+
return errors.WithStack(err)
210+
}
211+
re := regexp.MustCompile("[^a-zA-Z0-9_-]+")
212+
prefix := cmp.Or(flags.prefix, box.Config().Root.Name)
213+
if prefix == "" {
214+
return usererr.New(
215+
"To generate aliases, you must specify a prefix or set a name " +
216+
"in devbox.json")
217+
}
218+
prefix = re.ReplaceAllString(prefix, "-")
219+
for _, script := range box.ListScripts() {
220+
fmt.Fprintf(
221+
cmd.OutOrStdout(),
222+
"alias %s-%s='devbox -c \"%s\" run %s'\n",
223+
prefix,
224+
script,
225+
box.ProjectDir(),
226+
script,
227+
)
228+
}
229+
return nil
230+
},
231+
}
232+
flags.config.register(command)
233+
command.Flags().StringVarP(
234+
&flags.prefix, "prefix", "p", "", "Prefix for the generated aliases")
235+
236+
return command
237+
}
238+
183239
func runGenerateCmd(cmd *cobra.Command, flags *generateCmdFlags) error {
184240
// Check the directory exists.
185241
box, err := devbox.Open(&devopt.Opts{

0 commit comments

Comments
 (0)