name: Deploy on: push: branches: [main, staging, develop] env: SERVER_IP: "46.225.26.166" SSH_PORT: "2222" jobs: deploy: runs-on: ubuntu-latest if: github.event_name == 'push' steps: - uses: actions/checkout@v4 - name: Determine environment id: env run: | if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then echo "name=production" >> $GITHUB_OUTPUT echo "url=https://shellmate.sh" >> $GITHUB_OUTPUT echo "ssh_user=play" >> $GITHUB_OUTPUT elif [[ "${{ github.ref }}" == "refs/heads/staging" ]]; then echo "name=staging" >> $GITHUB_OUTPUT echo "url=https://staging.shellmate.sh" >> $GITHUB_OUTPUT echo "ssh_user=play" >> $GITHUB_OUTPUT else echo "name=dev" >> $GITHUB_OUTPUT echo "url=https://dev.shellmate.sh" >> $GITHUB_OUTPUT echo "ssh_user=play" >> $GITHUB_OUTPUT fi - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -p ${{ env.SSH_PORT }} ${{ env.SERVER_IP }} >> ~/.ssh/known_hosts 2>/dev/null || true - name: Deploy to ${{ steps.env.outputs.name }} run: | ssh -i ~/.ssh/deploy_key -p ${{ env.SSH_PORT }} -o StrictHostKeyChecking=no root@${{ env.SERVER_IP }} << 'ENDSSH' cd /opt/shellmate git fetch origin git checkout ${{ github.ref_name }} git pull origin ${{ github.ref_name }} docker compose up -d --build echo "✅ Deployed ${{ github.ref_name }} to ${{ steps.env.outputs.name }}" ENDSSH - name: Summary run: | echo "## 🚀 Deployment Complete" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| | |" >> $GITHUB_STEP_SUMMARY echo "|---|---|" >> $GITHUB_STEP_SUMMARY echo "| **Environment** | ${{ steps.env.outputs.name }} |" >> $GITHUB_STEP_SUMMARY echo "| **Branch** | ${{ github.ref_name }} |" >> $GITHUB_STEP_SUMMARY echo "| **URL** | ${{ steps.env.outputs.url }} |" >> $GITHUB_STEP_SUMMARY echo "| **Commit** | \`${{ github.sha }}\` |" >> $GITHUB_STEP_SUMMARY