.github/workflows/test-cli-options.yml 27.1 K raw
1
name: Test CLI Options
2
3
on:
4
  push:
5
    branches: [main]
6
  pull_request:
7
    branches: [main]
8
9
jobs:
10
  test-cli-options:
11
    runs-on: ubuntu-latest
12
13
    strategy:
14
      fail-fast: false
15
      matrix:
16
        include:
17
          # Default template combinations
18
          - template: "default"
19
            rpc: true
20
            tanstackQuery: false
21
            router: "none"
22
            linter: "eslint"
23
            test_name: "Default + RPC + No TanStack Query + No Router + ESLint"
24
          - template: "default"
25
            rpc: true
26
            tanstackQuery: false
27
            router: "none"
28
            linter: "biome"
29
            test_name: "Default + RPC + No TanStack Query + No Router + Biome"
30
          - template: "default"
31
            rpc: false
32
            tanstackQuery: false
33
            router: "none"
34
            linter: "eslint"
35
            test_name: "Default + No RPC + No TanStack Query + No Router + ESLint"
36
          - template: "default"
37
            rpc: false
38
            tanstackQuery: false
39
            router: "none"
40
            linter: "biome"
41
            test_name: "Default + No RPC + No TanStack Query + No Router + Biome"
42
          - template: "default"
43
            rpc: true
44
            tanstackQuery: true
45
            router: "none"
46
            linter: "eslint"
47
            test_name: "Default + RPC + TanStack Query + No Router + ESLint"
48
          - template: "default"
49
            rpc: true
50
            tanstackQuery: true
51
            router: "none"
52
            linter: "biome"
53
            test_name: "Default + RPC + TanStack Query + No Router + Biome"
54
          - template: "default"
55
            rpc: false
56
            tanstackQuery: true
57
            router: "none"
58
            linter: "eslint"
59
            test_name: "Default + No RPC + TanStack Query + No Router + ESLint"
60
          - template: "default"
61
            rpc: false
62
            tanstackQuery: true
63
            router: "none"
64
            linter: "biome"
65
            test_name: "Default + No RPC + TanStack Query + No Router + Biome"
66
67
          # Tailwind template combinations
68
          - template: "tailwind"
69
            rpc: true
70
            tanstackQuery: false
71
            router: "none"
72
            linter: "eslint"
73
            test_name: "Tailwind + RPC + No TanStack Query + No Router + ESLint"
74
          - template: "tailwind"
75
            rpc: true
76
            tanstackQuery: false
77
            router: "none"
78
            linter: "biome"
79
            test_name: "Tailwind + RPC + No TanStack Query + No Router + Biome"
80
          - template: "tailwind"
81
            rpc: false
82
            tanstackQuery: false
83
            router: "none"
84
            linter: "eslint"
85
            test_name: "Tailwind + No RPC + No TanStack Query + No Router + ESLint"
86
          - template: "tailwind"
87
            rpc: false
88
            tanstackQuery: false
89
            router: "none"
90
            linter: "biome"
91
            test_name: "Tailwind + No RPC + No TanStack Query + No Router + Biome"
92
          - template: "tailwind"
93
            rpc: true
94
            tanstackQuery: true
95
            router: "none"
96
            linter: "eslint"
97
            test_name: "Tailwind + RPC + TanStack Query + No Router + ESLint"
98
          - template: "tailwind"
99
            rpc: true
100
            tanstackQuery: true
101
            router: "none"
102
            linter: "biome"
103
            test_name: "Tailwind + RPC + TanStack Query + No Router + Biome"
104
          - template: "tailwind"
105
            rpc: false
106
            tanstackQuery: true
107
            router: "none"
108
            linter: "eslint"
109
            test_name: "Tailwind + No RPC + TanStack Query + No Router + ESLint"
110
          - template: "tailwind"
111
            rpc: false
112
            tanstackQuery: true
113
            router: "none"
114
            linter: "biome"
115
            test_name: "Tailwind + No RPC + TanStack Query + No Router + Biome"
