Skip to content

Commit a4a2994

Browse files
committed
Merge remote-tracking branch 'origin/main' into authzquerier_layer
2 parents 58261fe + ab1f6ce commit a4a2994

File tree

12 files changed

+91
-42
lines changed

12 files changed

+91
-42
lines changed

cli/create.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,21 @@ type buildParameters struct {
194194
// Any missing params will be prompted to the user. It supports legacy and rich parameters.
195195
func prepWorkspaceBuild(cmd *cobra.Command, client *codersdk.Client, args prepWorkspaceBuildArgs) (*buildParameters, error) {
196196
ctx := cmd.Context()
197+
198+
var useRichParameters bool
199+
if len(args.ExistingRichParams) > 0 && len(args.RichParameterFile) > 0 {
200+
useRichParameters = true
201+
}
202+
203+
var useLegacyParameters bool
204+
if len(args.ExistingParams) > 0 || len(args.ParameterFile) > 0 {
205+
useLegacyParameters = true
206+
}
207+
208+
if useRichParameters && useLegacyParameters {
209+
return nil, xerrors.Errorf("Rich parameters can't be used together with legacy parameters.")
210+
}
211+
197212
templateVersion, err := client.TemplateVersion(ctx, args.Template.ActiveVersionID)
198213
if err != nil {
199214
return nil, err

coderd/coderdtest/swaggerparser.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func assertGoCommentFirst(t *testing.T, comment SwaggerComment) {
260260
text := strings.TrimSpace(line.Text)
261261

262262
if inSwaggerBlock {
263-
if !strings.HasPrefix(text, "// @") {
263+
if !strings.HasPrefix(text, "// @") && !strings.HasPrefix(text, "// nolint:") {
264264
assert.Fail(t, "Go function comment must be placed before swagger comments")
265265
return
266266
}

coderd/database/databasefake/databasefake.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3568,12 +3568,12 @@ func (q *fakeQuerier) InsertGroupMember(_ context.Context, arg database.InsertGr
35683568
return nil
35693569
}
35703570

3571-
func (q *fakeQuerier) DeleteGroupMember(_ context.Context, userID uuid.UUID) error {
3571+
func (q *fakeQuerier) DeleteGroupMemberFromGroup(_ context.Context, arg database.DeleteGroupMemberFromGroupParams) error {
35723572
q.mutex.Lock()
35733573
defer q.mutex.Unlock()
35743574

35753575
for i, member := range q.groupMembers {
3576-
if member.UserID == userID {
3576+
if member.UserID == arg.UserID && member.GroupID == arg.GroupID {
35773577
q.groupMembers = append(q.groupMembers[:i], q.groupMembers[i+1:]...)
35783578
}
35793579
}

coderd/database/querier.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

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

coderd/database/queries/groups.sql

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,14 @@ INSERT INTO group_members (
8585
user_id,
8686
group_id
8787
)
88-
VALUES ( $1, $2);
88+
VALUES ($1, $2);
8989

90-
-- name: DeleteGroupMember :exec
90+
-- name: DeleteGroupMemberFromGroup :exec
9191
DELETE FROM
9292
group_members
9393
WHERE
94-
user_id = $1;
94+
user_id = $1 AND
95+
group_id = $2;
9596

9697
-- name: DeleteGroupByID :exec
9798
DELETE FROM

coderd/workspacebuilds.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ
297297
// @Param request body codersdk.CreateWorkspaceBuildRequest true "Create workspace build request"
298298
// @Success 200 {object} codersdk.WorkspaceBuild
299299
// @Router /workspaces/{workspace}/builds [post]
300+
// nolint:gocyclo
300301
func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
301302
ctx := r.Context()
302303
apiKey := httpmw.APIKey(r)
@@ -505,23 +506,34 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
505506
}
506507
}
507508

509+
legacyParameters, err := api.Database.ParameterValues(ctx, database.ParameterValuesParams{
510+
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
511+
ScopeIds: []uuid.UUID{workspace.ID},
512+
})
513+
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
514+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
515+
Message: "Error fetching previous legacy parameters.",
516+
Detail: err.Error(),
517+
})
518+
return
519+
}
520+
521+
if len(legacyParameters) > 0 && len(parameters) > 0 {
522+
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
523+
Message: "Rich parameters can't be used together with legacy parameters.",
524+
})
525+
return
526+
}
527+
508528
var workspaceBuild database.WorkspaceBuild
509529
var provisionerJob database.ProvisionerJob
510530
// This must happen in a transaction to ensure history can be inserted, and
511531
// the prior history can update it's "after" column to point at the new.
512532
err = api.Database.InTx(func(db database.Store) error {
513-
existing, err := db.ParameterValues(ctx, database.ParameterValuesParams{
514-
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
515-
ScopeIds: []uuid.UUID{workspace.ID},
516-
})
517-
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
518-
return xerrors.Errorf("Fetch previous parameters: %w", err)
519-
}
520-
521533
// Write/Update any new params
522534
now := database.Now()
523535
for _, param := range createBuild.ParameterValues {
524-
for _, exists := range existing {
536+
for _, exists := range legacyParameters {
525537
// If the param exists, delete the old param before inserting the new one
526538
if exists.Name == param.Name {
527539
err = db.DeleteParameterValueByID(ctx, exists.ID)

enterprise/coderd/groups.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,16 +207,27 @@ func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) {
207207
}
208208

209209
for _, id := range req.AddUsers {
210-
err := tx.InsertGroupMember(ctx, database.InsertGroupMemberParams{
210+
userID, err := uuid.Parse(id)
211+
if err != nil {
212+
return xerrors.Errorf("parse user ID %q: %w", id, err)
213+
}
214+
err = tx.InsertGroupMember(ctx, database.InsertGroupMemberParams{
211215
GroupID: group.ID,
212-
UserID: uuid.MustParse(id),
216+
UserID: userID,
213217
})
214218
if err != nil {
215219
return xerrors.Errorf("insert group member %q: %w", id, err)
216220
}
217221
}
218222
for _, id := range req.RemoveUsers {
219-
err := tx.DeleteGroupMember(ctx, uuid.MustParse(id))
223+
userID, err := uuid.Parse(id)
224+
if err != nil {
225+
return xerrors.Errorf("parse user ID %q: %w", id, err)
226+
}
227+
err = tx.DeleteGroupMemberFromGroup(ctx, database.DeleteGroupMemberFromGroupParams{
228+
UserID: userID,
229+
GroupID: group.ID,
230+
})
220231
if err != nil {
221232
return xerrors.Errorf("insert group member %q: %w", id, err)
222233
}

provisionerd/runner/runner.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,11 @@ func (r *Runner) runTemplateImportProvisionWithRichParameters(ctx context.Contex
728728
return nil, nil, xerrors.New(msgType.Complete.Error)
729729
}
730730

731+
if len(msgType.Complete.Parameters) > 0 && len(values) > 0 {
732+
r.logger.Info(context.Background(), "template uses rich parameters which can't be used together with legacy parameters")
733+
return nil, nil, xerrors.Errorf("invalid use of rich parameters")
734+
}
735+
731736
r.logger.Info(context.Background(), "parse dry-run provision successful",
732737
slog.F("resource_count", len(msgType.Complete.Resources)),
733738
slog.F("resources", msgType.Complete.Resources),

site/src/components/NavbarView/NavbarView.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ const useStyles = makeStyles((theme) => ({
207207
padding: theme.spacing(2),
208208
// svg is for the Coder logo, img is for custom images
209209
"& svg, & img": {
210-
width: "100%",
211210
height: "100%",
212211
objectFit: "contain",
213212
},

site/src/components/Workspace/Workspace.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export enum WorkspaceErrors {
3030
GET_BUILDS_ERROR = "getBuildsError",
3131
BUILD_ERROR = "buildError",
3232
CANCELLATION_ERROR = "cancellationError",
33+
WORKSPACE_REFRESH_WARNING = "refreshWorkspaceWarning",
3334
}
3435

3536
export interface WorkspaceProps {
@@ -113,7 +114,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
113114
)
114115

115116
const workspaceRefreshWarning = Boolean(
116-
workspaceErrors[WorkspaceErrors.GET_RESOURCES_ERROR],
117+
workspaceErrors[WorkspaceErrors.WORKSPACE_REFRESH_WARNING],
117118
) && (
118119
<AlertBanner
119120
severity="warning"

site/src/xServices/workspace/workspaceXService.ts

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,13 @@ export const workspaceMachine = createMachine(
178178
tags: "loading",
179179
},
180180
gettingWorkspace: {
181-
entry: ["clearGetWorkspaceError", "clearContext"],
181+
entry: ["clearContext"],
182182
invoke: {
183183
src: "getWorkspace",
184184
id: "getWorkspace",
185185
onDone: [
186186
{
187-
actions: "assignWorkspace",
187+
actions: ["assignWorkspace", "clearGetWorkspaceError"],
188188
target: "gettingTemplate",
189189
},
190190
],
@@ -198,13 +198,12 @@ export const workspaceMachine = createMachine(
198198
tags: "loading",
199199
},
200200
gettingTemplate: {
201-
entry: "clearGetTemplateWarning",
202201
invoke: {
203202
src: "getTemplate",
204203
id: "getTemplate",
205204
onDone: [
206205
{
207-
actions: "assignTemplate",
206+
actions: ["assignTemplate", "clearGetTemplateWarning"],
208207
target: "gettingTemplateParameters",
209208
},
210209
],
@@ -221,13 +220,15 @@ export const workspaceMachine = createMachine(
221220
tags: "loading",
222221
},
223222
gettingTemplateParameters: {
224-
entry: "clearGetTemplateParametersWarning",
225223
invoke: {
226224
src: "getTemplateParameters",
227225
id: "getTemplateParameters",
228226
onDone: [
229227
{
230-
actions: "assignTemplateParameters",
228+
actions: [
229+
"assignTemplateParameters",
230+
"clearGetTemplateParametersWarning",
231+
],
231232
target: "gettingPermissions",
232233
},
233234
],
@@ -244,13 +245,12 @@ export const workspaceMachine = createMachine(
244245
tags: "loading",
245246
},
246247
gettingPermissions: {
247-
entry: "clearGetPermissionsError",
248248
invoke: {
249249
src: "checkPermissions",
250250
id: "checkPermissions",
251251
onDone: [
252252
{
253-
actions: "assignPermissions",
253+
actions: ["assignPermissions", "clearGetPermissionsError"],
254254
target: "ready",
255255
},
256256
],
@@ -270,18 +270,18 @@ export const workspaceMachine = createMachine(
270270
initial: "gettingEvents",
271271
states: {
272272
gettingEvents: {
273-
entry: [
274-
"clearRefreshWorkspaceWarning",
275-
"initializeEventSource",
276-
],
273+
entry: ["initializeEventSource"],
277274
exit: "closeEventSource",
278275
invoke: {
279276
src: "listening",
280277
id: "listening",
281278
},
282279
on: {
283280
REFRESH_WORKSPACE: {
284-
actions: ["refreshWorkspace"],
281+
actions: [
282+
"refreshWorkspace",
283+
"clearRefreshWorkspaceWarning",
284+
],
285285
},
286286
EVENT_SOURCE_ERROR: {
287287
target: "error",
@@ -291,7 +291,7 @@ export const workspaceMachine = createMachine(
291291
error: {
292292
entry: "assignRefreshWorkspaceWarning",
293293
after: {
294-
"1000": {
294+
"2000": {
295295
target: "gettingEvents",
296296
},
297297
},
@@ -443,12 +443,11 @@ export const workspaceMachine = createMachine(
443443
initial: "gettingBuilds",
444444
states: {
445445
gettingBuilds: {
446-
entry: "clearGetBuildsError",
447446
invoke: {
448447
src: "getBuilds",
449448
onDone: [
450449
{
451-
actions: "assignBuilds",
450+
actions: ["assignBuilds", "clearGetBuildsError"],
452451
target: "loadedBuilds",
453452
},
454453
],

0 commit comments

Comments
 (0)