8000 Merge branch 'main' of github.com:/coder/coder into dk/logreplacement · coder/coder@5209aae · GitHub
[go: up one dir, main page]

Skip to content

Commit 5209aae

Browse files
committed
Merge branch 'main' of github.com:/coder/coder into dk/logreplacement
Signed-off-by: Danny Kopping <dannykopping@gmail.com>
1 parent 22d82a4 commit 5209aae

File tree

24 files changed

+605
-507
lines changed

24 files changed

+605
-507
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ jobs:
188188
189189
# Check for any typos
190190
- name: Check for typos
191-
uses: crate-ci/typos@b1a1ef3893ff35ade0cfa71523852a49bfd05d19 # v1.31.1
191+
uses: crate-ci/typos@0f0ccba9ed1df83948f0c15026e4f5ccfce46109 # v1.32.0
192192
with:
193193
config: .github/workflows/typos.toml
194194

.github/workflows/dependabot.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
steps:
2424
- name: Dependabot metadata
2525
id: metadata
26-
uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 # v2.3.0
26+
uses: dependabot/fetch-metadata@08eff52bf64351f401fb50d4972fa95b9f2c2d1b # v2.4.0
2727
with:
2828
github-token: "${{ secrets.GITHUB_TOKEN }}"
2929

.github/workflows/docs-ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
- name: Setup Node
2929
uses: ./.github/actions/setup-node
3030

31-
- uses: tj-actions/changed-files@5426ecc3f5c2b10effaefbd374f0abdc6a571b2f # v45.0.7
31+
- uses: tj-actions/changed-files@480f49412651059a414a6a5c96887abb1877de8a # v45.0.7
3232
id: changed-files
3333
with:
3434
files: |

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ jobs:
4747

4848
# Upload the results to GitHub's code scanning dashboard.
4949
- name: "Upload to code-scanning"
50-
uses: github/codeql-action/upload-sarif@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16
50+
uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17
5151
with:
5252
sarif_file: results.sarif

.github/workflows/security.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
uses: ./.github/actions/setup-go
3939

4040
- name: Initialize CodeQL
41-
uses: github/codeql-action/init@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16
41+
uses: github/codeql-action/init@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17
4242
with:
4343
languages: go, javascript
4444

@@ -48,7 +48,7 @@ jobs:
4848
rm Makefile
4949
5050
- name: Perform CodeQL Analysis
51-
uses: github/codeql-action/analyze@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16
51+
uses: github/codeql-action/analyze@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17
5252

5353
- name: Send Slack notification on failure
5454
if: ${{ failure() }}
@@ -150,7 +150,7 @@ jobs:
150150
severity: "CRITICAL,HIGH"
151151

152152
- name: Upload Trivy scan results to GitHub Security tab
153-
uses: github/codeql-action/upload-sarif@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16
153+
uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17
154154
with:
155155
sarif_file: trivy-results.sarif
156156
category: "Trivy"

