pinoox/pinroll

Pinroll — atomic release rollout, rollback, and PinGate delivery for Pinoox

Maintainers

Package info

github.com/pinoox/pinroll

pkg:composer/pinoox/pinroll

Transparency log

Statistics

Installs: 19

Dependents: 0

Suggesters: 0

Stars: 2

Open Issues: 0

1.6.7 2026-08-21 01:28 UTC

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.php overlay + .env key stubs (canonical defaults live in the Pinroll library)
  • pinroll:kit — build storage/pinroll/pinroll-kit-{host}.zip (pingate.php + token + README) for File Manager extract
  • pinroll:provision — blank-host install: PinGate + platform.zip extract + installer setup (welcome/manager router, installer disabled; --setup-only to retry setup)
  • pinroll:connect — interactive method picker (kit / FTP / SSH) or --via=; writes site origin + token into the overlay
  • pinroll:config — print resolved host (origin, gate URL, via, path, token redacted)
  • pinroll:apps — set hosts.*.apps (interactive or --apps=)
  • pinroll:check — verify host connectivity before push
  • pinroll:push — build and upload only (no install)
  • pinroll:deploy — push + install via PinGate (go live); runs fe:build before pinx:build
  • pinroll:deploy --full — platform zip (pinx:update) plus every installed/discovered app
  • pinroll:deploy --platformpinx:build platform then pinx:update on the host
  • pinroll:deploy --theme — rebuild theme assets (fe:build) then include in the app .pinx / FTP dist
  • pinroll:setup — post-deploy migrate + patch (add --seed, --config, --dry-run)
  • pinroll:install — install a staged release (pinroll:apply is a deprecated alias)
  • pinroll:rollback — switch the host back to a previous release
  • pinroll:cleanup — prune local/remote archives by keep / store
  • pinroll:gate — rebuild/upload a single pingate.php (--kit / -z zip; --no-upload keep local)
  • pinroll:pincore — zip + upload vendor/pinoox/pincore, extract via PinGate (ftp / ssh / pinion)
  • pinroll:sync — zip any local folder (--from, --to), upload, extract via PinGate
  • pinroll:vendor — production vendor.zip via PlatformComposer (--push FTP + PinGate POST ?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/themePinxInstaller (pinx:install), platform/corePlatformUpdater (pinx:update).

Tests

composer test
composer test:platform

License

MIT — Pinoox