Skip to content

Commit 1cc3adb

Browse files
committed
Merge branch 'main' into 17-account-notifs
2 parents c18ada0 + 96011e1 commit 1cc3adb

File tree

108 files changed

+3317
-2491
lines changed

Some content is hidden

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

108 files changed

+3317
-2491
lines changed

.github/workflows/release.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -396,14 +396,14 @@ jobs:
396396
./build/*.rpm
397397
retention-days: 7
398398

399-
- name: Start Packer builds
399+
- name: Send repository-dispatch event
400400
if: ${{ !inputs.dry_run }}
401401
uses: peter-evans/repository-dispatch@v3
402402
with:
403403
token: ${{ secrets.CDRCI_GITHUB_TOKEN }}
404404
repository: coder/packages
405405
event-type: coder-release
406-
client-payload: '{"coder_version": "${{ steps.version.outputs.version }}"}'
406+
client-payload: '{"coder_version": "${{ steps.version.outputs.version }}", "release_channel": "${{ inputs.release_channel }}"}'
407407

408408
publish-homebrew:
409409
name: Publish to Homebrew tap

cli/organization_test.go

-61
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,8 @@ import (
1212
"github.com/stretchr/testify/require"
1313

1414
"github.com/coder/coder/v2/cli/clitest"
15-
"github.com/coder/coder/v2/coderd/coderdtest"
16-
"github.com/coder/coder/v2/coderd/rbac"
1715
"github.com/coder/coder/v2/codersdk"
1816
"github.com/coder/coder/v2/pty/ptytest"
19-
"github.com/coder/coder/v2/testutil"
2017
)
2118

2219
func TestCurrentOrganization(t *testing.T) {
@@ -55,64 +52,6 @@ func TestCurrentOrganization(t *testing.T) {
5552
require.NoError(t, <-errC)
5653
pty.ExpectMatch(orgID.String())
5754
})
58-
59-
t.Run("OnlyID", func(t *testing.T) {
60-
t.Parallel()
61-
ownerClient := coderdtest.New(t, nil)
62-
first := coderdtest.CreateFirstUser(t, ownerClient)
63-
// Owner is required to make orgs
64-
client, _ := coderdtest.CreateAnotherUser(t, ownerClient, first.OrganizationID, rbac.RoleOwner())
65-
66-
ctx := testutil.Context(t, testutil.WaitMedium)
67-
orgs := []string{"foo", "bar"}
68-
for _, orgName := range orgs {
69-
_, err := client.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
70-
Name: orgName,
71-
})
72-
require.NoError(t, err)
73-
}
74-
75-
inv, root := clitest.New(t, "organizations", "show", "--only-id", "--org="+first.OrganizationID.String())
76-
clitest.SetupConfig(t, client, root)
77-
pty := ptytest.New(t).Attach(inv)
78-
errC := make(chan error)
79-
go func() {
80-
errC <- inv.Run()
81-
}()
82-
require.NoError(t, <-errC)
83-
pty.ExpectMatch(first.OrganizationID.String())
84-
})
85-
86-
t.Run("UsingFlag", func(t *testing.T) {
87-
t.Parallel()
88-
ownerClient := coderdtest.New(t, nil)
89-
first := coderdtest.CreateFirstUser(t, ownerClient)
90-
// Owner is required to make orgs
91-
client, _ := coderdtest.CreateAnotherUser(t, ownerClient, first.OrganizationID, rbac.RoleOwner())
92-
93-
ctx := testutil.Context(t, testutil.WaitMedium)
94-
orgs := map[string]codersdk.Organization{
95-
"foo": {},
96-
"bar": {},
97-
}
98-
for orgName := range orgs {
99-
org, err := client.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
100-
Name: orgName,
101-
})
102-
require.NoError(t, err)
103-
orgs[orgName] = org
104-
}
105-
106-
inv, root := clitest.New(t, "organizations", "show", "selected", "--only-id", "-O=bar")
107-
clitest.SetupConfig(t, client, root)
108-
pty := ptytest.New(t).Attach(inv)
109-
errC := make(chan error)
110-
go func() {
111-
errC <- inv.Run()
112-
}()
113-
require.NoError(t, <-errC)
114-
pty.ExpectMatch(orgs["bar"].ID.String())
115-
})
11655
}
11756

11857
func must[V any](v V, err error) V {

cli/organizationmembers_test.go

-38
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/coder/coder/v2/cli/clitest"
1010
"github.com/coder/coder/v2/coderd/coderdtest"
1111
"github.com/coder/coder/v2/coderd/rbac"
12-
"github.com/coder/coder/v2/codersdk"
1312
"github.com/coder/coder/v2/testutil"
1413
)
1514

@@ -36,43 +35,6 @@ func TestListOrganizationMembers(t *testing.T) {
3635
})
3736
}
3837

39-
func TestAddOrganizationMembers(t *testing.T) {
40-
t.Parallel()
41-
42-
t.Run("OK", func(t *testing.T) {
43-
t.Parallel()
44-
45-
ownerClient := coderdtest.New(t, &coderdtest.Options{})
46-
owner := coderdtest.CreateFirstUser(t, ownerClient)
47-
_, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
48-
49-
ctx := testutil.Context(t, testutil.WaitMedium)
50-
//nolint:gocritic // must be an owner, only owners can create orgs
51-
otherOrg, err := ownerClient.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
52-
Name: "Other",
53-
DisplayName: "",
54-
Description: "",
55-
Icon: "",
56-
})
57-
require.NoError(t, err, "create another organization")
58-
59-
inv, root := clitest.New(t, "organization", "members", "add", "-O", otherOrg.ID.String(), user.Username)
60-
//nolint:gocritic // must be an owner
61-
clitest.SetupConfig(t, ownerClient, root)
62-
63-
buf := new(bytes.Buffer)
64-
inv.Stdout = buf
65-
err = inv.WithContext(ctx).Run()
66-
require.NoError(t, err)
67-
68-
//nolint:gocritic // must be an owner
69-
members, err := ownerClient.OrganizationMembers(ctx, otherOrg.ID)
70-
require.NoError(t, err)
71-
72-
require.Len(t, members, 2)
73-
})
74-
}
75-
7638
func TestRemoveOrganizationMembers(t *testing.T) {
7739
t.Parallel()
7840

cli/templatecreate_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
"github.com/coder/coder/v2/testutil"
1919
)
2020

21-
func TestTemplateCreate(t *testing.T) {
21+
func TestCliTemplateCreate(t *testing.T) {
2222
t.Parallel()
2323
t.Run("Create", func(t *testing.T) {
2424
t.Parallel()

cli/templatelist_test.go

-37
Original file line numberDiff line numberDiff line change
@@ -110,41 +110,4 @@ func TestTemplateList(t *testing.T) {
110110
pty.ExpectMatch("No templates found")
111111
pty.ExpectMatch("Create one:")
112112
})
113-
114-
t.Run("MultiOrg", func(t *testing.T) {
115-
t.Parallel()
116-
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
117-
owner := coderdtest.CreateFirstUser(t, client)
118-
119-
// Template in the first organization
120-
firstVersion := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
121-
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, firstVersion.ID)
122-
_ = coderdtest.CreateTemplate(t, client, owner.OrganizationID, firstVersion.ID)
123-
124-
secondOrg := coderdtest.CreateOrganization(t, client, coderdtest.CreateOrganizationOptions{
125-
// Listing templates does not require the template actually completes.
126-
// We cannot provision an external provisioner in AGPL tests.
127-
IncludeProvisionerDaemon: false,
128-
})
129-
secondVersion := coderdtest.CreateTemplateVersion(t, client, secondOrg.ID, nil)
130-
_ = coderdtest.CreateTemplate(t, client, secondOrg.ID, secondVersion.ID)
131-
132-
// Create a site wide template admin
133-
templateAdmin, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
134-
135-
inv, root := clitest.New(t, "templates", "list", "--output=json")
136-
clitest.SetupConfig(t, templateAdmin, root)
137-
138-
ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitLong)
139-
defer cancelFunc()
140-
141-
out := bytes.NewBuffer(nil)
142-
inv.Stdout = out
143-
err := inv.WithContext(ctx).Run()
144-
require.NoError(t, err)
145-
146-
var templates []codersdk.Template
147-
require.NoError(t, json.Unmarshal(out.Bytes(), &templates))
148-
require.Len(t, templates, 2)
149-
})
150113
}

coderd/apidoc/docs.go

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/audit_test.go

-86
Original file line numberDiff line numberDiff line change
@@ -95,92 +95,6 @@ func TestAuditLogs(t *testing.T) {
9595
require.Equal(t, foundUser, *alogs.AuditLogs[0].User)
9696
})
9797

98-
t.Run("IncludeOrganization", func(t *testing.T) {
99-
t.Parallel()
100-
101-
ctx := context.Background()
102-
client := coderdtest.New(t, nil)
103-
user := coderdtest.CreateFirstUser(t, client)
104-
105-
o, err := client.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
106-
Name: "new-org",
107-
DisplayName: "New organization",
108-
Description: "A new organization to love and cherish until the test is over.",
109-
Icon: "/emojis/1f48f-1f3ff.png",
110-
})
111-
require.NoError(t, err)
112-
113-
err = client.CreateTestAuditLog(ctx, codersdk.CreateTestAuditLogRequest{
114-
OrganizationID: o.ID,
115-
ResourceID: user.UserID,
116-
})
117-
require.NoError(t, err)
118-
119-
alogs, err := client.AuditLogs(ctx, codersdk.AuditLogsRequest{
120-
Pagination: codersdk.Pagination{
121-
Limit: 1,
122-
},
123-
})
124-
require.NoError(t, err)
125-
require.Equal(t, int64(1), alogs.Count)
126-
require.Len(t, alogs.AuditLogs, 1)
127-
128-
// Make sure the organization is fully populated.
129-
require.Equal(t, &codersdk.MinimalOrganization{
130-
ID: o.ID,
131-
Name: o.Name,
132-
DisplayName: o.DisplayName,
133-
Icon: o.Icon,
134-
}, alogs.AuditLogs[0].Organization)
135-
136-
// OrganizationID is deprecated, but make sure it is set.
137-
require.Equal(t, o.ID, alogs.AuditLogs[0].OrganizationID)
138-
139-
// Delete the org and try again, should be mostly empty.
140-
err = client.DeleteOrganization(ctx, o.ID.String())
141-
require.NoError(t, err)
142-
143-
alogs, err = client.AuditLogs(ctx, codersdk.AuditLogsRequest{
144-
Pagination: codersdk.Pagination{
145-
Limit: 1,
146-
},
147-
})
148-
require.NoError(t, err)
149-
require.Equal(t, int64(1), alogs.Count)
150-
require.Len(t, alogs.AuditLogs, 1)
151-
152-
require.Equal(t, &codersdk.MinimalOrganization{
153-
ID: o.ID,
154-
}, alogs.AuditLogs[0].Organization)
155-
156-
// OrganizationID is deprecated, but make sure it is set.
157-
require.Equal(t, o.ID, alogs.AuditLogs[0].OrganizationID)
158-
159-
// Some audit entries do not have an organization at all, in which case the
160-
// response omits the organization.
161-
err = client.CreateTestAuditLog(ctx, codersdk.CreateTestAuditLogRequest{
162-
ResourceType: codersdk.ResourceTypeAPIKey,
163-
ResourceID: user.UserID,
164-
})
165-
require.NoError(t, err)
166-
167-
alogs, err = client.AuditLogs(ctx, codersdk.AuditLogsRequest{
168-
SearchQuery: "resource_type:api_key",
169-
Pagination: codersdk.Pagination{
170-
Limit: 1,
171-
},
172-
})
173-
require.NoError(t, err)
174-
require.Equal(t, int64(1), alogs.Count)
175-
require.Len(t, alogs.AuditLogs, 1)
176-
177-
// The other will have no organization.
178-
require.Equal(t, (*codersdk.MinimalOrganization)(nil), alogs.AuditLogs[0].Organization)
179-
180-
// OrganizationID is deprecated, but make sure it is empty.
181-
require.Equal(t, uuid.Nil, alogs.AuditLogs[0].OrganizationID)
182-
})
183-
18498
t.Run("WorkspaceBuildAuditLink", func(t *testing.T) {
18599
t.Parallel()
186100

coderd/coderd.go

-3
Original file line numberDiff line numberDiff line change
@@ -864,15 +864,12 @@ func New(options *Options) *API {
864864
r.Use(
865865
apiKeyMiddleware,
866866
)
867-
r.Post("/", api.postOrganizations)
868867
r.Get("/", api.organizations)
869868
r.Route("/{organization}", func(r chi.Router) {
870869
r.Use(
871870
httpmw.ExtractOrganizationParam(options.Database),
872871
)
873872
r.Get("/", api.organization)
874-
r.Patch("/", api.patchOrganization)
875-
r.Delete("/", api.deleteOrganization)
876873
r.Post("/templateversions", api.postTemplateVersionsByOrganization)
877874
r.Route("/templates", func(r chi.Router) {
878875
r.Post("/", api.postTemplateByOrganization)

0 commit comments

Comments
 (0)