Skip to content

Commit ac76281

Browse files
release: merge develop into main for v1.0.0
Includes plugin system, cache + incremental build, UI/docs updates, CI/CD workflows, E2E harness, and expanded test coverage.
2 parents 354c8da + ccd1172 commit ac76281

188 files changed

Lines changed: 27166 additions & 4995 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintignore

Lines changed: 0 additions & 7 deletions
This file was deleted.

.github/dependabot.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "npm"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
day: "monday"
8+
open-pull-requests-limit: 5
9+
labels:
10+
- "dependencies"
11+
- "automated"
12+
commit-message:
13+
prefix: "chore"
14+
include: "scope"
15+
groups:
16+
dev-dependencies:
17+
dependency-type: "development"
18+
production-dependencies:
19+
dependency-type: "production"
20+
21+
- package-ecosystem: "github-actions"
22+
directory: "/"
23+
schedule:
24+
interval: "weekly"
25+
labels:
26+
- "github-actions"
27+
- "automated"
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: Deploy to Production
2+
3+
on:
4+
push:
5+
branches: [main]
6+
workflow_dispatch:
7+
8+
env:
9+
NODE_VERSION: '20'
10+
11+
jobs:
12+
deploy-production:
13+
name: Deploy to Production
14+
runs-on: ubuntu-latest
15+
environment:
16+
name: production
17+
url: ${{ steps.deploy.outputs.deploy-url }}
18+
steps:
19+
- uses: actions/checkout@v6
20+
with:
21+
fetch-depth: 0
22+
- name: Setup Node.js
23+
uses: actions/setup-node@v6
24+
with:
25+
node-version: ${{ env.NODE_VERSION }}
26+
cache: 'npm'
27+
- name: Install dependencies
28+
run: npm ci
29+
- name: Build docs site
30+
run: npm run docs:build
31+
- name: Verify Netlify credentials
32+
env:
33+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
34+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
35+
run: |
36+
code=$(curl -s -o /dev/null -w "%{http_code}" \
37+
-H "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \
38+
"https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID")
39+
echo "Netlify API status: $code"
40+
test "$code" = "200"
41+
- name: Deploy to Netlify (Production)
42+
id: deploy
43+
uses: nwtgck/actions-netlify@v3.0
44+
with:
45+
publish-dir: './docs-dist'
46+
production-deploy: true
47+
github-token: ${{ secrets.GITHUB_TOKEN }}
48+
deploy-message: "Production deployment"
49+
env:
50+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
51+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
52+
- name: Run smoke tests
53+
run: |
54+
sleep 30
55+
curl -f "${{ steps.deploy.outputs.deploy-url }}" || exit 1

.github/workflows/cd-staging.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Deploy to Staging
2+
3+
on:
4+
push:
5+
branches: [develop]
6+
7+
env:
8+
NODE_VERSION: '20'
9+
10+
jobs:
11+
deploy-staging:
12+
name: Deploy to Staging
13+
runs-on: ubuntu-latest
14+
environment:
15+
name: staging
16+
url: ${{ steps.deploy.outputs.deploy-url }}
17+
steps:
18+
- uses: actions/checkout@v6
19+
- name: Setup Node.js
20+
uses: actions/setup-node@v6
21+
with:
22+
node-version: ${{ env.NODE_VERSION }}
23+
cache: 'npm'
24+
- name: Install dependencies
25+
run: npm ci
26+
- name: Build docs site
27+
run: npm run docs:build
28+
- name: Verify Netlify credentials
29+
env:
30+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
31+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
32+
run: |
33+
code=$(curl -s -o /dev/null -w "%{http_code}" \
34+
-H "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \
35+
"https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID")
36+
echo "Netlify API status: $code"
37+
test "$code" = "200"
38+
- name: Deploy to Netlify (Staging)
39+
id: deploy
40+
uses: nwtgck/actions-netlify@v3.0
41+
with:
42+
publish-dir: './docs-dist'
43+
production-deploy: false
44+
github-token: ${{ secrets.GITHUB_TOKEN }}
45+
deploy-message: "Staging deployment from develop"
46+
alias: staging
47+
env:
48+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
49+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
50+
- name: Run smoke tests
51+
run: |
52+
sleep 10
53+
curl -f "${{ steps.deploy.outputs.deploy-url }}" || exit 1

.github/workflows/ci.yml

Lines changed: 102 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,119 @@ name: CI
22

33
on:
44
push:
5-
branches: ["main"]
5+
branches: [main, develop]
66
pull_request:
7-
types: [opened, synchronize]
7+
branches: [main, develop]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
env:
14+
NODE_VERSION: '20'
815

916
jobs:
10-
build:
11-
name: Build and Test
12-
timeout-minutes: 15
17+
lint:
18+
name: Lint
1319
runs-on: ubuntu-latest
14-
20+
timeout-minutes: 5
1521
steps:
16-
- name: Check out code
17-
uses: actions/checkout@v4
22+
- uses: actions/checkout@v6
23+
- name: Setup Node.js
24+
uses: actions/setup-node@v6
1825
with:
19-
fetch-depth: 2
26+
node-version: ${{ env.NODE_VERSION }}
27+
cache: 'npm'
28+
- name: Install dependencies
29+
run: npm ci
30+
- name: Run ESLint
31+
run: npm run lint -- -- --max-warnings=0
2032

