diff --git a/.env.example b/.env.example index 885736b..6e40ab8 100644 --- a/.env.example +++ b/.env.example @@ -15,6 +15,7 @@ STRIPE_SECRET_KEY=stripe-secret-key # Testing Server URL NEXT_PUBLIC_TEST_URL=testing-server-url +BASE_URL = http://127.0.0.1:3000 # Admin User Credentials (Must exist in the real database) NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com diff --git a/.env.local.example b/.env.local.example index 885736b..6e40ab8 100644 --- a/.env.local.example +++ b/.env.local.example @@ -15,6 +15,7 @@ STRIPE_SECRET_KEY=stripe-secret-key # Testing Server URL NEXT_PUBLIC_TEST_URL=testing-server-url +BASE_URL = http://127.0.0.1:3000 # Admin User Credentials (Must exist in the real database) NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92be309..b2f9136 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,8 +13,9 @@ jobs: with: node-version: lts/* - - name: Caching + - name: Ci caching uses: actions/cache@v4 + id: ci-cache with: path: | ~/.npm @@ -22,23 +23,8 @@ jobs: key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} restore-keys: | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- - - - name: Set environment variables - run: | - echo NEXT_PUBLIC_AUTH_GOOGLE_ID=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_ID }} >> $GITHUB_ENV - echo NEXT_PUBLIC_AUTH_GOOGLE_SECRET=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_SECRET }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_EMAIL=${{ secrets.NEXT_PUBLIC_DUMMY_EMAIL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_PASSWORD=${{ secrets.NEXT_PUBLIC_DUMMY_PASSWORD }} >> $GITHUB_ENV - echo NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_PUBLIC_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL_SOURCE=${{ secrets.NEXT_PUBLIC_SUPABASE_URL_SOURCE }} >> $GITHUB_ENV - echo NEXT_PUBLIC_TEST_URL=${{ secrets.NEXT_PUBLIC_TEST_URL }} >> $GITHUB_ENV - echo PROJECT_ID=${{ secrets.PROJECT_ID }} >> $GITHUB_ENV - echo STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }} >> $GITHUB_ENV - - - name: Install dependencies - run: npm ci + - run: npm ci + if: steps.ci-cache.outputs.cache-hit != 'true' - name: Run build run: npm run build --if-present diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 8adbb3a..597bc59 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -13,8 +13,9 @@ jobs: with: node-version: lts/* - - name: Caching + - name: Ci caching uses: actions/cache@v4 + id: ci-cache with: path: | ~/.npm @@ -22,23 +23,8 @@ jobs: key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} restore-keys: | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- - - - name: Set environment variables - run: | - echo NEXT_PUBLIC_AUTH_GOOGLE_ID=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_ID }} >> $GITHUB_ENV - echo NEXT_PUBLIC_AUTH_GOOGLE_SECRET=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_SECRET }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_EMAIL=${{ secrets.NEXT_PUBLIC_DUMMY_EMAIL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_PASSWORD=${{ secrets.NEXT_PUBLIC_DUMMY_PASSWORD }} >> $GITHUB_ENV - echo NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_PUBLIC_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL_SOURCE=${{ secrets.NEXT_PUBLIC_SUPABASE_URL_SOURCE }} >> $GITHUB_ENV - echo NEXT_PUBLIC_TEST_URL=${{ secrets.NEXT_PUBLIC_TEST_URL }} >> $GITHUB_ENV - echo PROJECT_ID=${{ secrets.PROJECT_ID }} >> $GITHUB_ENV - echo STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }} >> $GITHUB_ENV - - - name: Install dependencies - run: npm ci + - run: npm ci + if: steps.ci-cache.outputs.cache-hit != 'true' - name: Run eslint run: npm run lint \ No newline at end of file diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 994662f..ab2f184 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -13,8 +13,9 @@ jobs: with: node-version: lts/* - - name: Caching + - name: Ci caching uses: actions/cache@v4 + id: ci-cache with: path: | ~/.npm @@ -22,29 +23,23 @@ jobs: key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} restore-keys: | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- + - run: npm ci + if: steps.ci-cache.outputs.cache-hit != 'true' - - name: Set environment variables - run: | - echo NEXT_PUBLIC_AUTH_GOOGLE_ID=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_ID }} >> $GITHUB_ENV - echo NEXT_PUBLIC_AUTH_GOOGLE_SECRET=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_SECRET }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_EMAIL=${{ secrets.NEXT_PUBLIC_DUMMY_EMAIL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_DUMMY_PASSWORD=${{ secrets.NEXT_PUBLIC_DUMMY_PASSWORD }} >> $GITHUB_ENV - echo NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_PUBLIC_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} >> $GITHUB_ENV - echo NEXT_PUBLIC_SUPABASE_URL_SOURCE=${{ secrets.NEXT_PUBLIC_SUPABASE_URL_SOURCE }} >> $GITHUB_ENV - echo NEXT_PUBLIC_TEST_URL=${{ secrets.NEXT_PUBLIC_TEST_URL }} >> $GITHUB_ENV - echo PROJECT_ID=${{ secrets.PROJECT_ID }} >> $GITHUB_ENV - echo STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }} >> $GITHUB_ENV + - name: Cache playwright binaries + uses: actions/cache@v4 + id: playwright-cache + with: + path: | + ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} + - run: npx playwright install --with-deps + if: steps.playwright-cache.outputs.cache-hit != 'true' + - run: npx playwright install-deps + if: steps.playwright-cache.outputs.cache-hit != 'true' - - name: Install dependencies - run: npm ci - - - name: Install Playwright Browsers - run: npx playwright install --with-deps - - - name: Run Playwright tests with 4 workers - run: npx playwright test --workers=4 + - name: Run Playwright tests + run: npx playwright test - uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} diff --git a/src/components/loading/loader.tsx b/src/components/loading/loader.tsx index 408d164..608447b 100644 --- a/src/components/loading/loader.tsx +++ b/src/components/loading/loader.tsx @@ -1,6 +1,9 @@ "use client"; -import Lottie from "react-lottie"; +import dynamic from "next/dynamic"; + +// Dynamically import Lottie to prevent SSR issues +const Lottie = dynamic(() => import("react-lottie"), { ssr: false }); import * as loadingData from "./loading.json"; const loadingOption = { diff --git a/test_util/global-setup.ts b/test_util/global-setup.ts index 01ee2ff..c9679fa 100644 --- a/test_util/global-setup.ts +++ b/test_util/global-setup.ts @@ -1,6 +1,7 @@ import { firefox, FullConfig } from '@playwright/test'; async function globalSetup(config: FullConfig) { + const { baseURL, storageState } = config.projects[0].use; console.log('globalizing...'); const email = process.env.NEXT_PUBLIC_TEST_USER_EMAIL; const password = process.env.NEXT_PUBLIC_TEST_USER_PASSWORD; @@ -13,12 +14,13 @@ async function globalSetup(config: FullConfig) { const page = await browser.newPage(); console.log('signing up user...'); - await page.goto(config.projects[0].use.baseURL + '/auth/signup'); + await page.goto(baseURL + '/auth/signup'); await page.fill('id=email', email); await page.fill('id=password', password); await page.fill('id=confirmPassword', password); await page.click('id=signup') - + + await page.context().storageState({ path: storageState as string }); await browser.close(); }