refactor: delete code for ro bind of repo

This commit is contained in:
2026-03-19 15:30:13 +00:00
parent 08ff22a9aa
commit f8119e8bde
4 changed files with 24 additions and 33 deletions
+8 -17
View File
@@ -13,7 +13,6 @@ import (
const ( const (
recordVisibleHome = "/home/test" recordVisibleHome = "/home/test"
recordVisibleRepo = "/home/test/repo"
recordVisibleTmp = "/tmp" recordVisibleTmp = "/tmp"
recordGitDate = "2024-01-01T00:00:00Z" recordGitDate = "2024-01-01T00:00:00Z"
) )
@@ -88,22 +87,16 @@ func newRecordFiles() (string, string, func(), error) {
} }
type recordSandbox struct { type recordSandbox struct {
hostHome string hostHome string
hostTmp string hostTmp string
projectRoot string pathEnv string
pathEnv string
} }
func newRecordSandbox() (recordSandbox, func(), error) { func newRecordSandbox() (recordSandbox, func(), error) {
cwd, err := os.Getwd() return newRecordSandboxForPathEnv(os.Getenv("PATH"))
if err != nil {
return recordSandbox{}, nil, err
}
return newRecordSandboxForProjectRoot(projectRoot(cwd), os.Getenv("PATH"))
} }
func newRecordSandboxForProjectRoot(root, pathEnv string) (recordSandbox, func(), error) { func newRecordSandboxForPathEnv(pathEnv string) (recordSandbox, func(), error) {
dir, err := os.MkdirTemp("", "miro-record-sandbox-") dir, err := os.MkdirTemp("", "miro-record-sandbox-")
if err != nil { if err != nil {
return recordSandbox{}, nil, err return recordSandbox{}, nil, err
@@ -114,15 +107,13 @@ func newRecordSandboxForProjectRoot(root, pathEnv string) (recordSandbox, func()
} }
sandbox := recordSandbox{ sandbox := recordSandbox{
hostHome: filepath.Join(dir, "home"), hostHome: filepath.Join(dir, "home"),
hostTmp: filepath.Join(dir, "tmp"), hostTmp: filepath.Join(dir, "tmp"),
projectRoot: root, pathEnv: pathEnv,
pathEnv: pathEnv,
} }
for _, path := range []string{ for _, path := range []string{
sandbox.hostHome, sandbox.hostHome,
filepath.Join(sandbox.hostHome, "repo"),
sandbox.hostTmp, sandbox.hostTmp,
} { } {
if err := os.MkdirAll(path, 0o755); err != nil { if err := os.MkdirAll(path, 0o755); err != nil {
-3
View File
@@ -60,12 +60,10 @@ func buildRecordShellScript() string {
var body bytes.Buffer var body bytes.Buffer
if err := recordShellTemplate.Execute(&body, struct { if err := recordShellTemplate.Execute(&body, struct {
VisibleHome string VisibleHome string
VisibleRepo string
VisibleTmp string VisibleTmp string
GitDate string GitDate string
}{ }{
VisibleHome: shQuote(recordVisibleHome), VisibleHome: shQuote(recordVisibleHome),
VisibleRepo: shQuote(recordVisibleRepo),
VisibleTmp: shQuote(recordVisibleTmp), VisibleTmp: shQuote(recordVisibleTmp),
GitDate: shQuote(recordGitDate), GitDate: shQuote(recordGitDate),
}); err != nil { }); err != nil {
@@ -80,7 +78,6 @@ func recordSessionEnv(sandbox recordSandbox) []string {
env = append(env, env = append(env,
"MIRO_RECORD_HOST_HOME="+sandbox.hostHome, "MIRO_RECORD_HOST_HOME="+sandbox.hostHome,
"MIRO_RECORD_HOST_TMP="+sandbox.hostTmp, "MIRO_RECORD_HOST_TMP="+sandbox.hostTmp,
"MIRO_RECORD_PROJECT_ROOT="+sandbox.projectRoot,
"MIRO_RECORD_PATH_ENV="+sandbox.pathEnv, "MIRO_RECORD_PATH_ENV="+sandbox.pathEnv,
) )
+3 -2
View File
@@ -1,9 +1,11 @@
#!/bin/sh #!/bin/sh
set -eu set -eu
# Host directory mounted as the sandboxed HOME.
host_home=${MIRO_RECORD_HOST_HOME:?} host_home=${MIRO_RECORD_HOST_HOME:?}
# Host temp directory mounted read-write inside the sandbox.
host_tmp=${MIRO_RECORD_HOST_TMP:?} host_tmp=${MIRO_RECORD_HOST_TMP:?}
project_root=${MIRO_RECORD_PROJECT_ROOT:?} # PATH value forwarded into the sandbox so required tools stay available.
path_env=${MIRO_RECORD_PATH_ENV:?} path_env=${MIRO_RECORD_PATH_ENV:?}
if command -v git >/dev/null 2>&1; then if command -v git >/dev/null 2>&1; then
@@ -17,7 +19,6 @@ exec bwrap \
--ro-bind / / \ --ro-bind / / \
--tmpfs /home \ --tmpfs /home \
--bind "$host_home" {{ .VisibleHome }} \ --bind "$host_home" {{ .VisibleHome }} \
--ro-bind "$project_root" {{ .VisibleRepo }} \
--bind "$host_tmp" {{ .VisibleTmp }} \ --bind "$host_tmp" {{ .VisibleTmp }} \
--dev /dev \ --dev /dev \
--proc /proc \ --proc /proc \
+13 -11
View File
@@ -169,11 +169,9 @@ func TestBuildRecordShellScriptUsesExpectedCommands(t *testing.T) {
for _, want := range []string{ for _, want := range []string{
"host_home=${MIRO_RECORD_HOST_HOME:?}", "host_home=${MIRO_RECORD_HOST_HOME:?}",
"host_tmp=${MIRO_RECORD_HOST_TMP:?}", "host_tmp=${MIRO_RECORD_HOST_TMP:?}",
"project_root=${MIRO_RECORD_PROJECT_ROOT:?}",
"path_env=${MIRO_RECORD_PATH_ENV:?}", "path_env=${MIRO_RECORD_PATH_ENV:?}",
"HOME=\"$host_home\" GIT_CONFIG_NOSYSTEM=1 git config --global user.name 'Miro Test'", "HOME=\"$host_home\" GIT_CONFIG_NOSYSTEM=1 git config --global user.name 'Miro Test'",
"--bind \"$host_home\" " + shQuote(recordVisibleHome), "--bind \"$host_home\" " + shQuote(recordVisibleHome),
"--ro-bind \"$project_root\" " + shQuote(recordVisibleRepo),
"--bind \"$host_tmp\" " + shQuote(recordVisibleTmp), "--bind \"$host_tmp\" " + shQuote(recordVisibleTmp),
"--setenv HOME " + shQuote(recordVisibleHome), "--setenv HOME " + shQuote(recordVisibleHome),
"--setenv PATH \"$path_env\"", "--setenv PATH \"$path_env\"",
@@ -190,8 +188,7 @@ func TestBuildRecordShellScriptUsesExpectedCommands(t *testing.T) {
} }
func TestRunRecordSessionUsesSandboxedScriptCommand(t *testing.T) { func TestRunRecordSessionUsesSandboxedScriptCommand(t *testing.T) {
root := t.TempDir() testDir := filepath.Join(t.TempDir(), "e2e")
testDir := filepath.Join(root, "e2e")
mustWriteRecordShell(t, testDir) mustWriteRecordShell(t, testDir)
addFakeRecordDependencies(t, "script") addFakeRecordDependencies(t, "script")
@@ -200,15 +197,15 @@ func TestRunRecordSessionUsesSandboxedScriptCommand(t *testing.T) {
t.Setenv("FAKE_SCRIPT_ARGS_FILE", argsPath) t.Setenv("FAKE_SCRIPT_ARGS_FILE", argsPath)
t.Setenv("FAKE_SCRIPT_COMMAND_BODY_FILE", commandBodyPath) t.Setenv("FAKE_SCRIPT_COMMAND_BODY_FILE", commandBodyPath)
sandbox, cleanup, err := newRecordSandboxForProjectRoot(root, os.Getenv("PATH")) sandbox, cleanup, err := newRecordSandboxForPathEnv(os.Getenv("PATH"))
if err != nil { if err != nil {
t.Fatalf("newRecordSandboxForProjectRoot() error = %v", err) t.Fatalf("newRecordSandboxForPathEnv() error = %v", err)
} }
defer cleanup() defer cleanup()
shellPath := recordShellPath(testDir) shellPath := recordShellPath(testDir)
err = withRecordStreams(t, "", func(rio recordIO) error { err = withRecordStreams(t, "", func(rio recordIO) error {
return runRecordSession(root, filepath.Join(t.TempDir(), "raw.in"), filepath.Join(t.TempDir(), "raw.out"), shellPath, sandbox, rio) return runRecordSession(t.TempDir(), filepath.Join(t.TempDir(), "raw.in"), filepath.Join(t.TempDir(), "raw.out"), shellPath, sandbox, rio)
}) })
if err != nil { if err != nil {
t.Fatalf("runRecordSession() error = %v", err) t.Fatalf("runRecordSession() error = %v", err)
@@ -236,7 +233,6 @@ func TestRunRecordSessionUsesSandboxedScriptCommand(t *testing.T) {
"host_home=${MIRO_RECORD_HOST_HOME:?}", "host_home=${MIRO_RECORD_HOST_HOME:?}",
"--ro-bind / /", "--ro-bind / /",
"--tmpfs /home", "--tmpfs /home",
"--ro-bind \"$project_root\" " + shQuote(recordVisibleRepo),
"--setenv HOME " + shQuote(recordVisibleHome), "--setenv HOME " + shQuote(recordVisibleHome),
"--setenv TMPDIR " + shQuote(recordVisibleTmp), "--setenv TMPDIR " + shQuote(recordVisibleTmp),
"bash --noprofile --norc -i", "bash --noprofile --norc -i",
@@ -271,7 +267,7 @@ func TestRecordScenarioUsesDeterministicSandbox(t *testing.T) {
defer close(writeDone) defer close(writeDone)
defer writer.Close() defer writer.Close()
if _, err := writer.Write([]byte("pwd\necho \"$HOME\"\ncd repo\npwd\nexit\n")); err != nil { if _, err := writer.Write([]byte("pwd\necho \"$HOME\"\nif [ -e /home/test/repo ]; then echo FOUND; else echo MISSING; fi\npwd\nexit\n")); err != nil {
writeDone <- err writeDone <- err
return return
} }
@@ -304,7 +300,7 @@ func TestRecordScenarioUsesDeterministicSandbox(t *testing.T) {
if strings.Contains(recordedIn, "Script started on ") { if strings.Contains(recordedIn, "Script started on ") {
t.Fatalf("saved in = %q, want stripped script wrapper", recordedIn) t.Fatalf("saved in = %q, want stripped script wrapper", recordedIn)
} }
for _, want := range []string{"pwd\n", "echo \"$HOME\"\n", "cd repo\n", "exit\n"} { for _, want := range []string{"pwd\n", "echo \"$HOME\"\n", "if [ -e /home/test/repo ]; then echo FOUND; else echo MISSING; fi\n", "exit\n"} {
if !strings.Contains(recordedIn, want) { if !strings.Contains(recordedIn, want) {
t.Fatalf("saved in = %q, want substring %q", recordedIn, want) t.Fatalf("saved in = %q, want substring %q", recordedIn, want)
} }
@@ -314,11 +310,17 @@ func TestRecordScenarioUsesDeterministicSandbox(t *testing.T) {
if strings.Contains(recordedOut, "Script started on ") { if strings.Contains(recordedOut, "Script started on ") {
t.Fatalf("saved out = %q, want stripped script wrapper", recordedOut) t.Fatalf("saved out = %q, want stripped script wrapper", recordedOut)
} }
for _, want := range []string{recordVisibleHome, recordVisibleRepo} { for _, want := range []string{recordVisibleHome} {
if !strings.Contains(recordedOut, want) { if !strings.Contains(recordedOut, want) {
t.Fatalf("saved out = %q, want substring %q", recordedOut, want) t.Fatalf("saved out = %q, want substring %q", recordedOut, want)
} }
} }
if !strings.Contains(recordedOut, "MISSING") {
t.Fatalf("saved out = %q, want missing repo confirmation", recordedOut)
}
if strings.Contains(recordedOut, "\r\nFOUND\r\n") {
t.Fatalf("saved out = %q, want repo to stay unavailable", recordedOut)
}
} }
func TestRecordFailsWhenRecorderShellMissing(t *testing.T) { func TestRecordFailsWhenRecorderShellMissing(t *testing.T) {