Self-hostable web UI for managing GitHub Actions running locally on-machine.
⚠️ Experimental personal project — under active development
- Backend: Node.js + Express + TypeScript (via
tsx) - Frontend: React + TypeScript + Vite
- Testing: Vitest + Supertest
- CI/CD: GitHub Actions
- Node.js 20+ (22+ recommended)
- npm 10+
- Docker (for runner management)
The easiest way to install Action Packer as a service that runs at startup:
# Clone the repository
git clone https://github.com/depoll/action-packer.git
cd action-packer
# Run the installer
./scripts/install.shOptions:
./scripts/install.sh --port 3001 # Set server port
./scripts/install.sh --env production # Set NODE_ENV
./scripts/install.sh --help # Show all options# Clone the repository
git clone https://github.com/depoll/action-packer.git
cd action-packer
# Run the installer (may need to allow script execution first)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
.\scripts\install.ps1Options:
.\scripts\install.ps1 -Port 3001 -Environment productionThis will:
- Install all npm dependencies
- Build the project for production
- Create a
.envconfiguration file - Set up the service to start automatically on boot/login
- Start the service immediately
After installation, use the service control script:
./scripts/service.sh status # Check if running
./scripts/service.sh start # Start the service
./scripts/service.sh stop # Stop the service
./scripts/service.sh restart # Restart the service
./scripts/service.sh logs # Follow log output.\scripts\service.ps1 status # Check if running
.\scripts\service.ps1 start # Start the service
.\scripts\service.ps1 stop # Stop the service
.\scripts\service.ps1 restart # Restart the service
.\scripts\service.ps1 logs # Follow log outputTo remove the service:
./scripts/uninstall.sh.\scripts\uninstall.ps1If you prefer manual setup:
# Clone the repository
git clone https://github.com/depoll/action-packer.git
cd action-packer
# Install dependencies
npm install
# Build for production
npm run build
# Start the server
npm start# Start both frontend and backend
npm run dev
# Or run individually
npm run dev:backend # API at http://localhost:3001
npm run dev:frontend # UI at http://localhost:5173npm run dev uses concurrently to run both dev servers in parallel.
Press Ctrl+C once to stop both.
# Run all tests
npm test
# Run tests for specific workspace
npm test -w backend
npm test -w frontend# Build all packages
npm run build
# Type-check without emitting
npm run typecheckaction-packer/
├── backend/ # Express API server
│ ├── src/
│ │ ├── index.ts
│ │ ├── routes/
│ │ └── middleware/
│ └── tests/
├── frontend/ # React SPA (Vite)
│ ├── src/
│ └── public/
├── .github/workflows/ # CI pipelines
├── AGENTS.md # AI assistant guidance
└── package.json # Workspace root
| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Health check with uptime |
| GET | /api |
API info |
- Uses launchd to run the service at login
- Logs stored in
~/Library/Logs/ActionPacker/ - Service plist at
~/Library/LaunchAgents/com.action-packer.server.plist
- Uses systemd to run the service at boot
- Requires sudo for service installation
- Logs accessible via
journalctl -u action-packer
- Uses Task Scheduler to run the service at login
- Logs stored in
%LOCALAPPDATA%\ActionPacker\Logs\ - Task named
ActionPackerin Task Scheduler
After installation, edit backend/.env to configure:
# Server
PORT=3001
NODE_ENV=production
# GitHub App (required for GitHub integration)
GITHUB_APP_ID=your_app_id
GITHUB_APP_PRIVATE_KEY_PATH=/path/to/private-key.pem # Windows: C:\path\to\private-key.pem
GITHUB_APP_CLIENT_ID=your_client_id
GITHUB_APP_CLIENT_SECRET=your_client_secret
# Session
JWT_SECRET=your_secure_random_stringAfter changing configuration, restart the service:
# macOS/Linux
./scripts/service.sh restart
# Windows (PowerShell)
.\scripts\service.ps1 restartThis is an experimental personal project, but contributions are welcome!
See LICENSE for details.