Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
a56f89e
refactor: migrate project to pnpm and update related scripts and docu…
Producdevity May 12, 2026
f7f8409
test: remove redundant AuthHelpers utility from tests/helpers
Producdevity May 12, 2026
fa27df1
refactor: update README text
Producdevity May 12, 2026
22f4760
refactor: replace execSync with spawnSync for component addition and …
Producdevity May 12, 2026
eac7fbd
refactor: improve notification system accessibility and structure
Producdevity May 12, 2026
52617db
refactor: update CI workflows to support staging branch and enhance j…
Producdevity May 12, 2026
f733995
refactor: improve CI workflows with database migrations and optimize …
Producdevity May 13, 2026
0706159
refactor: README removing redundant package version information
Producdevity May 13, 2026
5347452
fix: update mock implementations to match expected shape
Producdevity May 13, 2026
fcee190
tests: extend external service mocks to return transparent PNG images…
Producdevity May 13, 2026
bb4d988
refactor: remove unnecessary database seeding and system dependency i…
Producdevity May 13, 2026
e861d0b
refactor: update environment configuration
Producdevity May 13, 2026
9fd6664
refactor: update test reporter configuration for CI environment
Producdevity May 13, 2026
6b4d222
refactor: make notification dropdown role name case-insensitive
Producdevity May 13, 2026
5166f9a
refactor: update next.config.ts for package transpilation and caching…
Producdevity May 13, 2026
96887bf
refactor: update package.json for type generation and dependency upgr…
Producdevity May 13, 2026
a0117be
refactor: adjust image sizes for responsive design in AppPhoneMockup
Producdevity May 13, 2026
5f1a25a
refactor: NotificationService tests with additional mocks and context
Producdevity May 13, 2026
078941e
refactor: remove unnecessary comment from next.config.ts
Producdevity May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
.pnpm-store/

# Prisma generated files (regenerated in Docker)
prisma/generated/
Expand Down
17 changes: 8 additions & 9 deletions .env.docker.example
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ NEXT_PUBLIC_GA_ID="your_google_analytics_id_here"
# Public app configuration
NEXT_PUBLIC_LOCAL_STORAGE_PREFIX="@DockerEmuReady_"
NEXT_PUBLIC_EMUREADY_BETA_URL="https://play.google.com/store/apps/details?id=com.producdevity.emureadyapp"
NEXT_PUBLIC_VERCEL_ANALYTICS_ENABLED=falseNEXT_PUBLIC_VERCEL_ANALYTICS_ENABLED=false
NEXT_PUBLIC_VERCEL_ANALYTICS_ENABLED=false
NEXT_PUBLIC_DISCORD_LINK="https://discord.gg/CYhCzApXav"
NEXT_PUBLIC_PATREON_LINK="https://www.patreon.com/Producdevity"
NEXT_PUBLIC_KOFI_LINK="https://ko-fi.com/producdevity"
Expand All @@ -75,6 +75,13 @@ NEXT_PUBLIC_ENABLE_SW=false
NEXT_PUBLIC_IS_BETA=false
NEXT_PUBLIC_ENABLE_ASYNC_LISTINGS_FILTERS=false
NEXT_PUBLIC_ENABLE_V2_LISTINGS=false
NEXT_TELEMETRY_DISABLED=1
NEXT_IMAGE_UNOPTIMIZED=false

# Android Downloads (feature flag + public endpoints)
NEXT_PUBLIC_ENABLE_ANDROID_DOWNLOADS=true
NEXT_PUBLIC_ANDROID_LATEST_JSON_URL="https://cdn.emuready.com/xxx/xxx/xxx.json"
NEXT_PUBLIC_ANDROID_LATEST_APK_URL="https://cdn.emuready.com/xxx/xxx/xxx-latest.apk"

# ===========================================
# DEVELOPMENT CONFIGURATION
Expand All @@ -85,9 +92,6 @@ NODE_ENV="development"
# Enable Prisma debug logging (optional)
PRISMA_DEBUG="false"

# Disable Next.js telemetry
NEXT_TELEMETRY_DISABLED=1

# ===========================================
# CORS CONFIGURATION (Optional)
# ===========================================
Expand All @@ -103,11 +107,6 @@ NEXT_TELEMETRY_DISABLED=1
# Example for local development with ngrok or cloudflared:
# NEXT_PUBLIC_ALLOWED_ORIGINS="https://your-tunnel.trycloudflare.com"

# Android Downloads (feature flag + public endpoints)
NEXT_PUBLIC_ENABLE_ANDROID_DOWNLOADS=true
NEXT_PUBLIC_ANDROID_LATEST_JSON_URL="https://cdn.emuready.com/xxx/xxx/xxx.json"
NEXT_PUBLIC_ANDROID_LATEST_APK_URL="https://cdn.emuready.com/xxx/xxx/xxx-latest.apk"

# Internal API + App URL (used by release script and admin upload)
APP_URL="http://localhost:3000"
INTERNAL_API_KEY="dev-internal-api-key"
Expand Down
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ NEXT_PUBLIC_ENABLE_PATREON_VERIFICATION=true
NEXT_PUBLIC_ENABLE_ASYNC_LISTINGS_FILTERS=false
NEXT_PUBLIC_ENABLE_V2_LISTINGS=false
NEXT_TELEMETRY_DISABLED=1
NEXT_IMAGE_UNOPTIMIZED=false

