Skip to content

Commit 1c9b5cb

Browse files
committed
Merge remote-tracking branch 'origin/main' into coder-inbox/internal-448
2 parents aa6107c + 287e319 commit 1c9b5cb

File tree

90 files changed

+973
-269
lines changed

Some content is hidden

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

90 files changed

+973
-269
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Start Workspace On Issue Creation or Comment
2+
3+
on:
4+
issues:
5+
types: [opened]
6+
issue_comment:
7+
types: [created]
8+
9+
permissions:
10+
issues: write
11+
12+
jobs:
13+
comment:
14+
runs-on: ubuntu-latest
15+
environment: aidev
16+
timeout-minutes: 5
17+
steps:
18+
- name: Start Coder workspace
19+
uses: coder/start-workspace-action@26d3600161d67901f24d8612793d3b82771cde2d
20+
with:
21+
github-token: ${{ secrets.GITHUB_TOKEN }}
22+
trigger-phrase: "@coder"
23+
coder-url: ${{ secrets.CODER_URL }}
24+
coder-token: ${{ secrets.CODER_TOKEN }}
25+
template-name: ${{ secrets.CODER_TEMPLATE_NAME }}
26+
workspace-name: issue-${{ github.event.issue.number }}
27+
parameters: |-
28+
Coder Image: codercom/oss-dogfood:latest
29+
Coder Repository Base Directory: "~"
30+
AI Code Prompt: "Use the gh CLI tool to read the details of issue https://github.com/${{ github.repository }}/issues/${{ github.event.issue.number }} and then address it."
31+
Region: us-pittsburgh
32+
user-mapping: ${{ secrets.CODER_USER_MAPPING }}

agent/agentcontainers/containers_dockercli.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (dcl *DockerCLILister) List(ctx context.Context) (codersdk.WorkspaceAgentLi
269269
}
270270

271271
res := codersdk.WorkspaceAgentListContainersResponse{
272-
Containers: make([]codersdk.WorkspaceAgentDevcontainer, 0, len(ids)),
272+
Containers: make([]codersdk.WorkspaceAgentContainer, 0, len(ids)),
273273
Warnings: make([]string, 0),
274274
}
275275
dockerPsStderr := strings.TrimSpace(stderrBuf.String())
@@ -380,13 +380,13 @@ func (dis dockerInspectState) String() string {
380380
return sb.String()
381381
}
382382

