Workflow cache update

This commit is contained in:
Nantawat Sukrisunt 2024-11-12 12:46:46 +07:00
parent f705fa6d4a
commit abd616a6f4
7 changed files with 35 additions and 61 deletions

View File

@ -15,6 +15,7 @@ STRIPE_SECRET_KEY=stripe-secret-key
# Testing Server URL # Testing Server URL
NEXT_PUBLIC_TEST_URL=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) # Admin User Credentials (Must exist in the real database)
NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com

View File

@ -15,6 +15,7 @@ STRIPE_SECRET_KEY=stripe-secret-key
# Testing Server URL # Testing Server URL
NEXT_PUBLIC_TEST_URL=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) # Admin User Credentials (Must exist in the real database)
NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com NEXT_PUBLIC_ADMIN_EMAIL=admin@example.com

View File

@ -13,8 +13,9 @@ jobs:
with: with:
node-version: lts/* node-version: lts/*
- name: Caching - name: Ci caching
uses: actions/cache@v4 uses: actions/cache@v4
id: ci-cache
with: with:
path: | path: |
~/.npm ~/.npm
@ -22,23 +23,8 @@ jobs:
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
restore-keys: | restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
- run: npm ci
- name: Set environment variables if: steps.ci-cache.outputs.cache-hit != 'true'
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
- name: Run build - name: Run build
run: npm run build --if-present run: npm run build --if-present

View File

@ -13,8 +13,9 @@ jobs:
with: with:
node-version: lts/* node-version: lts/*
- name: Caching - name: Ci caching
uses: actions/cache@v4 uses: actions/cache@v4
id: ci-cache
with: with:
path: | path: |
~/.npm ~/.npm
@ -22,23 +23,8 @@ jobs:
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
restore-keys: | restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
- run: npm ci
- name: Set environment variables if: steps.ci-cache.outputs.cache-hit != 'true'
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
- name: Run eslint - name: Run eslint
run: npm run lint run: npm run lint

View File

@ -13,8 +13,9 @@ jobs:
with: with:
node-version: lts/* node-version: lts/*
- name: Caching - name: Ci caching
uses: actions/cache@v4 uses: actions/cache@v4
id: ci-cache
with: with:
path: | path: |
~/.npm ~/.npm
@ -22,29 +23,23 @@ jobs:
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
restore-keys: | restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
- run: npm ci
if: steps.ci-cache.outputs.cache-hit != 'true'
- name: Set environment variables - name: Cache playwright binaries
run: | uses: actions/cache@v4
echo NEXT_PUBLIC_AUTH_GOOGLE_ID=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_ID }} >> $GITHUB_ENV id: playwright-cache
echo NEXT_PUBLIC_AUTH_GOOGLE_SECRET=${{ secrets.NEXT_PUBLIC_AUTH_GOOGLE_SECRET }} >> $GITHUB_ENV with:
echo NEXT_PUBLIC_DUMMY_EMAIL=${{ secrets.NEXT_PUBLIC_DUMMY_EMAIL }} >> $GITHUB_ENV path: |
echo NEXT_PUBLIC_DUMMY_PASSWORD=${{ secrets.NEXT_PUBLIC_DUMMY_PASSWORD }} >> $GITHUB_ENV ~/.cache/ms-playwright
echo NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_PUBLIC_KEY }} >> $GITHUB_ENV key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
echo NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} >> $GITHUB_ENV - run: npx playwright install --with-deps
echo NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} >> $GITHUB_ENV if: steps.playwright-cache.outputs.cache-hit != 'true'
echo NEXT_PUBLIC_SUPABASE_URL_SOURCE=${{ secrets.NEXT_PUBLIC_SUPABASE_URL_SOURCE }} >> $GITHUB_ENV - run: npx playwright install-deps
echo NEXT_PUBLIC_TEST_URL=${{ secrets.NEXT_PUBLIC_TEST_URL }} >> $GITHUB_ENV if: steps.playwright-cache.outputs.cache-hit != 'true'
echo PROJECT_ID=${{ secrets.PROJECT_ID }} >> $GITHUB_ENV
echo STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }} >> $GITHUB_ENV
- name: Install dependencies - name: Run Playwright tests
run: npm ci run: npx playwright test
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests with 4 workers
run: npx playwright test --workers=4
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
if: ${{ !cancelled() }} if: ${{ !cancelled() }}

View File

@ -1,6 +1,9 @@
"use client"; "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"; import * as loadingData from "./loading.json";
const loadingOption = { const loadingOption = {

View File

@ -1,6 +1,7 @@
import { firefox, FullConfig } from '@playwright/test'; import { firefox, FullConfig } from '@playwright/test';
async function globalSetup(config: FullConfig) { async function globalSetup(config: FullConfig) {
const { baseURL, storageState } = config.projects[0].use;
console.log('globalizing...'); console.log('globalizing...');
const email = process.env.NEXT_PUBLIC_TEST_USER_EMAIL; const email = process.env.NEXT_PUBLIC_TEST_USER_EMAIL;
const password = process.env.NEXT_PUBLIC_TEST_USER_PASSWORD; const password = process.env.NEXT_PUBLIC_TEST_USER_PASSWORD;
@ -13,12 +14,13 @@ async function globalSetup(config: FullConfig) {
const page = await browser.newPage(); const page = await browser.newPage();
console.log('signing up user...'); 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=email', email);
await page.fill('id=password', password); await page.fill('id=password', password);
await page.fill('id=confirmPassword', password); await page.fill('id=confirmPassword', password);
await page.click('id=signup') await page.click('id=signup')
await page.context().storageState({ path: storageState as string });
await browser.close(); await browser.close();
} }