create-qa-architect 5.10.3 → 5.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.github/workflows/quality.yml +99 -104
  2. package/README.md +49 -6
  3. package/config/defaults.js +2 -2
  4. package/config/quality-python.yml +19 -1
  5. package/config/shell-ci.yml +12 -0
  6. package/config/shell-quality.yml +12 -0
  7. package/docs/DEVELOPMENT-WORKFLOW.md +127 -589
  8. package/eslint.config.cjs +14 -4
  9. package/lib/billing-dashboard.html +0 -100
  10. package/lib/dependency-monitoring-premium.js +5 -7
  11. package/lib/error-reporter.js +5 -43
  12. package/lib/github-api.js +2 -2
  13. package/lib/license-validator.js +10 -7
  14. package/lib/licensing.js +4 -4
  15. package/lib/package-utils.js +2 -2
  16. package/lib/prelaunch-validator.js +3 -2
  17. package/lib/setup-enhancements.js +2 -1
  18. package/lib/smart-strategy-generator.js +2 -5
  19. package/lib/ui-helpers.js +1 -1
  20. package/lib/workflow-config.js +107 -6
  21. package/package.json +3 -3
  22. package/setup.js +124 -65
  23. package/templates/integration-tests/api-service.test.js +1 -1
  24. package/.github/CLAUDE_MD_AUTOMATION.md +0 -248
  25. package/.github/PROGRESSIVE_QUALITY_IMPLEMENTATION.md +0 -408
  26. package/.github/PROGRESSIVE_QUALITY_PROPOSAL.md +0 -443
  27. package/docs/ADOPTION-SUMMARY.md +0 -41
  28. package/docs/ARCHITECTURE-IMPROVEMENTS.md +0 -176
  29. package/docs/ARCHITECTURE-REVIEW-2026-01-08.md +0 -514
  30. package/docs/ARCHITECTURE-REVIEW.md +0 -67
  31. package/docs/ARCHITECTURE.md +0 -41
  32. package/docs/CODE-REVIEW.md +0 -100
  33. package/docs/LAZY_LOADING_IMPLEMENTATION.md +0 -309
  34. package/docs/MIGRATION-5.8.0.md +0 -157
  35. package/docs/MONOREPO-COMPATIBILITY-FIX.md +0 -103
  36. package/docs/OPTIMAL_QUALITY_STRATEGY.md +0 -421
  37. package/docs/OWNER-LICENSE-FIX.md +0 -143
  38. package/docs/PERFORMANCE_QUICKSTART.md +0 -156
  39. package/docs/PREFLIGHT_REPORT.md +0 -100
  40. package/docs/QUALITY_AUTOMATION_ANALYSIS.md +0 -339
  41. package/docs/REQUIREMENTS.md +0 -148
  42. package/docs/ROLLOUT-v5.10.0.md +0 -442
  43. package/docs/SECURITY-AUDIT.md +0 -68
  44. package/docs/SIMPLE_STRATEGY.md +0 -48
  45. package/docs/SLA_GATES.md +0 -28
  46. package/docs/STRIPE-LIVE-MODE-CHECKLIST.md +0 -88
  47. package/docs/STRIPE-LIVE-MODE-DEPLOYMENT.md +0 -288
  48. package/docs/TEST-COVERAGE-IMPROVEMENTS.md +0 -18
  49. package/docs/TESTING_AND_REVIEW_FLOW.md +0 -364
  50. package/docs/performance/README.md +0 -328
  51. package/docs/security/SOC2_STARTER.md +0 -29
  52. package/docs/test-trace-matrix.md +0 -28
  53. package/marketing/README.md +0 -34
  54. package/marketing/reference/landing-page.html +0 -615
@@ -1,13 +1,13 @@
1
1
  name: Quality Checks
2
2
 
3
- # Progressive quality automation - adapts checks based on project maturity
4
- # Minimal projects: Only Prettier
5
- # Bootstrap projects: + ESLint
6
- # Development projects: + Tests + Security
7
- # Production-ready: All checks enabled
3
+ # Industry best practice: "Fail fast locally, verify comprehensively remotely"
8
4
  #
