Skip to content

Commit 0536b58

Browse files
authored
fix: parse username/workspace correctly on coder state push --build (#10974)
Fixes the same issue as #10884 but for state push
1 parent baf3bf6 commit 0536b58

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

cli/state.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ func (r *RootCmd) statePush() *clibase.Cmd {
103103
if buildNumber == 0 {
104104
build = workspace.LatestBuild
105105
} else {
106-
build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), codersdk.Me, inv.Args[0], strconv.FormatInt((buildNumber), 10))
106+
owner, workspace, err := splitNamedWorkspace(inv.Args[0])
107+
if err != nil {
108+
return err
109+
}
110+
build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), owner, workspace, strconv.FormatInt((buildNumber), 10))
107111
if err != nil {
108112
return err
109113
}

cli/state_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,28 @@ func TestStatePush(t *testing.T) {
134134
err := inv.Run()
135135
require.NoError(t, err)
136136
})
137+
138+
t.Run("OtherUserBuild", func(t *testing.T) {
139+
t.Parallel()
140+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
141+
owner := coderdtest.CreateFirstUser(t, client)
142+
templateAdmin, taUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
143+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{
144+
Parse: echo.ParseComplete,
145+
ProvisionApply: echo.ApplyComplete,
146+
})
147+
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
148+
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
149+
workspace := coderdtest.CreateWorkspace(t, templateAdmin, owner.OrganizationID, template.ID)
150+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
151+
inv, root := clitest.New(t, "state", "push",
152+
"--build", strconv.Itoa(int(workspace.LatestBuild.BuildNumber)),
153+
taUser.Username+"/"+workspace.Name,
154+
"-")
155+
//nolint: gocritic // this tests owner pushing another user's state
156+
clitest.SetupConfig(t, client, root)
157+
inv.Stdin = strings.NewReader("some magic state")
158+
err := inv.Run()
159+
require.NoError(t, err)
160+
})
137161
}

0 commit comments

Comments
 (0)