Skip to content

Commit cf14b9d

Browse files
committed
Merge branch 'main' of github.com:/coder/coder into dk/workspace-metric
2 parents c920508 + 0288e73 commit cf14b9d

File tree

160 files changed

+9560
-9112
lines changed

Some content is hidden

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

160 files changed

+9560
-9112
lines changed

.github/workflows/ci.yaml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,9 @@ jobs:
202202
popd
203203
204204
- name: make gen
205-
run: "make --output-sync -j -B gen"
205+
# no `-j` flag as `make` fails with:
206+
# coderd/rbac/object_gen.go:1:1: syntax error: package statement must be first
207+
run: "make --output-sync -B gen"
206208

207209
- name: Check for unstaged files
208210
run: ./scripts/check_unstaged.sh
@@ -604,9 +606,6 @@ jobs:
604606
- name: Setup sqlc
605607
uses: ./.github/actions/setup-sqlc
606608

607-
- name: make gen
608-
run: "make --output-sync -j -B gen"
609-
610609
- name: Format
611610
run: |
612611
cd offlinedocs
@@ -618,8 +617,10 @@ jobs:
618617
pnpm lint
619618
620619
- name: Build
620+
# no `-j` flag as `make` fails with:
621+
# coderd/rbac/object_gen.go:1:1: syntax error: package statement must be first
621622
run: |
622-
make -j build/coder_docs_"$(./scripts/version.sh)".tgz
623+
make build/coder_docs_"$(./scripts/version.sh)".tgz
623624
624625
required:
625626
runs-on: ubuntu-latest
@@ -665,7 +666,7 @@ jobs:
665666
# to main branch. We are only building this for amd64 platform. (>95% pulls
666667
# are for amd64)
667668
needs: changes
668-
if: needs.changes.outputs.docs-only == 'false' && !github.event.pull_request.head.repo.fork
669+
if: github.ref == 'refs/heads/main' && needs.changes.outputs.docs-only == 'false' && !github.event.pull_request.head.repo.fork
669670
runs-on: ${{ github.repository_owner == 'coder' && 'buildjet-8vcpu-ubuntu-2204' || 'ubuntu-latest' }}
670671
env:
671672
DOCKER_CLI_EXPERIMENTAL: "enabled"

.github/workflows/contrib.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
steps:
3535
- name: cla
3636
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
37-
uses: contributor-assistant/github-action@v2.3.1
37+
uses: contributor-assistant/github-action@v2.3.2
3838
env:
3939
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4040
# the below token should have repo scope and must be manually added by you in the repository's secret

agent/agent.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ import (
3838
"tailscale.com/util/clientmetric"
3939

4040
"cdr.dev/slog"
41-
"github.com/coder/retry"
42-
4341
"github.com/coder/coder/v2/agent/agentproc"
4442
"github.com/coder/coder/v2/agent/agentscripts"
4543
"github.com/coder/coder/v2/agent/agentssh"
@@ -50,8 +48,10 @@ import (
5048
"github.com/coder/coder/v2/coderd/database/dbtime"
5149
"github.com/coder/coder/v2/codersdk"
5250
"github.com/coder/coder/v2/codersdk/agentsdk"
51+
"github.com/coder/coder/v2/codersdk/workspacesdk"
5352
"github.com/coder/coder/v2/tailnet"
5453
tailnetproto "github.com/coder/coder/v2/tailnet/proto"
54+
"github.com/coder/retry"
5555
)
5656

5757
const (
@@ -1107,7 +1107,7 @@ func (a *agent) wireguardAddresses(agentID uuid.UUID) []netip.Prefix {
11071107
netip.PrefixFrom(tailnet.IPFromUUID(agentID), 128),
11081108
// We also listen on the legacy codersdk.WorkspaceAgentIP. This
11091109
// allows for a transition away from wsconncache.
1110-
netip.PrefixFrom(codersdk.WorkspaceAgentIP, 128),
1110+
netip.PrefixFrom(workspacesdk.AgentIP, 128),
11111111
}
11121112
}
11131113

@@ -1147,7 +1147,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
11471147
}
11481148
}()
11491149

