Merge pull request #56 from gegmar/dependabot/composer/tecnickcom/tcp… #70
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |