image: php cache: paths: - .composer services: - mariadb:10.2 variables: MYSQL_DATABASE: engelsystem MYSQL_USER: engel MYSQL_PASSWORD: engelsystem MYSQL_HOST: mariadb MYSQL_RANDOM_ROOT_PASSWORD: "yes" COMPOSER_HOME: .composer before_script: # Fix permissions after gitlab messed them up - &before_fix_permissions |- find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \; # Install required Packages - &before_install_packages |- apt update -yqq apt install -yqq git unzip docker-php-ext-install pdo pdo_mysql gettext # Install xdebug - &before_install_xdebug |- pecl install xdebug docker-php-ext-enable xdebug # MySQL DB - &before_setup_mysql |- apt install -yqq mariadb-client mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" < db/install.sql mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" < db/update.sql # Install Composer - &before_install_composer |- curl -sS https://getcomposer.org/installer | php -- --no-ansi --install-dir /usr/local/bin/ --filename composer /usr/local/bin/composer --no-ansi install .test_template: &test_definition stage: test artifacts: name: "${CI_JOB_NAME}_${CI_PROJECT_ID}_${PHP_VERSION}" expire_in: 1 week paths: - ./coverage/ coverage: '/^\s*Lines:\s*(\d+(?:\.\d+)?%)/' script: vendor/bin/phpunit --colors=never --coverage-text --coverage-html ./coverage/ test:7.0: <<: *test_definition image: php:7.0 test:7.1: <<: *test_definition image: php:7.1 .deploy_template: &deploy_definition services: [] stage: deploy only: - master before_script: - *before_fix_permissions - *before_install_packages - *before_install_composer .deploy_template_script: # Configure SSH - &deployment_ssh |- mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" | sed -e 's/\r//g' > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 # Install project and dependencies - &deployment_dependencies |- chmod +x ./deploy.sh apt update && apt install -yqq rsync openssh-client /usr/local/bin/composer --no-ansi install --no-dev /usr/local/bin/composer --no-ansi dump-autoload --optimize deploy_staging: <<: *deploy_definition environment: name: staging script: # Check if deployment variables where set - |- if [ -z "${SSH_PRIVATE_KEY}" ] || [ -z "${STAGING_REMOTE}" ] || [ -z "${STAGING_REMOTE_PATH}" ]; then echo "Skipping deployment"; exit fi - *deployment_ssh - *deployment_dependencies # Deploy to server - ./deploy.sh -r "${STAGING_REMOTE}" -p "${STAGING_REMOTE_PATH}" -i "${CI_JOB_ID}-${CI_COMMIT_SHA}" deploy_production: <<: *deploy_definition environment: name: production when: manual script: # Check if deployment variables where set - |- if [ -z "${SSH_PRIVATE_KEY}" ] || [ -z "${PRODUCTION_REMOTE}" ] || [ -z "${PRODUCTION_REMOTE_PATH}" ]; then echo "Skipping deployment"; exit fi - *deployment_ssh - *deployment_dependencies # Deploy to server - ./deploy.sh -r "${PRODUCTION_REMOTE}" -p "${PRODUCTION_REMOTE_PATH}" -i "${CI_JOB_ID}-${CI_COMMIT_SHA}"