(cmd *cobra.Command, args []string, flags runCmdFlags)
| 126 | } |
| 127 | |
| 128 | func runScriptCmd(cmd *cobra.Command, args []string, flags runCmdFlags) error { |
| 129 | ctx := cmd.Context() |
| 130 | if len(args) == 0 || flags.listScripts { |
| 131 | scripts := listScripts(cmd, flags) |
| 132 | if len(scripts) == 0 { |
| 133 | fmt.Fprintln(cmd.OutOrStdout(), "no scripts defined in devbox.json") |
| 134 | return nil |
| 135 | } |
| 136 | fmt.Fprintln(cmd.OutOrStdout(), "Available scripts:") |
| 137 | for _, p := range scripts { |
| 138 | fmt.Fprintf(cmd.OutOrStdout(), "* %s\n", p) |
| 139 | } |
| 140 | return nil |
| 141 | } |
| 142 | |
| 143 | path, script, scriptArgs, err := parseScriptArgs(args, flags) |
| 144 | if err != nil { |
| 145 | return redact.Errorf("error parsing script arguments: %w", err) |
| 146 | } |
| 147 | slog.Debug("run script", "script", script, "args", scriptArgs) |
| 148 | |
| 149 | env, err := flags.Env(path) |
| 150 | if err != nil { |
| 151 | return err |
| 152 | } |
| 153 | |
| 154 | boxes := []*devbox.Devbox{} |
| 155 | devboxOpts := &devopt.Opts{ |
| 156 | Dir: path, |
| 157 | Env: env, |
| 158 | Environment: flags.config.environment, |
| 159 | Stderr: cmd.ErrOrStderr(), |
| 160 | } |
| 161 | |
| 162 | if flags.allProjects { |
| 163 | boxes, err = multi.Open(devboxOpts) |
| 164 | if err != nil { |
| 165 | return errors.WithStack(err) |
| 166 | } |
| 167 | } else { |
| 168 | box, err := devbox.Open(devboxOpts) |
| 169 | if err != nil { |
| 170 | return redact.Errorf("error reading devbox.json: %w", err) |
| 171 | } |
| 172 | boxes = append(boxes, box) |
| 173 | } |
| 174 | |
| 175 | envOpts := devopt.EnvOptions{ |
| 176 | Hooks: devopt.LifecycleHooks{ |
| 177 | OnStaleState: func() { |
| 178 | if !flags.recomputeEnv { |
| 179 | ux.FHidableWarning( |
| 180 | ctx, |
| 181 | cmd.ErrOrStderr(), |
| 182 | devbox.StateOutOfDateMessage, |
| 183 | "with --recompute=true", |
| 184 | ) |
| 185 | } |
no test coverage detected