diff --git a/.changeset/ten-mangos-cover.md b/.changeset/ten-mangos-cover.md new file mode 100644 index 00000000..367aacf4 --- /dev/null +++ b/.changeset/ten-mangos-cover.md @@ -0,0 +1,6 @@ +--- +"@repo/sandbox-container": patch +"@cloudflare/sandbox": patch +--- + +fix: preserve newlines in heredoc commands for exec() diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 96747b84..4cb06c72 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -7,9 +7,9 @@ permissions: on: pull_request: types: [opened, synchronize, reopened] - paths: - - '!**/*.md' - - '!.changeset/**' + #paths: + # - '!**/*.md' + # - '!.changeset/**' jobs: diff --git a/packages/sandbox-container/src/session.ts b/packages/sandbox-container/src/session.ts index c6e588b2..5c6d8123 100644 --- a/packages/sandbox-container/src/session.ts +++ b/packages/sandbox-container/src/session.ts @@ -698,7 +698,9 @@ export class Session { script += ` PREV_DIR=$(pwd)\n`; script += ` if cd ${safeCwd}; then\n`; script += ` # Execute command with prefixed streaming via process substitution\n`; - script += ` { ${command}; } > >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x01\\x01\\x01%s\\n' "$line"; done >> "$log") 2> >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x02\\x02\\x02%s\\n' "$line"; done >> "$log")\n`; + script += ` {\n`; + script += `${command}\n`; + script += ` } > >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x01\\x01\\x01%s\\n' "$line"; done >> "$log") 2> >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x02\\x02\\x02%s\\n' "$line"; done >> "$log")\n`; script += ` EXIT_CODE=$?\n`; script += ` # Restore directory\n`; script += ` cd "$PREV_DIR"\n`; @@ -708,7 +710,9 @@ export class Session { script += ` fi\n`; } else { script += ` # Execute command with prefixed streaming via process substitution\n`; - script += ` { ${command}; } > >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x01\\x01\\x01%s\\n' "$line"; done >> "$log") 2> >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x02\\x02\\x02%s\\n' "$line"; done >> "$log")\n`; + script += ` {\n`; + script += `${command}\n`; + script += ` } > >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x01\\x01\\x01%s\\n' "$line"; done >> "$log") 2> >(while IFS= read -r line || [[ -n "$line" ]]; do printf '\\x02\\x02\\x02%s\\n' "$line"; done >> "$log")\n`; script += ` EXIT_CODE=$?\n`; }