mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 05:58:34 +01:00
33dca94573
This change also add fail-on-risky to travis to help pick these up, and verbosity too. We only fail on risky during Travis and not during normal output because developers may want to debug tests.
286 lines
9.2 KiB
YAML
286 lines
9.2 KiB
YAML
# PLEASE NOTE: Travis is not currently utilised by the Moodle core integration
|
|
# process (which uses our internal CI system) this file is here for the benefit
|
|
# of community developers git clones - see MDL-51458.
|
|
|
|
sudo: required
|
|
|
|
# We currently disable Travis notifications entirely until https://github.com/travis-ci/travis-ci/issues/4976
|
|
# is fixed.
|
|
notifications:
|
|
email: false
|
|
|
|
language: php
|
|
|
|
php:
|
|
# We only run the highest and lowest supported versions to reduce the load on travis-ci.org.
|
|
- 7.2
|
|
- 7.0
|
|
|
|
addons:
|
|
postgresql: "9.6"
|
|
packages:
|
|
- mysql-server-5.6
|
|
- mysql-client-core-5.6
|
|
- mysql-client-5.6
|
|
|
|
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
|
|
# services:
|
|
# - redis-server
|
|
|
|
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 7.2, 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 TASK=PHPUNIT
|
|
|
|
# Run CI Tests without running PHPUnit.
|
|
- DB=none TASK=CITEST
|
|
|
|
# Run unit tests on Postgres
|
|
- DB=pgsql TASK=PHPUNIT
|
|
|
|
# Perform an upgrade test too.
|
|
- DB=pgsql TASK=UPGRADE
|
|
|
|
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
|
|
|
|
include:
|
|
# Run grunt/npm install on highest version ('node' is an alias for the latest node.js version.)
|
|
- php: 7.2
|
|
env: DB=none TASK=GRUNT NVM_VERSION='8.9'
|
|
|
|
exclude:
|
|
# MySQL - it's just too slow.
|
|
# Exclude it on all versions except for 7.2
|
|
|
|
- env: DB=mysqli TASK=PHPUNIT
|
|
php: 7.0
|
|
|
|
cache:
|
|
directories:
|
|
- $HOME/.composer/cache
|
|
- $HOME/.npm
|
|
|
|
install:
|
|
- >
|
|
if [ "$DB" = 'mysqli' ];
|
|
then
|
|
sudo mkdir /mnt/ramdisk
|
|
sudo mount -t tmpfs -o size=1024m tmpfs /mnt/ramdisk
|
|
sudo stop mysql
|
|
sudo mv /var/lib/mysql /mnt/ramdisk
|
|
sudo ln -s /mnt/ramdisk/mysql /var/lib/mysql
|
|
sudo start mysql
|
|
fi
|
|
- >
|
|
if [ "$DB" = 'pgsql' ];
|
|
then
|
|
sudo mkdir /mnt/ramdisk
|
|
sudo mount -t tmpfs -o size=1024m tmpfs /mnt/ramdisk
|
|
sudo service postgresql stop
|
|
sudo mv /var/lib/postgresql /mnt/ramdisk
|
|
sudo ln -s /mnt/ramdisk/postgresql /var/lib/postgresql
|
|
sudo service postgresql start 9.6
|
|
fi
|
|
- >
|
|
if [ "$TASK" = 'PHPUNIT' ];
|
|
then
|
|
if [ -n "$GITHUB_APITOKEN" ]; then
|
|
composer config github-oauth.github.com $GITHUB_APITOKEN;
|
|
echo 'auth.json' >> .git/info/exclude
|
|
fi
|
|
|
|
# Enable Redis.
|
|
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
|
|
# echo 'extension="redis.so"' > /tmp/redis.ini
|
|
# phpenv config-add /tmp/redis.ini
|
|
|
|
# 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;
|
|
fi
|
|
|
|
- >
|
|
if [ "$TASK" = 'GRUNT' ];
|
|
then
|
|
nvm install $NVM_VERSION ;
|
|
nvm use $NVM_VERSION ;
|
|
fi
|
|
|
|
before_script:
|
|
- phpenv config-rm xdebug.ini
|
|
- >
|
|
if [ "$TASK" = 'PHPUNIT' -o "$TASK" = 'UPGRADE' ];
|
|
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%https://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'%" \
|
|
-e "s%=> 'utf8mb4_unicode_ci'%=> 'utf8mb4_bin'%" \
|
|
config.php;
|
|
|
|
mysql -u root -e 'SET GLOBAL innodb_file_format=barracuda;' ;
|
|
mysql -u root -e 'SET GLOBAL innodb_file_per_table=ON;' ;
|
|
mysql -u root -e 'SET GLOBAL innodb_large_prefix=ON;' ;
|
|
mysql -e 'CREATE DATABASE travis_ci_test DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_bin;' ;
|
|
fi
|
|
fi
|
|
|
|
- >
|
|
if [ "$TASK" = 'PHPUNIT' ];
|
|
then
|
|
# Create a directory for the phpunit dataroot.
|
|
mkdir -p "$HOME"/roots/phpunit
|
|
|
|
# The phpunit dataroot and prefix..
|
|
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
|
|
# -e "/require_once/i \\define('TEST_SESSION_REDIS_HOST', '127.0.0.1');" \
|
|
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
|
|
|
|
- >
|
|
if [ "$TASK" = 'GRUNT' ];
|
|
then
|
|
npm install --no-spin;
|
|
npm install --no-spin -g grunt ;
|
|
fi
|
|
|
|
########################################################################
|
|
# CI Tests
|
|
########################################################################
|
|
- >
|
|
if [ "$TASK" = 'CITEST' ];
|
|
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
|
|
|
|
# We need the official upstream for comparison
|
|
git remote add upstream https://github.com/moodle/moodle.git;
|
|
|
|
git fetch upstream master;
|
|
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
|
|
|
|
########################################################################
|
|
# Upgrade test
|
|
########################################################################
|
|
- >
|
|
if [ "$TASK" = 'UPGRADE' ];
|
|
then
|
|
# We need the official upstream.
|
|
git remote add upstream https://github.com/moodle/moodle.git;
|
|
|
|
# Checkout 30 STABLE branch (the first version compatible with PHP 7.x)
|
|
git fetch upstream MOODLE_30_STABLE;
|
|
git checkout MOODLE_30_STABLE;
|
|
|
|
# Perform the upgrade
|
|
php admin/cli/install_database.php --agree-license --adminpass=Password --adminemail=admin@example.com --fullname="Upgrade test" --shortname=Upgrade;
|
|
|
|
# Return to the previous commit
|
|
git checkout -;
|
|
|
|
# Perform the upgrade
|
|
php admin/cli/upgrade.php --non-interactive --allow-unstable ;
|
|
|
|
# The local_ci repository can be used to check upgrade savepoints.
|
|
git clone https://github.com/moodlehq/moodle-local_ci.git local/ci ;
|
|
fi
|
|
|
|
script:
|
|
- >
|
|
if [ "$TASK" = 'PHPUNIT' ];
|
|
then
|
|
vendor/bin/phpunit --fail-on-risky --disallow-test-output --verbose;
|
|
fi
|
|
|
|
- >
|
|
if [ "$TASK" = 'CITEST' ];
|
|
then
|
|
bash local/ci/php_lint/php_lint.sh;
|
|
fi
|
|
|
|
- >
|
|
if [ "$TASK" = 'GRUNT' ];
|
|
then
|
|
grunt ;
|
|
# Add all files to the git index and then run diff --cached to see all changes.
|
|
# This ensures that we get the status of all files, including new files.
|
|
git add . ;
|
|
git diff --cached --exit-code ;
|
|
fi
|
|
|
|
########################################################################
|
|
# Upgrade test
|
|
########################################################################
|
|
- >
|
|
if [ "$TASK" = 'UPGRADE' ];
|
|
then
|
|
cp local/ci/check_upgrade_savepoints/check_upgrade_savepoints.php ./check_upgrade_savepoints.php
|
|
result=`php check_upgrade_savepoints.php`;
|
|
# Check if there are problems
|
|
count=`echo "$result" | grep -P "ERROR|WARN" | wc -l` ;
|
|
if (($count > 0));
|
|
then
|
|
echo "$result"
|
|
exit 1 ;
|
|
fi
|
|
fi
|