Skip to content

Commit 33e4346

Browse files
authored
Merge branch 'main' into bryphe/chore/add-docker-image
2 parents 584a231 + bea708d commit 33e4346

33 files changed

+1293
-2078
lines changed

Makefile

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@ bin/coderd:
55
go build -o bin/coderd cmd/coderd/main.go
66
.PHONY: bin/coderd
77

8-
bin/provisionerd:
9-
mkdir -p bin
10-
# TODO: Looks like this is broken?
11-
# go build -o bin/provisionerd cmd/provisionerd/main.go
12-
.PHONY: bin/provisionerd
13-
14-
build: site/out bin/coderd bin/provisionerd
8+
build: site/out bin/coderd
159
.PHONY: build
1610

1711
# Runs migrations to output a dump of the database.

coderd/coderd.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,21 @@ func New(options *Options) http.Handler {
9696
r.Route("/{workspacehistory}", func(r chi.Router) {
9797
r.Use(httpmw.ExtractWorkspaceHistoryParam(options.Database))
9898
r.Get("/", api.workspaceHistoryByName)
99-
r.Get("/logs", api.workspaceHistoryLogsByName)
10099
})
101100
})
102101
})
103102
})
104103
})
105104

106-
r.Route("/provisioners/daemons", func(r chi.Router) {
107-
r.Get("/", api.provisionerDaemons)
108-
r.Get("/serve", api.provisionerDaemonsServe)
105+
r.Route("/provisioners", func(r chi.Router) {
106+
r.Route("/daemons", func(r chi.Router) {
107+
r.Get("/", api.provisionerDaemons)
108+
r.Get("/serve", api.provisionerDaemonsServe)
109+
})
110+
r.Route("/jobs/{provisionerjob}", func(r chi.Router) {
111+
r.Use(httpmw.ExtractProvisionerJobParam(options.Database))
112+
r.Get("/logs", api.provisionerJobLogsByID)
113+
})
109114
})
110115
})
111116
r.NotFound(site.Handler().ServeHTTP)

coderd/projectparameter/projectparameter.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro
4040
compute := &compute{
4141
db: db,
4242
computedParameterByName: map[string]Value{},
43-
projectVersionParametersByName: map[string]database.ProjectParameter{},
43+
projectVersionParametersByName: map[string]database.ProjectVersionParameter{},
4444
}
4545

4646
// All parameters for the project version!
47-
projectVersionParameters, err := db.GetProjectParametersByVersionID(ctx, scope.ProjectVersionID)
47+
projectVersionParameters, err := db.GetProjectVersionParametersByVersionID(ctx, scope.ProjectVersionID)
4848
if errors.Is(err, sql.ErrNoRows) {
4949
// This occurs when the project version has defined
5050
// no parameters, so we have nothing to compute!
@@ -144,7 +144,7 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro
144144
type compute struct {
145145
db database.Store
146146
computedParameterByName map[string]Value
147-
projectVersionParametersByName map[string]database.ProjectParameter
147+
projectVersionParametersByName map[string]database.ProjectVersionParameter
148148
}
149149

150150
// Validates and computes the value for parameters; setting the value on "parameterByName".

coderd/projectparameter/projectparameter_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func TestCompute(t *testing.T) {
3131
DefaultDestinationScheme database.ParameterDestinationScheme
3232
ProjectVersionID uuid.UUID
3333
}
34-
generateProjectParameter := func(t *testing.T, db database.Store, opts projectParameterOptions) database.ProjectParameter {
34+
generateProjectParameter := func(t *testing.T, db database.Store, opts projectParameterOptions) database.ProjectVersionParameter {
3535
if opts.DefaultDestinationScheme == "" {
3636
opts.DefaultDestinationScheme = database.ParameterDestinationSchemeEnvironmentVariable
3737
}
@@ -41,7 +41,7 @@ func TestCompute(t *testing.T) {
4141
require.NoError(t, err)
4242
destinationValue, err := cryptorand.String(8)
4343
require.NoError(t, err)
44-
param, err := db.InsertProjectParameter(context.Background(), database.InsertProjectParameterParams{
44+
param, err := db.InsertProjectVersionParameter(context.Background(), database.InsertProjectVersionParameterParams{
4545
ID: uuid.New(),
4646
Name: name,
4747
ProjectVersionID: opts.ProjectVersionID,
@@ -66,7 +66,7 @@ func TestCompute(t *testing.T) {
6666
t.Parallel()
6767
db := databasefake.New()
6868
scope := generateScope()
69-
parameter, err := db.InsertProjectParameter(context.Background(), database.InsertProjectParameterParams{
69+
parameter, err := db.InsertProjectVersionParameter(context.Background(), database.InsertProjectVersionParameterParams{
7070
ID: uuid.New(),
7171
ProjectVersionID: scope.ProjectVersionID,
7272
Name: "hey",

coderd/projectversion.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ type ProjectVersion struct {
3131
Import ProvisionerJob `json:"import"`
3232
}
3333

34-
// ProjectParameter represents a parameter parsed from project version source on creation.
35-
type ProjectParameter struct {
34+
// ProjectVersionParameter represents a parameter parsed from project version source on creation.
35+
type ProjectVersionParameter struct {
3636
ID uuid.UUID `json:"id"`
3737
CreatedAt time.Time `json:"created_at"`
3838
ProjectVersionID uuid.UUID `json:"project_version_id"`
@@ -62,7 +62,7 @@ type CreateProjectVersionRequest struct {
6262
func (api *api) projectVersionsByOrganization(rw http.ResponseWriter, r *http.Request) {
6363
project := httpmw.ProjectParam(r)
6464

65-
version, err := api.Database.GetProjectVersionByProjectID(r.Context(), project.ID)
65+
version, err := api.Database.GetProjectVersionsByProjectID(r.Context(), project.ID)
6666
if errors.Is(err, sql.ErrNoRows) {
6767
err = nil
6868
}
@@ -153,7 +153,6 @@ func (api *api) postProjectVersionByOrganization(rw http.ResponseWriter, r *http
153153
InitiatorID: apiKey.UserID,
154154
Provisioner: project.Provisioner,
155155
Type: database.ProvisionerJobTypeProjectImport,
156-
ProjectID: project.ID,
157156
Input: input,
158157
})
159158
if err != nil {
@@ -195,10 +194,10 @@ func (api *api) projectVersionParametersByOrganizationAndName(rw http.ResponseWr
195194
return
196195
}
197196

198-
parameters, err := api.Database.GetProjectParametersByVersionID(r.Context(), projectVersion.ID)
197+
parameters, err := api.Database.GetProjectVersionParametersByVersionID(r.Context(), projectVersion.ID)
199198
if errors.Is(err, sql.ErrNoRows) {
200199
err = nil
201-
parameters = []database.ProjectParameter{}
200+
parameters = []database.ProjectVersionParameter{}
202201
}
203202
if err != nil {
204203
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
@@ -207,7 +206,7 @@ func (api *api) projectVersionParametersByOrganizationAndName(rw http.ResponseWr
207206
return
208207
}
209208

210-
apiParameters := make([]ProjectParameter, 0, len(parameters))
209+
apiParameters := make([]ProjectVersionParameter, 0, len(parameters))
211210
for _, parameter := range parameters {
212211
apiParameters = append(apiParameters, convertProjectParameter(parameter))
213212
}
@@ -228,8 +227,8 @@ func convertProjectVersion(version database.ProjectVersion, job database.Provisi
228227
}
229228
}
230229

231-
func convertProjectParameter(parameter database.ProjectParameter) ProjectParameter {
232-
return ProjectParameter{
230+
func convertProjectParameter(parameter database.ProjectVersionParameter) ProjectVersionParameter {
231+
return ProjectVersionParameter{
233232
ID: parameter.ID,
234233
CreatedAt: parameter.CreatedAt,
235234
ProjectVersionID: parameter.ProjectVersionID,
@@ -249,7 +248,3 @@ func convertProjectParameter(parameter database.ProjectParameter) ProjectParamet
249248
ValidationValueType: parameter.ValidationValueType,
250249
}
251250
}
252-
253-
func projectVersionLogsChannel(projectVersionID uuid.UUID) string {
254-
return fmt.Sprintf("project-version-logs:%s", projectVersionID)
255-
}

coderd/provisionerdaemons.go

Lines changed: 44 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -165,26 +165,16 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty
165165
return xerrors.Errorf("request job was invalidated: %s", errorMessage)
166166
}
167167

168-
project, err := server.Database.GetProjectByID(ctx, job.ProjectID)
169-
if err != nil {
170-
return nil, failJob(fmt.Sprintf("get project: %s", err))
171-
}
172-
organization, err := server.Database.GetOrganizationByID(ctx, project.OrganizationID)
173-
if err != nil {
174-
return nil, failJob(fmt.Sprintf("get organization: %s", err))
175-
}
176168
user, err := server.Database.GetUserByID(ctx, job.InitiatorID)
177169
if err != nil {
178170
return nil, failJob(fmt.Sprintf("get user: %s", err))
179171
}
180172

181173
protoJob := &proto.AcquiredJob{
182-
JobId: job.ID.String(),
183-
CreatedAt: job.CreatedAt.UnixMilli(),
184-
Provisioner: string(job.Provisioner),
185-
OrganizationName: organization.Name,
186-
ProjectName: project.Name,
187-
UserName: user.Username,
174+
JobId: job.ID.String(),
175+
CreatedAt: job.CreatedAt.UnixMilli(),
176+
Provisioner: string(job.Provisioner),
177+
UserName: user.Username,
188178
}
189179
var projectVersion database.ProjectVersion
190180
switch job.Type {
@@ -206,6 +196,14 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty
206196
if err != nil {
207197
return nil, failJob(fmt.Sprintf("get project version: %s", err))
208198
}
199+
project, err := server.Database.GetProjectByID(ctx, projectVersion.ProjectID)
200+
if err != nil {
201+
return nil, failJob(fmt.Sprintf("get project: %s", err))
202+
}
203+
organization, err := server.Database.GetOrganizationByID(ctx, project.OrganizationID)
204+
if err != nil {
205+
return nil, failJob(fmt.Sprintf("get organization: %s", err))
206+
}
209207

210208
// Compute parameters for the workspace to consume.
211209
parameters, err := projectparameter.Compute(ctx, server.Database, projectparameter.Scope{
@@ -246,8 +244,8 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty
246244

247245
protoJob.Type = &proto.AcquiredJob_ProjectImport_{
248246
ProjectImport: &proto.AcquiredJob_ProjectImport{
249-
ProjectVersionId: projectVersion.ID.String(),
250-
ProjectVersionName: projectVersion.Name,
247+
// This will be replaced once the project import has been refactored.
248+
ProjectName: "placeholder",
251249
},
252250
}
253251
}
@@ -289,85 +287,35 @@ func (server *provisionerdServer) UpdateJob(stream proto.DRPCProvisionerDaemon_U
289287
if err != nil {
290288
return xerrors.Errorf("update job: %w", err)
291289
}
292-
switch job.Type {
293-
case database.ProvisionerJobTypeProjectImport:
294-
if len(update.ProjectImportLogs) == 0 {
295-
continue
296-
}
297-
var input projectImportJob
298-
err = json.Unmarshal(job.Input, &input)
299-
if err != nil {
300-
return xerrors.Errorf("unmarshal job input %q: %s", job.Input, err)
301-
}
302-
insertParams := database.InsertProjectVersionLogsParams{
303-
ProjectVersionID: input.ProjectVersionID,
304-
}
305-
for _, log := range update.ProjectImportLogs {
306-
logLevel, err := convertLogLevel(log.Level)
307-
if err != nil {
308-
return xerrors.Errorf("convert log level: %w", err)
309-
}
310-
logSource, err := convertLogSource(log.Source)
311-
if err != nil {
312-
return xerrors.Errorf("convert log source: %w", err)
313-
}
314-
insertParams.ID = append(insertParams.ID, uuid.New())
315-
insertParams.CreatedAt = append(insertParams.CreatedAt, time.UnixMilli(log.CreatedAt))
316-
insertParams.Level = append(insertParams.Level, logLevel)
317-
insertParams.Source = append(insertParams.Source, logSource)
318-
insertParams.Output = append(insertParams.Output, log.Output)
319-
}
320-
logs, err := server.Database.InsertProjectVersionLogs(stream.Context(), insertParams)
321-
if err != nil {
322-
return xerrors.Errorf("insert project logs: %w", err)
323-
}
324-
data, err := json.Marshal(logs)
325-
if err != nil {
326-
return xerrors.Errorf("marshal project log: %w", err)
327-
}
328-
err = server.Pubsub.Publish(projectVersionLogsChannel(input.ProjectVersionID), data)
329-
if err != nil {
330-
return xerrors.Errorf("publish history log: %w", err)
331-
}
332-
case database.ProvisionerJobTypeWorkspaceProvision:
333-
if len(update.WorkspaceProvisionLogs) == 0 {
334-
continue
335-
}
336-
var input workspaceProvisionJob
337-
err = json.Unmarshal(job.Input, &input)
338-
if err != nil {
339-
return xerrors.Errorf("unmarshal job input %q: %s", job.Input, err)
340-
}
341-
insertParams := database.InsertWorkspaceHistoryLogsParams{
342-
WorkspaceHistoryID: input.WorkspaceHistoryID,
343-
}
344-
for _, log := range update.WorkspaceProvisionLogs {
345-
logLevel, err := convertLogLevel(log.Level)
346-
if err != nil {
347-
return xerrors.Errorf("convert log level: %w", err)
348-
}
349-
logSource, err := convertLogSource(log.Source)
350-
if err != nil {
351-
return xerrors.Errorf("convert log source: %w", err)
352-
}
353-
insertParams.ID = append(insertParams.ID, uuid.New())
354-
insertParams.CreatedAt = append(insertParams.CreatedAt, time.UnixMilli(log.CreatedAt))
355-
insertParams.Level = append(insertParams.Level, logLevel)
356-
insertParams.Source = append(insertParams.Source, logSource)
357-
insertParams.Output = append(insertParams.Output, log.Output)
358-
}
359-
logs, err := server.Database.InsertWorkspaceHistoryLogs(stream.Context(), insertParams)
360-
if err != nil {
361-
return xerrors.Errorf("insert workspace logs: %w", err)
362-
}
363-
data, err := json.Marshal(logs)
290+
insertParams := database.InsertProvisionerJobLogsParams{
291+
JobID: parsedID,
292+
}
293+
for _, log := range update.Logs {
294+
logLevel, err := convertLogLevel(log.Level)
364295
if err != nil {
365-
return xerrors.Errorf("marshal project log: %w", err)
296+
return xerrors.Errorf("convert log level: %w", err)
366297
}
367-
err = server.Pubsub.Publish(workspaceHistoryLogsChannel(input.WorkspaceHistoryID), data)
298+
logSource, err := convertLogSource(log.Source)
368299
if err != nil {
369-
return xerrors.Errorf("publish history log: %w", err)
300+
return xerrors.Errorf("convert log source: %w", err)
370301
}
302+
insertParams.ID = append(insertParams.ID, uuid.New())
303+
insertParams.CreatedAt = append(insertParams.CreatedAt, time.UnixMilli(log.CreatedAt))
304+
insertParams.Level = append(insertParams.Level, logLevel)
305+
insertParams.Source = append(insertParams.Source, logSource)
306+
insertParams.Output = append(insertParams.Output, log.Output)
307+
}
308+
logs, err := server.Database.InsertProvisionerJobLogs(context.Background(), insertParams)
309+
if err != nil {
310+
return xerrors.Errorf("insert job logs: %w", err)
311+
}
312+
data, err := json.Marshal(logs)
313+
if err != nil {
314+
return xerrors.Errorf("marshal job log: %w", err)
315+
}
316+
err = server.Pubsub.Publish(provisionerJobLogsChannel(parsedID), data)
317+
if err != nil {
318+
return xerrors.Errorf("publish job log: %w", err)
371319
}
372320
}
373321
}
@@ -429,14 +377,14 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
429377

430378
// Validate that all parameters send from the provisioner daemon
431379
// follow the protocol.
432-
projectParameters := make([]database.InsertProjectParameterParams, 0, len(jobType.ProjectImport.ParameterSchemas))
380+
projectVersionParameters := make([]database.InsertProjectVersionParameterParams, 0, len(jobType.ProjectImport.ParameterSchemas))
433381
for _, protoParameter := range jobType.ProjectImport.ParameterSchemas {
434382
validationTypeSystem, err := convertValidationTypeSystem(protoParameter.ValidationTypeSystem)
435383
if err != nil {
436384
return nil, xerrors.Errorf("convert validation type system for %q: %w", protoParameter.Name, err)
437385
}
438386

439-
projectParameter := database.InsertProjectParameterParams{
387+
projectParameter := database.InsertProjectVersionParameterParams{
440388
ID: uuid.New(),
441389
CreatedAt: database.Now(),
442390
ProjectVersionID: input.ProjectVersionID,
@@ -481,7 +429,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
481429
}
482430
}
483431

484-
projectParameters = append(projectParameters, projectParameter)
432+
projectVersionParameters = append(projectVersionParameters, projectParameter)
485433
}
486434

487435
// This must occur in a transaction in case of failure.
@@ -499,8 +447,8 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
499447
}
500448
// This could be a bulk-insert operation to improve performance.
501449
// See the "InsertWorkspaceHistoryLogs" query.
502-
for _, projectParameter := range projectParameters {
503-
_, err = db.InsertProjectParameter(ctx, projectParameter)
450+
for _, projectParameter := range projectVersionParameters {
451+
_, err = db.InsertProjectVersionParameter(ctx, projectParameter)
504452
if err != nil {
505453
return xerrors.Errorf("insert project parameter %q: %w", projectParameter.Name, err)
506454
}

coderd/provisionerdaemons_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ func TestProvisionerDaemons(t *testing.T) {
2424
daemons, err := client.ProvisionerDaemons(context.Background())
2525
require.NoError(t, err)
2626
return len(daemons) > 0
27-
}, time.Second, 25*time.Millisecond)
27+
}, 3*time.Second, 50*time.Millisecond)
2828
}

0 commit comments

Comments
 (0)