# Android Downloads (feature flag + public endpoints)
NEXT_PUBLIC_ENABLE_ANDROID_DOWNLOADS=true
Expand Down
3 changes: 2 additions & 1 deletion .env.test.example
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ NEXT_PUBLIC_APP_URL="https://dev.emuready.com"
NEXT_PUBLIC_ENABLE_PATREON_VERIFICATION=true
NEXT_PUBLIC_ENABLE_SW=false
NEXT_PUBLIC_IS_BETA=false
NEXT_TELEMETRY_DISABLED=1
NEXT_PUBLIC_DISABLE_COOKIE_BANNER=true
NEXT_PUBLIC_ENABLE_ASYNC_LISTINGS_FILTERS=false
NEXT_PUBLIC_ENABLE_V2_LISTINGS=false
NEXT_TELEMETRY_DISABLED=1
NEXT_IMAGE_UNOPTIMIZED=true

# CORS Configuration (Optional)
# These origins are ALWAYS allowed by default:
Expand Down
180 changes: 137 additions & 43 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,42 @@ name: CI

on:
pull_request:
branches: [master]
push:
branches: [master]
branches: [master, staging]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/emuready_test"
DATABASE_DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/emuready_test"
NODE_ENV: "test"
CI: "true"
NEXT_TELEMETRY_DISABLED: "1"
CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }}
CLERK_WEBHOOK_SECRET: ${{ secrets.CLERK_WEBHOOK_SECRET }}
IGDB_CLIENT_KEY: ${{ secrets.IGDB_CLIENT_KEY }}
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: ${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }}
NEXT_PUBLIC_GA_ID: ${{ secrets.NEXT_PUBLIC_GA_ID }}
NEXT_PUBLIC_IGDB_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_IGDB_CLIENT_ID }}
NEXT_PUBLIC_LOCAL_STORAGE_PREFIX: ${{ secrets.NEXT_PUBLIC_LOCAL_STORAGE_PREFIX }}
RAWG_API_KEY: ${{ secrets.RAWG_API_KEY }}
THE_GAMES_DB_API_KEY: ${{ secrets.THE_GAMES_DB_API_KEY }}
NEXT_PUBLIC_DISABLE_COOKIE_BANNER: "true"
NEXT_PUBLIC_APP_URL: "http://localhost:3000"
NEXT_PUBLIC_DISCORD_LINK: "https://discord.gg/test"
EMAIL_ENABLED: "false"

jobs:
build-test:
quality:
name: Lint and type-check
runs-on: ubuntu-latest
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
timeout-minutes: 20
services:
postgres:
image: postgres:15
Expand All @@ -20,63 +46,131 @@ jobs:
POSTGRES_USER: postgres
POSTGRES_DB: emuready_test
options: >-
--health-cmd pg_isready
--health-cmd "pg_isready -U postgres -d emuready_test"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432

env:
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/emuready_test"
DATABASE_DIRECT_URL: "postgresql://postgres:postgres@localhost:5432/emuready_test"
NODE_ENV: "test"
CI: "true"
NEXT_TELEMETRY_DISABLED: "1"
CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }}
CLERK_WEBHOOK_SECRET: ${{ secrets.CLERK_WEBHOOK_SECRET }}
IGDB_CLIENT_KEY: ${{ secrets.IGDB_CLIENT_KEY }}
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: ${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }}
NEXT_PUBLIC_GA_ID: ${{ secrets.NEXT_PUBLIC_GA_ID }}
NEXT_PUBLIC_IGDB_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_IGDB_CLIENT_ID }}
NEXT_PUBLIC_LOCAL_STORAGE_PREFIX: ${{ secrets.NEXT_PUBLIC_LOCAL_STORAGE_PREFIX }}
RAWG_API_KEY: ${{ secrets.RAWG_API_KEY }}
THE_GAMES_DB_API_KEY: ${{ secrets.THE_GAMES_DB_API_KEY }}
NEXT_PUBLIC_DISABLE_COOKIE_BANNER: "true"
NEXT_PUBLIC_APP_URL: "http://localhost:3000"
NEXT_PUBLIC_DISCORD_LINK: "https://discord.gg/test"
EMAIL_ENABLED: "false"

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22.16.0
cache: npm
node-version-file: .nvmrc
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Clean build cache
run: npm run clean
- name: Run database migrations
run: pnpm exec prisma migrate deploy

- name: Generate Prisma client
run: npx prisma generate
run: pnpm db:generate

- name: Run database migrations
run: npx prisma migrate deploy
- name: Lint
run: pnpm lint

- name: Seed test database
run: npx prisma db seed
- name: Type-check
run: pnpm types

- name: Lint & type-check
run: npm run check
unit-tests:
name: Unit tests
runs-on: ubuntu-latest
timeout-minutes: 20
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: emuready_test
options: >-
--health-cmd "pg_isready -U postgres -d emuready_test"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run database migrations
run: pnpm exec prisma migrate deploy

- name: Generate Prisma client
run: pnpm db:generate

- name: Unit tests
run: npm run test:ci
run: pnpm test:ci

build:
name: Production build
runs-on: ubuntu-latest
timeout-minutes: 30
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: emuready_test
options: >-
--health-cmd "pg_isready -U postgres -d emuready_test"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Clean build cache
run: pnpm clean

- name: Run database migrations
run: pnpm exec prisma migrate deploy

- name: Generate Prisma client
run: pnpm db:generate

- name: Build
run: npm run build
run: pnpm build
Loading
Loading