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
52 changes: 52 additions & 0 deletions .github/workflows/platform-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Platform Validation

on:
push:
branches:
- main
pull_request:

permissions:
contents: read

jobs:
validate:
name: ${{ matrix.os }} / Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
python-version:
- "3.10"
- "3.11"
- "3.12"
- "3.13"

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install development dependencies
run: python -m pip install -e ".[dev]"

- name: Run unit tests
run: python -m unittest discover -s tests

- name: Run capability diagnostics
run: python scripts/diagnose.py

- name: Run process smoke tests
run: |
python examples/process_smoke.py
python examples/async_process_smoke.py

- name: Build distribution artifacts
run: python -m build
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,27 @@ python examples/async_process_smoke.py

They exercise hosted PowerShell, synchronous process-backed sessions, and async process-backed sessions.

## Platform Validation Matrix

LiveShell's automated platform coverage focuses on the base package behavior that should work on both macOS and Linux without optional extras:

| Platform | Python | Automated checks |
| --- | --- | --- |
| Linux | 3.10, 3.11, 3.12, 3.13 | `python -m unittest discover -s tests`, `python scripts/diagnose.py`, `python examples/process_smoke.py`, `python examples/async_process_smoke.py`, `python -m build` |
| macOS | 3.10, 3.11, 3.12, 3.13 | `python -m unittest discover -s tests`, `python scripts/diagnose.py`, `python examples/process_smoke.py`, `python examples/async_process_smoke.py`, `python -m build` |

This matrix is enforced in GitHub Actions by the `Platform Validation` workflow in `.github/workflows/platform-validation.yml`.

Hosted PowerShell remains an optional path because it requires both a local PowerShell installation and the `powershell` extra:

```powershell
python -m pip install ".[powershell]"
python scripts/diagnose.py --preload
python examples/powershell_smoke.py
```

Run those hosted PowerShell checks manually on the target macOS/Linux machine when that optional integration matters for a release or deployment.

## Behavior And Limitations

Process-backed sessions such as `Cmd` and `Bash` keep one child process alive and send commands through it. They preserve shell state, but they are not full terminal or PTY emulators.
Expand Down
2 changes: 1 addition & 1 deletion scripts/diagnose.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def main() -> int:
pythonnet_found = importlib.util.find_spec("pythonnet") is not None
print(f"pythonnet installed: {pythonnet_found}")
if not pythonnet_found:
print("Install with: python -m pip install -r requirements.txt")
print('Optional for hosted PowerShell: python -m pip install ".[powershell]"')

installation = PowerShell.find_installation()
print(f"PowerShell available: {installation is not None}")
Expand Down
Loading