Add webhook listener and deployment scripts with E2E testing #21
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD Workflow --> Deploy and Run E2E Tests | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| release: | |
| types: [created] | |
| jobs: | |
| deploy: | |
| name: Deploy to Vercel | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v3 | |
| - name: Install Vercel CLI | |
| run: npm install --global vercel@latest | |
| - name: Pull Vercel Environment Information | |
| run: | | |
| if [[ "${{ github.event_name }}" == "release" ]]; then | |
| vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| else | |
| vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| fi | |
| - name: Build Project Artifacts | |
| run: | | |
| if [[ "${{ github.event_name }}" == "release" ]]; then | |
| vercel build --prod --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| else | |
| vercel build --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| fi | |
| - name: Deploy to Vercel | |
| id: deploy | |
| run: | | |
| if [[ "${{ github.event_name }}" == "release" ]]; then | |
| DEPLOY_URL=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | tail -1) | |
| else | |
| DEPLOY_URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | tail -1) | |
| fi | |
| echo "DEPLOYMENT_URL=${DEPLOY_URL}" >> $GITHUB_ENV | |
| echo "Deployed to: $DEPLOY_URL" | |
| env: | |
| VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} | |
| e2e: | |
| name: Run E2E Tests | |
| runs-on: ubuntu-latest | |
| needs: deploy | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v3 | |
| - name: Install pnpm | |
| run: npm install -g pnpm | |
| - name: Install Dependencies | |
| run: pnpm install | |
| - name: Install Playwright | |
| run: pnpm playwright install | |
| - name: Run Playwright Tests | |
| run: pnpm playwright test | |
| env: | |
| BASE_URL: ${{ env.DEPLOYMENT_URL }} | |
| #notify: | |
| # name: Notify Team on Failure | |
| # runs-on: ubuntu-latest | |
| # needs: e2e | |
| # if: failure() | |
| # steps: | |
| # - name: Send Slack Notification | |
| # uses: slackapi/[email protected] | |
| # with: | |
| # payload: | | |
| # { | |
| # "text": "🚨 Production deployment failed! Check logs: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
| # } | |
| # env: | |
| # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} | |
| # rollback: | |
| # name: Rollback on Failure | |
| # runs-on: ubuntu-latest | |
| # needs: e2e | |
| # if: failure() | |
| # steps: | |
| # - name: Checkout Code | |
| # uses: actions/checkout@v3 | |
| # - name: Install Vercel CLI | |
| # run: npm install --global vercel@latest | |
| # - name: Authenticate Vercel CLI | |
| # run: vercel login --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| # - name: Get Last Successful Production Deployment | |
| # id: get_last_deployment | |
| # run: | | |
| # echo "Fetching last successful production deployment..." | |
| # LAST_DEPLOYMENT=$(vercel list --prod --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | grep -Eo 'https://[a-zA-Z0-9.-]+\.vercel\.app' | tail -1) | |
| # if [[ -z "$LAST_DEPLOYMENT" ]]; then | |
| # echo "❌ No previous successful deployment found! Rollback failed." | |
| # exit 1 | |
| # fi | |
| # echo "✅ Last successful deployment found: $LAST_DEPLOYMENT" | |
| # echo "LAST_DEPLOYMENT=$LAST_DEPLOYMENT" >> $GITHUB_ENV | |
| # - name: Rollback to Last Working Deployment | |
| # run: | | |
| # echo "Rolling back to: $LAST_DEPLOYMENT" | |
| # vercel promote $LAST_DEPLOYMENT --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | |
| # echo "✅ Rollback successful! Restored $LAST_DEPLOYMENT" |