Skip to content

Release

Release #11

Workflow file for this run

# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Release
on:
workflow_dispatch:
push:
branches:
- release
jobs:
deploy:
name: Deploy to Production
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Setup SSH Key
run: |
mkdir ~/.ssh/
echo "${{ secrets.PRODUCTION_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
- name: Setup env file ⚙
run: |
echo "# tool hosting information" > .env
echo "HTTP_PORT=80" >> .env
echo "DOMAIN=snnap.app" >> .env
echo "WS_PROTOCOL=wss" >> .env
echo "WS_PORT=443" >> .env
echo "" >> .env
echo "# database information" >> .env
echo "MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }}" >> .env
echo "MYSQL_PORT=3206" >> .env
echo "MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }}" >> .env
echo "MYSQL_USER=${{ secrets.MYSQL_USER }}" >> .env
echo "MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }}" >> .env
echo "" >> .env
echo "# api information" >> .env
echo "API_PORT=3001" >> .env
echo "" >> .env
echo "# third party information" >> .env
echo "GA_TRACKING_CODE=${{ secrets.GA_TRACKING_CODE }}" >> .env
echo "GEOAPIFY_API_KEY=${{ secrets.GEOAPIFY_API_KEY }}" >> .env
echo "" >> .env
echo "# email info" >> .env
echo "EMAIL_USER=${{ secrets.EMAIL_USER }}" >> .env
echo "EMAIL_PASS=${{ secrets.EMAIL_PASS }}" >> .env
- name: Build Dockerfile 🐋
run: docker-compose -f docker-compose.yml build
- name: Copy to Production
run: |
docker save snnap_ui | gzip | ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'gunzip | docker load'
docker save snnap_api | gzip | ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'gunzip | docker load'
docker save snnap_mysql | gzip | ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'gunzip | docker load'
scp -P ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no docker-compose.yml ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }}:${{ secrets.PRODUCTION_PATH }}
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/^ build:/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/^ context:/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/^ dockerfile:/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/^ args:/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/REACT_APP/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "s/container_name/image/g" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/\${MYSQL_PORT}$/d" docker-compose.yml'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; sed -i "/^ expose:/d" docker-compose.yml'
- name: Launch Snnap
run: |
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; docker-compose -f docker-compose.yml stop'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'cd ${{ secrets.PRODUCTION_PATH }}; docker-compose -f docker-compose.yml up -d'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'docker exec snnap_mysql_1 ./setup-database.sh'
ssh -p ${{ secrets.PRODUCTION_PORT }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${{ secrets.PRODUCTION_USERNAME }}@${{ secrets.PRODUCTION }} 'docker system prune -a -f'