Skip to content

Merge branch 'master' of https://github.com/gegmar/cluber #68

Merge branch 'master' of https://github.com/gegmar/cluber

Merge branch 'master' of https://github.com/gegmar/cluber #68

Workflow file for this run

# This workflow deploys the current master branch to a defined set of QA-Environments (secret)
name: Deploy to QA-Environments
# Controls when the action will run. Triggers the workflow on push
# events but only for the master branch
on:
push:
branches: [ master ]
workflow_dispatch:
# This workflow run is made up of some deployments that can run in parallel
jobs:
deploy-1:
# The type of runner that the job will run on
runs-on: ubuntu-latest
environment: environment-1_fw
# The following steps must be performed in order to have a working deployment on the given environment
steps:
- name: 'Deploy with SSH on remote environment #1'
uses: JimCronqvist/action-ssh@master
with:
hosts: ${{ secrets.USER_AT_HOST }}
privateKey: ${{ secrets.SSH_KEY }}
debug: false
# Run the following commands on the remote environment and
# log the output to $LOG to minimize data leakage about the server environment
# 01. Change into the shop directory containing a prod and qa
# 02. Create SQL-Dump of PROD-DB
# 03. Drop all tables from QA-DB. Must be done by small hack, because a "DROP DATABASE"-Statement is not possible
# 04. Restore the PROD-DB-Dump in the QA-DB
# 05. Backup QA-.env-file with secrets
# 06. Delete full QA-directory
# 07. Copy the current PROD-directory as new QA-directory
# 08. Restore the QA-.env.file
# 09. Change into the new QA-directory
# 10. Pull latest changes from github
# 11. Update composer
# 12. Install dependencies with composer
# 13. (Re)Create caches
# 14. Perform migrations and required seedings
# 15. QA-Environment is ready for manual tests!
command: |
BCK_FILE=${{ secrets.DIR }}/deployments/prod-db_$(date +%F_%T).sql
LOG_FILE=${{ secrets.DIR }}/deployments/qa_${{ github.sha }}_$(date +%F_%T).log
echo "=== Changing into deployment-dir ===" >> $LOG_FILE
cd ${{ secrets.DIR }}
echo "=== [DB] Creating sql-backup from PROD-DB ===" >> $LOG_FILE
mysqldump ${{ secrets.PROD_DB_AUTH }} --no-tablespaces 2>> $LOG_FILE > $BCK_FILE
echo "=== [DB] Delete all tables from QA-DB ===" >> $LOG_FILE
mysql -B ${{ secrets.QA_DB_AUTH }} -e 'SELECT "SET FOREIGN_KEY_CHECKS = 0;" AS "SHOW TABLES;" UNION SELECT concat("DROP TABLE IF EXISTS `", table_name, "`;") AS "SHOW TABLES;" FROM information_schema.tables WHERE table_schema = "${{ secrets.QA_DB_NAME }}" UNION SELECT "SET FOREIGN_KEY_CHECKS = 1;" AS "SHOW TABLES;";' | mysql ${{ secrets.QA_DB_AUTH }} >> $LOG_FILE 2>&1
echo "=== [DB] Restore PROD content to QA-DB ===" >> $LOG_FILE
mysql ${{ secrets.QA_DB_AUTH }} < $BCK_FILE >> $LOG_FILE 2>&1
echo "=== [FS] Backup QA-.env-file and set current PROD files as new QA files ===" >> $LOG_FILE
cp qa/.env . >> $LOG_FILE 2>&1
rm -rf qa >> $LOG_FILE 2>&1
cp -r prod qa >> $LOG_FILE 2>&1
cp .env qa/ >> $LOG_FILE 2>&1
echo "=== Change into QA dir ===" >> $LOG_FILE
cd qa
echo "=== [GIT] Pull newest changes from Repository ===" >> $LOG_FILE
git pull >> $LOG_FILE 2>&1
echo "=== [Composer] Update composer and install dependencies ===" >> $LOG_FILE
php73 ../composer.phar self-update >> $LOG_FILE 2>&1
php73 ../composer.phar install --no-dev --optimize-autoloader --no-progress >> $LOG_FILE 2>&1
echo "=== [Artisan] Create caches from routes, views and config ===" >> $LOG_FILE
php73 artisan optimize >> $LOG_FILE 2>&1
php73 artisan route:cache >> $LOG_FILE 2>&1
php73 artisan view:cache >> $LOG_FILE 2>&1
php73 artisan config:cache >> $LOG_FILE 2>&1
echo "=== [Artisan|DB] Perform database migrations ===" >> $LOG_FILE
php73 artisan migrate --seed >> $LOG_FILE 2>&1
deploy-2:
runs-on: ubuntu-latest
steps:
- name: 'Deploy with SSH on remote environment #2'
uses: JimCronqvist/action-ssh@master
with:
hosts: ${{ secrets.ENV_2_USER_AT_HOST }}
privateKey: ${{ secrets.SSH_KEY }}
debug: false
command: |
BCK_FILE=${{ secrets.ENV_2_DIR }}/deployments/prod-db_$(date +%F_%T).sql
LOG_FILE=${{ secrets.ENV_2_DIR }}/deployments/qa_${{ github.sha }}_$(date +%F_%T).log
echo "=== Changing into deployment-dir ===" >> $LOG_FILE
cd ${{ secrets.ENV_2_DIR }}
echo "=== [DB] Creating sql-backup from PROD-DB ===" >> $LOG_FILE
mysqldump ${{ secrets.ENV_2_PROD_DB_AUTH }} --no-tablespaces 2>> $LOG_FILE > $BCK_FILE
echo "=== [DB] Delete all tables from QA-DB ===" >> $LOG_FILE
mysql -B ${{ secrets.ENV_2_QA_DB_AUTH }} -e 'SELECT "SET FOREIGN_KEY_CHECKS = 0;" AS "SHOW TABLES;" UNION SELECT concat("DROP TABLE IF EXISTS `", table_name, "`;") AS "SHOW TABLES;" FROM information_schema.tables WHERE table_schema = "${{ secrets.ENV_2_QA_DB_NAME }}" UNION SELECT "SET FOREIGN_KEY_CHECKS = 1;" AS "SHOW TABLES;";' | mysql ${{ secrets.ENV_2_QA_DB_AUTH }} >> $LOG_FILE 2>&1
echo "=== [DB] Restore PROD content to QA-DB ===" >> $LOG_FILE
mysql ${{ secrets.ENV_2_QA_DB_AUTH }} < $BCK_FILE >> $LOG_FILE 2>&1
echo "=== [FS] Backup QA-.env-file and set current PROD files as new QA files ===" >> $LOG_FILE
cp cluber_qa/.env . >> $LOG_FILE 2>&1
rm -rf cluber_qa >> $LOG_FILE 2>&1
cp -r cluber cluber_qa >> $LOG_FILE 2>&1
cp .env cluber_qa/ >> $LOG_FILE 2>&1
echo "=== Change into QA dir ===" >> $LOG_FILE
cd cluber_qa
echo "=== [GIT] Pull newest changes from Repository ===" >> $LOG_FILE
git pull >> $LOG_FILE 2>&1
echo "=== [Composer] Update composer and install dependencies ===" >> $LOG_FILE
php73 ../composer.phar self-update >> $LOG_FILE 2>&1
php73 ../composer.phar install --no-dev --optimize-autoloader --no-progress >> $LOG_FILE 2>&1
echo "=== [Artisan] Create caches from routes, views and config ===" >> $LOG_FILE
php73 artisan optimize >> $LOG_FILE 2>&1
php73 artisan route:cache >> $LOG_FILE 2>&1
php73 artisan view:cache >> $LOG_FILE 2>&1
php73 artisan config:cache >> $LOG_FILE 2>&1
echo "=== [Artisan|DB] Perform database migrations ===" >> $LOG_FILE
php73 artisan migrate --seed >> $LOG_FILE 2>&1
deploy-3:
runs-on: ubuntu-latest
steps:
- name: 'Deploy with SSH on remote environment #3'
uses: JimCronqvist/action-ssh@master
with:
hosts: ${{ secrets.ENV_3_USER_AT_HOST }}
privateKey: ${{ secrets.SSH_KEY }}
debug: false
command: |
BCK_FILE=${{ secrets.ENV_3_DIR }}/deployments/prod-db_$(date +%F_%T).sql
LOG_FILE=${{ secrets.ENV_3_DIR }}/deployments/qa_${{ github.sha }}_$(date +%F_%T).log
echo "=== Changing into deployment-dir ===" >> $LOG_FILE
cd ${{ secrets.ENV_3_DIR }}
echo "=== [DB] Creating sql-backup from PROD-DB ===" >> $LOG_FILE
mysqldump ${{ secrets.ENV_3_PROD_DB_AUTH }} --no-tablespaces 2>> $LOG_FILE > $BCK_FILE
echo "=== [DB] Delete all tables from QA-DB ===" >> $LOG_FILE
mysql -B ${{ secrets.ENV_3_QA_DB_AUTH }} -e 'SELECT "SET FOREIGN_KEY_CHECKS = 0;" AS "SHOW TABLES;" UNION SELECT concat("DROP TABLE IF EXISTS `", table_name, "`;") AS "SHOW TABLES;" FROM information_schema.tables WHERE table_schema = "${{ secrets.ENV_3_QA_DB_NAME }}" UNION SELECT "SET FOREIGN_KEY_CHECKS = 1;" AS "SHOW TABLES;";' | mysql ${{ secrets.ENV_3_QA_DB_AUTH }} >> $LOG_FILE 2>&1
echo "=== [DB] Restore PROD content to QA-DB ===" >> $LOG_FILE
mysql ${{ secrets.ENV_3_QA_DB_AUTH }} < $BCK_FILE >> $LOG_FILE 2>&1
echo "=== [FS] Backup QA-.env-file and set current PROD files as new QA files ===" >> $LOG_FILE
cp qa/.env . >> $LOG_FILE 2>&1
rm -rf qa >> $LOG_FILE 2>&1
cp -r prod qa >> $LOG_FILE 2>&1
cp .env qa/ >> $LOG_FILE 2>&1
echo "=== Change into QA dir ===" >> $LOG_FILE
cd qa
echo "=== [GIT] Pull newest changes from Repository ===" >> $LOG_FILE
git pull >> $LOG_FILE 2>&1
echo "=== [Composer] Update composer and install dependencies ===" >> $LOG_FILE
php73 ../composer.phar self-update >> $LOG_FILE 2>&1
php73 ../composer.phar install --no-dev --optimize-autoloader --no-progress >> $LOG_FILE 2>&1
echo "=== [Artisan] Create caches from routes, views and config ===" >> $LOG_FILE
php73 artisan optimize >> $LOG_FILE 2>&1
php73 artisan route:cache >> $LOG_FILE 2>&1
php73 artisan view:cache >> $LOG_FILE 2>&1
php73 artisan config:cache >> $LOG_FILE 2>&1
echo "=== [Artisan|DB] Perform database migrations ===" >> $LOG_FILE
php73 artisan migrate --seed >> $LOG_FILE 2>&1