Purr 26.2.64800
dotnet tool install --global Purr --version 26.2.64800
dotnet new tool-manifest
dotnet tool install --local Purr --version 26.2.64800
#tool dotnet:?package=Purr&version=26.2.64800
nuke :add-package Purr --version 26.2.64800
Purr
<img src="Purr/wwwroot/logo.png" align="right" width="200" alt="Purr Logo" />
Purr is a .NET 10 CLI tool designed to automate the testing of GitHub Pull Requests. It monitors a repository for new or updated PRs, clones them, executes defined test steps in a secure Landlock sandbox, launches a Playwright browser to navigate to the application, and streams the live session to a remote viewer.
Goal
The goal of this library is to provide a secure and interactive way to preview and test changes in pull requests automatically.
Installation
Install Purr as a global .NET tool:
dotnet tool install purr --global
Usage
Run Purr with the following command:
purr <owner> <repo> [github_token]
Example:
purr myuser myrepo ghp_xxxxx
How to Develop
Prerequisites:
- .NET 10 SDK
- Playwright dependencies, automatically installed on first run
- Linux environment with Landlock support (Kernel 5.13+)
Build:
dotnet buildRun:
dotnet run -- <owner> <repo> [github_token]Example:
dotnet run -- myuser myrepo ghp_xxxxx
Project Structure
Purr/: Main CLI application source code.purr.yml: Configuration file expected in the target repository.
Remote Viewer
The tool starts a web server (default: port 9000) that streams the browser session.
Navigate to the displayed URL (e.g., http://localhost:9000) to view and interact with the running application.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 26.2.64800 | 132 | 2/28/2026 |
| 26.2.64767 | 109 | 2/26/2026 |
| 26.2.64751 | 112 | 2/26/2026 |
| 26.2.64747 | 106 | 2/26/2026 |
| 26.2.64737 | 112 | 2/25/2026 |
| 26.2.64736 | 98 | 2/25/2026 |
| 26.2.64730 | 99 | 2/25/2026 |
| 26.2.64723 | 101 | 2/25/2026 |
| 26.2.64722 | 100 | 2/25/2026 |
| 26.2.64714 | 105 | 2/24/2026 |
| 26.2.64701 | 105 | 2/24/2026 |
| 26.2.64700 | 97 | 2/24/2026 |
| 26.2.64694 | 101 | 2/24/2026 |
| 26.2.64691 | 103 | 2/24/2026 |
| 26.2.64687 | 102 | 2/24/2026 |
| 26.2.64679 | 97 | 2/23/2026 |
| 26.2.64678 | 99 | 2/23/2026 |
| 26.2.64676 | 96 | 2/23/2026 |
| 26.2.64675 | 94 | 2/23/2026 |
| 26.2.64673 | 100 | 2/23/2026 |