Skip to content

Commit 54b7f4c

Browse files
committed
Merge branch 'main' into jon/procprio
2 parents a214974 + 1dd840d commit 54b7f4c

File tree

386 files changed

+18437
-14917
lines changed

Some content is hidden

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

386 files changed

+18437
-14917
lines changed

.github/workflows/ci.yaml

Lines changed: 16 additions & 4 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
@@ -470,11 +472,19 @@ jobs:
470472
- run: pnpm playwright:install
471473
working-directory: site
472474

473-
- run: pnpm playwright:test --workers 1
475+
# Run tests that don't require an enterprise license without an enterprise license
476+
- run: pnpm playwright:test --forbid-only --workers 1
474477
env:
475478
DEBUG: pw:api
476479
working-directory: site
477480

481+
# Run all of the tests with an enterprise license
482+
- run: pnpm playwright:test --forbid-only --workers 1
483+
env:
484+
DEBUG: pw:api
485+
CODER_E2E_ENTERPRISE_LICENSE: ${{ secrets.CODER_E2E_ENTERPRISE_LICENSE }}
486+
working-directory: site
487+
478488
- name: Upload Playwright Failed Tests
479489
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork
480490
uses: actions/upload-artifact@v4
@@ -615,8 +625,10 @@ jobs:
615625
pnpm lint
616626
617627
- name: Build
628+
# no `-j` flag as `make` fails with:
629+
# coderd/rbac/object_gen.go:1:1: syntax error: package statement must be first
618630
run: |
619-
make -j build/coder_docs_"$(./scripts/version.sh)".tgz
631+
make build/coder_docs_"$(./scripts/version.sh)".tgz
620632
621633
required:
622634
runs-on: ubuntu-latest
@@ -662,7 +674,7 @@ jobs:
662674
# to main branch. We are only building this for amd64 platform. (>95% pulls
663675
# are for amd64)
664676
needs: changes
665-
if: needs.changes.outputs.docs-only == 'false' && !github.event.pull_request.head.repo.fork
677+
if: github.ref == 'refs/heads/main' && needs.changes.outputs.docs-only == 'false' && !github.event.pull_request.head.repo.fork
666678
runs-on: ${{ github.repository_owner == 'coder' && 'buildjet-8vcpu-ubuntu-2204' || 'ubuntu-latest' }}
667679
env:
668680
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

.github/workflows/security.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ jobs:
114114
echo "image=$(cat "$image_job")" >> $GITHUB_OUTPUT
115115
116116
- name: Run Trivy vulnerability scanner
117-
uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d
117+
uses: aquasecurity/trivy-action@d710430a6722f083d3b36b8339ff66b32f22ee55
118118
with:
119119
image-ref: ${{ steps.build.outputs.image }}
120120
format: sarif

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ update-golden-files: \
642642
.PHONY: update-golden-files
643643

644644
cli/testdata/.gen-golden: $(wildcard cli/testdata/*.golden) $(wildcard cli/*.tpl) $(GO_SRC_FILES) $(wildcard cli/*_test.go)
645-
go test ./cli -run="Test(CommandHelp|ServerYAML)" -update
645+
go test ./cli -run="Test(CommandHelp|ServerYAML|ErrorExamples)" -update
646646
touch "$@"
647647

648648
enterprise/cli/testdata/.gen-golden: $(wildcard enterprise/cli/testdata/*.golden) $(wildcard cli/*.tpl) $(GO_SRC_FILES) $(wildcard enterprise/cli/*_test.go)
@@ -783,6 +783,7 @@ test-postgres: test-postgres-docker
783783
-count=1
784784
.PHONY: test-postgres
785785

786+
# NOTE: we set --memory to the same size as a GitHub runner.
786787
test-postgres-docker:
787788
docker rm -f test-postgres-docker || true
788789
docker run \
@@ -795,6 +796,7 @@ test-postgres-docker:
795796
--name test-postgres-docker \
796797
--restart no \
797798
--detach \
799+
--memory 16GB \
798800
gcr.io/coder-dev-1/postgres:13 \
799801
-c shared_buffers=1GB \
800802
-c work_mem=1GB \

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 (
@@ -1110,7 +1110,7 @@ func (a *agent) wireguardAddresses(agentID uuid.UUID) []netip.Prefix {
11101110
netip.PrefixFrom(tailnet.IPFromUUID(agentID), 128),
11111111
// We also listen on the legacy codersdk.WorkspaceAgentIP. This
11121112
// allows for a transition away from wsconncache.
1113-
netip.PrefixFrom(codersdk.WorkspaceAgentIP, 128),
1113+
netip.PrefixFrom(workspacesdk.AgentIP, 128),
11141114
}
11151115
}
11161116

@@ -1150,7 +1150,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
11501150
}
11511151
}()
11521152

1153-
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSSHPort))
1153+
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentSSHPort))
11541154
if err != nil {
11551155
return nil, xerrors.Errorf("listen on the ssh port: %w", err)
11561156
}
@@ -1165,7 +1165,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
11651165
return nil, err
11661166
}
11671167

1168-
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentReconnectingPTYPort))
1168+
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentReconnectingPTYPort))
11691169
if err != nil {
11701170
return nil, xerrors.Errorf("listen for reconnecting pty: %w", err)
11711171
}
@@ -1214,7 +1214,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12141214
if err != nil {
12151215
return
12161216
}
1217-
var msg codersdk.WorkspaceAgentReconnectingPTYInit
1217+
var msg workspacesdk.AgentReconnectingPTYInit
12181218
err = json.Unmarshal(data, &msg)
12191219
if err != nil {
12201220
logger.Warn(ctx, "failed to unmarshal init", slog.F("raw", data))
@@ -1228,7 +1228,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12281228
return nil, err
12291229
}
12301230

1231-
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSpeedtestPort))
1231+
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentSpeedtestPort))
12321232
if err != nil {
12331233
return nil, xerrors.Errorf("listen for speedtest: %w", err)
12341234
}
@@ -1276,7 +1276,7 @@ func (a *agent) createTailnet(ctx context.Context, agentID uuid.UUID, derpMap *t
12761276
return nil, err
12771277
}
12781278

1279-
apiListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentHTTPAPIServerPort))
1279+
apiListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentHTTPAPIServerPort))
12801280
if err != nil {
12811281
return nil, xerrors.Errorf("api listener: %w", err)
12821282
}
@@ -1389,7 +1389,7 @@ func (a *agent) runDERPMapSubscriber(ctx context.Context, conn drpc.Conn, networ
13891389
}
13901390
}
13911391

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

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))

0 commit comments

Comments
 (0)