typisttech / travis-nginx-wordpress
A basic template for Nginx and WordPress running on Travis CI's container based infrastructure.
Fund package maintenance!
tangrufus
typist.tech/donation
www.paypal.me/iAmTangRufus/30usd
Installs: 78 116
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 2
Forks: 0
Language:Shell
Requires
- wp-cli/wp-cli: ^1.5
README
A basic template for Nginx and WordPress running on Travis CI's container based infrastructure.
- What is the purpose of this repo?
- Installation and Usage
- Customization
- How does it works?
- Known Issues
- See Also
- Real life examples that use this package
- Support!
- Change Log
- Credit
- License
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: 'admin@wordpress.dev'
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:
tnw-install-wordpress
- Install WordPress
tnw-install-nginx
- Setup Nginx to serve a website from a folder on a local domain
tnw-prepare-codeception
- Install PHP_CodeSniffer and WordPress coding standard
tnw-upload-coverage-to-codecov
- Upload test coverage to codecov.io
tnw-upload-coverage-to-scrutinizer
- Upload test coverage to Scrutinizer
WordPress
The WordPress installation is done through the tnw-install-wordpress bash script. The basic install process goes as follows:
- Create the WordPress database.
- Download WordPress core.
- Generate the
wp-config.php
file.- Note that
define( 'AUTOMATIC_UPDATER_DISABLED', true );
is added.
- Note that
- Install the WordPress database.
Nginx
The Nginx installation is done through the tnw-install-nginx bash script. The basic install process goes as follows:
- Install Nginx using the apt addon via entries in the .travis.yml file.
- Copy the configuration templates to a new directory while replacing placeholders with environment variables.
- 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:
- Replace
phantomjs
path to the TravisCI one incodeception.yml
andcodeception.dist.yml
. - Create an extra database for testing.
- Import database dump to WordPress.
- Upgrade the WordPress database.
- 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:
- 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:
- Download ocular.
- 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
- Running Nginx as a Non-Root User
- Travis CI Nginx Test (the original repo)
- Travis CI Apache Virtualhost configuration script
Real life examples that use this package
Here you go:
Add your own here
Support!
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 info@typist.tech
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.