• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Implemented Enhanced CLI Tools

Teapot

Well-known member
#1
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.
 

Chris D

XenForo developer
Staff member
#4
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.
 

Chris D

XenForo developer
Staff member
#9
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.
 

Chris D

XenForo developer
Staff member
#11
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):
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.