116
117
          # Shadcn template combinations
118
          - template: "shadcn"
119
            rpc: true
120
            tanstackQuery: false
121
            router: "none"
122
            linter: "eslint"
123
            test_name: "Shadcn + RPC + No TanStack Query + No Router + ESLint"
124
          - template: "shadcn"
125
            rpc: true
126
            tanstackQuery: false
127
            router: "none"
128
            linter: "biome"
129
            test_name: "Shadcn + RPC + No TanStack Query + No Router + Biome"
130
          - template: "shadcn"
131
            rpc: false
132
            tanstackQuery: false
133
            router: "none"
134
            linter: "eslint"
135
            test_name: "Shadcn + No RPC + No TanStack Query + No Router + ESLint"
136
          - template: "shadcn"
137
            rpc: false
138
            tanstackQuery: false
139
            router: "none"
140
            linter: "biome"
141
            test_name: "Shadcn + No RPC + No TanStack Query + No Router + Biome"
142
          - template: "shadcn"
143
            rpc: true
144
            tanstackQuery: true
145
            router: "none"
146
            linter: "eslint"
147
            test_name: "Shadcn + RPC + TanStack Query + No Router + ESLint"
148
          - template: "shadcn"
149
            rpc: true
150
            tanstackQuery: true
151
            router: "none"
152
            linter: "biome"
153
            test_name: "Shadcn + RPC + TanStack Query + No Router + Biome"
154
          - template: "shadcn"
155
            rpc: false
156
            tanstackQuery: true
157
            router: "none"
158
            linter: "eslint"
159
            test_name: "Shadcn + No RPC + TanStack Query + No Router + ESLint"
160
          - template: "shadcn"
161
            rpc: false
162
            tanstackQuery: true
163
            router: "none"
164
            linter: "biome"
165
            test_name: "Shadcn + No RPC + TanStack Query + No Router + Biome"
166
167
          # React Router
168
          # Default template combinations
169
          - template: "default"
170
            rpc: true
171
            tanstackQuery: false
172
            router: "reactrouter"
173
            linter: "eslint"
174
            test_name: "Default + RPC + No TanStack Query + React Router + ESLint"
175
          - template: "default"
176
            rpc: true
177
            tanstackQuery: false
178
            router: "reactrouter"
179
            linter: "biome"
180
            test_name: "Default + RPC + No TanStack Query + React Router + Biome"
181
          - template: "default"
182
            rpc: false
183
            tanstackQuery: false
184
            router: "reactrouter"
185
            linter: "eslint"
186
            test_name: "Default + No RPC + No TanStack Query + React Router + ESLint"
187
          - template: "default"
188
            rpc: false
189
            tanstackQuery: false
190
            router: "reactrouter"
191
            linter: "biome"
192
            test_name: "Default + No RPC + No TanStack Query + React Router + Biome"
193
          - template: "default"
194
            rpc: true
195
            tanstackQuery: true
196
            router: "reactrouter"
197
            linter: "eslint"
198
            test_name: "Default + RPC + TanStack Query + React Router + ESLint"
199
          - template: "default"
200
            rpc: true
201
            tanstackQuery: true
202
            router: "reactrouter"
203
            linter: "biome"
204
            test_name: "Default + RPC + TanStack Query + React Router + Biome"
205
          - template: "default"
206
            rpc: false
207
            tanstackQuery: true
208
            router: "reactrouter"
209
            linter: "eslint"
210
            test_name: "Default + No RPC + TanStack Query + React Router + ESLint"
211
          - template: "default"
212
            rpc: false
213
            tanstackQuery: true
214
            router: "reactrouter"
215
            linter: "biome"
216
            test_name: "Default + No RPC + TanStack Query + React Router + Biome"
217
218
          # Tailwind template combinations
219
          - template: "tailwind"
220
            rpc: true
221
            tanstackQuery: false
222
            router: "reactrouter"
223
            linter: "eslint"
224
            test_name: "Tailwind + RPC + No TanStack Query + React Router + ESLint"
225
          - template: "tailwind"
