Skip to content

Commit 30dff81

Browse files
authored
Merge branch 'main' into vapurrmaid/gh-1455/part-3/page
2 parents 3f73a6c + 104c76b commit 30dff81

Some content is hidden

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

63 files changed

+1119
-492
lines changed

.github/stale.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Number of days of inactivity before an issue becomes stale
2-
daysUntilStale: 14
2+
daysUntilStale: 60
33
# Number of days of inactivity before a stale issue is closed
4-
daysUntilClose: 5
5-
# Only apply the stale logic to pulls, since we are using issues to manage work
6-
only: pulls
4+
daysUntilClose: 7
75
# Label to apply when stale.
86
staleLabel: stale
97
# Comment to post when marking an issue as stale. Set to `false` to disable

.github/workflows/chromatic.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,22 @@
66
# SEE: https://www.chromatic.com/docs/ci
77
name: chromatic
88

9+
# REMARK: We want Chromatic to run whenever anything in the FE or its deps
10+
# change, including node_modules and generated code. Currently, all
11+
# node_modules and generated code live in site. If any of these are
12+
# hoisted, we'll want to adjust the paths filter to account for them.
913
on:
1014
push:
15+
paths:
16+
- site/**
1117
branches:
1218
- main
1319
tags:
1420
- "*"
1521

1622
pull_request:
23+
paths:
24+
- site/**
1725

1826
jobs:
1927
deploy:

.golangci.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ run:
201201
concurrency: 4
202202
skip-dirs:
203203
- node_modules
204+
skip-files:
205+
- scripts/rules.go
204206
timeout: 5m
205207

206208
# Over time, add more and more linters from

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
"drpcserver",
1616
"Dsts",
1717
"fatih",
18+
"Formik",
1819
"goarch",
1920
"gographviz",
2021
"goleak",
2122
"gossh",
2223
"gsyslog",
2324
"hashicorp",
2425
"hclsyntax",
26+
"httpapi",
2527
"httpmw",
2628
"idtoken",
2729
"Iflag",
@@ -63,6 +65,7 @@
6365
"tfjson",
6466
"tfstate",
6567
"trimprefix",
68+
"typegen",
6669
"unconvert",
6770
"Untar",
6871
"VMID",

README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,22 @@ Discord"](https://img.shields.io/badge/join-us%20on%20Discord-gray.svg?longCache
88
Follow](https://img.shields.io/twitter/follow/CoderHQ?label=%40CoderHQ&style=social)](https://twitter.com/coderhq)
99
[![codecov](https://codecov.io/gh/coder/coder/branch/main/graph/badge.svg?token=TNLW3OAP6G)](https://codecov.io/gh/coder/coder)
1010

11-
Provision remote development environments with Terraform.
11+
Team-wide CLI for spawning up dev servers on demand, powered by Terraform.
1212

1313
![Kubernetes workspace in Coder v2](./docs/screenshot.png)
1414

1515
## Highlights
1616

17-
- Automate development environments for Linux, Windows, and macOS
18-
- Start writing code with a single command
19-
- Get started quickly using one of the [examples](./examples) provided
17+
Workspaces:
18+
- Code on powerful servers: leverage cloud GPU, GPU, and network speeds
19+
- Use the `coder` CLI: connect via SSH, VS Code, and JetBrains
20+
- Self-serve workspaces: start from team-wide templates (see below)
21+
22+
Templates:
23+
- Manage the infrastructure behind workspaces with standard Terraform (`.hcl` files)
24+
- Use any OS and architecture: Mac, Windows, Linux, VM, Kubernetes, ARM, etc
25+
- Auto-shutdown or update workspaces when they're not in use!
26+
2027

2128
## Installing Coder
2229

agent/agent_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/pion/udp"
2121
"github.com/pion/webrtc/v3"
2222
"github.com/pkg/sftp"
23+
"github.com/stretchr/testify/assert"
2324
"github.com/stretchr/testify/require"
2425
"go.uber.org/goleak"
2526
"golang.org/x/crypto/ssh"
@@ -119,7 +120,7 @@ func TestAgent(t *testing.T) {
119120
done := make(chan struct{})
120121
go func() {
121122
conn, err := local.Accept()
122-
require.NoError(t, err)
123+
assert.NoError(t, err)
123124
_ = conn.Close()
124125
close(done)
125126
}()
@@ -367,7 +368,7 @@ func setupSSHCommand(t *testing.T, beforeArgs []string, afterArgs []string) *exe
367368
return
368369
}
369370
ssh, err := agentConn.SSH()
370-
require.NoError(t, err)
371+
assert.NoError(t, err)
371372
go io.Copy(conn, ssh)
372373
go io.Copy(ssh, conn)
373374
}
@@ -409,7 +410,7 @@ func setupAgent(t *testing.T, metadata agent.Metadata, ptyTimeout time.Duration)
409410
})
410411
api := proto.NewDRPCPeerBrokerClient(provisionersdk.Conn(client))
411412
stream, err := api.NegotiateConnection(context.Background())
412-
require.NoError(t, err)
413+
assert.NoError(t, err)
413414
conn, err := peerbroker.Dial(stream, []webrtc.ICEServer{}, &peer.ConnOptions{
414415
Logger: slogtest.Make(t, nil),
415416
})
@@ -444,13 +445,13 @@ func testAccept(t *testing.T, c net.Conn) {
444445
func assertReadPayload(t *testing.T, r io.Reader, payload []byte) {
445446
b := make([]byte, len(payload)+16)
446447
n, err := r.Read(b)
447-
require.NoError(t, err, "read payload")
448-
require.Equal(t, len(payload), n, "read payload length does not match")
449-
require.Equal(t, payload, b[:n])
448+
assert.NoError(t, err, "read payload")
449+
assert.Equal(t, len(payload), n, "read payload length does not match")
450+
assert.Equal(t, payload, b[:n])
450451
}
451452

452453
func assertWritePayload(t *testing.T, w io.Writer, payload []byte) {
453454
n, err := w.Write(payload)
454-
require.NoError(t, err, "write payload")
455-
require.Equal(t, len(payload), n, "payload length does not match")
455+
assert.NoError(t, err, "write payload")
456+
assert.Equal(t, len(payload), n, "payload length does not match")
456457
}

cli/cliui/agent_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"time"
77

88
"github.com/spf13/cobra"
9-
"github.com/stretchr/testify/require"
9+
"github.com/stretchr/testify/assert"
1010
"go.uber.org/atomic"
1111

1212
"github.com/coder/coder/cli/cliui"
@@ -43,7 +43,7 @@ func TestAgent(t *testing.T) {
4343
go func() {
4444
defer close(done)
4545
err := cmd.Execute()
46-
require.NoError(t, err)
46+
assert.NoError(t, err)
4747
}()
4848
ptty.ExpectMatch("lost connection")
4949
disconnected.Store(true)

cli/cliui/prompt_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"github.com/spf13/cobra"
13+
"github.com/stretchr/testify/assert"
1314
"github.com/stretchr/testify/require"
1415

1516
"github.com/coder/coder/cli/cliui"
@@ -27,7 +28,7 @@ func TestPrompt(t *testing.T) {
2728
resp, err := newPrompt(ptty, cliui.PromptOptions{
2829
Text: "Example",
2930
}, nil)
30-
require.NoError(t, err)
31+
assert.NoError(t, err)
3132
msgChan <- resp
3233
}()
3334
ptty.ExpectMatch("Example")
@@ -44,7 +45,7 @@ func TestPrompt(t *testing.T) {
4445
Text: "Example",
4546
IsConfirm: true,
4647
}, nil)
47-
require.NoError(t, err)
48+
assert.NoError(t, err)
4849
doneChan <- resp
4950
}()
5051
ptty.ExpectMatch("Example")
@@ -80,7 +81,7 @@ func TestPrompt(t *testing.T) {
8081
cliui.AllowSkipPrompt(cmd)
8182
cmd.SetArgs([]string{"-y"})
8283
})
83-
require.NoError(t, err)
84+
assert.NoError(t, err)
8485
doneChan <- resp
8586
}()
8687

@@ -101,7 +102,7 @@ func TestPrompt(t *testing.T) {
101102
resp, err := newPrompt(ptty, cliui.PromptOptions{
102103
Text: "Example",
103104
}, nil)
104-
require.NoError(t, err)
105+
assert.NoError(t, err)
105106
doneChan <- resp
106107
}()
107108
ptty.ExpectMatch("Example")
@@ -117,7 +118,7 @@ func TestPrompt(t *testing.T) {
117118
resp, err := newPrompt(ptty, cliui.PromptOptions{
118119
Text: "Example",
119120
}, nil)
120-
require.NoError(t, err)
121+
assert.NoError(t, err)
121122
doneChan <- resp
122123
}()
123124
ptty.ExpectMatch("Example")
@@ -133,7 +134,7 @@ func TestPrompt(t *testing.T) {
133134
resp, err := newPrompt(ptty, cliui.PromptOptions{
134135
Text: "Example",
135136
}, nil)
136-
require.NoError(t, err)
137+
assert.NoError(t, err)
137138
doneChan <- resp
138139
}()
139140
ptty.ExpectMatch("Example")

cli/cliui/provisionerjob_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"time"
1010

1111
"github.com/spf13/cobra"
12-
"github.com/stretchr/testify/require"
12+
"github.com/stretchr/testify/assert"
1313

1414
"github.com/coder/coder/cli/cliui"
1515
"github.com/coder/coder/coderd/database"
@@ -90,9 +90,9 @@ func TestProvisionerJob(t *testing.T) {
9090
go func() {
9191
<-test.Next
9292
currentProcess, err := os.FindProcess(os.Getpid())
93-
require.NoError(t, err)
93+
assert.NoError(t, err)
9494
err = currentProcess.Signal(os.Interrupt)
95-
require.NoError(t, err)
95+
assert.NoError(t, err)
9696
<-test.Next
9797
test.JobMutex.Lock()
9898
test.Job.Status = codersdk.ProvisionerJobCanceled
@@ -150,7 +150,7 @@ func newProvisionerJob(t *testing.T) provisionerJobTest {
150150
defer close(done)
151151
err := cmd.ExecuteContext(context.Background())
152152
if err != nil {
153-
require.ErrorIs(t, err, cliui.Canceled)
153+
assert.ErrorIs(t, err, cliui.Canceled)
154154
}
155155
}()
156156
t.Cleanup(func() {

cli/cliui/resources_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"testing"
55
"time"
66

7-
"github.com/stretchr/testify/require"
7+
"github.com/stretchr/testify/assert"
88

99
"github.com/coder/coder/cli/cliui"
1010
"github.com/coder/coder/coderd/database"
@@ -32,7 +32,7 @@ func TestWorkspaceResources(t *testing.T) {
3232
}}, cliui.WorkspaceResourcesOptions{
3333
WorkspaceName: "example",
3434
})
35-
require.NoError(t, err)
35+
assert.NoError(t, err)
3636
close(done)
3737
}()
3838
ptty.ExpectMatch("coder ssh example")
@@ -85,7 +85,7 @@ func TestWorkspaceResources(t *testing.T) {
8585
HideAgentState: false,
8686
HideAccess: false,
8787
})
88-
require.NoError(t, err)
88+
assert.NoError(t, err)
8989
close(done)
9090
}()
9191
ptty.ExpectMatch("google_compute_disk.root")

cli/cliui/select_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66

77
"github.com/spf13/cobra"
8+
"github.com/stretchr/testify/assert"
89
"github.com/stretchr/testify/require"
910

1011
"github.com/coder/coder/cli/cliui"
@@ -21,7 +22,7 @@ func TestSelect(t *testing.T) {
2122
resp, err := newSelect(ptty, cliui.SelectOptions{
2223
Options: []string{"First", "Second"},
2324
})
24-
require.NoError(t, err)
25+
assert.NoError(t, err)
2526
msgChan <- resp
2627
}()
2728
require.Equal(t, "First", <-msgChan)

cli/configssh_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"testing"
1212

1313
"github.com/google/uuid"
14+
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"
1516

1617
"cdr.dev/slog/sloggers/slogtest"
@@ -96,7 +97,7 @@ func TestConfigSSH(t *testing.T) {
9697
return
9798
}
9899
ssh, err := agentConn.SSH()
99-
require.NoError(t, err)
100+
assert.NoError(t, err)
100101
go io.Copy(conn, ssh)
101102
go io.Copy(ssh, conn)
102103
}
@@ -120,7 +121,7 @@ func TestConfigSSH(t *testing.T) {
120121
go func() {
121122
defer close(doneChan)
122123
err := cmd.Execute()
123-
require.NoError(t, err)
124+
assert.NoError(t, err)
124125
}()
125126
<-doneChan
126127

cli/create_test.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestCreate(t *testing.T) {
4545
go func() {
4646
defer close(doneChan)
4747
err := cmd.Execute()
48-
require.NoError(t, err)
48+
assert.NoError(t, err)
4949
}()
5050
matches := []string{
5151
"Confirm create", "yes",
@@ -121,12 +121,14 @@ func TestCreate(t *testing.T) {
121121
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
122122
_ = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
123123
cmd, root := clitest.New(t, "create", "my-workspace", "-y")
124-
clitest.SetupConfig(t, client, root)
124+
125+
member := coderdtest.CreateAnotherUser(t, client, user.OrganizationID)
126+
clitest.SetupConfig(t, member, root)
125127
cmdCtx, done := context.WithTimeout(context.Background(), time.Second*3)
126128
go func() {
127129
defer done()
128130
err := cmd.ExecuteContext(cmdCtx)
129-
require.NoError(t, err)
131+
assert.NoError(t, err)
130132
}()
131133
// No pty interaction needed since we use the -y skip prompt flag
132134
<-cmdCtx.Done()
@@ -149,7 +151,7 @@ func TestCreate(t *testing.T) {
149151
go func() {
150152
defer close(doneChan)
151153
err := cmd.Execute()
152-
require.NoError(t, err)
154+
assert.NoError(t, err)
153155
}()
154156
matches := []string{
155157
"Specify a name", "my-workspace",
@@ -187,7 +189,7 @@ func TestCreate(t *testing.T) {
187189
go func() {
188190
defer close(doneChan)
189191
err := cmd.Execute()
190-
require.NoError(t, err)
192+
assert.NoError(t, err)
191193
}()
192194

193195
matches := []string{
@@ -231,7 +233,7 @@ func TestCreate(t *testing.T) {
231233
go func() {
232234
defer close(doneChan)
233235
err := cmd.Execute()
234-
require.NoError(t, err)
236+
assert.NoError(t, err)
235237
}()
236238

237239
matches := []string{
@@ -272,7 +274,7 @@ func TestCreate(t *testing.T) {
272274
go func() {
273275
defer close(doneChan)
274276
err := cmd.Execute()
275-
require.EqualError(t, err, "Parameter value absent in parameter file for \"region\"!")
277+
assert.EqualError(t, err, "Parameter value absent in parameter file for \"region\"!")
276278
}()
277279
<-doneChan
278280
removeTmpDirUntilSuccess(t, tempDir)

0 commit comments

Comments
 (0)