MCPcopy Create free account
hub / github.com/coder/envbuilder / envbuilderCmd

Function envbuilderCmd

cmd/envbuilder/main.go:33–104  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

31}
32
33func envbuilderCmd() serpent.Command {
34 var o options.Options
35 cmd := serpent.Command{
36 Use: "envbuilder",
37 Options: o.CLI(),
38 Handler: func(inv *serpent.Invocation) error {
39 o.SetDefaults()
40 var preExecs []func()
41 preExec := func() {
42 for _, fn := range preExecs {
43 fn()
44 }
45 preExecs = nil
46 }
47 defer preExec() // Ensure cleanup in case of error.
48
49 o.Logger = log.New(os.Stderr, o.Verbose)
50 if o.CoderAgentURL != "" {
51 if o.CoderAgentToken == "" {
52 return errors.New("CODER_AGENT_URL must be set if CODER_AGENT_TOKEN is set")
53 }
54 u, err := url.Parse(o.CoderAgentURL)
55 if err != nil {
56 return fmt.Errorf("unable to parse CODER_AGENT_URL as URL: %w", err)
57 }
58 coderLog, closeLogs, err := log.Coder(inv.Context(), u, o.CoderAgentToken)
59 if err == nil {
60 o.Logger = log.Wrap(o.Logger, coderLog)
61 preExecs = append(preExecs, func() {
62 closeLogs()
63 })
64 // This adds the envbuilder subsystem.
65 // If telemetry is enabled in a Coder deployment,
66 // this will be reported and help us understand
67 // envbuilder usage.
68 if !slices.Contains(o.CoderAgentSubsystem, string(codersdk.AgentSubsystemEnvbuilder)) {
69 o.CoderAgentSubsystem = append(o.CoderAgentSubsystem, string(codersdk.AgentSubsystemEnvbuilder))
70 _ = os.Setenv("CODER_AGENT_SUBSYSTEM", strings.Join(o.CoderAgentSubsystem, ","))
71 }
72 } else {
73 // Failure to log to Coder should cause a fatal error.
74 o.Logger(log.LevelError, "unable to send logs to Coder: %s", err.Error())
75 }
76 }
77
78 if o.GitSSHPrivateKeyPath != "" && o.GitSSHPrivateKeyBase64 != "" {
79 return errors.New("cannot have both GIT_SSH_PRIVATE_KEY_PATH and GIT_SSH_PRIVATE_KEY_BASE64 set")
80 }
81
82 if o.GetCachedImage {
83 img, err := envbuilder.RunCacheProbe(inv.Context(), o)
84 if err != nil {
85 o.Logger(log.LevelError, "error: %s", err)
86 return err
87 }
88 digest, err := img.Digest()
89 if err != nil {
90 return fmt.Errorf("get cached image digest: %w", err)

Callers 1

mainFunction · 0.85

Calls 9

CLIMethod · 0.95
SetDefaultsMethod · 0.95
NewFunction · 0.92
CoderFunction · 0.92
WrapFunction · 0.92
RunCacheProbeFunction · 0.92
RunFunction · 0.92
JoinMethod · 0.80
ErrorMethod · 0.80

Tested by

no test coverage detected