9
- # Note: Core checks and tests run on Node.js 20 and 22 matrix to catch runtime differences
10
- # and ensure compatibility across Node.js versions
5
+ # Local (pre-commit): Lint + format (staged files) - instant feedback
6
+ # Local (pre-push): Type check + tests (changed files) - catches logic bugs
7
+ # CI (this workflow): Full test suite + E2E + security - comprehensive verification
8
+ #
9
+ # Note: Lint/format NOT duplicated here - pre-commit already did it
10
+ # This avoids redundant work and reduces CI costs
11
11
 
12
12
  on:
13
13
  push:
@@ -86,6 +86,21 @@ jobs:
86
86
  echo "turbo-prefix=" >> $GITHUB_OUTPUT
87
87
  fi
88
88
 
89
+ - name: Setup pnpm
90
+ if: steps.detect-pm.outputs.manager == 'pnpm'
91
+ uses: pnpm/action-setup@v4
92
+ with:
93
+ version: '8.15.0'
94
+
95
+ - name: Setup Bun
96
+ if: steps.detect-pm.outputs.manager == 'bun'
97
+ uses: oven-sh/setup-bun@v2
98
+ with:
99
+ bun-version: '1.0.0'
100
+
101
+ - name: Install dependencies for maturity detection
102
+ run: ${{ steps.detect-pm.outputs.install-cmd }}
103
+
89
104
  - name: Detect Project Maturity
90
105
  id: detect
91
106
  run: |
@@ -109,63 +124,12 @@ jobs:
109
124
  echo "Has documentation: ${{ steps.detect.outputs.has-docs }}"
110
125
  echo "Has CSS files: ${{ steps.detect.outputs.has-css }}"
111
126
 
112
- # Step 2: Core checks - ALWAYS run (all maturity levels)
113
- # Note: Runs on Node 22 only - Prettier formatting is not sensitive to Node version
114
- core-checks:
115
- runs-on: ubuntu-latest
116
- needs: detect-maturity
117
-
118
- steps:
119
- - name: Checkout code
120
- uses: actions/checkout@v5
121
-
122
- - name: Setup Node.js
123
- uses: actions/setup-node@v6
124
- with:
125
- node-version: '22'
126
- cache: ${{ needs.detect-maturity.outputs.package-manager }}
127
-
128
- - name: Install dependencies
129
- run: ${{ needs.detect-maturity.outputs.install-cmd }}
130
-
131
- - name: Prettier check
132
- run: |
133
- echo "✨ Running Prettier formatting check (required for all projects)"
134
- npm run format:check
135
-
136
- # Step 3: Linting - run if source files exist (bootstrap+)
137
- # Note: Runs on Node 20 only - linting tools are less sensitive to Node version differences
138
- # Core runtime compatibility is tested via matrix in tests job when enabled
139
- linting:
140
- runs-on: ubuntu-latest
141
- needs: detect-maturity
142
- if: fromJSON(needs.detect-maturity.outputs.source-count) > 0
143
-
144
- steps:
145
- - name: Checkout code
146
- uses: actions/checkout@v5
147
-
148
- - name: Setup Node.js
149
- uses: actions/setup-node@v6
150
- with:
151
- node-version: '20'
152
- cache: ${{ needs.detect-maturity.outputs.package-manager }}
127
+ # Note: Lint/format jobs REMOVED - pre-commit already does this locally
128
+ # This follows industry best practice: "Each layer does unique work"
129
+ # Pre-commit = lint + format on staged files
130
+ # CI = full tests + E2E + security (things that can't be done locally)
153
131
 
154
- - name: Install dependencies
155
- run: ${{ needs.detect-maturity.outputs.install-cmd }}
156
-
157
- - name: ESLint
158
- run: |
159
- echo "🔍 Linting ${{ needs.detect-maturity.outputs.source-count }} source files..."
160
- npx eslint .
161
-
162
- - name: Stylelint
163
- if: needs.detect-maturity.outputs.has-css == 'true'
164
- run: |
165
- echo "🎨 Linting CSS files..."
166
- npx stylelint "**/*.{css,scss,sass,less,pcss}" --allow-empty-input
167
-
168
- # Step 4: Security checks - run if dependencies exist
132
+ # Step 2: Security checks - run if dependencies exist
169
133
  #
