1
1
package main
2
2
3
3
import (
4
- "context"
5
- "crypto/tls"
6
4
"errors"
7
5
"fmt"
8
- "net/http"
9
6
"net/url"
10
7
"os"
11
8
"slices"
12
9
"strings"
13
- "time"
14
10
15
- "cdr.dev/slog "
11
+ "github.com/coder/coder/v2/codersdk "
16
12
"github.com/coder/envbuilder"
17
- "github.com/coder/envbuilder/internal/notcodersdk "
13
+ "github.com/coder/envbuilder/internal/eblog "
18
14
"github.com/coder/serpent"
19
15
20
16
// *Never* remove this. Certificates are not bundled as part
@@ -38,58 +34,36 @@ func envbuilderCmd() serpent.Command {
38
34
Use : "envbuilder" ,
39
35
Options : options .CLI (),
40
36
Handler : func (inv * serpent.Invocation ) error {
41
- var sendLogs func ( ctx context. Context , log ... notcodersdk. Log ) error
42
- if options .CoderAgentToken != "" {
43
- if options .CoderAgentURL == "" {
37
+ options . Logger = eblog . New ( os . Stderr , options . Verbose )
38
+ if options .CoderAgentURL != "" {
39
+ if options .CoderAgentToken == "" {
44
40
return errors .New ("CODER_AGENT_URL must be set if CODER_AGENT_TOKEN is set" )
45
41
}
46
42
u , err := url .Parse (options .CoderAgentURL )
47
43
if err != nil {
48
44
return fmt .Errorf ("unable to parse CODER_AGENT_URL as URL: %w" , err )
49
45
}
50
- client := notcodersdk .New (u )
51
- client .SetSessionToken (options .CoderAgentToken )
52
- client .HTTPClient = & http.Client {
53
- Transport : & http.Transport {
54
- TLSClientConfig : & tls.Config {
55
- InsecureSkipVerify : options .Insecure ,
56
- },
57
- },
58
- }
59
- var flushAndClose func (ctx context.Context ) error
60
- // nolint: staticcheck // FIXME: https://github.com/coder/envbuilder/issues/260
61
- sendLogs , flushAndClose = notcodersdk .LogsSender (notcodersdk .ExternalLogSourceID , client .PatchLogs , slog.Logger {})
62
- defer func () {
63
- _ = flushAndClose (inv .Context ())
64
- }()
65
-
66
- // This adds the envbuilder subsystem.
67
- // If telemetry is enabled in a Coder deployment,
68
- // this will be reported and help us understand
69
- // envbuilder usage.
70
- if ! slices .Contains (options .CoderAgentSubsystem , string (notcodersdk .AgentSubsystemEnvbuilder )) {
71
- options .CoderAgentSubsystem = append (options .CoderAgentSubsystem , string (notcodersdk .AgentSubsystemEnvbuilder ))
72
- _ = os .Setenv ("CODER_AGENT_SUBSYSTEM" , strings .Join (options .CoderAgentSubsystem , "," ))
73
- }
74
- }
75
-
76
- options .Logger = func (level notcodersdk.LogLevel , format string , args ... interface {}) {
77
- output := fmt .Sprintf (format , args ... )
78
- _ , _ = fmt .Fprintln (inv .Stderr , output )
79
- if sendLogs != nil {
80
- if err := sendLogs (inv .Context (), notcodersdk.Log {
81
- CreatedAt : time .Now (),
82
- Output : output ,
83
- Level : level ,
84
- }); err != nil {
85
- _ , _ = fmt .Fprintf (inv .Stderr , "failed to send logs: %s\n " , err .Error ())
46
+ coderLog , closeLogs , err := eblog .Coder (inv .Context (), u , options .CoderAgentToken )
47
+ if err == nil {
48
+ options .Logger = eblog .Wrap (options .Logger , coderLog )
49
+ defer closeLogs ()
50
+ // This adds the envbuilder subsystem.
51
+ // If telemetry is enabled in a Coder deployment,
52
+ // this will be reported and help us understand
53
+ // envbuilder usage.
54
+ if ! slices .Contains (options .CoderAgentSubsystem , string (codersdk .AgentSubsystemEnvbuilder )) {
55
+ options .CoderAgentSubsystem = append (options .CoderAgentSubsystem , string (codersdk .AgentSubsystemEnvbuilder ))
56
+ _ = os .Setenv ("CODER_AGENT_SUBSYSTEM" , strings .Join (options .CoderAgentSubsystem , "," ))
86
57
}
58
+ } else {
59
+ // Failure to log to Coder should cause a fatal error.
60
+ options .Logger (eblog .LevelError , "unable to send logs to Coder: %s" , err .Error ())
87
61
}
88
62
}
89
63
90
64
err := envbuilder .Run (inv .Context (), options )
91
65
if err != nil {
92
- options .Logger (notcodersdk . LogLevelError , "error: %s" , err )
66
+ options .Logger (eblog . LevelError , "error: %s" , err )
93
67
}
94
68
return err
95
69
},
0 commit comments