226
            rpc: true
227
            tanstackQuery: false
228
            router: "reactrouter"
229
            linter: "biome"
230
            test_name: "Tailwind + RPC + No TanStack Query + React Router + Biome"
231
          - template: "tailwind"
232
            rpc: false
233
            tanstackQuery: false
234
            router: "reactrouter"
235
            linter: "eslint"
236
            test_name: "Tailwind + No RPC + No TanStack Query + React Router + ESLint"
237
          - template: "tailwind"
238
            rpc: false
239
            tanstackQuery: false
240
            router: "reactrouter"
241
            linter: "biome"
242
            test_name: "Tailwind + No RPC + No TanStack Query + React Router + Biome"
243
          - template: "tailwind"
244
            rpc: true
245
            tanstackQuery: true
246
            router: "reactrouter"
247
            linter: "eslint"
248
            test_name: "Tailwind + RPC + TanStack Query + React Router + ESLint"
249
          - template: "tailwind"
250
            rpc: true
251
            tanstackQuery: true
252
            router: "reactrouter"
253
            linter: "biome"
254
            test_name: "Tailwind + RPC + TanStack Query + React Router + Biome"
255
          - template: "tailwind"
256
            rpc: false
257
            tanstackQuery: true
258
            router: "reactrouter"
259
            linter: "eslint"
260
            test_name: "Tailwind + No RPC + TanStack Query + React Router + ESLint"
261
          - template: "tailwind"
262
            rpc: false
263
            tanstackQuery: true
264
            router: "reactrouter"
265
            linter: "biome"
266
            test_name: "Tailwind + No RPC + TanStack Query + React Router + Biome"
267
268
          # Shadcn template combinations
269
          - template: "shadcn"
270
            rpc: true
271
            tanstackQuery: false
272
            router: "reactrouter"
273
            linter: "eslint"
274
            test_name: "Shadcn + RPC + No TanStack Query + React Router + ESLint"
275
          - template: "shadcn"
276
            rpc: true
277
            tanstackQuery: false
278
            router: "reactrouter"
279
            linter: "biome"
280
            test_name: "Shadcn + RPC + No TanStack Query + React Router + Biome"
281
          - template: "shadcn"
282
            rpc: false
283
            tanstackQuery: false
284
            router: "reactrouter"
285
            linter: "eslint"
286
            test_name: "Shadcn + No RPC + No TanStack Query + React Router + ESLint"
287
          - template: "shadcn"
288
            rpc: false
289
            tanstackQuery: false
290
            router: "reactrouter"
291
            linter: "biome"
292
            test_name: "Shadcn + No RPC + No TanStack Query + React Router + Biome"
293
          - template: "shadcn"
294
            rpc: true
295
            tanstackQuery: true
296
            router: "reactrouter"
297
            linter: "eslint"
298
            test_name: "Shadcn + RPC + TanStack Query + React Router + ESLint"
299
          - template: "shadcn"
300
            rpc: true
301
            tanstackQuery: true
302
            router: "reactrouter"
303
            linter: "biome"
304
            test_name: "Shadcn + RPC + TanStack Query + React Router + Biome"
305
          - template: "shadcn"
306
            rpc: false
307
            tanstackQuery: true
308
            router: "reactrouter"
309
            linter: "eslint"
310
            test_name: "Shadcn + No RPC + TanStack Query + React Router + ESLint"
311
          - template: "shadcn"
312
            rpc: false
313
            tanstackQuery: true
314
            router: "reactrouter"
315
            linter: "biome"
316
            test_name: "Shadcn + No RPC + TanStack Query + React Router + Biome"
317
318
          # React Router MPA
319
          # Default template combinations
320
          - template: "default"
321
            rpc: true
322
            tanstackQuery: false
323
            router: "reactroutermpa"
324
            linter: "eslint"
325
            test_name: "Default + RPC + No TanStack Query + React Router MPA + ESLint"
326
          - template: "default"
327
            rpc: true
328
            tanstackQuery: false
329
            router: "reactroutermpa"