170
134
  # Optional Enhanced Token Configuration:
171
135
  # - GITLEAKS_TOKEN: Enhanced GitHub token for gitleaks (fallback: GITHUB_TOKEN)
@@ -189,6 +153,18 @@ jobs:
189
153
  node-version: '20'
190
154
  cache: ${{ needs.detect-maturity.outputs.package-manager }}
191
155
 
156
+ - name: Setup pnpm
157
+ if: needs.detect-maturity.outputs.package-manager == 'pnpm'
158
+ uses: pnpm/action-setup@v4
159
+ with:
160
+ version: '8.15.0'
161
+
162
+ - name: Setup Bun
163
+ if: needs.detect-maturity.outputs.package-manager == 'bun'
164
+ uses: oven-sh/setup-bun@v2
165
+ with:
166
+ bun-version: '1.0.0'
167
+
192
168
  - name: Install dependencies
193
169
  run: ${{ needs.detect-maturity.outputs.install-cmd }}
194
170
 
@@ -291,11 +267,14 @@ jobs:
291
267
  SEMGREP_VERSION: '1.85.0'
292
268
  SEMGREP_ENABLE_VERSION_CHECK: 'false'
293
269
 
294
- # Step 5: Tests - run if test files exist (development+)
270
+ # Step 3: Tests - run if test files exist (development+)
271
+ # Smart skip: Draft PRs skip tests (saves CI costs during WIP)
295
272
  tests:
296
273
  runs-on: ubuntu-latest
297
274
  needs: detect-maturity
298
- if: fromJSON(needs.detect-maturity.outputs.test-count) > 0
275
+ if: |
276
+ fromJSON(needs.detect-maturity.outputs.test-count) > 0 &&
277
+ (github.event.pull_request.draft != true || github.event_name != 'pull_request')
299
278
  strategy:
300
279
  fail-fast: false
301
280
  matrix:
@@ -311,6 +290,18 @@ jobs:
311
290
  node-version: ${{ matrix.node-version }}
312
291
  cache: ${{ needs.detect-maturity.outputs.package-manager }}
313
292
 
293
+ - name: Setup pnpm
294
+ if: needs.detect-maturity.outputs.package-manager == 'pnpm'
295
+ uses: pnpm/action-setup@v4
296
+ with:
297
+ version: '8.15.0'
298
+
299
+ - name: Setup Bun
300
+ if: needs.detect-maturity.outputs.package-manager == 'bun'
301
+ uses: oven-sh/setup-bun@v2
302
+ with:
303
+ bun-version: '1.0.0'
304
+
314
305
  - name: Install dependencies
315
306
  run: |
316
307
  echo "⏱️ Performance Budget: Dependency installation must complete within 2 minutes"
@@ -352,7 +343,7 @@ jobs:
352
343
  echo "🔐 Running real gitleaks binary verification test..."
353
344
  QAA_DEVELOPER=true RUN_REAL_BINARY_TEST=1 node tests/gitleaks-real-binary-test.js
354
345
 
355
- # Step 6: Documentation - run for production-ready projects
346
+ # Step 4: Documentation - run for production-ready projects
356
347
  documentation:
357
348
  runs-on: ubuntu-latest
358
349
  needs: detect-maturity
@@ -368,6 +359,18 @@ jobs:
368
359
  node-version: '20'
369
360
  cache: ${{ needs.detect-maturity.outputs.package-manager }}
370
361
 
362
+ - name: Setup pnpm
363
+ if: needs.detect-maturity.outputs.package-manager == 'pnpm'
364
+ uses: pnpm/action-setup@v4
365
+ with:
366
+ version: '8.15.0'
367
+
368
+ - name: Setup Bun
369
+ if: needs.detect-maturity.outputs.package-manager == 'bun'
370
+ uses: oven-sh/setup-bun@v2
371
+ with:
372
+ bun-version: '1.0.0'
373
+
371
374
  - name: Install dependencies
