/ .github / workflows / rsr-antipattern.yml
rsr-antipattern.yml
 1  # RSR Anti-Pattern CI Check
 2  # SPDX-License-Identifier: AGPL-3.0-or-later
 3  #
 4  # Enforces: No TypeScript, No Go, No Python (except SaltStack), No npm
 5  # Allows: ReScript, Deno, WASM, Rust, OCaml, Haskell, Guile/Scheme
 6  
 7  name: RSR Anti-Pattern Check
 8  
 9  on:
10    push:
11      branches: [main, master, develop]
12    pull_request:
13      branches: [main, master, develop]
14  
15  jobs:
16    antipattern-check:
17      runs-on: ubuntu-latest
18      steps:
19        - uses: actions/checkout@v6.0.1
20  
21        - name: Check for TypeScript
22          run: |
23            if find . -name "*.ts" -o -name "*.tsx" | grep -v node_modules | grep -q .; then
24              echo "❌ TypeScript files detected - use ReScript instead"
25              find . -name "*.ts" -o -name "*.tsx" | grep -v node_modules
26              exit 1
27            fi
28            echo "✅ No TypeScript files"
29  
30        - name: Check for Go
31          run: |
32            if find . -name "*.go" | grep -q .; then
33              echo "❌ Go files detected - use Rust/WASM instead"
34              find . -name "*.go"
35              exit 1
36            fi
37            echo "✅ No Go files"
38  
39        - name: Check for Python (non-SaltStack)
40          run: |
41            PY_FILES=$(find . -name "*.py" | grep -v salt | grep -v _states | grep -v _modules | grep -v pillar | grep -v venv | grep -v __pycache__ || true)
42            if [ -n "$PY_FILES" ]; then
43              echo "❌ Python files detected - only allowed for SaltStack"
44              echo "$PY_FILES"
45              exit 1
46            fi
47            echo "✅ No non-SaltStack Python files"
48  
49        - name: Check for npm lockfiles
50          run: |
51            if [ -f "package-lock.json" ] || [ -f "yarn.lock" ]; then
52              echo "❌ npm/yarn lockfile detected - use Deno instead"
53              exit 1
54            fi
55            echo "✅ No npm lockfiles"
56  
57        - name: Check for tsconfig
58          run: |
59            if [ -f "tsconfig.json" ]; then
60              echo "❌ tsconfig.json detected - use ReScript instead"
61              exit 1
62            fi
63            echo "✅ No tsconfig.json"
64  
65        - name: Verify Deno presence (if package.json exists)
66          run: |
67            if [ -f "package.json" ]; then
68              if [ ! -f "deno.json" ] && [ ! -f "deno.jsonc" ]; then
69                echo "⚠️ Warning: package.json without deno.json - migration recommended"
70              fi
71            fi
72            echo "✅ Deno configuration check complete"
73  
74        - name: Summary
75          run: |
76            echo "╔════════════════════════════════════════════════════════════╗"
77            echo "║           RSR Anti-Pattern Check Passed ✅                 ║"
78            echo "║                                                            ║"
79            echo "║  Allowed: ReScript, Deno, WASM, Rust, OCaml, Haskell,     ║"
80            echo "║           Guile/Scheme, SaltStack (Python)                 ║"
81            echo "║                                                            ║"
82            echo "║  Blocked: TypeScript, Go, npm, Python (non-Salt)          ║"
83            echo "╚════════════════════════════════════════════════════════════╝"