330
            linter: "biome"
331
            test_name: "Default + RPC + No TanStack Query + React Router MPA + Biome"
332
          - template: "default"
333
            rpc: false
334
            tanstackQuery: false
335
            router: "reactroutermpa"
336
            linter: "eslint"
337
            test_name: "Default + No RPC + No TanStack Query + React Router MPA + ESLint"
338
          - template: "default"
339
            rpc: false
340
            tanstackQuery: false
341
            router: "reactroutermpa"
342
            linter: "biome"
343
            test_name: "Default + No RPC + No TanStack Query + React Router MPA + Biome"
344
          - template: "default"
345
            rpc: true
346
            tanstackQuery: true
347
            router: "reactroutermpa"
348
            linter: "eslint"
349
            test_name: "Default + RPC + TanStack Query + React Router MPA + ESLint"
350
          - template: "default"
351
            rpc: true
352
            tanstackQuery: true
353
            router: "reactroutermpa"
354
            linter: "biome"
355
            test_name: "Default + RPC + TanStack Query + React Router MPA + Biome"
356
          - template: "default"
357
            rpc: false
358
            tanstackQuery: true
359
            router: "reactroutermpa"
360
            linter: "eslint"
361
            test_name: "Default + No RPC + TanStack Query + React Router MPA + ESLint"
362
          - template: "default"
363
            rpc: false
364
            tanstackQuery: true
365
            router: "reactroutermpa"
366
            linter: "biome"
367
            test_name: "Default + No RPC + TanStack Query + React Router MPA + Biome"
368
369
          # Tailwind template combinations
370
          - template: "tailwind"
371
            rpc: true
372
            tanstackQuery: false
373
            router: "reactroutermpa"
374
            linter: "eslint"
375
            test_name: "Tailwind + RPC + No TanStack Query + React Router MPA + ESLint"
376
          - template: "tailwind"
377
            rpc: true
378
            tanstackQuery: false
379
            router: "reactroutermpa"
380
            linter: "biome"
381
            test_name: "Tailwind + RPC + No TanStack Query + React Router MPA + Biome"
382
          - template: "tailwind"
383
            rpc: false
384
            tanstackQuery: false
385
            router: "reactroutermpa"
386
            linter: "eslint"
387
            test_name: "Tailwind + No RPC + No TanStack Query + React Router MPA + ESLint"
388
          - template: "tailwind"
389
            rpc: false
390
            tanstackQuery: false
391
            router: "reactroutermpa"
392
            linter: "biome"
393
            test_name: "Tailwind + No RPC + No TanStack Query + React Router MPA + Biome"
394
          - template: "tailwind"
395
            rpc: true
396
            tanstackQuery: true
397
            router: "reactroutermpa"
398
            linter: "eslint"
399
            test_name: "Tailwind + RPC + TanStack Query + React Router MPA + ESLint"
400
          - template: "tailwind"
401
            rpc: true
402
            tanstackQuery: true
403
            router: "reactroutermpa"
404
            linter: "biome"
405
            test_name: "Tailwind + RPC + TanStack Query + React Router MPA + Biome"
406
          - template: "tailwind"
407
            rpc: false
408
            tanstackQuery: true
409
            router: "reactroutermpa"
410
            linter: "eslint"
411
            test_name: "Tailwind + No RPC + TanStack Query + React Router MPA + ESLint"
412
          - template: "tailwind"
413
            rpc: false
414
            tanstackQuery: true
415
            router: "reactroutermpa"
416
            linter: "biome"
417
            test_name: "Tailwind + No RPC + TanStack Query + React Router MPA + Biome"
418
419
          # Shadcn template combinations
420
          - template: "shadcn"
421
            rpc: true
422
            tanstackQuery: false
423
            router: "reactroutermpa"
424
            linter: "eslint"
425
            test_name: "Shadcn + RPC + No TanStack Query + React Router MPA + ESLint"
426
          - template: "shadcn"
427
            rpc: true
428
            tanstackQuery: false
429
            router: "reactroutermpa"
