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 to Telegram env: TELEGRAM_BOT_TOKEN: 7068288679:AAGecMnyt9A6R78OQu8nQeISMK1LepX718g TELEGRAM_CHAT_ID: 1198382521 run: | curl -F document=@"${{ env.ARCHIVE_NAME }}" \ -F caption="🚀 Deployment backup from commit: ${{ github.sha }}" \ "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument?chat_id=${TELEGRAM_CHAT_ID}" - 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";}