Coder Social home page Coder Social logo

typisttech / travis-nginx-wordpress Goto Github PK

View Code? Open in Web Editor NEW
6.0 4.0 0.0 79 KB

A basic template for Nginx and WordPress running on Travis CI's container based infrastructure

Home Page: https://github.com/TypistTech/travis-nginx-wordpress

License: MIT License

Shell 100.00%
nginx wordpress travis-ci travis-ci-configuration codeception wordpress-development acceptance-testing command-line devtool

travis-nginx-wordpress's Introduction

Travis CI Nginx WordPress Test

Latest Stable Version Total Downloads Build Status PHP Versions Tested License Hire Typist Tech

A basic template for Nginx and WordPress running on Travis CI's container based infrastructure.

What is the purpose of this repo?

Do you need to run some automated tests that rely on Nginx on Travis CI? Do you want those tests to run on the Docker container-based infrastructure? Are you pulling your hair out trying to get this all to work? Then this repo is for you.

Travis CI does not come with Nginx pre-installed so the install needs to be scripted. Since Travis CI's container-based infrastructure doesn't allow sudo privileges this installation is non-trivial. Hopefully, by providing this repo I can save someone some hassle trying to get Nginx set up for their project.

Installation and Usage

The script is tailored on Travis CI PHP build images and might not work in every situation. Below is an basic example of .travis.yml:


# .travis.yml
language: php

services:
  - mysql

cache:
  apt: true
  directories:
    - $HOME/.composer/cache/files

addons:
  apt:
    packages:
      - nginx
    hosts:
      - wp.dev

php:
  - 7.1
  - 7.2
  - nightly

  env:
    global:
      - COMPOSER_NO_INTERACTION=1
    matrix:
      - WP_VERSION=nightly
      - WP_VERSION=latest
      - WP_VERSION=4.9.3
      - WP_VERSION=4.8.5

before_install:
  # Install helper scripts
  - composer global require --prefer-dist "typisttech/travis-nginx-wordpress:^1.0.0"
  - export PATH=$HOME/.composer/vendor/bin:$PATH
  - tnw-install-nginx
  - tnw-install-wordpress
  - tnw-prepare-codeception

install:
  # Build the test suites
  - cd $TRAVIS_BUILD_DIR
  - composer install -n --prefer-dist
  - vendor/bin/codecept build -n

script:
	# Run the tests
  - cd $TRAVIS_BUILD_DIR
  - vendor/bin/codecept run -n --coverage --coverage-xml

after_script:
 - tnw-upload-coverage-to-scrutinizer
 - tnw-upload-coverage-to-codecov

And, this is an basic example of codeception.dist.yml which compatible with the above Travis settings:


# codeception.dist.yml
actor: Tester
paths:
  tests: tests
  log: tests/_output
  data: tests/_data
  helpers: tests/_support
settings:
  bootstrap: _bootstrap.php
  colors: true
  memory_limit: 1024M