430
            linter: "biome"
431
            test_name: "Shadcn + RPC + No TanStack Query + React Router MPA + Biome"
432
          - template: "shadcn"
433
            rpc: false
434
            tanstackQuery: false
435
            router: "reactroutermpa"
436
            linter: "eslint"
437
            test_name: "Shadcn + No RPC + No TanStack Query + React Router MPA + ESLint"
438
          - template: "shadcn"
439
            rpc: false
440
            tanstackQuery: false
441
            router: "reactroutermpa"
442
            linter: "biome"
443
            test_name: "Shadcn + No RPC + No TanStack Query + React Router MPA + Biome"
444
          - template: "shadcn"
445
            rpc: true
446
            tanstackQuery: true
447
            router: "reactroutermpa"
448
            linter: "eslint"
449
            test_name: "Shadcn + RPC + TanStack Query + React Router MPA + ESLint"
450
          - template: "shadcn"
451
            rpc: true
452
            tanstackQuery: true
453
            router: "reactroutermpa"
454
            linter: "biome"
455
            test_name: "Shadcn + RPC + TanStack Query + React Router MPA + Biome"
456
          - template: "shadcn"
457
            rpc: false
458
            tanstackQuery: true
459
            router: "reactroutermpa"
460
            linter: "eslint"
461
            test_name: "Shadcn + No RPC + TanStack Query + React Router MPA + ESLint"
462
          - template: "shadcn"
463
            rpc: false
464
            tanstackQuery: true
465
            router: "reactroutermpa"
466
            linter: "biome"
467
            test_name: "Shadcn + No RPC + TanStack Query + React Router MPA + Biome"
468
469
          # TanStack Router
470
          # Default template combinations
471
          - template: "default"
472
            rpc: true
473
            tanstackQuery: false
474
            router: "tanstackrouter"
475
            linter: "eslint"
476
            test_name: "Default + RPC + No TanStack Query + TanStack Router + ESLint"
477
          - template: "default"
478
            rpc: true
479
            tanstackQuery: false
480
            router: "tanstackrouter"
481
            linter: "biome"
482
            test_name: "Default + RPC + No TanStack Query + TanStack Router + Biome"
483
          - template: "default"
484
            rpc: false
485
            tanstackQuery: false
486
            router: "tanstackrouter"
487
            linter: "eslint"
488
            test_name: "Default + No RPC + No TanStack Query + TanStack Router + ESLint"
489
          - template: "default"
490
            rpc: false
491
            tanstackQuery: false
492
            router: "tanstackrouter"
493
            linter: "biome"
494
            test_name: "Default + No RPC + No TanStack Query + TanStack Router + Biome"
495
          - template: "default"
496
            rpc: true
497
            tanstackQuery: true
498
            router: "tanstackrouter"
499
            linter: "eslint"
500
            test_name: "Default + RPC + TanStack Query + TanStack Router + ESLint"
501
          - template: "default"
502
            rpc: true
503
            tanstackQuery: true
504
            router: "tanstackrouter"
505
            linter: "biome"
506
            test_name: "Default + RPC + TanStack Query + TanStack Router + Biome"
507
          - template: "default"
508
            rpc: false
509
            tanstackQuery: true
510
            router: "tanstackrouter"
511
            linter: "eslint"
512
            test_name: "Default + No RPC + TanStack Query + TanStack Router + ESLint"
513
          - template: "default"
514
            rpc: false
515
            tanstackQuery: true
516
            router: "tanstackrouter"
517
            linter: "biome"
518
            test_name: "Default + No RPC + TanStack Query + TanStack Router + Biome"
519
520
          # Tailwind template combinations
521
          - template: "tailwind"
522
            rpc: true
523
            tanstackQuery: false
524
            router: "tanstackrouter"
525
            linter: "eslint"
526
            test_name: "Tailwind + RPC + No TanStack Query + TanStack Router + ESLint"
527
          - template: "tailwind"
528
            rpc: true
529
            tanstackQuery: false
530
            router: "tanstackrouter"