agent/agent.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,8 @@ func (a *agent) handleManifest(manifestOK *checkpoint) func(ctx context.Context,
10851085
if err != nil {
10861086
return xerrors.Errorf("expand directory: %w", err)
10871087
}
1088+
// Normalize all devcontainer paths by making them absolute.
1089+
manifest.Devcontainers = agentcontainers.ExpandAllDevcontainerPaths(a.logger, expandPathToAbs, manifest.Devcontainers)
10881090
subsys, err := agentsdk.ProtoFromSubsystems(a.subsystems)
10891091
if err != nil {
10901092
a.logger.Critical(ctx, "failed to convert subsystems", slog.Error(err))
@@ -1127,7 +1129,7 @@ func (a *agent) handleManifest(manifestOK *checkpoint) func(ctx context.Context,
11271129
)
11281130
if a.experimentalDevcontainersEnabled {
11291131
var dcScripts []codersdk.WorkspaceAgentScript
1130-
scripts, dcScripts = agentcontainers.ExtractAndInitializeDevcontainerScripts(a.logger, expandPathToAbs, manifest.Devcontainers, scripts)
1132+
scripts, dcScripts = agentcontainers.ExtractAndInitializeDevcontainerScripts(manifest.Devcontainers, scripts)
11311133
// See ExtractAndInitializeDevcontainerScripts for motivation
11321134
// behind running dcScripts as post start scripts.
11331135
scriptRunnerOpts = append(scriptRunnerOpts, agentscripts.WithPostStartScripts(dcScripts...))

agent/agent_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,8 +1998,9 @@ func TestAgent_ReconnectingPTYContainer(t *testing.T) {
19981998
// You can run it manually as follows:
19991999
//
20002000
// CODER_TEST_USE_DOCKER=1 go test -count=1 ./agent -run TestAgent_DevcontainerAutostart
2001+
//
2002+
//nolint:paralleltest // This test sets an environment variable.
20012003
func TestAgent_DevcontainerAutostart(t *testing.T) {
2002-
t.Parallel()
20032004
if os.Getenv("CODER_TEST_USE_DOCKER") != "1" {
20042005
t.Skip("Set CODER_TEST_USE_DOCKER=1 to run this test")
20052006
}
@@ -2012,9 +2013,12 @@ func TestAgent_DevcontainerAutostart(t *testing.T) {
20122013

20132014
// Prepare temporary devcontainer for test (mywork).
20142015
devcontainerID := uuid.New()
2015-
tempWorkspaceFolder := t.TempDir()
2016-
tempWorkspaceFolder = filepath.Join(tempWorkspaceFolder, "mywork")
2016+
tmpdir := t.TempDir()
2017+
t.Setenv("HOME", tmpdir)
2018+
tempWorkspaceFolder := filepath.Join(tmpdir, "mywork")
2019+
unexpandedWorkspaceFolder := filepath.Join("~", "mywork")
20172020
t.Logf("Workspace folder: %s", tempWorkspaceFolder)
2021+
t.Logf("Unexpanded workspace folder: %s", unexpandedWorkspaceFolder)
20182022
devcontainerPath := filepath.Join(tempWorkspaceFolder, ".devcontainer")
20192023
err = os.MkdirAll(devcontainerPath, 0o755)
20202024
require.NoError(t, err, "create devcontainer directory")
@@ -2031,9 +2035,10 @@ func TestAgent_DevcontainerAutostart(t *testing.T) {
20312035
// is expected to be prepared by the provisioner normally.
20322036
Devcontainers: []codersdk.WorkspaceAgentDevcontainer{
20332037
{
2034-
ID: devcontainerID,
2035-
Name: "test",
2036-
WorkspaceFolder: tempWorkspaceFolder,
2038+
ID: devcontainerID,
2039+
Name: "test",
2040+
// Use an unexpanded path to test the expansion.
2041+
WorkspaceFolder: unexpandedWorkspaceFolder,
20372042
},
20382043
},
20392044
Scripts: []codersdk.WorkspaceAgentScript{

agent/agentcontainers/devcontainer.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ devcontainer up %s
3636
// initialize the workspace (e.g. git clone, npm install, etc). This is
3737
// important if e.g. a Coder module to install @devcontainer/cli is used.
3838
func ExtractAndInitializeDevcontainerScripts(
39-
logger slog.Logger,
40-
expandPath func(string) (string, error),
4139
devcontainers []codersdk.WorkspaceAgentDevcontainer,
4240
scripts []codersdk.WorkspaceAgentScript,
4341
) (filteredScripts []codersdk.WorkspaceAgentScript, devcontainerScripts []codersdk.WorkspaceAgentScript) {
@@ -47,7 +45,6 @@ ScriptLoop:
4745
// The devcontainer scripts match the devcontainer ID for
4846
// identification.
4947
if script.ID == dc.ID {
50-
dc = expandDevcontainerPaths(logger, expandPath, dc)
5148
devcontainerScripts = append(devcontainerScripts, devcontainerStartupScript(dc, script))
5249
continue ScriptLoop
5350
}
@@ -75,6 +72,17 @@ func devcontainerStartupScript(dc codersdk.WorkspaceAgentDevcontainer, script co
7572
return script
7673
}
7774

75+
// ExpandAllDevcontainerPaths expands all devcontainer paths in the given
76+
// devcontainers. This is required by the devcontainer CLI, which requires
77+
// absolute paths for the workspace folder and config path.
78+
func ExpandAllDevcontainerPaths(logger slog.Logger, expandPath func(string) (string, error), devcontainers []codersdk.WorkspaceAgentDevcontainer) []codersdk.WorkspaceAgentDevcontainer {
79+
expanded := make([]codersdk.WorkspaceAgentDevcontainer, 0, len(devcontainers))
80+
for _, dc := range devcontainers {
81+
expanded = append(expanded, expandDevcontainerPaths(logger, expandPath, dc))
82+
}
83+
return expanded
84+
}
85+
7886
func expandDevcontainerPaths(logger slog.Logger, expandPath func(string) (string, error), dc codersdk.WorkspaceAgentDevcontainer) codersdk.WorkspaceAgentDevcontainer {
7987
logger = logger.With(slog.F("devcontainer", dc.Name), slog.F("workspace_folder", dc.WorkspaceFolder), slog.F("config_path", dc.ConfigPath))
8088

agent/agentcontainers/devcontainer_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,7 @@ func TestExtractAndInitializeDevcontainerScripts(t *testing.T) {
242242
}
243243
}
244244
gotFilteredScripts, gotDevcontainerScripts := agentcontainers.ExtractAndInitializeDevcontainerScripts(
245-
logger,
246-
tt.args.expandPath,
247-
tt.args.devcontainers,
245+
agentcontainers.ExpandAllDevcontainerPaths(logger, tt.args.expandPath, tt.args.devcontainers),
248246
tt.args.scripts,
249247
)
250248

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,7 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
648648
WorkspaceBuildId: workspaceBuild.ID.String(),
649649
WorkspaceOwnerLoginType: string(owner.LoginType),
650650
WorkspaceOwnerRbacRoles: ownerRbacRoles,
651-
IsPrebuild: input.IsPrebuild,
652-
IsPrebuildClaim: input.IsPrebuildClaim,
651+
PrebuiltWorkspaceBuildStage: input.PrebuiltWorkspaceBuildStage,
653652
},
654653
LogLevel: input.LogLevel,
655654
},
@@ -2484,11 +2483,10 @@ type TemplateVersionImportJob struct {
24842483

24852484
// WorkspaceProvisionJob is the payload for the "workspace_provision" job type.
24862485
type WorkspaceProvisionJob struct {
2487-
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
2488-
DryRun bool `json:"dry_run"`
2489-
IsPrebuild bool `json:"is_prebuild,omitempty"`
2490-
IsPrebuildClaim bool `json:"is_prebuild_claim,omitempty"`
2491-
LogLevel string `json:"log_level,omitempty"`
2486+
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
2487+
DryRun bool `json:"dry_run"`
2488+
LogLevel string `json:"log_level,omitempty"`
2489+
PrebuiltWorkspaceBuildStage sdkproto.PrebuiltWorkspaceBuildStage `json:"prebuilt_workspace_stage,omitempty"`
24922490
}
24932491

24942492
// TemplateVersionDryRunJob is the payload for the "template_version_dry_run" job type.

coderd/provisionerdserver/provisionerdserver_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,10 @@ func TestAcquireJob(t *testing.T) {
301301
Transition: database.WorkspaceTransitionStart,
302302
Reason: database.BuildReasonInitiator,
303303
})
304+
var buildState sdkproto.PrebuiltWorkspaceBuildStage
305+
if prebuiltWorkspace {
306+
buildState = sdkproto.PrebuiltWorkspaceBuildStage_CREATE
307+
}
304308
_ = dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{
305309
ID: build.ID,
306310
OrganizationID: pd.OrganizationID,
@@ -310,8 +314,8 @@ func TestAcquireJob(t *testing.T) {
310314
FileID: file.ID,
311315
Type: database.ProvisionerJobTypeWorkspaceBuild,
312316
Input: must(json.Marshal(provisionerdserver.WorkspaceProvisionJob{
313-
WorkspaceBuildID: build.ID,
314-
IsPrebuild: prebuiltWorkspace,
317+
WorkspaceBuildID: build.ID,
318+
PrebuiltWorkspaceBuildStage: buildState,
315319
})),
316320
})
317321

@@ -382,7 +386,7 @@ func TestAcquireJob(t *testing.T) {
382386
WorkspaceOwnerRbacRoles: []*sdkproto.Role{{Name: rbac.RoleOrgMember(), OrgId: pd.OrganizationID.String()}, {Name: "member", OrgId: ""}, {Name: rbac.RoleOrgAuditor(), OrgId: pd.OrganizationID.String()}},
383387
}
384388
if prebuiltWorkspace {
385-
wantedMetadata.IsPrebuild = true
389+
wantedMetadata.PrebuiltWorkspaceBuildStage = sdkproto.PrebuiltWorkspaceBuildStage_CREATE
386390
}
387391

388392
slices.SortFunc(wantedMetadata.WorkspaceOwnerRbacRoles, func(a, b *sdkproto.Role) int {
@@ -1796,11 +1800,8 @@ func TestCompleteJob(t *testing.T) {
17961800
InitiatorID: user.ID,
17971801
Type: database.ProvisionerJobTypeWorkspaceBuild,
17981802
Input: must(json.Marshal(provisionerdserver.WorkspaceProvisionJob{
1799-
WorkspaceBuildID: build.ID,
1800-
1801-
IsPrebuild: false,
1802-
// Mark the job as a prebuilt workspace claim.
1803-
IsPrebuildClaim: true,
1803+
WorkspaceBuildID: build.ID,
1804+
PrebuiltWorkspaceBuildStage: sdkproto.PrebuiltWorkspaceBuildStage_CLAIM,
18041805
})),
18051806
OrganizationID: pd.OrganizationID,
18061807
})

coderd/workspaces.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ func createWorkspace(
713713
builder = builder.TemplateVersionPresetID(req.TemplateVersionPresetID)
714714
}
715715
if claimedWorkspace != nil {
716-
builder = builder.MarkPrebuildClaim()
716+
builder = builder.MarkPrebuiltWorkspaceClaim()
717717
}
718718

719719
if req.EnableDynamicParameters && api.Experiments.Enabled(codersdk.ExperimentDynamicParameters) {

coderd/wsbuilder/wsbuilder.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/coder/coder/v2/coderd/rbac/policy"
1717
"github.com/coder/coder/v2/provisioner/terraform/tfparse"
1818
"github.com/coder/coder/v2/provisionersdk"
19+
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
1920

2021
"github.com/google/uuid"
2122
"github.com/sqlc-dev/pqtype"
@@ -76,7 +77,7 @@ type Builder struct {
7677
parameterValues *[]string
7778
templateVersionPresetParameterValues []database.TemplateVersionPresetParameter
7879

79-
prebuild, prebuildClaim bool
80+
prebuiltWorkspaceBuildStage sdkproto.PrebuiltWorkspaceBuildStage
8081

8182
verifyNoLegacyParametersOnce bool
8283
}
@@ -176,14 +177,14 @@ func (b Builder) RichParameterValues(p []codersdk.WorkspaceBuildParameter) Build
176177
// MarkPrebuild indicates that a prebuilt workspace is being built.
177178
func (b Builder) MarkPrebuild() Builder {
178179
// nolint: revive
179-
b.prebuild = true
180+
b.prebuiltWorkspaceBuildStage = sdkproto.PrebuiltWorkspaceBuildStage_CREATE
180181
return b
181182
}
182183

183-
// MarkPrebuildClaim indicates that a prebuilt workspace is being claimed.
184-
func (b Builder) MarkPrebuildClaim() Builder {
184+
// MarkPrebuiltWorkspaceClaim indicates that a prebuilt workspace is being claimed.
185+
func (b Builder) MarkPrebuiltWorkspaceClaim() Builder {
185186
// nolint: revive
186-
b.prebuildClaim = true
187+
b.prebuiltWorkspaceBuildStage = sdkproto.PrebuiltWorkspaceBuildStage_CLAIM
187188
return b
188189
}
189190

@@ -323,10 +324,9 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
323324

324325
workspaceBuildID := uuid.New()
325326
input, err := json.Marshal(provisionerdserver.WorkspaceProvisionJob{
326-
WorkspaceBuildID: workspaceBuildID,
327-
LogLevel: b.logLevel,
328-
IsPrebuild: b.prebuild,
329-
IsPrebuildClaim: b.prebuildClaim,
327+
WorkspaceBuildID: workspaceBuildID,
328+
LogLevel: b.logLevel,
329+
PrebuiltWorkspaceBuildStage: b.prebuiltWorkspaceBuildStage,
330330
})
331331
if err != nil {
332332
return nil, nil, nil, BuildError{

0 commit comments

Comments
 (0)
0