diff --git a/docker/scripts/bamboo-env-mapping.sh b/docker/scripts/bamboo-env-mapping.sh new file mode 100644 index 0000000000..be9599c369 --- /dev/null +++ b/docker/scripts/bamboo-env-mapping.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +export IMAGES_TAG=${bamboo_images_tag} + +export WORKING_DIR=${bamboo_working_directory} +export PR_NUMBER=${bamboo_PRnumber} +export GITHUB_TOKEN=${bamboo_github_token_password} +export COMPOSER_HOME=${bamboo_composer_home} +export BUILD_RESULT_URL=${bamboo_buildResultsUrl} diff --git a/docker/scripts/db/mysql.sh b/docker/scripts/db/mysql.sh new file mode 100644 index 0000000000..fb0a26a849 --- /dev/null +++ b/docker/scripts/db/mysql.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +export PHPBB_TEST_DBMS='phpbb\db\driver\mysqli' +export PHPBB_TEST_DBHOST='mysql' +export PHPBB_TEST_DBPORT='3306' +export PHPBB_TEST_DBNAME='phpbb_tests' +export PHPBB_TEST_DBUSER='root' +export PHPBB_TEST_DBPASSWD='' +export PHPBB_TEST_TABLE_PREFIX='phpbb_' +export DOCKER_LINK='--link mysql:mysql' + +function start_db { + cat < /tmp/phpbb.cnf +[mysqld] +default-storage-engine=MyISAM +default-tmp-storage-engine=MyISAM +tmpdir=/dev/shm/ +datadir=/dev/shm/ +EOL + + docker run \ + -d \ + --volume /tmp/phpbb.cnf:/etc/mysql/conf.d/phpbb.cnf \ + --name mysql \ + --shm-size=256M \ + --env MYSQL_ROOT_PASSWORD='' \ + --env MYSQL_DATABASE='phpbb_tests' \ + --env MYSQL_ALLOW_EMPTY_PASSWORD='yes' \ + mysql + + docker run --rm --link mysql:mysql waisbrot/wait +} diff --git a/docker/scripts/db/oracle.sh b/docker/scripts/db/oracle.sh new file mode 100644 index 0000000000..f2c3f452f5 --- /dev/null +++ b/docker/scripts/db/oracle.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +export PHPBB_TEST_DBMS='phpbb\db\driver\oracle' +export PHPBB_TEST_DBHOST='oracle' +export PHPBB_TEST_DBPORT='1521' +export PHPBB_TEST_DBNAME='xe' +export PHPBB_TEST_DBUSER='system' +export PHPBB_TEST_DBPASSWD='oracle' +export PHPBB_TEST_TABLE_PREFIX='phpbb_' +export DOCKER_LINK='--link oracle:oracle' + +function start_db { + docker run -d --name oracle wnameless/oracle-xe-11g + docker run --rm --link oracle:oracle -e TARGETS=oracle:1521 waisbrot/wait +} diff --git a/docker/scripts/db/postgres.sh b/docker/scripts/db/postgres.sh new file mode 100644 index 0000000000..af034c072e --- /dev/null +++ b/docker/scripts/db/postgres.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +export PHPBB_TEST_DBMS='phpbb\db\driver\postgres' +export PHPBB_TEST_DBHOST='postgres' +export PHPBB_TEST_DBPORT='5432' +export PHPBB_TEST_DBNAME='phpbb_tests' +export PHPBB_TEST_DBUSER='postgres' +export PHPBB_TEST_DBPASSWD='' +export PHPBB_TEST_TABLE_PREFIX='phpbb_' +export DOCKER_LINK='--link postgres:postgres' + +function start_db { + docker run \ + -d \ + --name postgres \ + --env POSTGRES_PASSWORD='' \ + --env POSTGRES_USER='postgres' \ + postgres + + docker run --rm --link postgres:postgres waisbrot/wait + sleep 1 + + docker run --link postgres:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres -c "create database phpbb_tests;"' +} diff --git a/docker/scripts/db/sqlite.sh b/docker/scripts/db/sqlite.sh new file mode 100644 index 0000000000..698d2c6173 --- /dev/null +++ b/docker/scripts/db/sqlite.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +export PHPBB_TEST_DBMS='phpbb\db\driver\sqlite3' +export PHPBB_TEST_DBHOST='/dev/shm/phpbb_unit_tests.sqlite3' +export PHPBB_TEST_DBPORT='' +export PHPBB_TEST_DBNAME='' +export PHPBB_TEST_DBUSER='' +export PHPBB_TEST_DBPASSWD='' +export PHPBB_TEST_TABLE_PREFIX='phpbb_' +export DOCKER_LINK='' + +function start_db { + true +} diff --git a/docker/scripts/jobs/build/fetch-pr.sh b/docker/scripts/jobs/build/fetch-pr.sh new file mode 100755 index 0000000000..8d2b8bcd98 --- /dev/null +++ b/docker/scripts/jobs/build/fetch-pr.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + phpbb/build${IMAGES_TAG} sh -c ' + git config user.email "no-reply@phpbb.com" && + git config user.name "phpBB CI" && + git remote set-url origin "https://github.com/phpbb/phpbb.git" && + git fetch origin +refs/pull/'${PR_NUMBER}'/merge && + git checkout FETCH_HEAD' diff --git a/docker/scripts/jobs/build/generate-archive.sh b/docker/scripts/jobs/build/generate-archive.sh new file mode 100755 index 0000000000..1d046eca13 --- /dev/null +++ b/docker/scripts/jobs/build/generate-archive.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +cat < generate-archive.sh +git remote set-url origin "https://github.com/phpbb/phpbb.git" +git fetch origin +refs/pull/${PR_NUMBER}/head +last_commit=\$(git rev-parse FETCH_HEAD) +echo "\$last_commit" > build/logs/last_commit +tar --exclude-backups --exclude-vcs --exclude='.git' --exclude='generate-archive.sh' -p -c -z -f source_code.tar.gz * +EOL + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + phpbb/build${IMAGES_TAG} sh generate-archive.sh + +rm generate-archive.sh diff --git a/docker/scripts/jobs/build/prepare-sources.sh b/docker/scripts/jobs/build/prepare-sources.sh new file mode 100755 index 0000000000..a642449799 --- /dev/null +++ b/docker/scripts/jobs/build/prepare-sources.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Ensure the github oauth token is set +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --volume ${COMPOSER_HOME}:/composer/ \ + --workdir /data \ + phpbb/build${IMAGES_TAG} sh -c "COMPOSER_HOME=/composer php composer.phar config -g github-oauth.github.com ${GITHUB_TOKEN}" + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --volume ${COMPOSER_HOME}:/composer/ \ + --workdir /data \ + phpbb/build${IMAGES_TAG} sh -c ' + git config user.email "no-reply@phpbb.com" && + git config user.name "phpBB CI" && + cd phpBB && + COMPOSER_HOME=/composer php ../composer.phar install --dev' + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + phpbb/build${IMAGES_TAG} sh -c 'cd build; ../phpBB/vendor/bin/phing clean prepare' diff --git a/docker/scripts/jobs/common/cleanup.sh b/docker/scripts/jobs/common/cleanup.sh new file mode 100755 index 0000000000..2a379644e9 --- /dev/null +++ b/docker/scripts/jobs/common/cleanup.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# We assume the docker daemon is dedicated to the current job (the jobs runs on isolated docker daemon) +# Stop running containers +for container in $(docker ps -q) +do + docker stop $container || true +done + +# Removing containers +for container in $(docker ps -a -q) +do + docker rm -v $container || true +done diff --git a/docker/scripts/jobs/common/prepare-code.sh b/docker/scripts/jobs/common/prepare-code.sh new file mode 100755 index 0000000000..c1897735d6 --- /dev/null +++ b/docker/scripts/jobs/common/prepare-code.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + debian tar -p -x -z -f source_code.tar.gz diff --git a/docker/scripts/jobs/functional-tests.sh b/docker/scripts/jobs/functional-tests.sh new file mode 100755 index 0000000000..b5986455e3 --- /dev/null +++ b/docker/scripts/jobs/functional-tests.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +pwd=$(dirname "$0") + +db=$1 +php=$2 + +. ${pwd}/../db/${db}.sh + +start_db + +docker run \ + --env TEST_UID=$(id -u) \ + --env TEST_GID=$(id -g) \ + ${DOCKER_LINK} \ + --env PHPBB_TEST_DBMS="${PHPBB_TEST_DBMS}" \ + --env PHPBB_TEST_DBHOST="${PHPBB_TEST_DBHOST}" \ + --env PHPBB_TEST_DBPORT="${PHPBB_TEST_DBPORT}" \ + --env PHPBB_TEST_DBNAME="${PHPBB_TEST_DBNAME}" \ + --env PHPBB_TEST_DBUSER="${PHPBB_TEST_DBUSER}" \ + --env PHPBB_TEST_DBPASSWD="${PHPBB_TEST_DBPASSWD}" \ + --env PHPBB_TEST_TABLE_PREFIX="${PHPBB_TEST_TABLE_PREFIX}" \ + --env PHPBB_FUNCTIONAL_URL="http://localhost/" \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + phpbb/php-ft-${php}-${db}${IMAGES_TAG} php -d memory_limit=-1 phpBB/vendor/bin/phpunit --group functional --log-junit build/logs/phpunit.xml diff --git a/docker/scripts/jobs/sniffer.sh b/docker/scripts/jobs/sniffer.sh new file mode 100755 index 0000000000..92ae207349 --- /dev/null +++ b/docker/scripts/jobs/sniffer.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +docker run \ + --user $(id -u):$(id -g) \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + php:5.6 sh -c ' + cd build && + ../phpBB/vendor/bin/phing sniff && + echo 0 > logs/sniffs_res || + echo 1 > logs/sniffs_res' diff --git a/docker/scripts/jobs/unit-tests.sh b/docker/scripts/jobs/unit-tests.sh new file mode 100755 index 0000000000..ff65a0344d --- /dev/null +++ b/docker/scripts/jobs/unit-tests.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +pwd=$(dirname "$0") + +db=$1 +php=$2 + +. ${pwd}/../db/${db}.sh + +start_db + +docker run \ + --user $(id -u):$(id -g) \ + ${DOCKER_LINK} \ + --env PHPBB_TEST_DBMS="${PHPBB_TEST_DBMS}" \ + --env PHPBB_TEST_DBHOST="${PHPBB_TEST_DBHOST}" \ + --env PHPBB_TEST_DBPORT="${PHPBB_TEST_DBPORT}" \ + --env PHPBB_TEST_DBNAME="${PHPBB_TEST_DBNAME}" \ + --env PHPBB_TEST_DBUSER="${PHPBB_TEST_DBUSER}" \ + --env PHPBB_TEST_DBPASSWD="${PHPBB_TEST_DBPASSWD}" \ + --env PHPBB_TEST_TABLE_PREFIX="${PHPBB_TEST_TABLE_PREFIX}" \ + --volume ${WORKING_DIR}:/data \ + --workdir /data \ + phpbb/php-ut-${php}-${db}${IMAGES_TAG} php -d memory_limit=-1 phpBB/vendor/bin/phpunit --group __nogroup__ --log-junit build/logs/phpunit.xml diff --git a/docker/scripts/local-env-mapping.sh b/docker/scripts/local-env-mapping.sh new file mode 100644 index 0000000000..7c9339a8e4 --- /dev/null +++ b/docker/scripts/local-env-mapping.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +export IMAGES_TAG=':latest' + +export WORKING_DIR="$(git rev-parse --show-toplevel)" +export PR_NUMBER='' +export GITHUB_TOKEN="$(cd "$WORKING_DIR"/phpBB;php ../composer.phar config github-oauth.github.com)" +export COMPOSER_HOME="$(cd "$WORKING_DIR"/phpBB;php ../composer.phar config home)" +export BUILD_RESULT_URL='' diff --git a/docker/scripts/utils/get-tests-result.sh b/docker/scripts/utils/get-tests-result.sh new file mode 100755 index 0000000000..1a25c24eb5 --- /dev/null +++ b/docker/scripts/utils/get-tests-result.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +if [ -s build/logs/phpunit.xml ]; then + res=$(cat build/logs/sniffs_res 2>/dev/null) + if ( grep 'failures="[^0]"' build/logs/phpunit.xml ); then + res=1 + elif ( grep 'errors="[^0]"' build/logs/phpunit.xml ); then + res=2 + else + res=0 + fi +else + res=2 +fi + +echo ${res} diff --git a/docker/scripts/utils/set-result-status.sh b/docker/scripts/utils/set-result-status.sh new file mode 100755 index 0000000000..37af03cf94 --- /dev/null +++ b/docker/scripts/utils/set-result-status.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +last_commit=$(cat build/logs/last_commit) + +result_file=$1 +step=$2 + +if [ -s build/logs/${result_file} ]; then + res=$(cat build/logs/${result_file} 2>/dev/null) +else + res=2 +fi + +if [ $res -eq 0 ]; then + echo Send success + $(dirname "$0")/set-status.sh 'success' 'The Bamboo build is a success' "${step}" +elif [ $res -eq 1 ]; then + echo Send Failure + $(dirname "$0")/set-status.sh 'failure' 'The Bamboo build failed' "${step}" +else + echo Send error + $(dirname "$0")/set-status.sh 'error' 'The Bamboo build is in error' "${step}" +fi diff --git a/docker/scripts/utils/set-status.sh b/docker/scripts/utils/set-status.sh new file mode 100755 index 0000000000..94c3394bd8 --- /dev/null +++ b/docker/scripts/utils/set-status.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +last_commit=$(cat build/logs/last_commit) + +status=$1 +description=$2 +step=$3 + +env + +echo '---------------------' +echo curl -H "Authorization: token ${GITHUB_TOKEN}" --request POST --data "{\"state\": \"${status}\", \"description\": \"${description}\", \"target_url\": \"${BUILD_RESULT_URL}\", \"context\": \"phpBB continuous integration - ${step}\"}" https://api.github.com/repos/phpbb/phpbb/statuses/${last_commit} +echo '---------------------' +curl -H "Authorization: token ${GITHUB_TOKEN}" --request POST --data "{\"state\": \"${status}\", \"description\": \"${description}\", \"target_url\": \"${BUILD_RESULT_URL}\", \"context\": \"phpBB continuous integration - ${step}\"}" https://api.github.com/repos/phpbb/phpbb/statuses/${last_commit}