You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.9 KiB
YAML
137 lines
3.9 KiB
YAML
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
|
|
composer --no-ansi install
|
|
# Install Node.js and Yarn
|
|
- &before_install_yarn |-
|
|
apt -yqq install gnupg2 apt-transport-https
|
|
curl -sL https://deb.nodesource.com/setup_8.x | bash -
|
|
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list
|
|
apt -yqq update && apt -yqq install nodejs yarn
|
|
yarn install
|
|
yarn build
|
|
|
|
.test_template: &test_definition
|
|
stage: test
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}_${CI_JOB_ID}"
|
|
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
|
|
- *before_install_yarn
|
|
|
|
.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 ./bin/deploy.sh
|
|
apt update && apt install -yqq rsync openssh-client
|
|
composer --no-ansi install --no-dev
|
|
composer --no-ansi dump-autoload --optimize
|
|
|
|
build_release_file:
|
|
<<: *deploy_definition
|
|
artifacts:
|
|
name: "release_${CI_COMMIT_REF_SLUG}_${CI_JOB_ID}_${CI_COMMIT_SHA}"
|
|
expire_in: 1 week
|
|
paths:
|
|
- ./release/
|
|
script:
|
|
- *deployment_dependencies
|
|
- rsync -vAax --exclude '.git*' --exclude .composer/ --exclude coverage/ --exclude node_modules/ --exclude release/ ./ release/
|
|
|
|
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
|
|
- ./bin/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
|
|
- ./bin/deploy.sh -r "${PRODUCTION_REMOTE}" -p "${PRODUCTION_REMOTE_PATH}" -i "${CI_JOB_ID}-${CI_COMMIT_SHA}"
|