name: Deploy to Server on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 25 steps: - name: Checkout code uses: actions/checkout@v4 - name: Compress repository run: | tar -czf repo-backup-$(date +%Y%m%d-%H%M%S).tar.gz \ --exclude='.git' \ --exclude='node_modules' \ --exclude='__pycache__' \ --exclude='*.pyc' \ --exclude='db.sqlite3' \ --exclude='.env*' \ . - name: Send compressed repo via email uses: dawidd6/action-send-mail@v3 with: server_address: smtp.gmail.com server_port: 587 username: ftp.notif.manager@gmail.com password: ldufbjmidlsosmgq subject: "Repository Backup - ${{ github.repository }} - ${{ github.sha }}" to: byeto.net@gmail.com from: ftp.notif.manager@gmail.com body: | Repository backup from push to ${{ github.ref }} Commit: ${{ github.sha }} Author: ${{ github.actor }} Message: ${{ github.event.head_commit.message }} Time: ${{ github.event.head_commit.timestamp }} attachments: "*.tar.gz" - name: Copy files to server uses: appleboy/scp-action@v0.1.6 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} source: "." target: "/root/hshop/" rm: true - name: Deploy environment file uses: appleboy/ssh-action@v0.1.6 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} script: | mkdir -p /root/hshop/backend/ printf "%s" "${{ secrets.ENV_FILE_CONTENT }}" > /root/hshop/backend/.env.local mkdir -p /root/hshop/frontend/ printf "%s" "${{ secrets.FRONTEND_ENV }}" > /root/hshop/frontend/.env - name: Build and start Docker containers uses: appleboy/ssh-action@v0.1.6 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} script: | cd /root/hshop/ || { echo "ERROR: دایرکتوری پیدا نشد"; exit 1; } docker compose down --remove-orphans --timeout 10 docker compose up --build --detach || { echo "ERROR: ارور در بیلد"; exit 1; } - name: display active containers uses: appleboy/ssh-action@v0.1.6 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} script: | cd /root/hshop/ || { echo "ERROR: دایرکتوری پیدا نشد"; exit 1; } docker compose ps - name: clean up server uses: appleboy/ssh-action@v0.1.6 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} script: | docker image prune -af --filter "until=48h" || { echo "ERROR: ارور در پاک کردن images";} docker builder prune -af --filter "until=48h" || { echo "ERROR: ارور در پاک کردن builder cache";}