383-
func convertDockerInspect(raw []byte) ([]codersdk.WorkspaceAgentDevcontainer, []string, error) {
383+
func convertDockerInspect(raw []byte) ([]codersdk.WorkspaceAgentContainer, []string, error) {
384384
var warns []string
385385
var ins []dockerInspect
386386
if err := json.NewDecoder(bytes.NewReader(raw)).Decode(&ins); err != nil {
387387
return nil, nil, xerrors.Errorf("decode docker inspect output: %w", err)
388388
}
389-
outs := make([]codersdk.WorkspaceAgentDevcontainer, 0, len(ins))
389+
outs := make([]codersdk.WorkspaceAgentContainer, 0, len(ins))
390390

391391
// Say you have two containers:
392392
// - Container A with Host IP 127.0.0.1:8000 mapped to container port 8001
@@ -402,14 +402,14 @@ func convertDockerInspect(raw []byte) ([]codersdk.WorkspaceAgentDevcontainer, []
402402
hostPortContainers := make(map[int][]string)
403403

404404
for _, in := range ins {
405-
out := codersdk.WorkspaceAgentDevcontainer{
405+
out := codersdk.WorkspaceAgentContainer{
406406
CreatedAt: in.Created,
407407
// Remove the leading slash from the container name
408408
FriendlyName: strings.TrimPrefix(in.Name, "/"),
409409
ID: in.ID,
410410
Image: in.Config.Image,
411411
Labels: in.Config.Labels,
412-
Ports: make([]codersdk.WorkspaceAgentDevcontainerPort, 0),
412+
Ports: make([]codersdk.WorkspaceAgentContainerPort, 0),
413413
Running: in.State.Running,
414414
Status: in.State.String(),
415415
Volumes: make(map[string]string, len(in.Mounts)),
@@ -452,7 +452,7 @@ func convertDockerInspect(raw []byte) ([]codersdk.WorkspaceAgentDevcontainer, []
452452
// Also keep track of the host port and the container ID.
453453
hostPortContainers[hp] = append(hostPortContainers[hp], in.ID)
454454
}
455-
out.Ports = append(out.Ports, codersdk.WorkspaceAgentDevcontainerPort{
455+
out.Ports = append(out.Ports, codersdk.WorkspaceAgentContainerPort{
456456
Network: network,
457457
Port: cp,
458458
HostPort: uint16(hp),

agent/agentcontainers/containers_internal_test.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ func TestContainersHandler(t *testing.T) {
206206

207207
fakeCt := fakeContainer(t)
208208
fakeCt2 := fakeContainer(t)
209-
makeResponse := func(cts ...codersdk.WorkspaceAgentDevcontainer) codersdk.WorkspaceAgentListContainersResponse {
209+
makeResponse := func(cts ...codersdk.WorkspaceAgentContainer) codersdk.WorkspaceAgentListContainersResponse {
210210
return codersdk.WorkspaceAgentListContainersResponse{Containers: cts}
211211
}
212212

@@ -425,13 +425,13 @@ func TestConvertDockerInspect(t *testing.T) {
425425
//nolint:paralleltest // variable recapture no longer required
426426
for _, tt := range []struct {
427427
name string
428-
expect []codersdk.WorkspaceAgentDevcontainer
428+
expect []codersdk.WorkspaceAgentContainer
429429
expectWarns []string
430430
expectError string
431431
}{
432432
{
433433
name: "container_simple",
434-
expect: []codersdk.WorkspaceAgentDevcontainer{
434+
expect: []codersdk.WorkspaceAgentContainer{
435435
{
436436
CreatedAt: time.Date(2025, 3, 11, 17, 55, 58, 91280203, time.UTC),
437437
ID: "6b539b8c60f5230b8b0fde2502cd2332d31c0d526a3e6eb6eef1cc39439b3286",
@@ -440,14 +440,14 @@ func TestConvertDockerInspect(t *testing.T) {
440440
Labels: map[string]string{},
441441
Running: true,
442442
Status: "running",
443-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
443+
Ports: []codersdk.WorkspaceAgentContainerPort{},
444444
Volumes: map[string]string{},
445445
},
446446
},
447447
},
448448
{
449449
name: "container_labels",
450-
expect: []codersdk.WorkspaceAgentDevcontainer{
450+
expect: []codersdk.WorkspaceAgentContainer{
451451
{
452452
CreatedAt: time.Date(2025, 3, 11, 20, 3, 28, 71706536, time.UTC),
453453
ID: "bd8818e670230fc6f36145b21cf8d6d35580355662aa4d9fe5ae1b188a4c905f",
@@ -456,14 +456,14 @@ func TestConvertDockerInspect(t *testing.T) {
456456
Labels: map[string]string{"baz": "zap", "foo": "bar"},
457457
Running: true,
458458
Status: "running",
459-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
459+
Ports: []codersdk.WorkspaceAgentContainerPort{},
460460
Volumes: map[string]string{},
461461
},
462462
},
463463
},
464464
{
465465
name: "container_binds",
466-
expect: []codersdk.WorkspaceAgentDevcontainer{
466+
expect: []codersdk.WorkspaceAgentContainer{
467467
{
468468
CreatedAt: time.Date(2025, 3, 11, 17, 58, 43, 522505027, time.UTC),
469469
ID: "fdc75ebefdc0243c0fce959e7685931691ac7aede278664a0e2c23af8a1e8d6a",
@@ -472,7 +472,7 @@ func TestConvertDockerInspect(t *testing.T) {
472472
Labels: map[string]string{},
473473
Running: true,
474474
Status: "running",
475-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
475+
Ports: []codersdk.WorkspaceAgentContainerPort{},
476476
Volumes: map[string]string{
477477
"/tmp/test/a": "/var/coder/a",
478478
"/tmp/test/b": "/var/coder/b",
@@ -482,7 +482,7 @@ func TestConvertDockerInspect(t *testing.T) {
482482
},
483483
{
484484
name: "container_sameport",
485-
expect: []codersdk.WorkspaceAgentDevcontainer{
485+
expect: []codersdk.WorkspaceAgentContainer{
486486
{
487487
CreatedAt: time.Date(2025, 3, 11, 17, 56, 34, 842164541, time.UTC),
488488
ID: "4eac5ce199d27b2329d0ff0ce1a6fc595612ced48eba3669aadb6c57ebef3fa2",
@@ -491,7 +491,7 @@ func TestConvertDockerInspect(t *testing.T) {
491491
Labels: map[string]string{},
492492
Running: true,
493493
Status: "running",
494-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
494+
Ports: []codersdk.WorkspaceAgentContainerPort{
495495
{
496496
Network: "tcp",
497497
Port: 12345,
@@ -505,7 +505,7 @@ func TestConvertDockerInspect(t *testing.T) {
505505
},
506506
{
507507
name: "container_differentport",
508-
expect: []codersdk.WorkspaceAgentDevcontainer{
508+
expect: []codersdk.WorkspaceAgentContainer{
509509
{
510510
CreatedAt: time.Date(2025, 3, 11, 17, 57, 8, 862545133, time.UTC),
511511
ID: "3090de8b72b1224758a94a11b827c82ba2b09c45524f1263dc4a2d83e19625ea",
@@ -514,7 +514,7 @@ func TestConvertDockerInspect(t *testing.T) {
514514
Labels: map[string]string{},
515515
Running: true,
516516
Status: "running",
517-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
517+
Ports: []codersdk.WorkspaceAgentContainerPort{
518518
{
519519
Network: "tcp",
520520
Port: 23456,
@@ -528,7 +528,7 @@ func TestConvertDockerInspect(t *testing.T) {
528528
},
529529
{
530530
name: "container_sameportdiffip",
531-
expect: []codersdk.WorkspaceAgentDevcontainer{
531+
expect: []codersdk.WorkspaceAgentContainer{
532532
{
533533
CreatedAt: time.Date(2025, 3, 11, 17, 56, 34, 842164541, time.UTC),
534534
ID: "a",
@@ -537,7 +537,7 @@ func TestConvertDockerInspect(t *testing.T) {
537537
Labels: map[string]string{},
538538
Running: true,
539539
Status: "running",
540-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
540+
Ports: []codersdk.WorkspaceAgentContainerPort{
541541
{
542542
Network: "tcp",
543543
Port: 8001,
@@ -555,7 +555,7 @@ func TestConvertDockerInspect(t *testing.T) {
555555
Labels: map[string]string{},
556556
Running: true,
557557
Status: "running",
558-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
558+
Ports: []codersdk.WorkspaceAgentContainerPort{
559559
{
560560
Network: "tcp",
561561
Port: 8001,
@@ -570,7 +570,7 @@ func TestConvertDockerInspect(t *testing.T) {
570570
},
571571
{
572572
name: "container_volume",
573-
expect: []codersdk.WorkspaceAgentDevcontainer{
573+
expect: []codersdk.WorkspaceAgentContainer{
574574
{
575575
CreatedAt: time.Date(2025, 3, 11, 17, 59, 42, 39484134, time.UTC),
576576
ID: "b3688d98c007f53402a55e46d803f2f3ba9181d8e3f71a2eb19b392cf0377b4e",
@@ -579,7 +579,7 @@ func TestConvertDockerInspect(t *testing.T) {
579579
Labels: map[string]string{},
580580
Running: true,
581581
Status: "running",
582-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
582+
Ports: []codersdk.WorkspaceAgentContainerPort{},
583583
Volumes: map[string]string{
584584
"/var/lib/docker/volumes/testvol/_data": "/testvol",
585585
},
@@ -588,7 +588,7 @@ func TestConvertDockerInspect(t *testing.T) {
588588
},
589589
{
590590
name: "devcontainer_simple",
591-
expect: []codersdk.WorkspaceAgentDevcontainer{
591+
expect: []codersdk.WorkspaceAgentContainer{
592592
{
593593
CreatedAt: time.Date(2025, 3, 11, 17, 1, 5, 751972661, time.UTC),
594594
ID: "0b2a9fcf5727d9562943ce47d445019f4520e37a2aa7c6d9346d01af4f4f9aed",
@@ -600,14 +600,14 @@ func TestConvertDockerInspect(t *testing.T) {
600600
},
601601
Running: true,
602602
Status: "running",
603-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
603+
Ports: []codersdk.WorkspaceAgentContainerPort{},
604604
Volumes: map[string]string{},
605605
},
606606
},
607607
},
608608
{
609609
name: "devcontainer_forwardport",
610-
expect: []codersdk.WorkspaceAgentDevcontainer{
610+
expect: []codersdk.WorkspaceAgentContainer{
611611
{
612612
CreatedAt: time.Date(2025, 3, 11, 17, 3, 55, 22053072, time.UTC),
613613
ID: "4a16af2293fb75dc827a6949a3905dd57ea28cc008823218ce24fab1cb66c067",
@@ -619,14 +619,14 @@ func TestConvertDockerInspect(t *testing.T) {
619619
},
620620
Running: true,
621621
Status: "running",
622-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{},
622+
Ports: []codersdk.WorkspaceAgentContainerPort{},
623623
Volumes: map[string]string{},
624624
},
625625
},
626626
},
627627
{
628628
name: "devcontainer_appport",
629-
expect: []codersdk.WorkspaceAgentDevcontainer{
629+
expect: []codersdk.WorkspaceAgentContainer{
630630
{
631631
CreatedAt: time.Date(2025, 3, 11, 17, 2, 42, 613747761, time.UTC),
632632
ID: "52d23691f4b954d083f117358ea763e20f69af584e1c08f479c5752629ee0be3",
@@ -638,7 +638,7 @@ func TestConvertDockerInspect(t *testing.T) {
638638
},
639639
Running: true,
640640
Status: "running",
641-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
641+
Ports: []codersdk.WorkspaceAgentContainerPort{
642642
{
643643
Network: "tcp",
644644
Port: 8080,
@@ -809,9 +809,9 @@ func TestDockerEnvInfoer(t *testing.T) {
809809
}
810810
}
811811

812-
func fakeContainer(t *testing.T, mut ...func(*codersdk.WorkspaceAgentDevcontainer)) codersdk.WorkspaceAgentDevcontainer {
812+
func fakeContainer(t *testing.T, mut ...func(*codersdk.WorkspaceAgentContainer)) codersdk.WorkspaceAgentContainer {
813813
t.Helper()
814-
ct := codersdk.WorkspaceAgentDevcontainer{
814+
ct := codersdk.WorkspaceAgentContainer{
815815
CreatedAt: time.Now().UTC(),
816816
ID: uuid.New().String(),
817817
FriendlyName: testutil.GetRandomName(t),
@@ -820,7 +820,7 @@ func fakeContainer(t *testing.T, mut ...func(*codersdk.WorkspaceAgentDevcontaine
820820
testutil.GetRandomName(t): testutil.GetRandomName(t),
821821
},
822822
Running: true,
823-
Ports: []codersdk.WorkspaceAgentDevcontainerPort{
823+
Ports: []codersdk.WorkspaceAgentContainerPort{
824824
{
825825
Network: "tcp",
826826
Port: testutil.RandomPortNoListen(t),

agent/reconnectingpty/reconnectingpty.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ type Options struct {
3232
Timeout time.Duration
3333
// Metrics tracks various error counters.
3434
Metrics *prometheus.CounterVec
35+
// BackendType specifies the ReconnectingPTY backend to use.
36+
BackendType string
3537
}
3638

3739
// ReconnectingPTY is a pty that can be reconnected within a timeout and to
@@ -64,13 +66,20 @@ func New(ctx context.Context, logger slog.Logger, execer agentexec.Execer, cmd *
6466
// runs) but in CI screen often incorrectly claims the session name does not
6567
// exist even though screen -list shows it. For now, restrict screen to
6668
// Linux.
67-
backendType := "buffered"
69+
autoBackendType := "buffered"
6870
if runtime.GOOS == "linux" {
6971
_, err := exec.LookPath("screen")
7072
if err == nil {
71-
backendType = "screen"
73+
autoBackendType = "screen"
7274
}
7375
}
76+
var backendType string
77+
switch options.BackendType {
78+
case "":
79+
backendType = autoBackendType
80+
default:
81+
backendType = options.BackendType
82+
}
7483

7584
logger.Info(ctx, "start reconnecting pty", slog.F("backend_type", backendType))
7685

agent/reconnectingpty/server.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,9 @@ func (s *Server) handleConn(ctx context.Context, logger slog.Logger, conn net.Co
207207
s.commandCreator.Execer,
208208
cmd,
209209
&Options{
210-
Timeout: s.timeout,
211-
Metrics: s.errorsTotal,
210+
Timeout: s.timeout,
211+
Metrics: s.errorsTotal,
212+
BackendType: msg.BackendType,
212213
},
213214
)
214215

cli/cliui/resources.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func renderDevcontainers(wro WorkspaceResourcesOptions, agentID uuid.UUID, index
182182
return rows
183183
}
184184

185-
func renderDevcontainerRow(container codersdk.WorkspaceAgentDevcontainer, index, total int) table.Row {
185+
func renderDevcontainerRow(container codersdk.WorkspaceAgentContainer, index, total int) table.Row {
186186
var row table.Row
187187
var sb strings.Builder
188188
_, _ = sb.WriteString(" ")

0 commit comments

Comments
 (0)