From 60046e1dee25610f2048e73fe4d82ed3ce1fc03e Mon Sep 17 00:00:00 2001 From: Greg Hendrickson Date: Tue, 27 Jan 2026 21:09:05 +0000 Subject: [PATCH] Fix deploy workflow and create staging/main branches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - develop: auto-deploy to dev.shellmate.sh - staging: auto-deploy to staging.shellmate.sh - main: auto-deploy to production shellmate.sh Proper CI/CD flow: 1. Feature branch → PR to develop → CI tests → merge → deploy dev 2. develop → PR to staging → deploy staging 3. staging → PR to main → deploy production --- .github/workflows/deploy.yml | 76 +++++++++++++++++------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0ee8548..7138727 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,66 +2,62 @@ name: Deploy on: push: - branches: [main, develop, staging] - workflow_dispatch: - inputs: - environment: - description: 'Environment to deploy to' - required: true - default: 'dev' - type: choice - options: - - dev - - staging - - production + branches: [main, staging, develop] + +env: + SERVER_IP: "46.225.26.166" + SSH_PORT: "2222" jobs: deploy: runs-on: ubuntu-latest - needs: [] - environment: - name: ${{ github.ref == 'refs/heads/main' && 'production' || github.ref == 'refs/heads/staging' && 'staging' || 'dev' }} - url: ${{ github.ref == 'refs/heads/main' && 'https://shellmate.sh' || github.ref == 'refs/heads/staging' && 'https://staging.shellmate.sh' || 'https://dev.shellmate.sh' }} + if: github.event_name == 'push' steps: - uses: actions/checkout@v4 - - name: Set environment variables + - name: Determine environment id: env run: | if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - echo "env_name=production" >> $GITHUB_OUTPUT - echo "ssh_host=shellmate.sh" >> $GITHUB_OUTPUT - echo "ssh_port=22" >> $GITHUB_OUTPUT + 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 "env_name=staging" >> $GITHUB_OUTPUT - echo "ssh_host=shellmate.sh" >> $GITHUB_OUTPUT - echo "ssh_port=2223" >> $GITHUB_OUTPUT + echo "name=staging" >> $GITHUB_OUTPUT + echo "url=https://staging.shellmate.sh" >> $GITHUB_OUTPUT + echo "ssh_user=play" >> $GITHUB_OUTPUT else - echo "env_name=dev" >> $GITHUB_OUTPUT - echo "ssh_host=shellmate.sh" >> $GITHUB_OUTPUT - echo "ssh_port=2222" >> $GITHUB_OUTPUT + echo "name=dev" >> $GITHUB_OUTPUT + echo "url=https://dev.shellmate.sh" >> $GITHUB_OUTPUT + echo "ssh_user=play" >> $GITHUB_OUTPUT fi - - name: Deploy to ${{ steps.env.outputs.env_name }} - uses: appleboy/ssh-action@v1.0.3 - with: - host: ${{ steps.env.outputs.ssh_host }} - username: root - key: ${{ secrets.DEPLOY_SSH_KEY }} - port: ${{ steps.env.outputs.ssh_port }} - script: | + - 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.env_name }}" + echo "✅ Deployed ${{ github.ref_name }} to ${{ steps.env.outputs.name }}" + ENDSSH - - name: Deployment summary + - name: Summary run: | - echo "## Deployment Complete 🚀" >> $GITHUB_STEP_SUMMARY + echo "## 🚀 Deployment Complete" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "- **Environment:** ${{ steps.env.outputs.env_name }}" >> $GITHUB_STEP_SUMMARY - echo "- **Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY - echo "- **Commit:** ${{ github.sha }}" >> $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