Search code examples
wordpresscircleciwp-cli

How to configure circleci for Wordpress plugin


My project is a Wordpress plugin. I'm using circleci for continuous integration.

I'm trying to set up my circle.yml file so that I can run my phpunit tests. I'm following this example to install Wordpress etc on the CI environment. Here's what DOESN'T WORK for me:

## Customize test commands
test:

  pre:
    # download wordpress for wp-cli to use
    - curl -s https://wordpress.org/latest.tar.gz > /tmp/wordpress.tar.gz
    - tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C /tmp/wordpress
    - curl -s https://raw.github.com/markoheijnen/wp-mysqli/master/db.php > /tmp/wordpress/wp-content/db.php

    # Create DB. No password is required for the MySQL user `ubuntu`
    - mysql -u ubuntu -e "create database wordpress"

    # Download WordPress into `wordpress` directory
    - ./vendor/wp-cli/wp-cli/bin/wp core download --allow-root --path=wordpress

    # Generate `wp-config.php` file
    - ./vendor/wp-cli/wp-cli/bin/wp core config --allow-root --dbname=wordpress --dbuser=ubuntu --dbhost=localhost --path=wordpress

    # Install WordPress
    - ./vendor/wp-cli/wp-cli/bin/wp core install --allow-root --admin_name=admin --admin_password=admin [email protected] --url=http://wp-github-pipeline.dev:8080 --title=WordPress --path=wordpress

    # Clone Pipeline plugin from GitHub
    - git clone [email protected]:TransitScreen/wp-github-pipeline.git wordpress/wp-content/plugins/wp-github-pipeline

    #install dependencies
    - cd wordpress/wp-content/plugins/wp-github-pipeline
    - composer install

    # And use WP-CLI to activate it
    # ERROR HAPPENS HERE!!
    - ./vendor/wp-cli/wp-cli/bin/wp plugin activate wp-github-pipeline --path=wordpress

  override:
    - phpunit # use PHPunit for testing

This is the error mentioned in the comments above:

PHP Fatal error:  Cannot redeclare cli\render() (previously declared in phar:///home/ubuntu/wp-github-pipeline/wp-cli.phar/vendor/wp-cli/php-cli-tools/lib/cli/cli.php:26) in /home/ubuntu/wp-github-pipeline/vendor/wp-cli/php-cli-tools/lib/cli/cli.php on line 28

Fatal error: Cannot redeclare cli\render() (previously declared in phar:///home/ubuntu/wp-github-pipeline/wp-cli.phar/vendor/wp-cli/php-cli-tools/lib/cli/cli.php:26) in /home/ubuntu/wp-github-pipeline/vendor/wp-cli/php-cli-tools/lib/cli/cli.php on line 28 ./wp-cli.phar plugin activate wp-github-pipeline --path=wordpress r

Solution

  • Here's what I eventually got working, adapted from this:

    ## Customize the test machine
    machine:
      timezone:
          America/New_York # Set the timezone
    
        # Version of ruby to use
      php:
        version:
          5.6.5
    
      environment:
        WP_VERSION: latest
        CIRCLE_ENV: test
        WP_MULTISITE: 0 
        WP_CORE_DIR: /home/ubuntu/wordpress-develop 
        WP_TESTS_DIR: /home/ubuntu/wordpress-develop/tests/phpunit 
        plugin_loc: /home/ubuntu/$CIRCLE_PROJECT_REPONAME 
        plugin_slug: $CIRCLE_PROJECT_REPONAME 
        plugin_dir: /home/ubuntu/wordpress-develop/src/wp-content/plugins/$plugin_slug 
        plugin_tests_dir: /home/ubuntu/wordpress-develop/src/wp-content/plugins/$plugin_slug/tests
    
    
    
    ## Customize dependencies
    dependencies:
      pre:
        #enable xdebug.  LINE 1/2 to uncomment if you want to run a code coverage report.
        # - sed -i 's/^;//' ~/.phpenv/versions/$(phpenv global)/etc/conf.d/xdebug.ini
        #setup WP install
        - git clone git://develop.git.wordpress.org/ $WP_CORE_DIR;
        - cd $WP_CORE_DIR && cp wp-tests-config-sample.php wp-tests-config.php && sed -i "s/youremptytestdbnamehere/wordpress_test/" wp-tests-config.php && sed -i "s/yourusernamehere/root/" wp-tests-config.php && sed -i "s/yourpasswordhere//" wp-tests-config.php;
        # move plugin into tests/src
        - mv $plugin_loc $plugin_dir;
        # set up database
        - mysql -e 'CREATE DATABASE wordpress_test;' -uroot;
        # setup phpunit
        - wget https://phar.phpunit.de/phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /home/ubuntu/.phpenv/shims/phpunit
    
      override:
        - touch composer.json
        - ls
    
    ## tests override
    test:
      override:
        # comment out the below line to run a code coverage report.
        - cd $plugin_tests_dir; cd ..; pwd; composer install; ls; phpunit
        ## LINE 2/2 to uncomment if you want to run a code coverage report.
        # - cd $plugin_tests_dir; phpunit --coverage-html $CIRCLE_ARTIFACTS