Implemented Enhanced CLI Tools

Teapot

Well-known member
A lot of development is moving beyond the tools found in yesteryear - developers are often using tools like continuous integration services (Jenkins,Bamboo, etcetera), build tools (Grunt, Gulp, etcetera), automation/deployment tools (Puppet, Chef, Capistrano, etcetera), and so much more to work with their sites and speed up development.

Unfortunately, all these share the same problem for XF: there's no way for any of these to control XenForo in any form other than the most rudimentary or hacky workarounds. For example, I'd love to set up an agile, one-click-deployable system for rolling out add-on updates to my site as I write them. I'd love to commit to master, and have Jenkins or something similar update the add-on repository on the server, then upgrade from the XML.

In my opinion, the best and most accessible way to manipulate the XenForo install - whether this be part of a full-scale API (ideally) or a separate feature - would be to provide a CLI-bsaed endpoint, in a very similar fashion to how the CLI installer/upgrader currently works.

For example, to achieve my earlier use case, I could set up my tools to call php -f xenforo/library/cli.php --upgrade-addon xenforo/library/MyCoolAddon/addon.xml, and have it go through the process of upgrading and rebuilding in the CLI.

A non-exhaustive list of things I think this should be able to do are:
  • Install, uninstall, upgrade add-ons
  • Enable and disable add-ons
  • Move the site in and out of maintenance mode (with definable reason)
  • Rebuild caches
  • Trigger cron jobs
  • Display statistics regarding the XenForo installation - most importantly, the XF version, but perhaps the PHP or MySQL versions too, or the numbers of users/discussions/posts.
 
Upvote 20
This suggestion has been implemented. Votes are no longer accepted.
Sort of reluctant to mark it as implemented entirely because we haven't exactly implemented all of the tools mentioned, though it is probably reasonable seeing as it's now a solid framework for us and add-on developers to add their own CLI commands in the future.
 
Which cache? You can rebuild option, nodetype, widget, widgetdefinition, widgetposition and style caches from CLI.
 
It'll be those under Admin > Tools > Rebuild caches

Those are certainly the most significant ones -- rebuilding search index, rebuilding forums and post positions etc.
 
I should probably add that this is the actual list of commands we support right now (you can get this list running the following command php cmd.php list):
Rich (BB code):
xf
  xf:addon-disable                      Disables the specified add-on. If no add-on ID is provided, all enabled add-ons will be disabled.
  xf:addon-enable                       Enable the specified add-on. If no add-on ID is provided, all disabled add-ons will be enabled.
  xf:addon-install                      Installs the specified add-on
  xf:addon-rebuild                      Rebuilds the specified add-on data.
  xf:addon-uninstall                    Uninstalls the specified add-on
  xf:addon-upgrade                      Upgrades the specified add-on
  xf:convert-utf8mb4                    Converts XenForo tables to utf8mb4
  xf:file-check                         Performs a file health check
  xf:install                            Installs XenForo
  xf:rebuild-master-data                Rebuilds the core XF master data.
  xf:upgrade                            Upgrades XenForo
