Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions .github/workflows/js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,13 @@ jobs:
with:
bun-version: latest

- name: Install screen (Linux)
- name: Install screen and tmux (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y screen
run: sudo apt-get update && sudo apt-get install -y screen tmux

- name: Install screen (macOS)
- name: Install screen and tmux (macOS)
if: runner.os == 'macOS'
run: brew install screen
run: brew install screen tmux

- name: Setup .NET for clink (Linux)
if: runner.os == 'Linux'
Expand Down Expand Up @@ -247,6 +247,28 @@ jobs:
cat "$USERPROFILE/.start-command/executions.lino"
echo "Execution tracking test passed"

# Integration tests for isolation modes - Linux only
- name: Test screen isolation mode (Linux)
if: runner.os == 'Linux'
working-directory: js
run: |
bun run src/bin/cli.js --isolated screen -- echo "Testing screen isolation"
echo "Screen isolation test passed"

- name: Test tmux isolation mode (Linux)
if: runner.os == 'Linux'
working-directory: js
run: |
bun run src/bin/cli.js --isolated tmux -d -- echo "Testing tmux isolation"
echo "Tmux isolation test passed"

- name: Test docker isolation mode (Linux)
if: runner.os == 'Linux'
working-directory: js
run: |
bun run src/bin/cli.js --isolated docker -d --image alpine:latest -- echo "Testing docker isolation"
echo "Docker isolation test passed"

# SSH Integration Tests - Linux only
- name: Setup SSH server for integration tests (Linux)
if: runner.os == 'Linux'
Expand Down
18 changes: 12 additions & 6 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,20 +83,25 @@ jobs:

- name: Check for changelog fragments
run: |
# Get list of fragment files (excluding README and template)
FRAGMENTS=$(find rust/changelog.d -name "*.md" ! -name "README.md" 2>/dev/null | wc -l)

# Get changed files in PR
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)

# Check if any Rust source files changed
SOURCE_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^rust/(src/|tests/|Cargo\.toml)" | wc -l)

if [ "$SOURCE_CHANGED" -gt 0 ] && [ "$FRAGMENTS" -eq 0 ]; then
echo "::error::No changelog fragment found. Please add a changelog entry in rust/changelog.d/"
# Check if a changelog fragment was ADDED in this PR (not just existing)
# We need to check the diff, not just the directory contents
FRAGMENT_ADDED=$(echo "$CHANGED_FILES" | grep -E "^rust/changelog\.d/.*\.md$" | grep -v "README.md" | wc -l)

echo "Source files changed: $SOURCE_CHANGED"
echo "Changelog fragments added in PR: $FRAGMENT_ADDED"

if [ "$SOURCE_CHANGED" -gt 0 ] && [ "$FRAGMENT_ADDED" -eq 0 ]; then
echo "::error::No changelog fragment found in this PR. Please add a changelog entry in rust/changelog.d/"
echo ""
echo "To create a changelog fragment:"
echo " Create a new .md file in rust/changelog.d/ with your changes"
echo " Name it after your PR number, e.g., '123.md'"
echo ""
echo "See rust/changelog.d/README.md for more information."
exit 1
Expand Down Expand Up @@ -218,11 +223,12 @@ jobs:
echo "Execution tracking test passed"

# === BUILD ===
# Only build on push to main, not on PRs (tests already verify the code builds)
build:
name: Build Package
runs-on: ubuntu-latest
needs: [lint, test]
if: always() && needs.lint.result == 'success' && needs.test.result == 'success'
if: always() && github.event_name == 'push' && needs.lint.result == 'success' && needs.test.result == 'success'
steps:
- uses: actions/checkout@v4

Expand Down
12 changes: 12 additions & 0 deletions js/.changeset/status-spine-format.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'start-command': minor
---

Replace fixed-width box output with status spine format

- Width-independent output that doesn't truncate or create jagged boxes
- All metadata visible and copy-pasteable (log paths, session IDs)
- Works uniformly in TTY, tmux, SSH, CI, and log files
- Clear visual distinction: │ for metadata, $ for command, no prefix for output
- Result markers ✓ and ✗ for success/failure
- Isolation metadata repeated in footer for context
4 changes: 2 additions & 2 deletions js/src/bin/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ async function runWithIsolation(
console.log('');
}

// Print finish block with result message inside
// Print finish block with isolation metadata repeated
// Add empty line before finish block for visual separation
console.log('');
const durationMs = Date.now() - startTimeMs;
Expand All @@ -634,7 +634,7 @@ async function runWithIsolation(
exitCode,
logPath: logFilePath,
durationMs,
resultMessage: result.message,
extraLines, // Pass extraLines for isolation metadata repetition in footer
})
);

Expand Down
Loading