pinoox / pinroll
Pinroll — atomic release rollout, rollback, and PinGate delivery for Pinoox
Requires
- php: ^8.2
- pinoox/pinion: ^1.1
- symfony/console: ^6.4|^7.0
- symfony/http-foundation: ^6.4|^7.0
Requires (Dev)
- nunomaduro/collision: ^8.5
- pestphp/pest: ^2.36
Suggests
- phpseclib/phpseclib: SSH/SFTP transport
- pinoox/pincore: HMVC integration, Pinx pipeline, and php pinoox CLI
This package is auto-updated.
Last update: 2026-08-21 01:28:55 UTC
README
Pinroll (pinoox/pinroll) 1.5.0 — atomic release rollout, rollback, PinGate delivery, and blank-host provision for Pinoox.
| Concept | Meaning |
|---|---|
| Host | Where to deploy (production, staging, …) |
| Bundle | What to ship (auto-detect apps, or --bundle=…) |
| Transport | How to send (ftp, ssh, pinion, local) |
| PinGate | One public file pingate.php for install / status / rollback / vendor extract |
Documentation
Full guides (setup, hosts, retention, rollback, CLI):
Install
CLI on the dev machine (recommended):
composer require --dev pinoox/pinroll
The host does not need Pinroll in vendor/. pingate.php applies releases with pincore (pinx:install / pinx:update) and Pinion.
Put Pinroll in require only if you want PinGate to use Pinroll classes on the server.
Quick start
php pinoox pinroll:init php pinoox pinroll:connect # interactive: kit / FTP / SSH # later: php pinoox pinroll:deploy --full
Setup methods (no guessing)
| Method | When | Command |
|---|---|---|
| Zip kit | No FTP — extract into public_html |
php pinoox pinroll:kit |
| FTP | Shared hosting with FTP | php pinoox pinroll:connect --via=ftp |
| SSH | VPS | php pinoox pinroll:connect --via=ssh |
| FTP → Pinion | Upload gate once, then HTTP | php pinoox pinroll:connect --bootstrap-ftp |
Zip kit flow:
php pinoox pinroll:kit # → storage/pinroll/pinroll-kit-production.zip # Extract into public_html (File Manager) php pinoox pinroll:check php pinoox pinroll:deploy
| Step | Command | What it does |
|---|---|---|
| 1 | pinroll:init |
Scaffold .pinoox/pinroll.config.php |
| 2 | pinroll:kit or pinroll:connect |
PinGate on host (kit / FTP / SSH) |
| 3 | pinroll:apps |
Set default packages for the host |
| 4 | pinroll:vendor --push |
Build production vendor.zip, upload, extract on host |
| 5 | pinroll:check |
Verify transport + PinGate |
| 6 | pinroll:deploy |
Build, upload, and install (go live) |
| 7 | pinroll:setup |
Post-deploy migrate + patch (--seed, --config) |
Single-app (pinx-root): pinx deploy forwards to pinroll:deploy.
Subdomain folders
deploy_path is the FTP folder at account root (e.g. apps) that is linked as a subdomain. The site URL is used as entered for PinGate — path and URL are not mixed:
| FTP folder | Site URL | Gate URL |
|---|---|---|
apps |
https://apps.example.com |
https://apps.example.com/pingate.php?route= |
public_html |
https://example.com |
https://example.com/pingate.php?route= |
public_html/shop |
https://example.com/shop |
https://example.com/shop/pingate.php?route= |
If pinroll:check reports Not PinGate JSON, upload pingate.php next to index.php and confirm the site URL matches the live domain. Do not use PATH_INFO (pingate.php/push/…); routing is ?route=.
CLI
php pinoox pinroll:init php pinoox pinroll:kit php pinoox pinroll:connect php pinoox pinroll:config php pinoox pinroll:apps php pinoox pinroll:push php pinoox pinroll:deploy php pinoox pinroll:deploy --full php pinoox pinroll:deploy --app=com_pinoox_developer php pinoox pinroll:deploy --theme php pinoox pinroll:deploy --platform php pinoox pinroll:setup php pinoox pinroll:setup --dry-run php pinoox pinroll:setup --migrate --patch --seed php pinoox pinroll:install php pinoox pinroll:build --bundle=single-app --package=com_pinoox_developer php pinoox pinroll:status php pinoox pinroll:history php pinoox pinroll:rollback php pinoox pinroll:cleanup php pinoox pinroll:gate php pinoox pinroll:gate --kit php pinoox pinroll:pincore php pinoox pinroll:sync --from=./pincore --to=vendor/pinoox/pincore php pinoox pinroll:vendor php pinoox pinroll:vendor --push php pinoox pinroll:pull --server=https://releases.example.com
pinroll:init— scaffold a short.pinoox/pinroll.config.phpoverlay +.envkey stubs (canonical defaults live in the Pinroll library)pinroll:kit— buildstorage/pinroll/pinroll-kit-{host}.zip(pingate.php + token + README) for File Manager extractpinroll:provision— blank-host install: PinGate +platform.zipextract + installer setup (welcome/manager router, installer disabled;--setup-onlyto retry setup)pinroll:connect— interactive method picker (kit / FTP / SSH) or--via=; writes site origin + token into the overlaypinroll:config— print resolved host (origin, gate URL, via, path, token redacted)pinroll:apps— sethosts.*.apps(interactive or--apps=)pinroll:check— verify host connectivity before pushpinroll:push— build and upload only (no install)pinroll:deploy— push + install via PinGate (go live); runsfe:buildbeforepinx:buildpinroll:deploy --full— platform zip (pinx:update) plus every installed/discovered apppinroll:deploy --platform—pinx:build platformthenpinx:updateon the hostpinroll:deploy --theme— rebuild theme assets (fe:build) then include in the app.pinx/ FTP distpinroll:setup— post-deploy migrate + patch (add--seed,--config,--dry-run)pinroll:install— install a staged release (pinroll:applyis a deprecated alias)pinroll:rollback— switch the host back to a previous releasepinroll:cleanup— prune local/remote archives bykeep/storepinroll:gate— rebuild/upload a singlepingate.php(--kit/-zzip;--no-uploadkeep local)pinroll:pincore— zip + uploadvendor/pinoox/pincore, extract via PinGate (ftp/ssh/pinion)pinroll:sync— zip any local folder (--from,--to), upload, extract via PinGatepinroll:vendor— productionvendor.zipvia PlatformComposer (--pushFTP + PinGatePOST ?route=vendor)pinroll:pull— pull newer manifest from a release server (alias:pinroll:poll)
Updates on the host use the same pincore APIs as the CLI: app/theme → PinxInstaller (pinx:install), platform/core → PlatformUpdater (pinx:update).
Tests
composer test
composer test:platform
License
MIT — Pinoox