xf-addon
  xf-addon:build-release                Performs an export of the current XML data and saves a ZIP file to _releases
  xf-addon:bump-version                 Bumps the version of the specified add-on
  xf-addon:create                       Creates an XF add-on and writes out the basic addon.json file.
  xf-addon:export                       Exports the XML files for an add-on
  xf-addon:setup-step                   Runs a specific step from the specified add-on Setup class.
  xf-addon:sync-json                    Syncs the contents of the add-on JSON file to the database, updating the title, version and JSON hash as necessary
  xf-addon:validate-json                Validates the contents of the add-on JSON file to ensure all of the required values exist and are of the correct type.
 xf-designer
  xf-designer:disable                   Disables designer mode on the specified style
  xf-designer:enable                    Enables designer mode on the specified style
  xf-designer:export                    Exports modified templates from the database to the file system for the specified designer mode.
  xf-designer:export-style-properties   Exports style properties for the specified designer mode ID.
  xf-designer:export-templates          Exports templates for the specified designer mode ID.
  xf-designer:import                    Imports designer files from the file system for the specified designer mode.
  xf-designer:import-style-properties   Imports style properties from specified designer mode files
  xf-designer:import-templates          Imports templates from specified designer mode files
  xf-designer:revert-template           Reverts the specified template.
  xf-designer:sync-templates            Syncs the contents of the template files to the DB for the specified designer mode, applying version number updates
  xf-designer:touch-template            Marks the specified template as modified in the specified style and exports it.
 xf-dev
  xf-dev:class-lint                     Checks that all classes can be loaded without conflicts
  xf-dev:compare-schema                 Compares database schemas for consequential differences
  xf-dev:export                         Exports all data to development files
  xf-dev:export-admin-navigation        Exports Admin navigation to development files
  xf-dev:export-admin-permissions       Exports Admin permissions to development files
  xf-dev:export-advertising-positions   Exports advertising positions to development files
  xf-dev:export-bb-code-media-sites     Exports bb code media sites to development files
  xf-dev:export-bb-codes                Exports bb codes to development files
  xf-dev:export-class-extensions        Exports class extensions to development files
  xf-dev:export-code-event-listeners    Exports code event listeners to development files
  xf-dev:export-code-events             Exports code events to development files
  xf-dev:export-content-types           Exports content types to development files
  xf-dev:export-cron-entries            Exports cron entries to development files
  xf-dev:export-help-pages              Exports help pages to development files
  xf-dev:export-member-stats            Exports member stats to development files
  xf-dev:export-navigation              Exports Navigation to development files
  xf-dev:export-options                 Exports options to development files
  xf-dev:export-permissions             Exports Permissions to development files
  xf-dev:export-phrases                 Exports phrases to development files
  xf-dev:export-routes                  Exports Routes to development files
  xf-dev:export-style-properties        Exports style properties to development files
  xf-dev:export-template-modifications  Exports template modifications to development files
  xf-dev:export-templates               Exports templates to development files
  xf-dev:export-widget-definitions      Exports widget definitions to development files
  xf-dev:export-widget-positions        Exports widget positions to development files
  xf-dev:generate-entity-dw             Generates an entity from a legacy DataWriter
  xf-dev:generate-phpstorm-meta         Generates a .phpstorm.meta.php file for dynamic return type hinting
  xf-dev:generate-schema-entity         Generates schema code from an entity
  xf-dev:import                         Imports all data from development files
  xf-dev:import-admin-navigation        Imports admin navigation from development files
  xf-dev:import-admin-permissions       Imports admin permissions from development files
  xf-dev:import-advertising-positions   Imports advertising positions from development files
  xf-dev:import-bb-code-media-sites     Imports bb code media sites from development files
  xf-dev:import-bb-codes                Imports bb codes from development files
  xf-dev:import-class-extensions        Imports class extensions from development files
  xf-dev:import-code-event-listeners    Imports code event listeners from development files
  xf-dev:import-code-events             Imports code events from development files
  xf-dev:import-content-types           Imports content types from development files
  xf-dev:import-cron-entries            Imports cron entries from development files
  xf-dev:import-help-pages              Imports help pages from development files
  xf-dev:import-member-stats            Imports member stats from development files
  xf-dev:import-navigation              Imports navigation from development files
  xf-dev:import-options                 Imports options from development files
  xf-dev:import-permissions             Imports permissions from development files
  xf-dev:import-phrases                 Imports phrases from development files
  xf-dev:import-routes                  Imports routes from development files
  xf-dev:import-style-properties        Imports style properties from development files
  xf-dev:import-template-modifications  Imports template modifications from development files
  xf-dev:import-templates               Imports templates from development files
  xf-dev:import-widget-definitions      Imports widget definitions from development files
  xf-dev:import-widget-positions        Imports widget positions from development files
  xf-dev:metadata-clean                 Cleans up the metadata JSON files and removes missing entries
  xf-dev:rebuild-caches                 Rebuilds various caches
  xf-dev:rebuild-metadata               Rebuilds metadata hashes based on file system content
  xf-dev:recompile                      Recompiles all template/phrase data
  xf-dev:recompile-phrases              Recompiles phrases
  xf-dev:recompile-style-properties     Recompiles style properties
  xf-dev:recompile-templates            Recompiles parsed templates
  xf-dev:sync-templates                 Syncs the contents of the template files to the DB, applying version number updates
  xf-dev:update-version                 Updates the XF version to the same version as in the XF files.
  xf-dev:upgrade-step                   Runs a specific upgrade step from a specified upgrade class.
Commands are split into different namespaces so generally the ones prefixed with xf: are the ones which are targeted towards "normal" admins. The rest are somewhat specialist.
 
Top Bottom