Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcfea2b6

Browse files
committed
devcontainer scripts and timings
1 parent179e2cc commitcfea2b6

File tree

3 files changed

+68
-43
lines changed

3 files changed

+68
-43
lines changed

‎agent/agent.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,15 +1115,32 @@ func (a *agent) handleManifest(manifestOK *checkpoint) func(ctx context.Context,
11151115
}
11161116
}
11171117

1118-
// Any defined Dev Containers may be autostarted after the start
1119-
// scripts have completed.
1120-
varpostStartScripts []codersdk.WorkspaceAgentScript
1118+
var (
1119+
// Clone the scripts so we can remove the devcontainer scripts.
1120+
scripts=slices.Clone(manifest.Scripts)
1121+
// The post-start scripts are used to autostart Dev Containers
1122+
// after the start scripts have completed. This is necessary
1123+
// because the Dev Container may depend on the workspace being
1124+
// initialized (git clone, etc).
1125+
postStartScripts []codersdk.WorkspaceAgentScript
1126+
)
11211127
for_,dc:=rangemanifest.Devcontainers {
1122-
dc=expandDevcontainerPaths(a.logger,dc)
11231128
// TODO(mafredri): Verify `@devcontainers/cli` presence.
11241129
// TODO(mafredri): Verify workspace folder exists.
11251130
// TODO(mafredri): If set, verify config path exists.
1126-
postStartScripts=append(postStartScripts,agentcontainers.DevcontainerStartupScript(dc))
1131+
dc=expandDevcontainerPaths(a.logger,dc)
1132+
1133+
fori,s:=rangescripts {
1134+
// The devcontainer scripts match the devcontainer ID for
1135+
// identification.
1136+
ifs.ID==dc.ID {
1137+
scripts=slices.Delete(scripts,i,i+1)
1138+
ifa.experimentalDevcontainersEnabled {
1139+
postStartScripts=append(postStartScripts,agentcontainers.DevcontainerStartupScript(dc,s))
1140+
}
1141+
break
1142+
}
1143+
}
11271144
}
11281145

11291146
err=a.scriptRunner.Init(

‎agent/agentcontainers/devcontainer.go

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,14 @@ package agentcontainers
33
import (
44
"fmt"
55

6-
"github.com/google/uuid"
7-
86
"github.com/coder/coder/v2/codersdk"
97
)
108

11-
funcDevcontainerStartupScript(dc codersdk.WorkspaceAgentDevcontainer) codersdk.WorkspaceAgentScript {
12-
script:=fmt.Sprintf("devcontainer up --workspace-folder %q",dc.WorkspaceFolder)
9+
funcDevcontainerStartupScript(dc codersdk.WorkspaceAgentDevcontainer,script codersdk.WorkspaceAgentScript) codersdk.WorkspaceAgentScript {
10+
cmd:=fmt.Sprintf("devcontainer up --workspace-folder %q",dc.WorkspaceFolder)
1311
ifdc.ConfigPath!="" {
14-
script=fmt.Sprintf("%s --config %q",script,dc.ConfigPath)
15-
}
16-
return codersdk.WorkspaceAgentScript{
17-
ID:uuid.New(),
18-
LogSourceID:uuid.Nil,// TODO(mafredri): Add a devcontainer log source?
19-
LogPath:"",
20-
Script:script,
21-
Cron:"",
22-
Timeout:0,
23-
DisplayName:fmt.Sprintf("Dev Container (%s)",dc.WorkspaceFolder),
12+
cmd=fmt.Sprintf("%s --config %q",cmd,dc.ConfigPath)
2413
}
14+
script.Script=cmd
15+
returnscript
2516
}

‎coderd/provisionerdserver/provisionerdserver.go

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2039,6 +2039,31 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
20392039
}
20402040
}
20412041

