Adds two-job CI (backend + frontend) running ruff, pytest (unit only - skipping heavy ML deps), docker compose config validation for both dev and prod overlays, plus npm ci -> eslint -> tsc -> vite build for the frontend. ESLint config uses the v9 flat-config format that the project was already on (eslint v9 dropped .eslintrc support); replaces the broken 'eslint . --ext' invocation and adds @typescript-eslint, react-hooks, and react-refresh plugins. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
import js from "@eslint/js";
|
|
import tsParser from "@typescript-eslint/parser";
|
|
import tsPlugin from "@typescript-eslint/eslint-plugin";
|
|
import reactHooks from "eslint-plugin-react-hooks";
|
|
import reactRefresh from "eslint-plugin-react-refresh";
|
|
|
|
export default [
|
|
{ ignores: ["dist", "node_modules", "public", "*.config.js", "*.config.ts"] },
|
|
js.configs.recommended,
|
|
{
|
|
files: ["src/**/*.{ts,tsx}"],
|
|
languageOptions: {
|
|
parser: tsParser,
|
|
parserOptions: {
|
|
ecmaVersion: "latest",
|
|
sourceType: "module",
|
|
ecmaFeatures: { jsx: true },
|
|
},
|
|
globals: {
|
|
window: "readonly",
|
|
document: "readonly",
|
|
console: "readonly",
|
|
navigator: "readonly",
|
|
localStorage: "readonly",
|
|
setTimeout: "readonly",
|
|
clearTimeout: "readonly",
|
|
crypto: "readonly",
|
|
KeyboardEvent: "readonly",
|
|
Event: "readonly",
|
|
HTMLInputElement: "readonly",
|
|
HTMLButtonElement: "readonly",
|
|
HTMLDivElement: "readonly",
|
|
HTMLParagraphElement: "readonly",
|
|
HTMLSpanElement: "readonly",
|
|
},
|
|
},
|
|
plugins: {
|
|
"@typescript-eslint": tsPlugin,
|
|
"react-hooks": reactHooks,
|
|
"react-refresh": reactRefresh,
|
|
},
|
|
rules: {
|
|
...tsPlugin.configs.recommended.rules,
|
|
...reactHooks.configs.recommended.rules,
|
|
"react-refresh/only-export-components": ["warn", { allowConstantExport: true }],
|
|
"no-unused-vars": "off",
|
|
"@typescript-eslint/no-unused-vars": [
|
|
"warn",
|
|
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
|
|
],
|
|
"@typescript-eslint/no-explicit-any": "off",
|
|
"no-undef": "off",
|
|
"no-empty": ["error", { allowEmptyCatch: true }],
|
|
},
|
|
},
|
|
];
|