Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 11 Mar 14:25
· 7 commits to main since this release

PnP CLI v1.0.0

Pixel & Process Kubernetes Deployment Manager — Run pnp deploy in any project and it's live on the cluster. Fully automatic.

Install

brew install fwartner/tap/pnp

Or download binaries below (linux/darwin, amd64/arm64).

What It Does

Run pnp deploy inside a Laravel, Next.js, or Strapi project. The CLI:

  1. Detects project type automatically
  2. Runs an interactive wizard to configure domain, database, Redis, queues, etc.
  3. Generates Kubernetes manifests and pushes them to your GitOps repo
  4. Generates a Dockerfile and GitHub Actions CI/CD pipeline
  5. Commits and pushes everything — both to the GitOps repo and the project repo
  6. Sets up GITOPS_TOKEN so CI can push cross-repo automatically

After that, every push to main is fully automatic: build → push to GHCR → update GitOps repo → ArgoCD syncs → app is live.

Features

Project Types

  • Laravel Web/API — nginx + PHP-FPM, queue workers, scheduler, Horizon, Reverb
  • Laravel Octane — FrankenPHP, Swoole, or RoadRunner
  • Next.js — Fullstack (with DB) or Static
  • Strapi — Headless CMS with persistence

Infrastructure

  • ArgoCD GitOps with auto-sync and self-heal
  • CloudNativePG for PostgreSQL databases
  • Redis via redis-operator
  • cert-manager + Let's Encrypt for TLS
  • external-dns + Cloudflare for DNS
  • Infisical for secrets management (optional)
  • Traefik ingress with HTTPS

Scope-Based Organization

  • apps/customer/{name} — client projects
  • apps/agency/{name} — agency/internal tools
  • apps/previews/{name} — preview/staging deployments

Pre-Built Base Images

Laravel builds use pre-built base images on GHCR for fast CI:

  • ghcr.io/fwartner/pnp/laravel-fpm
  • ghcr.io/fwartner/pnp/laravel-frankenphp
  • ghcr.io/fwartner/pnp/laravel-swoole
  • ghcr.io/fwartner/pnp/laravel-roadrunner

Security

  • Docker BuildKit secrets for COMPOSER_AUTH (no build args)
  • Auto-generated APP_KEY and DB passwords
  • Private Composer package support

Commands

Command Description
pnp deploy Full deploy wizard (first-time setup)
pnp sync Re-render and push GitOps manifests (non-interactive)
pnp update Re-render templates from existing config
pnp destroy Remove app from cluster

Configuration

Global (~/.pnp.yaml):

gitopsRepo: /path/to/local/gitops-repo
gitopsRemote: https://github.com/org/gitops.git
defaults:
  domain: example.com
  imageRegistry: ghcr.io
profiles:
  customer:
    domain: preview.example.com
    githubOrg: my-org

Per-project (.cluster.yaml) — auto-generated by the wizard.