Added the 'drevops/vortex-cli' CLI package built on 'drevops/tui' for installing and configuring Vortex projects.#2828
Open
AlexSkrypnyk wants to merge 149 commits into
Open
Added the 'drevops/vortex-cli' CLI package built on 'drevops/tui' for installing and configuring Vortex projects.#2828AlexSkrypnyk wants to merge 149 commits into
AlexSkrypnyk wants to merge 149 commits into
Conversation
| working-directory: .vortex/cli | ||
|
|
||
| - name: Create Release | ||
| uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3 |
Comment on lines
+43
to
+44
| - name: Checkout code | ||
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
|
📖 Documentation preview for this pull request has been deployed to Netlify: https://6a6162088fdfc30a1b9134b3--vortex-docs.netlify.app This preview is rebuilt on every commit and is not the production documentation site. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 2.x #2828 +/- ##
=======================================
Coverage 88.07% 88.07%
=======================================
Files 98 98
Lines 5376 5376
Branches 3 3
=======================================
Hits 4735 4735
Misses 641 641 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…stomizer/playground/run.php'.
…e customizer TUI.
…ig with structured conditionals.
… under 'Workflow'.
…n, and multi-file '--config' layering.
…rride label badge, and green values.
…old template and added the 'vortex-test-cli' workflow.
…release workflow to the repository root.
…framed the plan around a generic engine with CLI-provided handlers.
…lifecycle engine with tests.
…ransform with tests.
…nsolidated CLI docs into 'CLAUDE.md'.
…sticky overrides and provenance with tests.
…ted provenance with tests.
…he handler-hooks wording in 'Context', and the 'initials' transform name in 'Deriver'.
…h the pure-collector design and the actual test and CI layout.
…n, and let the 'Tui' constructor accept the 'Form' builder directly.
…epting 'Tui' construction and 'Tui::run()' mode routing.
…ve' validating its transform, the four discovery rules and 'Fixup'.
…uator' and 'Discovery' into them, and let fields declare 'default'/'validate'/'transform' closures winning over handler hooks.
…ts, the CI matrix and the lock hash.
…res and covered the declared-behaviour precedence with engine tests.
…tractHandler' removed, the registry now resolves consumer classes and discovers reusable static 'validate()'/'transform()' as the engine's fallback.
…exForm' closures, 'validate'/'transform' became reusable statics discovered by the engine, and 'ProcessorInterface' stands alone.
…referenced them from 'VortexForm' instead of string literals.
… handlers, replacing the inline option arrays in 'VortexForm'.
…ind the new 'FieldInterface', leaving 'VortexForm' as the panel structure and question order.
… IANA 'TIMEZONES' list.
…he 'VortexForm::field()' adapter as the only code converting handler data into form elements, keeping handlers ignorant of the form builder.
…rInterface', 'AbstractHandler', 'PromptType' and all concrete handlers) and added the 'TuiAdapter' as the single layer converting the handler contract into TUI form elements; the engine now guards only supplied inputs, transforming before validating.
…password' (masked everywhere), 'search', 'multisearch' and 'pause' - covering all 'PromptType' cases, with builder methods, env coercion, schema validation and the CLI adapter arms.
…abel, kind, weight, panel trail) at collection time, so 'toSummary()' and the CLI 'Processor' no longer take the form configuration.
…nance' and 'Source' enums, and recorded the no-string-literals-for-closed-sets convention in AGENTS.md.
…idget example a self-contained program with the drive loop inlined.
… released 'drevops/tui' 0.1.0 from Packagist: the built form is a 'FormDefinition', multi-value questions use 'select()/search()' with 'multiple()', processing weights moved to the CLI-owned 'VortexForm::WEIGHTS', interactive aborts ('InterruptException') return failure, and the agent help is asserted as the JSON Schema it now emits.
…eaks' secret-scanning question (wired into the Continuous Integration panel and 'WEIGHTS'), the 'twig_cs_fixer' tool, and the 'navigation_extra_tools' module replacing 'admin_toolbar'.
…irrored the installer's test changes: new 'Gitleaks' and 'tools_no_twig' datasets, 'modules_no_navigation_extra_tools' replacing 'modules_no_admin_toolbar', 'twig_cs_fixer' joining the tools lists, dropped '.gitignore' migration asserts, and the schema question count at 39.
…ocblocks to the ported handlers, split the over-long condition array in 'VortexForm', scoped PHPStan to exclude the verbatim installer relocations like the existing 'Utils' and 'Downloader' exclusions, applied the Rector modernizations and narrowed the agent-help schema assertions.
AlexSkrypnyk
force-pushed
the
feature/customizer-tui
branch
from
July 23, 2026 00:22
157fe35 to
3d36633
Compare
|
Code coverage (threshold: 90%) Per-class coverage |
This comment has been minimized.
This comment has been minimized.
2 similar comments
This comment has been minimized.
This comment has been minimized.
Member
Author
|
Code coverage (threshold: 90%) Per-class coverage |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduces the
drevops/vortex-clipackage at.vortex/cli: a Symfony Console application (thevortexbinary, built into a PHAR) that installs and configures projects generated from the Vortex Drupal template. Interactive collection is delegated todrevops/tui(^0.1), a panel-based terminal form engine developed in-tree on this branch and then extracted to its own repository and released on Packagist, which supports both an interactive TUI and a headless JSON mode for scripted or agent-driven use. The CLI's prompt handlers are the installer's existing prompt handlers ported verbatim, with a singleTuiAdapterlayer translating that handler contract into TUI form elements, and aVortexFormowning panel structure, question order, conditional gating, derived values and processing weights. Against the current2.x, the change is purely additive: it adds the new package, its test fixtures, and two GitHub Actions workflows, without modifying or deleting any existing file.Changes
CLI application
.vortex/clipackage (drevops/vortex-cli, PHP>=8.3) with thevortexbin, built viacomposer build(Box) into a PHAR.install,configure,doctorandupdatecommands plus a defaultRouterCommandthat resolves a barevortextoinstallorconfigurebased on directory state.ConfigureCommandsupports--schema(emits the question set as JSON Schema),--agent-help,--validate(checks an answer set against the schema), headless--prompts(a JSON string or file path) with per-questionVORTEX_<ID>environment overrides,--updateto enable discovery, and--applyto run processing against the target directory.Downloadersubsystem (Archiver,Artifact,RepositoryDownloader) for fetching and extracting the template repository archive, aFileManager, and utility classes (Config,File,Env,Converter,JsonManipulator,Version).Form and handlers
Form/VortexForm, which owns the panel structure (general, drupal, code repository, environment, hosting, deployment, workflow, notifications, continuous integration, automations, documentation, ai), question order, conditional visibility (Condition), derived values (Derive), and theWEIGHTSprocessing-order map that reproduces the installer'srunProcessors()sequence exactly.Form/TuiAdapteras the single layer converting the handler contract (question kind, options, required flag, default, validate, transform, discover) intodrevops/tuiform elements, so handlers stay ignorant of the form builder..vortex/installer/src/Prompts/Handlers/*) intoHandler/*verbatim, with only namespace andUtilsswaps, keeping reflection-based ids, type inference, response accessors andprocess()side effects identical.2.xstate, including theGitleakssecret-scanning question, thetwig_cs_fixerdevelopment tool and thenavigation_extra_toolsmodule option, so both tools collect the same 39 answers.VortexFormcondition array, and scopedphpstan.neonto exclude the verbatim installer relocations the same way the existingUtilsandDownloaderexclusions already do, keepingcomposer lint(phpcs, phpstan, rector) fully green.Processing
Process/Processor, which applies collected answers in ascending weight order (ties broken by reverse form order, so specific replacements run before generic ones) and interleaves the field-lessdotenvandinternalprocessors that always run first and last.Tests and fixtures
tests/phpunit/Functional/Handlers/*mirroring the installer's fixture harness: a_baselineproject scaffold plus per-dataset overlays undertests/phpunit/Fixtures/handler_process, regenerated through the package's own snapshot tooling and covering every handler, with the datasets kept in step with the installer's (gitleaks_enabled/gitleaks_disabled,tools_no_twig/tools_no_twig_circleci,modules_no_navigation_extra_tools).configure,install,update,doctor, the router, and file handling, plus unit coverage for theNamehandler.CI wiring
.github/workflows/vortex-test-cli.yml, which runscomposer lintandcomposer testagainst PHP 8.3 and 8.4, scoped to.vortex/cli/**and to this branch (it does not run onmainyet, pending promotion of the package)..github/workflows/vortex-release-cli.yml, which builds the PHAR with Box and attaches it to tag and manual-dispatch releases.Before / After