diff --git a/.github/workflows/e2e-without-release.yml b/.github/workflows/e2e-without-release.yml new file mode 100644 index 0000000..da82b71 --- /dev/null +++ b/.github/workflows/e2e-without-release.yml @@ -0,0 +1,88 @@ +name: CI/CD Workflow --> Deploy and Run E2E Tests + +on: + pull_request: + push: + branches: + - main + +jobs: + deploy-staging: + name: Deploy to Vercel Staging + 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: | + vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} + + - name: Build Project Artifacts + run: | + vercel build --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} + + - name: Deploy to Staging + id: deploy + run: | + DEPLOY_URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} | tail -1) + echo "DEPLOYMENT_URL=${DEPLOY_URL}" >> $GITHUB_ENV + echo "Deployed to: $DEPLOY_URL" + + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + + e2e-tests: + name: Run E2E Tests on Staging + runs-on: ubuntu-latest + needs: deploy-staging + + 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 }} + + deploy-prod: + name: Deploy to Vercel Production + runs-on: ubuntu-latest + needs: e2e-tests + if: github.ref == 'refs/heads/main' + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Install Vercel CLI + run: npm install --global vercel@latest + + - name: Pull Vercel Environment Information + run: | + vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} + + - name: Build Project Artifacts + run: | + vercel build --prod --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} + + - name: Deploy to Production + run: | + vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN_MY_PROJECT }} + + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 572fdb9..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,125 +0,0 @@ -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/slack-github-action@v1.24.0 - # 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" diff --git a/src/app/form/page.tsx b/src/app/form/page.tsx index ab6cf0e..20c067f 100644 --- a/src/app/form/page.tsx +++ b/src/app/form/page.tsx @@ -1,85 +1,16 @@ -// 'use client'; - -// import { useState } from 'react'; - -// export default function Form() { -// const [name, setName] = useState(''); -// const [email, setEmail] = useState(''); -// const [message, setMessage] = useState(''); -// const [loading, setLoading] = useState(false); -// const [error, setError] = useState(''); - -// const handleSubmit = async (e: React.FormEvent) => { -// e.preventDefault(); -// setLoading(true); -// setMessage(''); -// setError(''); - -// try { -// const res = await fetch('/api/submit', { -// method: 'POST', -// headers: { 'Content-Type': 'application/json' }, -// body: JSON.stringify({ name, email }), -// }); - -// if (!res.ok) throw new Error('Failed to submit'); -// const data = await res.json(); -// setMessage(data.message); -// } catch { -// setError('Submission failed. Please try again.'); -// } finally { -// setLoading(false); -// } -// }; - -// const handleReset = () => { -// setName(''); -// setEmail(''); -// setMessage(''); -// setError(''); -// }; - -// return ( -//
{message}
} -// {error &&{error}
} -//{error}
-{message}
+{message}