Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: "🐛 Bug Report"
about: Report a bug or rendering defect in LeadForge OS to help us improve.
title: "bug: [Short description of the bug]"
labels: bug, triage
assignees: ""
---

**Describe the Bug**
A clear and concise description of what the bug is.

**Steps to Reproduce**
Steps to reproduce the behavior:
1. Go to '[...]'
2. Click on '[...]'
3. See error

**Expected Behavior**
A clear and concise description of what you expected to happen.

**Screenshots / Console Logs**
If applicable, add screenshots or paste developer tools console logs here to help explain the problem.

**Environment Details (please complete the following information):**
- OS: [e.g., Windows 11, macOS, Linux]
- Desktop App Version: [e.g., v1.0.0-beta.2]
- Node.js/pnpm Version: [e.g., Node 22, pnpm 9]
- SQLite Database integrity status (if known): [e.g., healthy, corrupted]

**Additional Context**
Add any other context about the problem here (e.g. SMTP connection status, specific LLM settings).
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: "🚀 Feature Request"
about: Suggest an idea, enhancement, or new workflow screen for LeadForge OS.
title: "feat: [Short description of the proposed feature]"
labels: enhancement, discussion
assignees: ""
---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. E.g., "I find it frustrating when I try to do [...]"

**Describe the Solution You'd Like**
A clear and concise description of what you want to happen. Explain how the proposed feature fits into the current Forge Design System (no rounded corners, high blur overlays, primary accent colors).

**Describe Alternatives You've Considered**
A clear and concise description of any alternative solutions or workarounds you've considered.

**Mockups / Wireframes**
If applicable, include screenshots or sketches of the proposed UI modifications.

**Additional Context**
Add any other context or screenshots about the feature request here.
27 changes: 27 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## Description
Provide a brief summary of the changes made and the motivation behind them.

## Related Issues
Closes #[issue-number] (if applicable)

## Type of Change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Refactor (code organization, no user-facing visual modifications)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update

## Verification Checklist

### Automated Validation
- [ ] `pnpm run check-types` passes successfully with 0 errors.
- [ ] `pnpm run lint` matches standards.
- [ ] `pnpm run format` (Prettier checks) runs clean.

### Visual Verification (for UI/UX edits)
- [ ] Design follows the Forge Design System specifications (`rounded-none`, primary orange accent, semantic badges).
- [ ] Staggered entrance and transitions execute smoothly.
- [ ] Slide-out Sheets contain necessary conditional rendering guards (no null-pointer crashes on closed states).

## Screenshots / Video Demonstrations
Include visual proof of the changes in action (especially for CSS/UI refactoring).
52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Continuous Integration

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

jobs:
validate:
name: Verify Code Quality & Type Safety
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Get pnpm store directory
shell: bash
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- name: Setup Cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

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

- name: Run Linter Checks
run: pnpm run lint

- name: Run Type Safety Checks
run: pnpm run check-types
49 changes: 49 additions & 0 deletions .github/workflows/dependency-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Security & Dependency Scan

on:
schedule:
- cron: '0 0 * * 0' # Every Sunday at midnight UTC
workflow_dispatch: # On-demand trigger

permissions:
actions: read
contents: read
security-events: write

jobs:
audit:
name: Node Vulnerability Audit
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Run Package Vulnerability Audit
run: pnpm audit --audit-level=high

codeql:
name: CodeQL Semantic Analysis
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: javascript-typescript

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
42 changes: 42 additions & 0 deletions .github/workflows/release-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Release Sync

on:
workflow_run:
workflows: ["Release"]
types:
- completed

permissions:
contents: write

jobs:
sync:
name: Sync Release Notes to Marketing
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}

steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Run Releases Compilation
run: node scripts/generate-releases.mjs

- name: Commit and Push Changes
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add apps/marketing/lib/generated-releases.ts
if ! git diff --cached --quiet; then
git commit -m "docs: auto-sync github release list to marketing website"
git push origin main
else
echo "No changes in generated-releases.ts to commit."
fi
50 changes: 50 additions & 0 deletions .github/workflows/sqlite-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: SQLite Schema Check

on:
pull_request:
paths:
- 'apps/desktop/src/main/database/**'
- 'scripts/verify-migrations.ts'
- '.github/workflows/sqlite-check.yml'

permissions:
contents: read

jobs:
verify:
name: Verify Migrations Integrity
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Get pnpm store directory
shell: bash
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- name: Setup Cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

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

- name: Verify Migrations Run Cleanly
run: pnpm --filter @leadforge/desktop exec npx tsx ../../scripts/verify-migrations.ts
14 changes: 14 additions & 0 deletions scripts/verify-migrations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import Database from 'better-sqlite3';
import { runMigrations } from '../apps/desktop/src/main/database/runner';

console.log('[Test] Starting database migrations validation...');
try {
// Run on isolated in-memory SQLite database
const db = new Database(':memory:');
runMigrations(db);
console.log('[Test] Database migrations verification successfully completed with 0 errors! 🎉');
process.exit(0);
} catch (err: any) {
console.error('[Test] Database migrations verification failed:', err.message || err);
process.exit(1);
}
Loading