372
375
  run: ${{ needs.detect-maturity.outputs.install-cmd }}
373
376
 
@@ -438,42 +441,53 @@ jobs:
438
441
  echo "ℹ️ Not an npm package or no package.json found - skipping package validation"
439
442
  fi
440
443
 
444
+ - name: Detect web app
445
+ id: detect-webapp
446
+ run: |
447
+ # Only run Lighthouse for actual web apps, not CLI tools
448
+ IS_WEBAPP=false
449
+
450
+ # Check for web app indicators
451
+ if [ -f "index.html" ] || [ -f "public/index.html" ] || [ -f "src/index.html" ]; then
452
+ IS_WEBAPP=true
453
+ elif [ -d "dist" ] && [ -f "dist/index.html" ]; then
454
+ IS_WEBAPP=true
455
+ elif grep -q '"start".*"next\|vite\|react-scripts\|serve"' package.json 2>/dev/null; then
456
+ IS_WEBAPP=true
457
+ fi
458
+
459
+ echo "is-webapp=$IS_WEBAPP" >> $GITHUB_OUTPUT
460
+ echo "Web app detected: $IS_WEBAPP"
461
+
441
462
  - name: Lighthouse CI
442
- if: hashFiles('.lighthouserc.js', '.lighthouserc.json', 'lighthouserc.js') != ''
463
+ if: hashFiles('.lighthouserc.js', '.lighthouserc.json', 'lighthouserc.js') != '' && steps.detect-webapp.outputs.is-webapp == 'true'
443
464
  id: lighthouse
444
465
  run: |
445
- echo "🚢 Running Lighthouse CI..."
466
+ echo "Running Lighthouse CI..."
446
467
  npx lhci autorun
447
468
  continue-on-error: true
448
469
 
449
470
  - name: Report Lighthouse Failures
450
471
  if: steps.lighthouse.outcome == 'failure'
451
- env:
452
- MATURITY: ${{ needs.detect-maturity.outputs.maturity }}
453
472
  run: |
454
- echo "::error::Lighthouse CI failed - performance budgets or quality thresholds violated"
473
+ echo "::warning::Lighthouse CI failed - performance budgets or quality thresholds violated"
455
474
  echo "Review the Lighthouse report to see which metrics failed."
456
475
  echo "Common failures: performance score, accessibility issues, SEO problems"
457
476
 
458
477
  # Add to job summary for visibility
459
- echo "## ⚠️ Lighthouse CI Failed" >> $GITHUB_STEP_SUMMARY
478
+ echo "## Lighthouse CI Failed" >> $GITHUB_STEP_SUMMARY
460
479
  echo "Performance budgets or quality thresholds were violated." >> $GITHUB_STEP_SUMMARY
461
- echo "This is currently a soft failure (continue-on-error: true)." >> $GITHUB_STEP_SUMMARY
462
480
  echo "Review the Lighthouse report in the Actions logs above." >> $GITHUB_STEP_SUMMARY
463
481
 
464
- # Fail build for production-ready projects
465
- if [ "$MATURITY" == "production-ready" ]; then
466
- echo "::error::Production-ready projects must pass Lighthouse CI checks"
467
- exit 1
468
- fi
482
+ # Soft warning, not hard fail - Lighthouse issues shouldn't block releases
483
+ # Teams can enforce by adding 'error' level assertions in their lighthouserc
484
+ echo "::notice::Lighthouse failures are warnings. Add 'error' assertions in .lighthouserc.js to enforce."
469
485
 
470
- # Step 7: Summary - report what checks ran
486
+ # Step 5: Summary - report what checks ran
471
487
  summary:
472
488
  runs-on: ubuntu-latest
473
489
  needs:
474
490
  - detect-maturity
475
- - core-checks
476
- - linting
477
491
  - security
478
492
  - tests
479
493
  - documentation
@@ -482,8 +496,6 @@ jobs:
482
496
  steps:
483
497
  - name: Generate Check Summary
484
498
  env:
