diff --git a/components/content-service/pkg/initializer/prebuild.go b/components/content-service/pkg/initializer/prebuild.go index 80d4b83c8993c1..893a22d43e486d 100644 --- a/components/content-service/pkg/initializer/prebuild.go +++ b/components/content-service/pkg/initializer/prebuild.go @@ -9,6 +9,7 @@ import ( "errors" "fmt" "os" + "os/exec" "path/filepath" "strings" @@ -17,6 +18,7 @@ import ( "golang.org/x/xerrors" "github.com/gitpod-io/gitpod/common-go/log" + "github.com/gitpod-io/gitpod/common-go/process" "github.com/gitpod-io/gitpod/common-go/tracing" csapi "github.com/gitpod-io/gitpod/content-service/api" "github.com/gitpod-io/gitpod/content-service/pkg/archive" @@ -152,5 +154,25 @@ func runGitInit(ctx context.Context, gInit *GitInitializer) (err error) { log.Debug("prebuild initializer Git operations complete") } + + defer func() { + span.SetTag("Chown", gInit.Chown) + if !gInit.Chown { + return + } + // TODO (ptumik): need this for regular prebuild -> pvc workspace. Once fixed supervisor executor.execure() running with root we can remove this code. + args := []string{"-R", "-L", "gitpod:gitpod", gInit.Location} + cmd := exec.Command("chown", args...) + res, cerr := cmd.CombinedOutput() + if cerr != nil && !process.IsNotChildProcess(cerr) { + err = git.OpFailedError{ + Args: args, + ExecErr: cerr, + Output: string(res), + Subcommand: "chown", + } + return + } + }() return nil }