forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-51458 Testing: Support for Travis-CI.org
This commit adds support for community use of travis-ci.org and allows developers to get free testing of their changes in multiple PHP environments, and multiple database servers. Use of this feature requires setup on travis-ci.org, and is not supported by Moodle HQ. Results supplied by travis-ci.org are for your convenience only, and tests will still be applied separately by the HQ integration servers during integration.
- Loading branch information
1 parent
91aaa24
commit 88ec086
Showing
1 changed file
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
sudo: false | ||
|
||
language: php | ||
|
||
php: | ||
# Moodle supports versions 5.4, 5.5, and 5.6 of PHP. | ||
# Order by fastest to slowest. | ||
# We currently only run the highest and lowest versions to reduce the load on travis-ci.org. | ||
- 5.6 | ||
# - 5.5 | ||
- 5.4 | ||
|
||
# We hope to offer PHP 7 support in the near future. | ||
- nightly | ||
|
||
env: | ||
# Although we want to run these jobs and see failures as quickly as possible, we also want to get the slowest job to | ||
# start first so that the total run time is not too high. | ||
# | ||
# We only run MySQL on PHP 5.6, so run that first. | ||
# CI Tests should be second-highest in priority as these only take <= 60 seconds to run under normal circumstances. | ||
# Postgres is significantly is pretty reasonable in its run-time. | ||
|
||
# Run unit tests on MySQL | ||
- DB=mysqli PHPUNIT=true INSTALL=false CITEST=false | ||
|
||
# Run CI Tests without running PHPUnit. | ||
- DB=none PHPUNIT=false INSTALL=false CITEST=true | ||
|
||
# Run unit tests on Postgres | ||
- DB=pgsql PHPUNIT=true INSTALL=false CITEST=false | ||
|
||
matrix: | ||
# Enable fast finish. | ||
# This will fail the build if a single job fails (except those in allow_failures). | ||
# It will not stop the jobs from running. | ||
fast_finish: true | ||
|
||
# Always allow failure on nightly. | ||
# It's a nightly build and failures can happen. | ||
allow_failures: | ||
- php: nightly | ||
|
||
exclude: | ||
# PHP 7 is not yet supported for actual runs. | ||
# Exclude it by default - we include it for CITEST only later. | ||
- php: nightly | ||
|
||
# MySQL - it's just too slow. | ||
# Exclude it on all versions except for 5.6. | ||
# - env: DB=mysqli PHPUNIT=true INSTALL=false CITEST=false | ||
# php: 5.5 | ||
|
||
- env: DB=mysqli PHPUNIT=true INSTALL=false CITEST=false | ||
php: 5.4 | ||
|
||
include: | ||
# Attempt to run the CITEST set on PHP 7. | ||
- php: nightly | ||
env: DB=none PHPUNIT=false INSTALL=false CITEST=true | ||
|
||
cache: | ||
directories: | ||
- $HOME/.composer/cache | ||
|
||
install: | ||
# Set the encrypted GITHUB_TOKEN if it's available to raise the API limit. | ||
- if [ -n "$GITHUB_APITOKEN" ]; then composer config github-oauth.github.com $GITHUB_APITOKEN; fi | ||
|
||
# Install composer dependencies. | ||
# We need --no-interaction in case we hit API limits for composer. This causes it to fall back to a standard clone. | ||
# Typically it should be able to use the Composer cache if any other job has already completed before we started here. | ||
- travis_retry composer install --prefer-dist --no-interaction | ||
|
||
before_script: | ||
- > | ||
if [ "$INSTALL" = 'true' -o "$PHPUNIT" = 'true' ]; | ||
then | ||
# Copy generic configuration in place. | ||
cp config-dist.php config.php ; | ||
# Create the moodledata directory. | ||
mkdir -p "$HOME"/roots/base | ||
# The database name and password. | ||
sed -i \ | ||
-e "s%= 'moodle'%= 'travis_ci_test'%" \ | ||
-e "s%= 'password'%= ''%" \ | ||
config.php ; | ||
# The wwwroot and dataroot. | ||
sed -i \ | ||
-e "s%http://example.com/moodle%http://localhost%" \ | ||
-e "s%/home/example/moodledata%/home/travis/roots/base%" \ | ||
config.php ; | ||
if [ "$DB" = 'pgsql' ]; | ||
then | ||
# Postgres-specific setup. | ||
sed -i \ | ||
-e "s%= 'username'%= 'postgres'%" \ | ||
config.php ; | ||
psql -c 'CREATE DATABASE travis_ci_test;' -U postgres; | ||
fi | ||
if [ "$DB" = 'mysqli' ]; | ||
then | ||
# MySQL-specific setup. | ||
sed -i \ | ||
-e "s%= 'pgsql'%= 'mysqli'%" \ | ||
-e "s%= 'username'%= 'travis'%" \ | ||
config.php; | ||
mysql -u root -e 'SET GLOBAL innodb_file_format=barracuda;' ; | ||
mysql -u root -e 'SET GLOBAL innodb_file_per_table=ON;' ; | ||
mysql -e 'CREATE DATABASE travis_ci_test DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;' ; | ||
fi | ||
if [ "$PHPUNIT" = 'true' ]; | ||
then | ||
# Create a directory for the phpunit dataroot. | ||
mkdir -p "$HOME"/roots/phpunit | ||
# The phpunit dataroot and prefix.. | ||
sed -i \ | ||
-e "/require_once/i \\\$CFG->phpunit_dataroot = '\/home\/travis\/roots\/phpunit';" \ | ||
-e "/require_once/i \\\$CFG->phpunit_prefix = 'p_';" \ | ||
config.php ; | ||
# Initialise PHPUnit for Moodle. | ||
php admin/tool/phpunit/cli/init.php | ||
fi | ||
fi | ||
script: | ||
######################################################################## | ||
# PHPUnit | ||
######################################################################## | ||
- > | ||
if [ "$PHPUNIT" = 'true' ]; | ||
then | ||
vendor/bin/phpunit; | ||
fi | ||
######################################################################## | ||
# CI Tests | ||
######################################################################## | ||
- > | ||
if [ "$CITEST" = 'true' ]; | ||
then | ||
# Note - this is deliberately placed in the script section as we | ||
# should not add any code until after phpunit has run. | ||
# The following repositories are required. | ||
# The local_ci repository does the actual checking. | ||
git clone https://github.com/moodlehq/moodle-local_ci.git local/ci | ||
# Determine the branch | ||
grep '^$release.*dev' version.php > /dev/null | ||
if [ $? -eq 0 ]; | ||
then | ||
# This is master | ||
export branchname='master'; | ||
else | ||
# This is a stable branch. Use the version from version.php to determine which one. | ||
export branchname="MOODLE_`grep '^$branch' version.php | sed "s/^.*'\([0-9]*\)'.*$/\1/"`_STABLE"; | ||
fi | ||
# We need the official upstream for comparison | ||
git remote add upstream https://github.com/moodle/moodle.git; | ||
git fetch upstream "$branchname"; | ||
export GIT_PREVIOUS_COMMIT="`git merge-base FETCH_HEAD $TRAVIS_COMMIT`"; | ||
export GIT_COMMIT="$TRAVIS_COMMIT"; | ||
export UPSTREAM_FETCH_HEAD=`git rev-parse FETCH_HEAD` | ||
# Variables required by our linter. | ||
export gitcmd=`which git`; | ||
export gitdir="$TRAVIS_BUILD_DIR"; | ||
export phpcmd=`which php`; | ||
fi | ||
- > | ||
if [ "$CITEST" = "true" -a "$GIT_PREVIOUS_COMMIT" != "$UPSTREAM_FETCH_HEAD" ]; | ||
then | ||
# This is a CI test, but it is based on an older weekly release. | ||
# Warn in a way that will fail the test. | ||
echo "Current commit is based on an older weekly release" && false; | ||
fi | ||
# Actually run the CI Tests - do this outside of the main test to make output clearer. | ||
- > | ||
if [ "$CITEST" = 'true' ]; | ||
then | ||
bash local/ci/php_lint/php_lint.sh; | ||
fi |