21-
- name: Setup Node.js environment
22-
uses: actions/setup-node@v4
33+
typecheck:
34+
name: Type Check
35+
runs-on: ubuntu-latest
36+
timeout-minutes: 5
37+
steps:
38+
- uses: actions/checkout@v6
39+
- name: Setup Node.js
40+
uses: actions/setup-node@v6
2341
with:
24-
node-version: 20
42+
node-version: ${{ env.NODE_VERSION }}
2543
cache: 'npm'
26-
2744
- name: Install dependencies
2845
run: npm ci
46+
- name: Type check
47+
run: npm run type-check
2948

30-
- name: Build
31-
run: npx turbo build
49+
format:
50+
name: Format Check
51+
runs-on: ubuntu-latest
52+
timeout-minutes: 5
53+
steps:
54+
- uses: actions/checkout@v6
55+
- name: Setup Node.js
56+
uses: actions/setup-node@v6
57+
with:
58+
node-version: ${{ env.NODE_VERSION }}
59+
cache: 'npm'
60+
- name: Install dependencies
61+
run: npm ci
62+
- name: Format check
63+
run: npm run format:check
3264

33-
- name: Lint
34-
run: npx turbo lint
65+
build-and-test:
66+
name: Build & Test (Node ${{ matrix.node-version }})
67+
runs-on: ubuntu-latest
68+
needs: [lint, typecheck, format]
69+
timeout-minutes: 20
70+
strategy:
71+
matrix:
72+
node-version: [18, 20, 22]
73+
steps:
74+
- uses: actions/checkout@v6
75+
with:
76+
fetch-depth: 0
77+
- name: Setup Node.js
78+
uses: actions/setup-node@v6
79+
with:
80+
node-version: ${{ matrix.node-version }}
81+
cache: 'npm'
82+
- name: Install dependencies
83+
run: npm ci
84+
- name: Build packages
85+
run: npm run build
86+
- name: Run tests with coverage
87+
run: npm run test -- -- --coverage --maxWorkers=2
88+
- name: Build docs site
89+
run: npm run docs:build
90+
- name: Upload coverage to Codecov
91+
if: matrix.node-version == 20
92+
uses: codecov/codecov-action@v5
93+
with:
94+
token: ${{ secrets.CODECOV_TOKEN }}
95+
files: ./coverage/coverage-final.json
96+
flags: unittests
97+
fail_ci_if_error: false
98+
- name: Upload docs artifact
99+
if: matrix.node-version == 20
100+
uses: actions/upload-artifact@v6
101+
with:
102+
name: docs-dist
103+
path: docs-dist
104+
retention-days: 7
35105

36-
- name: Test
37-
run: npx turbo test
106+
ci-success:
107+
name: CI Success
108+
runs-on: ubuntu-latest
109+
needs: [lint, typecheck, format, build-and-test]
110+
if: always()
111+
steps:
112+
- name: Check all jobs
113+
run: |
114+
if [[ "${{ needs.lint.result }}" != "success" ]] || \
115+
[[ "${{ needs.typecheck.result }}" != "success" ]] || \
116+
[[ "${{ needs.format.result }}" != "success" ]] || \
117+
[[ "${{ needs.build-and-test.result }}" != "success" ]]; then
118+
echo "One or more jobs failed"
119+
exit 1
120+
fi

.github/workflows/e2e.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: E2E Tests
2+
3+
on:
4+
push:
5+
branches: [main, develop]
6+
schedule:
7+
- cron: '0 2 * * *'
8+
9+
jobs:
10+
e2e-main:
11+
if: github.event_name == 'push'
12+
name: E2E (chromium)
13+
runs-on: ubuntu-latest
14+
timeout-minutes: 30
15+
steps:
16+
- uses: actions/checkout@v6
17+
- name: Setup Node.js
18+
uses: actions/setup-node@v6
19+
with:
20+
node-version: 20
21+
cache: 'npm'
22+
- name: Install dependencies
23+
run: npm ci
24+
- name: Install Playwright Browsers
25+
run: npx playwright install --with-deps chromium
26+
- name: Build packages
27+
run: npm run build
28+
- name: Run E2E tests
29+
run: npx playwright test --project=chromium
30+
- name: Upload report
31+
if: always()
32+
uses: actions/upload-artifact@v6
33+
with:
34+
name: playwright-report-chromium
35+
path: playwright-report/
36+
retention-days: 7
37+
38+
e2e-nightly:
39+
if: github.event_name == 'schedule'
40+
name: E2E (${{ matrix.browser }})
41+
runs-on: ubuntu-latest
42+
timeout-minutes: 45
43+
strategy:
44+
matrix:
45+
browser: [chromium, firefox, webkit]
46+
steps:
47+
- uses: actions/checkout@v6
48+
- name: Setup Node.js
49+
uses: actions/setup-node@v6
50+
with:
51+
node-version: 20
52+
cache: 'npm'
53+
- name: Install dependencies
54+
run: npm ci
55+
- name: Install Playwright Browsers
56+
run: npx playwright install --with-deps ${{ matrix.browser }}
57+
- name: Build packages
58+
run: npm run build
59+
- name: Run E2E tests
60+
run: npx playwright test --project=${{ matrix.browser }}
61+
- name: Upload report
62+
if: always()
63+
uses: actions/upload-artifact@v6
64+
with:
65+
name: playwright-report-${{ matrix.browser }}
66+
path: playwright-report/
67+
retention-days: 7

0 commit comments

Comments
 (0)