MCPcopy Index your code
hub / github.com/coder/coder / UpdateStartup

Method UpdateStartup

coderd/agentapi/lifecycle.go:148–204  ·  view source on GitHub ↗
(ctx context.Context, req *agentproto.UpdateStartupRequest)

Source from the content-addressed store, hash-verified

146}
147
148func (a *LifecycleAPI) UpdateStartup(ctx context.Context, req *agentproto.UpdateStartupRequest) (*agentproto.Startup, error) {
149 apiVersion, ok := ctx.Value(contextKeyAPIVersion{}).(string)
150 if !ok {
151 return nil, xerrors.Errorf("internal error; api version unspecified")
152 }
153 workspaceAgent, err := a.AgentFn(ctx)
154 if err != nil {
155 return nil, err
156 }
157
158 a.Log.Debug(
159 ctx,
160 "post workspace agent version",
161 slog.F("workspace_id", a.WorkspaceID),
162 slog.F("agent_version", req.Startup.Version),
163 )
164
165 if !semver.IsValid(req.Startup.Version) {
166 return nil, xerrors.Errorf("invalid agent semver version %q", req.Startup.Version)
167 }
168
169 // Validate subsystems.
170 dbSubsystems := make([]database.WorkspaceAgentSubsystem, 0, len(req.Startup.Subsystems))
171 seenSubsystems := make(map[database.WorkspaceAgentSubsystem]struct{}, len(req.Startup.Subsystems))
172 for _, s := range req.Startup.Subsystems {
173 var dbSubsystem database.WorkspaceAgentSubsystem
174 switch s {
175 case agentproto.Startup_ENVBOX:
176 dbSubsystem = database.WorkspaceAgentSubsystemEnvbox
177 case agentproto.Startup_ENVBUILDER:
178 dbSubsystem = database.WorkspaceAgentSubsystemEnvbuilder
179 case agentproto.Startup_EXECTRACE:
180 dbSubsystem = database.WorkspaceAgentSubsystemExectrace
181 default:
182 return nil, xerrors.Errorf("invalid agent subsystem %q", s)
183 }
184
185 if _, ok := seenSubsystems[dbSubsystem]; !ok {
186 seenSubsystems[dbSubsystem] = struct{}{}
187 dbSubsystems = append(dbSubsystems, dbSubsystem)
188 }
189 }
190 slices.Sort(dbSubsystems)
191
192 err = a.Database.UpdateWorkspaceAgentStartupByID(ctx, database.UpdateWorkspaceAgentStartupByIDParams{
193 ID: workspaceAgent.ID,
194 Version: req.Startup.Version,
195 ExpandedDirectory: req.Startup.ExpandedDirectory,
196 Subsystems: dbSubsystems,
197 APIVersion: apiVersion,
198 })
199 if err != nil {
200 return nil, xerrors.Errorf("update workspace agent startup in database: %w", err)
201 }
202
203 return req.Startup, nil
204}

Callers 1

TestUpdateStartupFunction · 0.95

Calls 3

ValueMethod · 0.45
ErrorfMethod · 0.45

Tested by 1

TestUpdateStartupFunction · 0.76