Skip to content

Commit a264bd2

Browse files
committed
Merge branch 'main' of https://github.com/coder/coder into spike/7463-workspace-automatic-updates-reborn
2 parents 42008be + d24d2d2 commit a264bd2

File tree

116 files changed

+2601
-1561
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+2601
-1561
lines changed

cli/agent.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,19 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
199199
var exchangeToken func(context.Context) (agentsdk.AuthenticateResponse, error)
200200
switch auth {
201201
case "token":
202-
token, err := inv.ParsedFlags().GetString(varAgentToken)
203-
if err != nil {
204-
return xerrors.Errorf("CODER_AGENT_TOKEN must be set for token auth: %w", err)
202+
token, _ := inv.ParsedFlags().GetString(varAgentToken)
203+
if token == "" {
204+
tokenFile, _ := inv.ParsedFlags().GetString(varAgentTokenFile)
205+
if tokenFile != "" {
206+
tokenBytes, err := os.ReadFile(tokenFile)
207+
if err != nil {
208+
return xerrors.Errorf("read token file %q: %w", tokenFile, err)
209+
}
210+
token = strings.TrimSpace(string(tokenBytes))
211+
}
212+
}
213+
if token == "" {
214+
return xerrors.Errorf("CODER_AGENT_TOKEN or CODER_AGENT_TOKEN_FILE must be set for token auth")
205215
}
206216
client.SetSessionToken(token)
207217
case "google-instance-identity":

cli/root.go

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ const (
5555
varURL = "url"
5656
varToken = "token"
5757
varAgentToken = "agent-token"
58+
varAgentTokenFile = "agent-token-file"
5859
varAgentURL = "agent-url"
5960
varHeader = "header"
6061
varHeaderCommand = "header-command"
@@ -71,7 +72,9 @@ const (
7172
envSessionToken = "CODER_SESSION_TOKEN"
7273
//nolint:gosec
7374
envAgentToken = "CODER_AGENT_TOKEN"
74-
envURL = "CODER_URL"
75+
//nolint:gosec
76+
envAgentTokenFile = "CODER_AGENT_TOKEN_FILE"
77+
envURL = "CODER_URL"
7578
)
7679

7780
var errUnauthenticated = xerrors.New(notLoggedInMessage)
@@ -328,6 +331,14 @@ func (r *RootCmd) Command(subcommands []*clibase.Cmd) (*clibase.Cmd, error) {
328331
Hidden: true,
329332
Group: globalGroup,
330333
},
334+
{
335+
Flag: varAgentTokenFile,
336+
Env: envAgentTokenFile,
337+
Description: "A file containing an agent authentication token.",
338+
Value: clibase.StringOf(&r.agentTokenFile),
339+
Hidden: true,
340+
Group: globalGroup,
341+
},
331342
{
332343
Flag: varAgentURL,
333344
Env: "CODER_AGENT_URL",
@@ -446,19 +457,20 @@ func LoggerFromContext(ctx context.Context) (slog.Logger, bool) {
446457

447458
// RootCmd contains parameters and helpers useful to all commands.
448459
type RootCmd struct {
449-
clientURL *url.URL
450-
token string
451-
globalConfig string
452-
header []string
453-
headerCommand string
454-
agentToken string
455-
agentURL *url.URL
456-
forceTTY bool
457-
noOpen bool
458-
verbose bool
459-
versionFlag bool
460-
disableDirect bool
461-
debugHTTP bool
460+
clientURL *url.URL
461+
token string
462+
globalConfig string
463+
header []string
464+
headerCommand string
465+
agentToken string
466+
agentTokenFile string
467+
agentURL *url.URL
468+
forceTTY bool
469+
noOpen bool
470+
verbose bool
471+
versionFlag bool
472+
disableDirect bool
473+
debugHTTP bool
462474

463475
noVersionCheck bool
464476
noFeatureWarning bool

cli/server.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
938938
autobuildTicker := time.NewTicker(vals.AutobuildPollInterval.Value())
939939
defer autobuildTicker.Stop()
940940
autobuildExecutor := autobuild.NewExecutor(
941-
ctx, options.Database, options.Pubsub, coderAPI.TemplateScheduleStore, logger, autobuildTicker.C)
941+
ctx, options.Database, options.Pubsub, coderAPI.TemplateScheduleStore, &coderAPI.Auditor, logger, autobuildTicker.C)
942942
autobuildExecutor.Run()
943943

944944
hangDetectorTicker := time.NewTicker(vals.JobHangDetectorInterval.Value())
@@ -1875,45 +1875,49 @@ func BuildLogger(inv *clibase.Invocation, cfg *codersdk.DeploymentValues) (slog.
18751875
}, nil
18761876
}
18771877

1878-
func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, dbURL string) (*sql.DB, error) {
1878+
func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, dbURL string) (sqlDB *sql.DB, err error) {
18791879
logger.Debug(ctx, "connecting to postgresql")
18801880

18811881
// Try to connect for 30 seconds.
18821882
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
18831883
defer cancel()
18841884

1885-
var (
1886-
sqlDB *sql.DB
1887-
err error
1888-
ok = false
1889-
tries int
1890-
)
1885+
defer func() {
1886+
if err == nil {
1887+
return
1888+
}
1889+
if sqlDB != nil {
1890+
_ = sqlDB.Close()
1891+
sqlDB = nil
1892+
}
1893+
logger.Error(ctx, "connect to postgres failed", slog.Error(err))
1894+
}()
1895+
1896+
var tries int
18911897
for r := retry.New(time.Second, 3*time.Second); r.Wait(ctx); {
18921898
tries++
18931899

18941900
sqlDB, err = sql.Open(driver, dbURL)
18951901
if err != nil {
1896-
logger.Warn(ctx, "connect to postgres; retrying", slog.Error(err), slog.F("try", tries))
1902+
logger.Warn(ctx, "connect to postgres: retrying", slog.Error(err), slog.F("try", tries))
18971903
continue
18981904
}
18991905

19001906
err = pingPostgres(ctx, sqlDB)
19011907
if err != nil {
1902-
logger.Warn(ctx, "ping postgres; retrying", slog.Error(err), slog.F("try", tries))
1908+
logger.Warn(ctx, "ping postgres: retrying", slog.Error(err), slog.F("try", tries))
1909+
_ = sqlDB.Close()
1910+
sqlDB = nil
19031911
continue
19041912
}
19051913

19061914
break
19071915
}
1908-
// Make sure we close the DB in case it opened but the ping failed for some
1909-
// reason.
1910-
defer func() {
1911-
if !ok && sqlDB != nil {
1912-
_ = sqlDB.Close()
1913-
}
1914-
}()
1916+
if err == nil {
1917+
err = ctx.Err()
1918+
}
19151919
if err != nil {
1916-
return nil, xerrors.Errorf("connect to postgres; tries %d; last error: %w", tries, err)
1920+
return nil, xerrors.Errorf("unable to connect after %d tries; last error: %w", tries, err)
19171921
}
19181922

19191923
// Ensure the PostgreSQL version is >=13.0.0!
@@ -1958,7 +1962,6 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
19581962
// of connection churn.
19591963
sqlDB.SetMaxIdleConns(3)
19601964

1961-
ok = true
19621965
return sqlDB, nil
19631966
}
19641967

cli/templatecreate.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,6 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
4747
),
4848
Handler: func(inv *clibase.Invocation) error {
4949
if failureTTL != 0 || inactivityTTL != 0 || maxTTL != 0 {
50-
// This call can be removed when workspace_actions is no longer experimental
51-
experiments, exErr := client.Experiments(inv.Context())
52-
if exErr != nil {
53-
return xerrors.Errorf("get experiments: %w", exErr)
54-
}
55-
56-
if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) {
57-
return xerrors.Errorf("--failure-ttl and --inactivityTTL are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
58-
}
59-
6050
entitlements, err := client.Entitlements(inv.Context())
6151
var sdkErr *codersdk.Error
6252
if xerrors.As(err, &sdkErr) && sdkErr.StatusCode() == http.StatusNotFound {

cli/templateedit.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,6 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
4141
),
4242
Short: "Edit the metadata of a template by name.",
4343
Handler: func(inv *clibase.Invocation) error {
44-
// This clause can be removed when workspace_actions is no longer experimental
45-
if failureTTL != 0 || inactivityTTL != 0 {
46-
experiments, exErr := client.Experiments(inv.Context())
47-
if exErr != nil {
48-
return xerrors.Errorf("get experiments: %w", exErr)
49-
}
50-
51-
if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) {
52-
return xerrors.Errorf("--failure-ttl and --inactivityTTL are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
53-
}
54-
}
55-
5644
unsetAutostopRequirementDaysOfWeek := len(autostopRequirementDaysOfWeek) == 1 && autostopRequirementDaysOfWeek[0] == "none"
5745
requiresEntitlement := (len(autostopRequirementDaysOfWeek) > 0 && !unsetAutostopRequirementDaysOfWeek) ||
5846
autostopRequirementWeeks > 0 ||

coderd/apidoc/docs.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)