coverage:
  enabled: true
  include:
    - src/my-plugin/*
  exclude:
    - src/my-plugin/partials/*
params: [env] # get parameters from environment vars
modules:
  config:
    WPDb:
      dsn: 'mysql:host=localhost;dbname=wordpress'
      user: 'root'
      password: ''
      dump: 'tests/_data/dump.sql'
      url: 'http://wp.dev:8080'
    WPBrowser:
      url: 'http://wp.dev:8080'
      adminUsername: 'admin'
      adminPassword: 'password'
      adminPath: '/wp-admin'
    WordPress:
      depends: WPDb
      wpRootFolder: '/tmp/wordpress'
      adminUsername: 'admin'
      adminPassword: 'password'
    WPLoader:
      wpRootFolder: '/tmp/wordpress'
      dbName: 'wordpress_int'
      dbHost: 'localhost'
      dbUser: 'root'
      dbPassword: ''
      tablePrefix: 'int_wp_'
      domain: 'wordpress.dev'
      adminEmail: '[email protected]'
    WPWebDriver:
      url: 'http://wp.dev:8080'
      port: 4444
      window_size: '1024x768'
      adminUsername: 'admin'
      adminPassword: 'password'
      adminPath: '/wp-admin'

Customization

The default scripts install WordPress core on /tmp/wordpress and serve it at http://wp.dev:8080.

You can customize the build via environment variables. Check the variables of the functions in the bin director for available configuration.

How does it works?

All of the setup scripts are located in the bin directory and template files are in the tpl directory. They are short and basic so it should be relatively easy to follow. The repository defines 6 setup scripts:

  1. tnw-install-wordpress
    • Install WordPress
  2. tnw-install-nginx
    • Setup Nginx to serve a website from a folder on a local domain
  3. tnw-prepare-codeception
  4. tnw-upload-coverage-to-codecov
  5. tnw-upload-coverage-to-scrutinizer

WordPress

The WordPress installation is done through the tnw-install-wordpress bash script. The basic install process goes as follows:

  1. Create the WordPress database.
  2. Download WordPress core.
  3. Generate the wp-config.php file.
    • Note that define( 'AUTOMATIC_UPDATER_DISABLED', true ); is added.
  4. Install the WordPress database.

Nginx

The Nginx installation is done through the tnw-install-nginx bash script. The basic install process goes as follows:

  1. Install Nginx using the apt addon via entries in the .travis.yml file.
  2. Copy the configuration templates to a new directory while replacing placeholders with environment variables.
  3. Start php-fpm and Nginx with our custom configuration file instead of the default.

Codeception

The Codeception preparation is done through the tnw-prepare-codeception bash script. The basic install process goes as follows:

  1. Replace phantomjs path to the TravisCI one in codeception.yml and codeception.dist.yml.
  2. Create an extra database for testing.
  3. Import database dump to WordPress.
  4. Upgrade the WordPress database.
  5. Export the WordPress database dump for later use.

Note: The phantomjs path must be wrapped in single quotes.

extensions:
  enabled:
    - Codeception\Extension\Phantoman
  config:
    Codeception\Extension\Phantoman:
      path: '/usr/bin/phantomjs'
      port: 4444
      suites: ['acceptance']

Codecov.io

The Codecov.io test coverage uploading is done through the tnw-upload-coverage-to-codecov bash script. The basic install process goes as follows:

  1. Run the codecov-bash script.

Scrutinizer CI

The Scrutinizer CI test coverage uploading is done through the tnw-upload-coverage-to-scrutinizer bash script. The basic install process goes as follows:

  1. Download ocular.
  2. Upload the test coverage file to Scrutinizer CI.

Known Issues

  • Nginx gives alert messages during start which is safe to ignore.

     $ install-nginx
    [26-Dec-2046 00:00:00] NOTICE: [pool travis] 'user' directive is ignored when FPM is not running as root
    nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
    

See Also

Real life examples that use this package

Here you go:

Add your own here

Support!

Donate via PayPal Donate via PayPal

Love Travis CI Nginx WordPress Test? Help me maintain Travis CI Nginx WordPress Test, a donation here can help with it.

Why don't you hire me?

Ready to take freelance WordPress jobs. Contact me via the contact form here or, via email [email protected]

Want to help in other way? Want to be a sponsor?

Contact: Tang Rufus

Change Log

See CHANGELOG.md.

Credit

Travis CI Nginx WordPress Test is originally forked from the Travis CI Nginx Test project. Special thanks to its author Todd Burry.

License

Travis CI Nginx WordPress Test is released under the MIT License.

travis-nginx-wordpress's People

Contributors

tangrufus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

travis-nginx-wordpress's Issues

Lock WP CLI version at ~1.1.0 for now

Lock WP CLI version at ~1.1.0 for now because 1.2.0 conflicts with composer dump-autoload

Error message:

$ composer install --no-dev --prefer-dist --optimize-autoloader --no-suggest
Loading composer repositories with package information
Installing dependencies from lock file
Package operations: 9 installs, 0 updates, 0 removals
  - Installing psr/container (1.0.0): Loading from cache

Generating optimized autoload files

  include_once(/home/travis/build/TypistTech/sunny/vendor/wp-cli/wp-cli/php/WP_CLI/AutoloadSplitter.php): failed to open stream: No such file or directory  

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.