1150-
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSSHPort))
1150+
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentSSHPort))
11511151
if err != nil {
11521152
return nil, xerrors.Errorf("listen on the ssh port: %w", err)
11531153
}
@@ -1162,7 +1162,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
11621162
return nil, err
11631163
}
11641164

1165-
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentReconnectingPTYPort))
1165+
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentReconnectingPTYPort))
11661166
if err != nil {
11671167
return nil, xerrors.Errorf("listen for reconnecting pty: %w", err)
11681168
}
@@ -1211,7 +1211,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12111211
if err != nil {
12121212
return
12131213
}
1214-
var msg codersdk.WorkspaceAgentReconnectingPTYInit
1214+
var msg workspacesdk.AgentReconnectingPTYInit
12151215
err = json.Unmarshal(data, &msg)
12161216
if err != nil {
12171217
logger.Warn(ctx, "failed to unmarshal init", slog.F("raw", data))
@@ -1225,7 +1225,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12251225
return nil, err
12261226
}
12271227

1228-
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSpeedtestPort))
1228+
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentSpeedtestPort))
12291229
if err != nil {
12301230
return nil, xerrors.Errorf("listen for speedtest: %w", err)
12311231
}
@@ -1273,7 +1273,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12731273
return nil, err
12741274
}
12751275

1276-
apiListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentHTTPAPIServerPort))
1276+
apiListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentHTTPAPIServerPort))
12771277
if err != nil {
12781278
return nil, xerrors.Errorf("api listener: %w", err)
12791279
}
@@ -1386,7 +1386,7 @@ func (a *agent) runDERPMapSubscriber(ctx context.Context, conn drpc.Conn, networ
13861386
}
13871387
}
13881388