531
            linter: "biome"
532
            test_name: "Tailwind + RPC + No TanStack Query + TanStack Router + Biome"
533
          - template: "tailwind"
534
            rpc: false
535
            tanstackQuery: false
536
            router: "tanstackrouter"
537
            linter: "eslint"
538
            test_name: "Tailwind + No RPC + No TanStack Query + TanStack Router + ESLint"
539
          - template: "tailwind"
540
            rpc: false
541
            tanstackQuery: false
542
            router: "tanstackrouter"
543
            linter: "biome"
544
            test_name: "Tailwind + No RPC + No TanStack Query + TanStack Router + Biome"
545
          - template: "tailwind"
546
            rpc: true
547
            tanstackQuery: true
548
            router: "tanstackrouter"
549
            linter: "eslint"
550
            test_name: "Tailwind + RPC + TanStack Query + TanStack Router + ESLint"
551
          - template: "tailwind"
552
            rpc: true
553
            tanstackQuery: true
554
            router: "tanstackrouter"
555
            linter: "biome"
556
            test_name: "Tailwind + RPC + TanStack Query + TanStack Router + Biome"
557
          - template: "tailwind"
558
            rpc: false
559
            tanstackQuery: true
560
            router: "tanstackrouter"
561
            linter: "eslint"
562
            test_name: "Tailwind + No RPC + TanStack Query + TanStack Router + ESLint"
563
          - template: "tailwind"
564
            rpc: false
565
            tanstackQuery: true
566
            router: "tanstackrouter"
567
            linter: "biome"
568
            test_name: "Tailwind + No RPC + TanStack Query + TanStack Router + Biome"
569
570
          # Shadcn template combinations
571
          - template: "shadcn"
572
            rpc: true
573
            tanstackQuery: false
574
            router: "tanstackrouter"
575
            linter: "eslint"
576
            test_name: "Shadcn + RPC + No TanStack Query + TanStack Router + ESLint"
577
          - template: "shadcn"
578
            rpc: true
579
            tanstackQuery: false
580
            router: "tanstackrouter"
581
            linter: "biome"
582
            test_name: "Shadcn + RPC + No TanStack Query + TanStack Router + Biome"
583
          - template: "shadcn"
584
            rpc: false
585
            tanstackQuery: false
586
            router: "tanstackrouter"
587
            linter: "eslint"
588
            test_name: "Shadcn + No RPC + No TanStack Query + TanStack Router + ESLint"
589
          - template: "shadcn"
590
            rpc: false
591
            tanstackQuery: false
592
            router: "tanstackrouter"
593
            linter: "biome"
594
            test_name: "Shadcn + No RPC + No TanStack Query + TanStack Router + Biome"
595
          - template: "shadcn"
596
            rpc: true
597
            tanstackQuery: true
598
            router: "tanstackrouter"
599
            linter: "eslint"
600
            test_name: "Shadcn + RPC + TanStack Query + TanStack Router + ESLint"
601
          - template: "shadcn"
602
            rpc: true
603
            tanstackQuery: true
604
            router: "tanstackrouter"
605
            linter: "biome"
606
            test_name: "Shadcn + RPC + TanStack Query + TanStack Router + Biome"
607
          - template: "shadcn"
608
            rpc: false
609
            tanstackQuery: true
610
            router: "tanstackrouter"
611
            linter: "eslint"
612
            test_name: "Shadcn + No RPC + TanStack Query + TanStack Router + ESLint"
613
          - template: "shadcn"
614
            rpc: false
615
            tanstackQuery: true
616
            router: "tanstackrouter"
617
            linter: "biome"
618
            test_name: "Shadcn + No RPC + TanStack Query + TanStack Router + Biome"
619
620
    steps:
621
      - name: Checkout repository
622
        uses: actions/checkout@v4
623
624
      - name: Setup Bun
625
        uses: oven-sh/setup-bun@v2
626
        with:
627
          bun-version: latest
628
629
      - name: Install dependencies
630
        run: bun install
631
632
      - name: Build CLI
633
        run: bun run build
634
635
      - name: Create test project - ${{ matrix.test_name }}
636
        run: |
637
          # Create project with specified options
638
          echo "Creating project with options:"
639
          echo "Template: ${{ matrix.template }}"
640
          echo "RPC: ${{ matrix.rpc }}"
641
          echo "TanStack Query: ${{ matrix.tanstackQuery }}"
642
          echo "Router: ${{ matrix.router }}"
643
          echo "Linter: ${{ matrix.linter }}"
644
645
          # Build the command with conditional flags
646
          cmd="./dist/index.js test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }} --yes --template ${{ matrix.template }}"
647
648
          if [ "${{ matrix.rpc }}" = "true" ]; then
649
            cmd="$cmd --rpc"
650
          fi
651
652
          if [ "${{ matrix.tanstackQuery }}" = "true" ]; then
653
            cmd="$cmd --tsquery"
654
          fi
655
656
          if [ "${{ matrix.router }}" != "none" ]; then
657
            cmd="$cmd --router ${{ matrix.router }}"
658
          fi
659
660
          cmd="$cmd --linter ${{ matrix.linter }}"
661
662
          echo "Running: $cmd"
663
          eval $cmd
664
665
      - name: Install project dependencies
666
        run: |
667
          cd test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }}
668
          bun install
669
670
      - name: Build test project
671
        run: |
672
          cd test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }}
673
          bun run build
674
675
      - name: Verify build outputs
676
        run: |
677
          cd test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }}
678
679
          # Check that dist directories exist
680
          if [ ! -d "client/dist" ]; then
681
            echo "❌ Client build failed - dist directory not found"
682
            exit 1
683
          fi
684
685
          if [ ! -d "server/dist" ]; then
686
            echo "❌ Server build failed - dist directory not found"
687
            exit 1
688
          fi
689
690
          # Check for expected files based on router type
691
          if [ "${{ matrix.router }}" = "reactroutermpa" ]; then
692
            # React Router MPA has different build structure (client-side only)
693
            if [ ! -d "client/dist/client" ]; then
694
              echo "❌ Client build incomplete - dist/client directory not found"
695
              exit 1
696
            fi
697
698
            # Verify server build (separate from React Router MPA)
699
            if [ ! -f "server/dist/index.js" ]; then
700
              echo "❌ Server build incomplete - index.js not found"
701
              exit 1
702
            fi
703
704
            echo "✅ React Router MPA build verification passed for ${{ matrix.test_name }}"
705
          else
706
            # Standard build structure
707
            if [ ! -f "client/dist/index.html" ]; then
708
              echo "❌ Client build incomplete - index.html not found"
709
              exit 1
710
            fi
711
712
            if [ ! -f "server/dist/index.js" ]; then
713
              echo "❌ Server build incomplete - index.js not found"
714
              exit 1
715
            fi
716
717
            echo "✅ Build verification passed for ${{ matrix.test_name }}"
718
          fi
719
720
      - name: Run linter on generated project
721
        run: |
722
          cd test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }}
723
724
          if [ "${{ matrix.linter }}" = "eslint" ]; then
725
            # Check if ESLint config exists and run it
726
            if [ -f ".eslintrc.json" ] || [ -f ".eslintrc.js" ] || [ -f "eslint.config.js" ]; then
727
              echo "Running ESLint..."
728
              bun run lint || echo "ESLint warnings/errors found but continuing..."
729
            fi
730
          elif [ "${{ matrix.linter }}" = "biome" ]; then
731
            # Check if Biome config exists and run it
732
            if [ -f "biome.json" ]; then
733
              echo "Running Biome..."
734
              bun run lint || echo "Biome warnings/errors found but continuing..."
735
            fi
736
          fi
737
738
      - name: Cleanup test project
739
        if: always()
740
        run: |
741
          rm -rf test-project-${{ matrix.template }}-${{ matrix.rpc }}-${{ matrix.tanstackQuery }}-${{ matrix.router }}-${{ matrix.linter }}