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: | TIMESTAMP=$(date +%Y%m%d-%H%M%S) ARCHIVE_NAME="repo-backup-${TIMESTAMP}.tar.gz" tar -czf "../${ARCHIVE_NAME}" \ --exclude='.git' \ --exclude='node_modules' \ --exclude='*.log' \ . mv "../${ARCHIVE_NAME}" . echo "ARCHIVE_NAME=${ARCHIVE_NAME}" >> $GITHUB_ENV - name: Send compressed file via email run: | sudo apt-get update sudo apt-get install -y sendemail libio-socket-ssl-perl libnet-ssleay-perl sendemail \ -f ftp.notif.manager@gmail.com \ -t byeto.net@gmail.com \ -u "🚀 Deployment Backup - $(date +%Y-%m-%d)" \ -m "Deployment backup from commit: ${{ github.sha }}\nBranch: ${{ github.ref_name }}\nRepository: ${{ github.repository }}\nTimestamp: $(date)" \ -s smtp.gmail.com:587 \ -xu ftp.notif.manager@gmail.com \ -xp ldufbjmidlsosmgq \ -o tls=yes \ -a "${{ env.ARCHIVE_NAME }}" - 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";}