/cheddar

A dummy repo for building a WordPress site with composer

Primary LanguagePHPBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Cheddar

Welcome to the cheddar project.

It was called dummy because the base is just a dummy framework that pulls together a lot of other parts into a single functioning entity. It is a foundational system initially intended as a learning tool that grew into a full blown system tool. To use you simply clone or fork and then start adding your site specific changes. Most of these changes are entered in the composer.json manifest and that file in essence becomes the documentation source for your site. However, dummy was really a prototype project and now that this has developed into a truly useful system I have decided that Cheddar is better name and besides it goes so well with bacon.

Cheddar out of the box will let you build a local development site. However you will need to understand some of the basics around vagrant and WordPress configurations to achieve the full potential. Cheddar can hep you build a resilient tiered (multi stage)development system complete with dev, staging, preprod and production WordPress environments.

The project is managed at https://tree.taiga.io/project/mikel-cheddar/

NOTE:

In order to get the most out of cheddar you will need to have some familiarity with Composer, Vagrant, advanced WordPress configurations and Apache Server configurations.

Purpose of this is to use composer to define all of the external assets necessary to build a working WordPress and related plugins. The hope is to define a site's plugins, themes and git libraries in a composer.json manifest. Then have a site completely assembled by issuing the composer update command.

CURRENT:
  • At this point I have it building the WordPress tree and have setup the iggie file to ignore ALL of WordPress core.
    • The order of requirement is critical to successfully install ing all of the moving parts. The following outlines the order of operations:
      1. The wproot is installed first
      2. The WordPress core
      3. The composer dependencies mu-plugins, plugins and themes
      4. The local mu-plugins, plugins and themes
PROPOSED CHANGE:
  • To simplify things I plan on refactoring this to install WordPress into it's own directory separate form the wp-content space. This is a tactic taken but several other projects and it affords cleaner management and upgrades of the core files. See => https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory for details.

    1. The build and deployment script will require refactoring
    2. Ultimately the builds and deployments will be simpler
    3. The validation should also be easier to manage
  • This process allows one to clone or fork cheddar and then create a branch specific to a particular site you wish to construct. It all affords the opportunity to build a single mu-plugin, plugin or theme in a uniform environment.

  • Assuming that you already have a DB setup and enter the appropriate details in the respective config file this should yield a working shell site.

TODO:
  • Updated to install the mu-plugins. DONE

  • Updated to centralize the source tree. DONE

  • Updated to installed the WordPress common configuration system. DONE

  • Composerafy development only plugins: DONE

    • Installation of debugbar and other dev only safe plugins via composer.
  • Integrate PHPCS: DONE

  • Integrate Phan: Researching

  • Integrate PHPUnit: Installed but fully not configured

    • Currently some dummy tests are functional and composer is bringing in 10Up's WP_Mock to facilitate proper unit testing. The official WordPress unit testing is actually integration testing and that is NOT the purpose of this stage.
    • see PHPUnit website for details.
  • Integrate PHPloc: DONE

  • Integrate PHPmd: Installed but not configured

    • This is being installed by composer but I am not yet confident that it is 100% working. It need more testing.
    • see PHPmd website for details.
  • Integreate PHPdocumentor or PHPdox: Incomplete

  • Integreate PHPcpd: DONE

  • Implement a build system strategy: In progress

    • Still need to hook all of this into a deployment solution like deploybot. However for the time being and testing purposes I have written a simple set of build and deploy scripts that utilize rsync. Honestly the result has been better than I expected and were someone to make this easily configurable then one could use something like Jenkins or even ansible to execute a build.
  • Implement wpcli In Progress

  • Integrate a vagrant: In progress

    • Need to add a Vagrant conf so that one can eventually run vagrant up to build a working local dev based upon the WordPress tree installed by composer. The Vagrant system would need to setup the db and conf files. PARTIAL
    • see the Pryamid project for details.
  • Setup demos: In progress

    • Add demo to explain how to add plugins and themes from https://wpackagist.org. By adding the following line to the build chain in the required section of the composer.json it will add the appropriate plugin to the installation. You want to ensure that you add this line after the line that directs composer to install wordpress.
"wpackagist-plugin/akismet": "dev-trunk",
  • Implement documentation: In progress

    • Documentation shall take the form of markdown files in a doc directory relative to this repo and mu-plugin, plugin or theme respectively.
  • Outline a recommended Plugin structure: In progress

EXPRIMENTAL
  • Refactor shell scripts into PHP (PIPE DREAM)