Skip to content

Commit b887389

Browse files
authored
Merge pull request #178 from thkruz/dev
v1.1.0
2 parents fd94263 + 564c02b commit b887389

323 files changed

Lines changed: 83947 additions & 21762 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.

.env.example

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,13 @@ PUBLIC_USER_API_URL=https://user.keeptrack.space
1919
# Set to R2 custom domain for production (e.g., https://assets.signalrange.space)
2020
# This enables serving large audio files from R2 instead of bundling them
2121
PUBLIC_ASSETS_BASE_URL=
22+
23+
# Developer Menu Whitelist
24+
# Comma-separated list of Supabase user IDs that can access the dev menu
25+
# Example: PUBLIC_DEV_USER_IDS=uuid1,uuid2,uuid3
26+
PUBLIC_DEV_USER_IDS=
27+
28+
# Logging Level
29+
# Controls minimum log level shown in console: LOG, INFO, WARN, ERROR
30+
# Default: LOG (shows everything)
31+
PUBLIC_LOG_LEVEL=LOG

.env.production

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ PUBLIC_USER_API_URL=https://user.keeptrack.space
1818
# Leave empty for local development (uses local files in public/)
1919
# Set to R2 custom domain for production (e.g., https://assets.signalrange.space)
2020
# This enables serving large audio files from R2 instead of bundling them
21-
PUBLIC_ASSETS_BASE_URL=https://assets.signalrange.space
21+
PUBLIC_ASSETS_BASE_URL=https://assets.signalrange.space
22+
23+
PUBLIC_LOG_LEVEL=WARN

.github/actions/setup-node-project/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ inputs:
55
node-version:
66
description: 'Node.js version to use'
77
required: false
8-
default: '18'
8+
default: '22'
99

1010
runs:
1111
using: 'composite'

.github/pull_request_template.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## Description
2+
<!-- Describe your changes -->
3+
4+
## Testing
5+
6+
- [ ] Unit tests pass (`npm test`)
7+
- [ ] E2E tests pass locally (`npm run test:e2e`)

.github/workflows/build-pipeline.yml

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@ name: Build Pipeline
33

44
on:
55
workflow_dispatch:
6+
push:
7+
branches:
8+
- main
9+
- develop
10+
paths-ignore:
11+
- '**.md'
12+
- 'docs/**'
13+
- 'LICENSE'
614
pull_request:
715
branches:
816
- main
@@ -93,7 +101,8 @@ jobs:
93101
timezoneLinux: 'America/New_York'
94102

95103
- name: Run Tests with Coverage
96-
run: npm test -- --coverage --coverageReporters=text --coverageReporters=lcov --coverageReporters=json-summary
104+
run: npm test -- --coverage --coverage.reporter=text --coverage.reporter=lcov
105+
--coverage.reporter=json-summary --coverage.reporter=json
97106

98107
- name: Upload Coverage Artifact
99108
uses: actions/upload-artifact@v4
@@ -121,6 +130,47 @@ jobs:
121130
echo "Line coverage: ${COVERAGE}%" >> $GITHUB_STEP_SUMMARY
122131
fi
123132
133+
e2e-tests:
134+
name: E2E Tests
135+
needs: [lint, type-check, test, security-audit]
136+
if: >-
137+
(github.event_name == 'pull_request' &&
138+
contains(github.event.pull_request.labels.*.name, 'run-e2e')) ||
139+
github.event_name == 'workflow_dispatch'
140+
runs-on: ubuntu-latest
141+
steps:
142+
- name: Checkout Code
143+
uses: actions/checkout@v4
144+
with:
145+
submodules: recursive
146+
147+
- name: Setup Node Project
148+
uses: ./.github/actions/setup-node-project
149+
150+
- name: Install Playwright Browsers
151+
run: npx playwright install --with-deps chromium
152+
153+
- name: Run E2E Tests
154+
id: e2e
155+
run: npm run test:e2e
156+
157+
- name: Upload Playwright Report
158+
if: always()
159+
uses: actions/upload-artifact@v4
160+
with:
161+
name: playwright-report
162+
path: playwright-report/
163+
retention-days: 7
164+
165+
- name: E2E Test Summary
166+
if: always()
167+
run: |
168+
echo "### E2E Test Results" >> $GITHUB_STEP_SUMMARY
169+
echo "- Status: ${{ steps.e2e.outcome }}" >> $GITHUB_STEP_SUMMARY
170+
if [ -d playwright-report ]; then
171+
echo "E2E tests completed. See artifact for details." >> $GITHUB_STEP_SUMMARY
172+
fi
173+
124174
security-audit:
125175
name: Security Audit
126176
runs-on: ubuntu-latest
@@ -213,16 +263,16 @@ jobs:
213263
uses: actions/checkout@v4
214264

215265
- name: Initialize CodeQL
216-
uses: github/codeql-action/init@v3
266+
uses: github/codeql-action/init@v4
217267
with:
218268
languages: javascript-typescript
219269
queries: security-extended
220270

221271
- name: Autobuild
222-
uses: github/codeql-action/autobuild@v3
272+
uses: github/codeql-action/autobuild@v4
223273

224274
- name: Perform CodeQL Analysis
225-
uses: github/codeql-action/analyze@v3
275+
uses: github/codeql-action/analyze@v4
226276
with:
227277
category: '/language:javascript-typescript'
228278

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
name: E2E Attestation
3+
4+
on:
5+
pull_request:
6+
types: [opened, synchronize, reopened, edited]
7+
branches:
8+
- main
9+
- develop
10+
11+
permissions:
12+
contents: read
13+
pull-requests: read
14+
15+
jobs:
16+
e2e-attestation:
17+
name: E2E Attestation
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Check E2E Attestation
21+
uses: actions/github-script@v7
22+
with:
23+
script: |
24+
const body = context.payload.pull_request.body || '';
25+
const pattern = /- \[x\]\s+E2E tests pass locally/i;
26+
27+
if (!pattern.test(body)) {
28+
core.setFailed(
29+
'E2E attestation required: Please check the box in the PR description ' +
30+
'confirming you have run E2E tests locally and they pass.\n\n' +
31+
'Add this to your PR description:\n' +
32+
'- [x] E2E tests pass locally (`npm run test:e2e`)'
33+
);
34+
return;
35+
}
36+
37+
core.info('E2E attestation confirmed.');
38+
39+
await core.summary
40+
.addHeading('E2E Attestation', 3)
41+
.addRaw('Developer has attested that E2E tests were run locally and pass.')
42+
.write();

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ yarn-error.log*
3030
coverage/
3131
.nyc_output/
3232

33+
# Playwright
34+
/test-results/
35+
/playwright-report/
36+
/blob-report/
37+
/playwright/.cache/
38+
3339
# Temporary files
3440
tmp/
3541
temp/
@@ -38,6 +44,7 @@ supabase/
3844
# Notes
3945
*.notes.*
4046
notes
47+
.archive
4148

4249
# Unused Icons
4350
src/assets/icons/wip

.vscode/settings.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@
3535
},
3636
"github.copilot.chat.commitMessageGeneration.instructions": [
3737
{
38-
"text": "Format: <type>: :emoji: <description>"
38+
"text": "Format: <type>(<scope>): :emoji: <description>"
39+
},
40+
{
41+
"text": "<scope> is optional and can be omitted if not needed"
3942
},
4043
{
4144
"text": "ALWAYS include the emoji - this is required"

CLAUDE.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,35 @@ new Satellite(
151151
- Example: Uplink at 5943 MHz with `frequencyOffset: 2.225e9` → Downlink at 3718 MHz
152152
- **Don't duplicate**: If a signal is in the uplink array, the transponder creates the downlink automatically. Don't add it to both arrays.
153153

154+
## TypeScript Type Checking
155+
156+
**Always use the npm script to check for TypeScript errors:**
157+
158+
```bash
159+
npm run type-check
160+
```
161+
162+
**Do NOT run tsc directly on individual files:**
163+
164+
```bash
165+
# WRONG - will fail with module resolution errors
166+
npx tsc --noEmit src/campaigns/nats/scenario5.ts
167+
```
168+
169+
This project uses `@app/*` path aliases (e.g., `@app/types`, `@app/equipment/...`) that require the full tsconfig.json configuration. Running tsc on individual files bypasses this and produces false "Cannot find module" errors.
170+
171+
## Git Commits
172+
173+
- Do NOT add `Co-Authored-By` lines to commit messages
174+
- Use conventional commit format: `type(scope): description`
175+
- Use emoji in commit titles for clarity:
176+
- Example: feat: :sparkles: Add new frequency adjustment control
177+
-`:sparkles:` for new features
178+
- 🐛 `:bug:` for bug fixes
179+
- ♻️ `:recycle:` for refactoring
180+
- 📝 `:memo:` for documentation changes
181+
- Common types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`
182+
154183
## Planning
155184

156185
When you use Plan Mode or create multi-step plans in this repo:

babel.config.cjs

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

0 commit comments

Comments
 (0)