485
- CORE_RESULT: ${{ needs.core-checks.result }}
486
- LINTING_RESULT: ${{ needs.linting.result }}
487
499
  SECURITY_RESULT: ${{ needs.security.result }}
488
500
  TESTS_RESULT: ${{ needs.tests.result }}
489
501
  DOCS_RESULT: ${{ needs.documentation.result }}
@@ -499,26 +511,9 @@ jobs:
499
511
  echo "- Has documentation: ${{ needs.detect-maturity.outputs.has-docs }}" >> $GITHUB_STEP_SUMMARY
500
512
  echo "" >> $GITHUB_STEP_SUMMARY
501
513
  echo "### Checks Executed" >> $GITHUB_STEP_SUMMARY
502
-
503
- # Core checks
504
- if [ "$CORE_RESULT" == "success" ]; then
505
- echo "- ✅ Core checks: Passed" >> $GITHUB_STEP_SUMMARY
506
- elif [ "$CORE_RESULT" == "failure" ]; then
507
- echo "- ❌ Core checks: Failed" >> $GITHUB_STEP_SUMMARY
508
- else
509
- echo "- ⚠️ Core checks: $CORE_RESULT" >> $GITHUB_STEP_SUMMARY
510
- fi
511
-
512
- # Linting
513
- if [ "$LINTING_RESULT" == "success" ]; then
514
- echo "- ✅ Linting: Passed" >> $GITHUB_STEP_SUMMARY
515
- elif [ "$LINTING_RESULT" == "failure" ]; then
516
- echo "- ❌ Linting: Failed" >> $GITHUB_STEP_SUMMARY
517
- elif [ "$LINTING_RESULT" == "skipped" ]; then
518
- echo "- ⏭️ Linting: Skipped (no source files)" >> $GITHUB_STEP_SUMMARY
519
- else
520
- echo "- ⚠️ Linting: $LINTING_RESULT" >> $GITHUB_STEP_SUMMARY
521
- fi
514
+ echo "" >> $GITHUB_STEP_SUMMARY
515
+ echo "Note: Lint/format checks run locally in pre-commit (not duplicated here)" >> $GITHUB_STEP_SUMMARY
516
+ echo "" >> $GITHUB_STEP_SUMMARY
522
517
 
523
518
  # Security
524
519
  if [ "$SECURITY_RESULT" == "success" ]; then
@@ -526,7 +521,7 @@ jobs:
526
521
  elif [ "$SECURITY_RESULT" == "failure" ]; then
527
522
  echo "- ❌ Security: Failed" >> $GITHUB_STEP_SUMMARY
528
523
  elif [ "$SECURITY_RESULT" == "skipped" ]; then
529
- echo "- ⏭️ Security: Skipped (no dependencies)" >> $GITHUB_STEP_SUMMARY
524
+ echo "- ⏭️ Security: Skipped (runs on schedule/manual trigger)" >> $GITHUB_STEP_SUMMARY
530
525
  else
531
526
  echo "- ⚠️ Security: $SECURITY_RESULT" >> $GITHUB_STEP_SUMMARY
532
527
  fi
package/README.md CHANGED
@@ -15,9 +15,9 @@ Quality automation CLI for JavaScript/TypeScript, Python, and shell script proje
15
15
  ## Features
16
16
 
17
17
  - **Prettier Code Formatting** - Consistent code style across your project
18
- - **Husky Git Hooks** - Pre-commit (lint-staged) and pre-push (validation)
19
- - **lint-staged Processing** - Only process changed files for speed
20
- - **Pre-push Validation** - Prevents broken code from reaching CI
18
+ - **Husky Git Hooks** - Pre-commit (lint + format) and pre-push (type check + tests)
19
+ - **lint-staged Processing** - Only process staged files for speed
20
+ - **Delta Testing** - Pre-push runs tests on changed files only (fast feedback)
21
21
  - **GitHub Actions** - Automated quality checks in CI/CD
22
22
  - **TypeScript Smart** - Auto-detects and configures TypeScript projects
23
23
  - **Python Support** - Complete Python toolchain with Black, Ruff, isort, mypy, pytest