2042+
var (
2043+
devcontainers=prAgent.GetDevcontainers()
2044+
devcontainerIDs=make([]uuid.UUID,0,len(devcontainers))
2045+
devcontainerWorkspaceFolders=make([]string,0,len(devcontainers))
2046+
devcontainerConfigPaths=make([]string,0,len(devcontainers))
2047+
)
2048+
iflen(devcontainers)>0 {
2049+
for_,dc:=rangedevcontainers {
2050+
devcontainerIDs=append(devcontainerIDs,uuid.New())
2051+
devcontainerWorkspaceFolders=append(devcontainerWorkspaceFolders,dc.WorkspaceFolder)
2052+
devcontainerConfigPaths=append(devcontainerConfigPaths,dc.ConfigPath)
2053+
}
2054+
2055+
_,err=db.InsertWorkspaceAgentDevcontainers(ctx, database.InsertWorkspaceAgentDevcontainersParams{
2056+
WorkspaceAgentID:agentID,
2057+
CreatedAt:dbtime.Now(),
2058+
ID:devcontainerIDs,
2059+
WorkspaceFolder:devcontainerWorkspaceFolders,
2060+
ConfigPath:devcontainerConfigPaths,
2061+
})
2062+
iferr!=nil {
2063+
returnxerrors.Errorf("insert agent devcontainer: %w",err)
2064+
}
2065+
}
2066+
20422067
logSourceIDs:=make([]uuid.UUID,0,len(prAgent.Scripts))
20432068
logSourceDisplayNames:=make([]string,0,len(prAgent.Scripts))
20442069
logSourceIcons:=make([]string,0,len(prAgent.Scripts))
@@ -2066,6 +2091,22 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
20662091
scriptRunOnStart=append(scriptRunOnStart,script.RunOnStart)
20672092
scriptRunOnStop=append(scriptRunOnStop,script.RunOnStop)
20682093
}
2094+
// Add a log source and script for each devcontainer so we can
2095+
// track logs and timings for each.
2096+
for_,id:=rangedevcontainerIDs {
2097+
logSourceIDs=append(logSourceIDs,uuid.New())
2098+
logSourceDisplayNames=append(logSourceDisplayNames,"Dev Container")
2099+
logSourceIcons=append(logSourceIcons,"/emojis/1f4e6.png")// Emoji package. Or perhaps /icon/container.svg?
2100+
scriptIDs=append(scriptIDs,id)// Re-use the devcontainer ID as the script ID for identification.
2101+
scriptDisplayName=append(scriptDisplayName,"Dev Container")// TODO(mafredri): Make it unique? Grab from id used in TF?
2102+
scriptLogPaths=append(scriptLogPaths,"")
2103+
scriptSources=append(scriptSources,"")
2104+
scriptCron=append(scriptCron,"")
2105+
scriptTimeout=append(scriptTimeout,0)
2106+
scriptStartBlocksLogin=append(scriptStartBlocksLogin,false)
2107+
scriptRunOnStart=append(scriptRunOnStart,false)
2108+
scriptRunOnStop=append(scriptRunOnStop,false)
2109+
}
20692110

20702111
_,err=db.InsertWorkspaceAgentLogSources(ctx, database.InsertWorkspaceAgentLogSourcesParams{
20712112
WorkspaceAgentID:agentID,
@@ -2096,30 +2137,6 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
20962137
returnxerrors.Errorf("insert agent scripts: %w",err)
20972138
}
20982139

2099-
ifdevcontainers:=prAgent.GetDevcontainers();len(devcontainers)>0 {
2100-
var (
2101-
devContainerIDs=make([]uuid.UUID,0,len(devcontainers))
2102-
devContainerWorkspaceFolders=make([]string,0,len(devcontainers))
2103-
devContainerConfigPaths=make([]string,0,len(devcontainers))
2104-
)
2105-
for_,dc:=rangedevcontainers {
2106-
devContainerIDs=append(devContainerIDs,uuid.New())
2107-
devContainerWorkspaceFolders=append(devContainerWorkspaceFolders,dc.WorkspaceFolder)
2108-
devContainerConfigPaths=append(devContainerConfigPaths,dc.ConfigPath)
2109-
}
2110-
2111-
_,err=db.InsertWorkspaceAgentDevcontainers(ctx, database.InsertWorkspaceAgentDevcontainersParams{
2112-
WorkspaceAgentID:agentID,
2113-
CreatedAt:dbtime.Now(),
2114-
ID:devContainerIDs,
2115-
WorkspaceFolder:devContainerWorkspaceFolders,
2116-
ConfigPath:devContainerConfigPaths,
2117-
})
2118-
iferr!=nil {
2119-
returnxerrors.Errorf("insert agent devcontainer: %w",err)
2120-
}
2121-
}
2122-
21232140
for_,app:=rangeprAgent.Apps {
21242141
// Similar logic is duplicated in terraform/resources.go.
21252142
slug:=app.Slug

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp