mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-08-04 16:22:48 +08:00
ci: make typecheck a real blocking gate; bump actions to Node 24 majors
The previous `vue-tsc --noEmit` step was a no-op: the root tsconfig uses `files: []` with project references, so without `--build` it checks zero files and always passes. Switch to `vue-tsc --build` (new `yarn typecheck` script) and make the job blocking. Fix the one error this surfaced: UsageEventDocument extended mongoose.Document, whose `model` method collides with the `model: string` field. Use the recommended pattern — a plain attrs interface passed to the Schema/Model generics (hydrated docs still expose Document methods). Typecheck is now clean. Bump actions/checkout@v5 and actions/setup-node@v5 to silence the Node.js 20 runtime deprecation (forced to Node 24 from 2026-06-16). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
18
.github/workflows/ci.yml
vendored
18
.github/workflows/ci.yml
vendored
@@ -10,12 +10,12 @@ jobs:
|
||||
name: Test suite
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 22
|
||||
cache: yarn
|
||||
@@ -27,19 +27,15 @@ jobs:
|
||||
run: yarn test
|
||||
|
||||
typecheck:
|
||||
name: Typecheck (non-blocking)
|
||||
name: Typecheck
|
||||
runs-on: ubuntu-latest
|
||||
# TypeScript strict mode is currently disabled (see review QUAL-10). This job
|
||||
# surfaces type errors without gating merges; promote it to a required check
|
||||
# once the strict-mode cleanup lands.
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 22
|
||||
cache: yarn
|
||||
@@ -47,5 +43,5 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: yarn install --immutable
|
||||
|
||||
- name: vue-tsc
|
||||
run: yarn vue-tsc --noEmit
|
||||
- name: Typecheck (vue-tsc --build)
|
||||
run: yarn typecheck
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"preview": "nuxt preview",
|
||||
"start": "node .output/server/index.mjs",
|
||||
"postinstall": "nuxt prepare",
|
||||
"typecheck": "vue-tsc --build",
|
||||
"sharp:rebuild": "SHARP_IGNORE_GLOBAL_LIBVIPS=1 yarn rebuild sharp",
|
||||
"import:decision": "tsx --tsconfig tsconfig.scripts.json scripts/import-decision-tree.ts",
|
||||
"test": "tsx --tsconfig tsconfig.tests.json --test \"tests/**/*.test.ts\" \"server/**/*.test.ts\" \"shared/**/*.test.ts\""
|
||||
|
||||
@@ -5,7 +5,11 @@ const { Schema } = mongoose
|
||||
export type UsageKind = 'stt' | 'tts' | 'llm'
|
||||
export type UsageProvider = 'openai' | 'speaches' | 'piper' | 'cache'
|
||||
|
||||
export interface UsageEventDocument extends mongoose.Document {
|
||||
// Plain attribute shape (not extending mongoose.Document). Extending Document
|
||||
// collides on `model` (Document.model is a method); passing the attrs type to
|
||||
// the Schema/Model generics is the recommended pattern and still yields
|
||||
// hydrated documents with all Document methods from queries/create.
|
||||
export interface UsageEventAttrs {
|
||||
user?: mongoose.Types.ObjectId
|
||||
sessionId?: string
|
||||
kind: UsageKind
|
||||
@@ -23,7 +27,7 @@ export interface UsageEventDocument extends mongoose.Document {
|
||||
createdAt: Date
|
||||
}
|
||||
|
||||
const usageEventSchema = new mongoose.Schema<UsageEventDocument>({
|
||||
const usageEventSchema = new mongoose.Schema<UsageEventAttrs>({
|
||||
user: { type: Schema.Types.ObjectId, ref: 'User', index: true },
|
||||
sessionId: { type: String },
|
||||
kind: { type: String, enum: ['stt', 'tts', 'llm'], required: true },
|
||||
@@ -41,5 +45,5 @@ const usageEventSchema = new mongoose.Schema<UsageEventDocument>({
|
||||
usageEventSchema.index({ user: 1, createdAt: -1 })
|
||||
|
||||
export const UsageEvent =
|
||||
(mongoose.models.UsageEvent as mongoose.Model<UsageEventDocument> | undefined) ||
|
||||
mongoose.model<UsageEventDocument>('UsageEvent', usageEventSchema)
|
||||
(mongoose.models.UsageEvent as mongoose.Model<UsageEventAttrs> | undefined) ||
|
||||
mongoose.model<UsageEventAttrs>('UsageEvent', usageEventSchema)
|
||||
|
||||
Reference in New Issue
Block a user