@@ -26,7 +26,7 @@ Quality automation CLI for JavaScript/TypeScript, Python, and shell script proje
26
26
  - **Progressive Quality** - Adaptive checks based on project maturity
27
27
  - **Smart Test Strategy** - Risk-based pre-push validation (Pro feature)
28
28
 
29
- ### Quality Tools (v5.2.0+)
29
+ ### Quality Tools
30
30
 
31
31
  - **Lighthouse CI** - Performance, accessibility, SEO audits (Free: basic, Pro: thresholds)
32
32
  - **Bundle Size Limits** - Enforce bundle budgets with size-limit (Pro)
@@ -34,7 +34,7 @@ Quality automation CLI for JavaScript/TypeScript, Python, and shell script proje
34
34
  - **Conventional Commits** - commitlint with commit-msg hook (Free)
35
35
  - **Coverage Thresholds** - Enforce code coverage minimums (Pro)
36
36
 
37
- ### Pre-Launch Validation (v5.3.0+)
37
+ ### Pre-Launch Validation
38
38
 
39
39
  - **SEO Validation** - Sitemap, robots.txt, meta tags validation (Free)
40
40
  - **Link Validation** - Broken link detection with linkinator (Free)
@@ -100,9 +100,42 @@ npx create-qa-architect@latest
100
100
  | ---------------------------- | ---- | ---- |
101
101
  | GitHub Actions cost analyzer | ❌ | ✅ |
102
102
 