1389-
func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, msg codersdk.WorkspaceAgentReconnectingPTYInit, conn net.Conn) (retErr error) {
1389+
func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, msg workspacesdk.AgentReconnectingPTYInit, conn net.Conn) (retErr error) {
13901390
defer conn.Close()
13911391
a.metrics.connectionsTotal.Add(1)
13921392

agent/agent_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
"cdr.dev/slog"
4747
"cdr.dev/slog/sloggers/sloghuman"
4848
"cdr.dev/slog/sloggers/slogtest"
49-
5049
"github.com/coder/coder/v2/agent"
5150
"github.com/coder/coder/v2/agent/agentproc"
5251
"github.com/coder/coder/v2/agent/agentproc/agentproctest"
@@ -55,6 +54,7 @@ import (
5554
"github.com/coder/coder/v2/agent/proto"
5655
"github.com/coder/coder/v2/codersdk"
5756
"github.com/coder/coder/v2/codersdk/agentsdk"
57+
"github.com/coder/coder/v2/codersdk/workspacesdk"
5858
"github.com/coder/coder/v2/cryptorand"
5959
"github.com/coder/coder/v2/pty/ptytest"
6060
"github.com/coder/coder/v2/tailnet"
@@ -113,7 +113,7 @@ func TestAgent_Stats_ReconnectingPTY(t *testing.T) {
113113
require.NoError(t, err)
114114
defer ptyConn.Close()
115115

116-
data, err := json.Marshal(codersdk.ReconnectingPTYRequest{
116+
data, err := json.Marshal(workspacesdk.ReconnectingPTYRequest{
117117
Data: "echo test\r\n",
118118
})
119119
require.NoError(t, err)
@@ -1606,7 +1606,7 @@ func TestAgent_ReconnectingPTY(t *testing.T) {
16061606
require.NoError(t, tr1.ReadUntil(ctx, matchPrompt), "find prompt")
16071607
require.NoError(t, tr2.ReadUntil(ctx, matchPrompt), "find prompt")
16081608

1609-
data, err := json.Marshal(codersdk.ReconnectingPTYRequest{
1609+
data, err := json.Marshal(workspacesdk.ReconnectingPTYRequest{
16101610
Data: "echo test\r",
16111611
})
16121612
require.NoError(t, err)
@@ -1634,7 +1634,7 @@ func TestAgent_ReconnectingPTY(t *testing.T) {
16341634
require.NoError(t, tr3.ReadUntil(ctx, matchEchoOutput), "find echo output")
16351635

16361636
// Exit should cause the connection to close.
1637-
data, err = json.Marshal(codersdk.ReconnectingPTYRequest{
1637+
data, err = json.Marshal(workspacesdk.ReconnectingPTYRequest{
16381638
Data: "exit\r",
16391639
})
16401640
require.NoError(t, err)
@@ -1783,7 +1783,7 @@ func TestAgent_UpdatedDERP(t *testing.T) {
17831783
})
17841784

17851785
// Setup a client connection.
1786-
newClientConn := func(derpMap *tailcfg.DERPMap, name string) *codersdk.WorkspaceAgentConn {
1786+
newClientConn := func(derpMap *tailcfg.DERPMap, name string) *workspacesdk.AgentConn {
17871787
conn, err := tailnet.NewConn(&tailnet.Options{
17881788
Addresses: []netip.Prefix{netip.PrefixFrom(tailnet.IP(), 128)},
17891789
DERPMap: derpMap,
@@ -1812,9 +1812,9 @@ func TestAgent_UpdatedDERP(t *testing.T) {
18121812
// Force DERP.
18131813
conn.SetBlockEndpoints(true)
18141814

1815-
sdkConn := codersdk.NewWorkspaceAgentConn(conn, codersdk.WorkspaceAgentConnOptions{
1815+
sdkConn := workspacesdk.NewAgentConn(conn, workspacesdk.AgentConnOptions{
18161816
AgentID: agentID,
1817-
CloseFunc: func() error { return codersdk.ErrSkipClose },
1817+
CloseFunc: func() error { return workspacesdk.ErrSkipClose },
18181818
})
18191819
t.Cleanup(func() {
18201820
t.Logf("closing sdkConn %s", name)
@@ -2223,7 +2223,7 @@ func setupSSHSession(
22232223
}
22242224

22252225
func setupAgent(t *testing.T, metadata agentsdk.Manifest, ptyTimeout time.Duration, opts ...func(*agenttest.Client, *agent.Options)) (
2226-
*codersdk.WorkspaceAgentConn,
2226+
*workspacesdk.AgentConn,
22272227
*agenttest.Client,
22282228
<-chan *proto.Stats,
22292229
afero.Fs,
@@ -2296,7 +2296,7 @@ func setupAgent(t *testing.T, metadata agentsdk.Manifest, ptyTimeout time.Durati
22962296
t.Logf("error closing in-mem coordination: %s", err.Error())
22972297
}
22982298
})
2299-
agentConn := codersdk.NewWorkspaceAgentConn(conn, codersdk.WorkspaceAgentConnOptions{
2299+
agentConn := workspacesdk.NewAgentConn(conn, workspacesdk.AgentConnOptions{
23002300
AgentID: metadata.AgentID,
23012301
})
23022302
t.Cleanup(func() {

agent/ports_supported.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"golang.org/x/xerrors"
1010

1111
"github.com/coder/coder/v2/codersdk"
12+
"github.com/coder/coder/v2/codersdk/workspacesdk"
1213
)
1314

1415
func (lp *listeningPortsHandler) getListeningPorts() ([]codersdk.WorkspaceAgentListeningPort, error) {
@@ -32,7 +33,7 @@ func (lp *listeningPortsHandler) getListeningPorts() ([]codersdk.WorkspaceAgentL
3233
seen := make(map[uint16]struct{}, len(tabs))
3334
ports := []codersdk.WorkspaceAgentListeningPort{}
3435
for _, tab := range tabs {
35-
if tab.LocalAddr == nil || tab.LocalAddr.Port < codersdk.WorkspaceAgentMinimumListeningPort {
36+
if tab.LocalAddr == nil || tab.LocalAddr.Port < workspacesdk.AgentMinimumListeningPort {
3637
continue
3738
}
3839

agent/reconnectingpty/reconnectingpty.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import (
1414
"golang.org/x/xerrors"
1515

1616
"cdr.dev/slog"
17-
18-
"github.com/coder/coder/v2/codersdk"
17+
"github.com/coder/coder/v2/codersdk/workspacesdk"
1918
"github.com/coder/coder/v2/pty"
2019
)
2120

@@ -197,7 +196,7 @@ func (s *ptyState) waitForStateOrContext(ctx context.Context, state State) (Stat
197196
func readConnLoop(ctx context.Context, conn net.Conn, ptty pty.PTYCmd, metrics *prometheus.CounterVec, logger slog.Logger) {
198197
decoder := json.NewDecoder(conn)
199198
for {
200-
var req codersdk.ReconnectingPTYRequest
199+
var req workspacesdk.ReconnectingPTYRequest
201200
err := decoder.Decode(&req)
202201
if xerrors.Is(err, io.EOF) {
203202
return

cli/agent_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/coder/coder/v2/coderd/database"
2020
"github.com/coder/coder/v2/coderd/database/dbfake"
2121
"github.com/coder/coder/v2/codersdk"
22+
"github.com/coder/coder/v2/codersdk/workspacesdk"
2223
"github.com/coder/coder/v2/provisionersdk/proto"
2324
"github.com/coder/coder/v2/testutil"
2425
)
@@ -91,7 +92,8 @@ func TestWorkspaceAgent(t *testing.T) {
9192
if assert.NotEmpty(t, workspace.LatestBuild.Resources) && assert.NotEmpty(t, resources[0].Agents) {
9293
assert.NotEmpty(t, resources[0].Agents[0].Version)
9394
}
94-
dialer, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, nil)
95+
dialer, err := workspacesdk.New(client).
96+
DialAgent(ctx, resources[0].Agents[0].ID, nil)
9597
require.NoError(t, err)
9698
defer dialer.Close()
9799
require.True(t, dialer.AwaitReachable(ctx))
@@ -130,7 +132,8 @@ func TestWorkspaceAgent(t *testing.T) {
130132
if assert.NotEmpty(t, resources) && assert.NotEmpty(t, resources[0].Agents) {
131133
assert.NotEmpty(t, resources[0].Agents[0].Version)
132134
}
133-
dialer, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, nil)
135+
dialer, err := workspacesdk.New(client).
136+
DialAgent(ctx, resources[0].Agents[0].ID, nil)
134137
require.NoError(t, err)
135138
defer dialer.Close()
136139
require.True(t, dialer.AwaitReachable(ctx))
@@ -173,7 +176,7 @@ func TestWorkspaceAgent(t *testing.T) {
173176
if assert.NotEmpty(t, resources) && assert.NotEmpty(t, resources[0].Agents) {
174177
assert.NotEmpty(t, resources[0].Agents[0].Version)
175178
}
176-
dialer, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, nil)
179+
dialer, err := workspacesdk.New(client).DialAgent(ctx, resources[0].Agents[0].ID, nil)
177180
require.NoError(t, err)
178181
defer dialer.Close()
179182
require.True(t, dialer.AwaitReachable(ctx))

cli/configssh_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/coder/coder/v2/coderd/database"
2626
"github.com/coder/coder/v2/coderd/database/dbfake"
2727
"github.com/coder/coder/v2/codersdk"
28+
"github.com/coder/coder/v2/codersdk/workspacesdk"
2829
"github.com/coder/coder/v2/provisionersdk/proto"
2930
"github.com/coder/coder/v2/pty/ptytest"
3031
"github.com/coder/coder/v2/testutil"
@@ -83,7 +84,8 @@ func TestConfigSSH(t *testing.T) {
8384
}).WithAgent().Do()
8485
_ = agenttest.New(t, client.URL, r.AgentToken)
8586
resources := coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
86-
agentConn, err := client.DialWorkspaceAgent(context.Background(), resources[0].Agents[0].ID, nil)
87+
agentConn, err := workspacesdk.New(client).
88+
DialAgent(context.Background(), resources[0].Agents[0].ID, nil)
8789
require.NoError(t, err)
8890
defer agentConn.Close()
8991

cli/exp_scaletest.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/coder/coder/v2/coderd/httpapi"
3232
"github.com/coder/coder/v2/coderd/tracing"
3333
"github.com/coder/coder/v2/codersdk"
34+
"github.com/coder/coder/v2/codersdk/workspacesdk"
3435
"github.com/coder/coder/v2/cryptorand"
3536
"github.com/coder/coder/v2/scaletest/agentconn"
3637
"github.com/coder/coder/v2/scaletest/createworkspaces"
@@ -667,7 +668,7 @@ func (r *RootCmd) scaletestCreateWorkspaces() *serpent.Command {
667668
if runCommand != "" {
668669
config.ReconnectingPTY = &reconnectingpty.Config{
669670
// AgentID is set by the test automatically.
670-
Init: codersdk.WorkspaceAgentReconnectingPTYInit{
671+
Init: workspacesdk.AgentReconnectingPTYInit{
671672
ID: uuid.Nil,
672673
Height: 24,
673674
Width: 80,

cli/login.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818

1919
"github.com/coder/pretty"
2020

21-
"github.com/coder/coder/v2/buildinfo"
2221
"github.com/coder/coder/v2/cli/cliui"
2322
"github.com/coder/coder/v2/coderd/userpassword"
2423
"github.com/coder/coder/v2/codersdk"
@@ -180,21 +179,11 @@ func (r *RootCmd) login() *serpent.Command {
180179
serverURL.Scheme = "https"
181180
}
182181

183-
client, err := r.createUnauthenticatedClient(ctx, serverURL)
182+
client, err := r.createUnauthenticatedClient(ctx, serverURL, inv)
184183
if err != nil {
185184
return err
186185
}
187186

188-
// Try to check the version of the server prior to logging in.
189-
// It may be useful to warn the user if they are trying to login
190-
// on a very old client.
191-
err = r.checkVersions(inv, client, buildinfo.Version())
192-
if err != nil {
193-
// Checking versions isn't a fatal error so we print a warning
194-
// and proceed.
195-
_, _ = fmt.Fprintln(inv.Stderr, pretty.Sprint(cliui.DefaultStyles.Warn, err.Error()))
196-
}
197-
198187
hasFirstUser, err := client.HasFirstUser(ctx)
199188
if err != nil {
200189
return xerrors.Errorf("Failed to check server %q for first user, is the URL correct and is coder accessible from your browser? Error - has initial user: %w", serverURL.String(), err)

cli/logout_test.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -97,33 +97,6 @@ func TestLogout(t *testing.T) {
9797

9898
<-logoutChan
9999
})
100-
t.Run("NoSessionFile", func(t *testing.T) {
101-
t.Parallel()
102-
103-
pty := ptytest.New(t)
104-
config := login(t, pty)
105-
106-
// Ensure session files exist.
107-
require.FileExists(t, string(config.URL()))
108-
require.FileExists(t, string(config.Session()))
109-
110-
err := os.Remove(string(config.Session()))
111-
require.NoError(t, err)
112-
113-
logoutChan := make(chan struct{})
114-
logout, _ := clitest.New(t, "logout", "--global-config", string(config))
115-
116-
logout.Stdin = pty.Input()
117-
logout.Stdout = pty.Output()
118-
119-
go func() {
120-
defer close(logoutChan)
121-
err = logout.Run()
122-
assert.ErrorContains(t, err, "You are not logged in. Try logging in using 'coder login'.")
123-
}()
124-
125-
<-logoutChan
126-
})
127100
t.Run("CannotDeleteFiles", func(t *testing.T) {
128101
t.Parallel()
129102

0 commit comments

Comments
 (0)