103
+ ### Get Pro
104
+
105
+ **Purchase:** [vibebuildlab.com/qa-architect](https://vibebuildlab.com/qa-architect)
106
+
107
+ After purchase, you'll receive a license key via email (QAA-XXXX-XXXX-XXXX-XXXX).
108
+
109
+ **Activate your license:**
110
+
111
+ ```bash
112
+ npx create-qa-architect@latest --activate-license
113
+ # Enter your license key when prompted
114
+ ```
115
+
116
+ **Check license status:**
117
+
118
+ ```bash
119
+ npx create-qa-architect@latest --license-status
120
+ ```
121
+
103
122
  ## Workflow Tiers (GitHub Actions Cost Optimization)
104
123
 
105
- qa-architect now defaults to **minimal CI** to avoid unexpected GitHub Actions bills. Choose the tier that matches your needs:
124
+ qa-architect follows industry best practice: **"Fail fast locally, verify comprehensively remotely"**
125
+
126
+ ### The Testing Pyramid
127
+
128
+ | Layer | Time | What Runs | Why |
129
+ | -------------- | -------- | ---------------------------------- | -------------------------- |
130
+ | **Pre-commit** | < 5s | Lint + format (staged files) | Instant feedback |
131
+ | **Pre-push** | < 30s | Type check + tests (changed files) | Catches bugs before push |
132
+ | **CI** | 3-10 min | Full test suite + security | Comprehensive verification |
133
+
134
+ Note: CI does NOT re-run lint/format (pre-commit already did it). This avoids redundant work and reduces CI costs.
135
+
136
+ ### Workflow Tiers (GitHub Actions Cost)
137
+
138
+ qa-architect defaults to **minimal CI** to avoid unexpected GitHub Actions bills. Choose the tier that matches your needs:
106
139
 
107
140
  ### Minimal (Default) - $0-5/month
108
141
 
@@ -148,6 +181,16 @@ npx create-qa-architect@latest --workflow-standard
148
181
  npx create-qa-architect@latest --workflow-comprehensive
149
182
  ```
150
183
 
184
+ ### Matrix Testing for Libraries
185
+
186
+ **Publishing an npm package or CLI tool?** Use `--matrix` to test on multiple Node.js versions:
187
+
188
+ ```bash
189
+ npx create-qa-architect@latest --matrix
190
+ ```
191
+
192
+ This adds Node.js 20 + 22 matrix testing - recommended for published packages that support multiple runtime versions. Not needed for web apps you deploy (you control the Node version).
193
+
151
194
  ### Switching Between Tiers
152
195
 
153
196
  Already using qa-architect? Convert to minimal to reduce costs:
@@ -1,5 +1,4 @@
1
1
  'use strict'
2
- /* eslint-disable security/detect-object-injection */
3
2
 
4
3
  const STYLELINT_EXTENSIONS = ['css', 'scss', 'sass', 'less', 'pcss']
5
4
  const DEFAULT_STYLELINT_TARGET = `**/*.{${STYLELINT_EXTENSIONS.join(',')}}`
@@ -18,6 +17,7 @@ const baseScripts = {
18
17
  test: 'vitest run --passWithNoTests',
19
18
  'test:watch': 'vitest',
20
19
  'test:coverage': 'vitest run --coverage',
20
+ 'test:changed': 'vitest run --changed HEAD~1 --passWithNoTests',
21
21
  'security:audit':
22
22
  '[ -f pnpm-lock.yaml ] && pnpm audit --audit-level high || [ -f yarn.lock ] && yarn audit || npm audit --audit-level high',
23
23
  'security:secrets':
@@ -29,7 +29,7 @@ const baseScripts = {
29
29
  'validate:comprehensive': 'npx create-qa-architect@latest --comprehensive',
30
30
  'validate:all': 'npm run validate:comprehensive && npm run security:audit',
31
31
  'validate:pre-push':
32
- 'npm run test:patterns --if-present && npm run lint && npm run format:check && npm run test:commands --if-present && npm test --if-present',
32
+ 'npm run test:patterns --if-present && npm run test:commands --if-present && npm run test:changed --if-present || npm test --if-present',
33
33
  }
34
34
 
35
35
  const normalizeStylelintTargets = stylelintTargets => {
@@ -3,15 +3,33 @@ name: Python Quality Checks
3
3
  on:
4
4
  push:
5
5
  branches: [main, master, develop]
6
+ paths:
7
+ - '**.py'
8
+ - 'pyproject.toml'
9
+ - 'setup.py'
10
+ - 'requirements*.txt'
11
+ - 'poetry.lock'
12
+ - 'Pipfile*'
6
13
  pull_request:
7
14
  branches: [main, master, develop]
15
+ paths:
16
+ - '**.py'
17
+ - 'pyproject.toml'
18
+ - 'setup.py'
19
+ - 'requirements*.txt'
20
+ - 'poetry.lock'
21
+ - 'Pipfile*'
22
+
23
+ concurrency:
24
+ group: python-${{ github.workflow }}-${{ github.ref }}
25
+ cancel-in-progress: true
8
26
 
9
27
  jobs:
10
28
  quality:
11
29
  runs-on: ubuntu-latest
12
30
  strategy:
13
31
  matrix:
14
- python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
32
+ python-version: ['3.12']
15
33
 
16
34
  steps:
17
35
  - name: Checkout code
@@ -3,8 +3,20 @@ name: Shell Script CI
3
3
  on:
4
4
  push:
5
5
  branches: [main, master, develop]
6
+ paths:
7
+ - '**.sh'
8
+ - '**.bash'
9
+ - '**.bats'
6
10
  pull_request:
7
11
  branches: [main, master, develop]
12
+ paths:
13
+ - '**.sh'
14
+ - '**.bash'
15
+ - '**.bats'
16
+
17
+ concurrency:
18
+ group: shell-ci-${{ github.workflow }}-${{ github.ref }}
19
+ cancel-in-progress: true
8
20
 
9
21
  jobs:
10
22
  shellcheck:
@@ -3,8 +3,20 @@ name: Shell Script Quality Checks
3
3
  on:
4
4
  push:
5
5
  branches: [main, master, develop]
6
+ paths:
7
+ - '**.sh'
8
+ - '**.bash'
9
+ - '**.bats'
6
10
  pull_request:
7
11
  branches: [main, master, develop]
12
+ paths:
13
+ - '**.sh'
14
+ - '**.bash'
15
+ - '**.bats'
16
+
17
+ concurrency:
18
+ group: shell-quality-${{ github.workflow }}-${{ github.ref }}
19
+ cancel-in-progress: true
8
20
 
9
21
  jobs:
10
22
  documentation: