create-qa-architect 5.0.7 → 5.4.3
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.
- package/.github/workflows/auto-release.yml +49 -0
- package/.github/workflows/quality.yml +11 -11
- package/.github/workflows/shell-ci.yml.example +82 -0
- package/.github/workflows/shell-quality.yml.example +148 -0
- package/README.md +165 -12
- package/config/shell-ci.yml +82 -0
- package/config/shell-quality.yml +148 -0
- package/docs/ADOPTION-SUMMARY.md +41 -0
- package/docs/ARCHITECTURE-REVIEW.md +67 -0
- package/docs/ARCHITECTURE.md +29 -45
- package/docs/CI-COST-ANALYSIS.md +323 -0
- package/docs/CODE-REVIEW.md +100 -0
- package/docs/REQUIREMENTS.md +148 -0
- package/docs/SECURITY-AUDIT.md +68 -0
- package/docs/test-trace-matrix.md +28 -0
- package/eslint.config.cjs +2 -0
- package/lib/commands/analyze-ci.js +616 -0
- package/lib/commands/deps.js +293 -0
- package/lib/commands/index.js +29 -0
- package/lib/commands/validate.js +85 -0
- package/lib/config-validator.js +28 -45
- package/lib/error-reporter.js +14 -2
- package/lib/github-api.js +138 -13
- package/lib/license-signing.js +125 -0
- package/lib/license-validator.js +359 -71
- package/lib/licensing.js +434 -106
- package/lib/package-utils.js +9 -9
- package/lib/prelaunch-validator.js +828 -0
- package/lib/project-maturity.js +58 -6
- package/lib/quality-tools-generator.js +495 -0
- package/lib/result-types.js +112 -0
- package/lib/security-enhancements.js +1 -1
- package/lib/smart-strategy-generator.js +46 -10
- package/lib/telemetry.js +1 -1
- package/lib/template-loader.js +52 -19
- package/lib/ui-helpers.js +1 -1
- package/lib/validation/cache-manager.js +36 -6
- package/lib/validation/config-security.js +100 -33
- package/lib/validation/index.js +68 -97
- package/lib/validation/workflow-validation.js +28 -7
- package/package.json +4 -6
- package/scripts/check-test-coverage.sh +46 -0
- package/scripts/validate-claude-md.js +80 -0
- package/setup.js +923 -301
- package/create-saas-monetization.js +0 -1513
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
name: Shell Script Quality Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master, develop]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
documentation:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout code
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Check README exists
|
|
18
|
+
run: |
|
|
19
|
+
if [ ! -f "README.md" ]; then
|
|
20
|
+
echo "❌ README.md is missing"
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
echo "✅ README.md exists"
|
|
24
|
+
|
|
25
|
+
- name: Validate README content
|
|
26
|
+
run: |
|
|
27
|
+
readme_lines=$(wc -l < README.md)
|
|
28
|
+
if [ "$readme_lines" -lt 10 ]; then
|
|
29
|
+
echo "⚠️ README.md is very short (< 10 lines)"
|
|
30
|
+
echo " Consider adding: description, usage examples, installation"
|
|
31
|
+
else
|
|
32
|
+
echo "✅ README.md has adequate content ($readme_lines lines)"
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
- name: Check for usage documentation
|
|
36
|
+
run: |
|
|
37
|
+
if grep -q -i "usage\|example\|how to" README.md; then
|
|
38
|
+
echo "✅ README includes usage documentation"
|
|
39
|
+
else
|
|
40
|
+
echo "⚠️ README should include usage examples"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
script-analysis:
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
|
|
46
|
+
steps:
|
|
47
|
+
- name: Checkout code
|
|
48
|
+
uses: actions/checkout@v4
|
|
49
|
+
|
|
50
|
+
- name: Count shell scripts
|
|
51
|
+
id: count
|
|
52
|
+
run: |
|
|
53
|
+
script_count=$(find . -type f -name "*.sh" ! -path "*/node_modules/*" ! -path "*/.git/*" | wc -l)
|
|
54
|
+
echo "count=$script_count" >> $GITHUB_OUTPUT
|
|
55
|
+
echo "Found $script_count shell script(s)"
|
|
56
|
+
|
|
57
|
+
- name: Analyze script complexity
|
|
58
|
+
if: steps.count.outputs.count > 0
|
|
59
|
+
run: |
|
|
60
|
+
echo "Analyzing shell script complexity..."
|
|
61
|
+
find . -type f -name "*.sh" ! -path "*/node_modules/*" ! -path "*/.git/*" | while read -r script; do
|
|
62
|
+
lines=$(wc -l < "$script")
|
|
63
|
+
functions=$(grep -c "^[[:space:]]*function\|^[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*()[[:space:]]*{" "$script" || echo 0)
|
|
64
|
+
echo " $script: $lines lines, $functions functions"
|
|
65
|
+
|
|
66
|
+
if [ "$lines" -gt 500 ]; then
|
|
67
|
+
echo " ⚠️ Large script (>500 lines) - consider splitting"
|
|
68
|
+
fi
|
|
69
|
+
done
|
|
70
|
+
|
|
71
|
+
best-practices:
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
|
|
74
|
+
steps:
|
|
75
|
+
- name: Checkout code
|
|
76
|
+
uses: actions/checkout@v4
|
|
77
|
+
|
|
78
|
+
- name: Check for shebang
|
|
79
|
+
run: |
|
|
80
|
+
echo "Checking for proper shebang in shell scripts..."
|
|
81
|
+
missing_shebang=0
|
|
82
|
+
find . -type f -name "*.sh" ! -path "*/node_modules/*" ! -path "*/.git/*" | while read -r script; do
|
|
83
|
+
if ! head -n 1 "$script" | grep -q "^#!/"; then
|
|
84
|
+
echo "⚠️ Missing shebang: $script"
|
|
85
|
+
missing_shebang=$((missing_shebang + 1))
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
|
|
89
|
+
if [ "$missing_shebang" -eq 0 ]; then
|
|
90
|
+
echo "✅ All scripts have proper shebang"
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
- name: Check for set -e or set -euo pipefail
|
|
94
|
+
run: |
|
|
95
|
+
echo "Checking for error handling (set -e / set -euo pipefail)..."
|
|
96
|
+
missing_set_e=0
|
|
97
|
+
find . -type f -name "*.sh" ! -path "*/node_modules/*" ! -path "*/.git/*" | while read -r script; do
|
|
98
|
+
if ! grep -q "set -e\|set -euo pipefail" "$script"; then
|
|
99
|
+
echo "⚠️ Missing error handling: $script"
|
|
100
|
+
echo " Recommendation: Add 'set -euo pipefail' after shebang"
|
|
101
|
+
missing_set_e=$((missing_set_e + 1))
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
|
|
105
|
+
if [ "$missing_set_e" -eq 0 ]; then
|
|
106
|
+
echo "✅ All scripts use error handling"
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
security:
|
|
110
|
+
runs-on: ubuntu-latest
|
|
111
|
+
|
|
112
|
+
steps:
|
|
113
|
+
- name: Checkout code
|
|
114
|
+
uses: actions/checkout@v4
|
|
115
|
+
|
|
116
|
+
- name: Check for hardcoded secrets
|
|
117
|
+
run: |
|
|
118
|
+
echo "Scanning for potential hardcoded secrets..."
|
|
119
|
+
found_issues=0
|
|
120
|
+
|
|
121
|
+
# Check for common secret patterns
|
|
122
|
+
if grep -r -i "password\s*=\|api_key\s*=\|secret\s*=" --include="*.sh" .; then
|
|
123
|
+
echo "⚠️ Found potential hardcoded secrets"
|
|
124
|
+
echo " Use environment variables instead: \${VARIABLE_NAME}"
|
|
125
|
+
found_issues=1
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
# Check for AWS keys
|
|
129
|
+
if grep -r "AKIA[0-9A-Z]{16}" --include="*.sh" .; then
|
|
130
|
+
echo "❌ Found AWS access key pattern"
|
|
131
|
+
found_issues=1
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
if [ "$found_issues" -eq 0 ]; then
|
|
135
|
+
echo "✅ No obvious hardcoded secrets found"
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
- name: Check for unsafe practices
|
|
139
|
+
run: |
|
|
140
|
+
echo "Checking for unsafe shell practices..."
|
|
141
|
+
|
|
142
|
+
# Check for eval usage
|
|
143
|
+
if grep -r "eval " --include="*.sh" . | grep -v "^#"; then
|
|
144
|
+
echo "⚠️ Found 'eval' usage - potential security risk"
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
# Check for unquoted variables
|
|
148
|
+
echo " (ShellCheck will provide detailed analysis)"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# qa-architect - Adoption Summary
|
|
2
|
+
|
|
3
|
+
**Adopted:** 2025-12-29
|
|
4
|
+
**Value Score:** 95/100
|
|
5
|
+
|
|
6
|
+
## Metrics
|
|
7
|
+
|
|
8
|
+
| Metric | Count |
|
|
9
|
+
| --------------------- | ----- |
|
|
10
|
+
| Total Requirements | 104 |
|
|
11
|
+
| API Endpoints | 0 |
|
|
12
|
+
| UI Pages | 0 |
|
|
13
|
+
| Test Coverage Items | 104 |
|
|
14
|
+
| Integrations Detected | 0 |
|
|
15
|
+
|
|
16
|
+
## Value Breakdown
|
|
17
|
+
|
|
18
|
+
| Component | Score | Description |
|
|
19
|
+
| -------------- | ---------- | ------------------------------------- |
|
|
20
|
+
| Documentation | 20/25 | Requirements extracted and documented |
|
|
21
|
+
| Traceability | 25/25 | Test-to-requirement mappings |
|
|
22
|
+
| Architecture | 25/25 | Architecture documentation |
|
|
23
|
+
| Quality Config | 25/25 | Quality thresholds configured |
|
|
24
|
+
| **Total** | **95/100** | - |
|
|
25
|
+
|
|
26
|
+
## Files Adopted
|
|
27
|
+
|
|
28
|
+
- ✅ docs/ARCHITECTURE-REVIEW.md
|
|
29
|
+
- ✅ docs/CODE-REVIEW.md
|
|
30
|
+
- ✅ docs/SECURITY-AUDIT.md
|
|
31
|
+
|
|
32
|
+
## Files Skipped (already existed)
|
|
33
|
+
|
|
34
|
+
- ⏭️ .qualityrc.json
|
|
35
|
+
- ⏭️ docs/REQUIREMENTS.md
|
|
36
|
+
- ⏭️ docs/test-trace-matrix.md
|
|
37
|
+
- ⏭️ docs/ARCHITECTURE.md
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
_Generated by VBL Adopt_
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
Based on the limited documentation provided, I'll conduct an architecture review with the available information. However, I must note that this review is constrained by insufficient architectural details in the documentation.
|
|
2
|
+
|
|
3
|
+
## Architecture Review: qa-architect
|
|
4
|
+
|
|
5
|
+
**Verdict: NEEDS REVISION**
|
|
6
|
+
**Overall Score: 45/100**
|
|
7
|
+
|
|
8
|
+
### Dimension Scores
|
|
9
|
+
|
|
10
|
+
| Dimension | Score | Assessment |
|
|
11
|
+
| --------------------- | ------ | --------------------------------------------------------- |
|
|
12
|
+
| Pattern Selection | 40/100 | CLI pattern unclear, no architectural patterns documented |
|
|
13
|
+
| Scalability | 30/100 | No scalability considerations documented |
|
|
14
|
+
| Security Architecture | 60/100 | Security features mentioned but implementation unclear |
|
|
15
|
+
| Simplicity | 50/100 | Dependencies suggest complexity but design not documented |
|
|
16
|
+
| API Design | 35/100 | CLI interface not documented, no API specifications |
|
|
17
|
+
|
|
18
|
+
### Strengths
|
|
19
|
+
|
|
20
|
+
1. **Clear Product Vision** - Well-defined target users and pricing tiers
|
|
21
|
+
2. **Multi-language Support** - Supports both JavaScript/TypeScript and Python ecosystems
|
|
22
|
+
3. **Progressive Enhancement** - Free tier with Pro upgrades shows thoughtful monetization
|
|
23
|
+
4. **Quality Focus** - Integrates multiple quality tools (ESLint, Prettier, Husky, etc.)
|
|
24
|
+
|
|
25
|
+
### Concerns
|
|
26
|
+
|
|
27
|
+
1. **Insufficient Documentation** → Complete architectural documentation showing components, data flow, and patterns
|
|
28
|
+
2. **Missing Security Architecture** → Document how Gitleaks, ESLint security, and other security features are architected
|
|
29
|
+
3. **No API Design** → Document CLI interface, command structure, configuration schemas
|
|
30
|
+
4. **Unclear Scalability** → Document how the system handles different project sizes and team requirements
|
|
31
|
+
5. **Missing Data Architecture** → Document configuration management, state handling, and data persistence
|
|
32
|
+
6. **No Error Handling Strategy** → Document error handling, recovery, and user feedback patterns
|
|
33
|
+
7. **Dependency Justification Missing** → Explain rationale for 13 production dependencies
|
|
34
|
+
|
|
35
|
+
### Required Changes (NEEDS REVISION)
|
|
36
|
+
|
|
37
|
+
- [ ] **Document Core Architecture** - Create detailed architecture diagrams showing components, modules, and data flow
|
|
38
|
+
- [ ] **Define CLI API Design** - Document command structure, options, configuration schemas, and interfaces
|
|
39
|
+
- [ ] **Security Architecture Documentation** - Detail how security scanning, audit features, and Pro tier security work
|
|
40
|
+
- [ ] **Scalability Design** - Document performance considerations, memory usage, and scaling patterns
|
|
41
|
+
- [ ] **Error Handling Strategy** - Define error handling patterns, user feedback, and recovery mechanisms
|
|
42
|
+
- [ ] **Configuration Management** - Document how different project types are detected and configured
|
|
43
|
+
- [ ] **Testing Architecture** - With 104 tests, document testing strategy and patterns
|
|
44
|
+
|
|
45
|
+
### Alternative Approaches Considered
|
|
46
|
+
|
|
47
|
+
The documentation doesn't indicate consideration of alternatives. Should have evaluated:
|
|
48
|
+
|
|
49
|
+
- **CLI Frameworks**: Why not use Commander.js, Yargs, or Oclif for CLI structure?
|
|
50
|
+
- **Configuration Management**: JSON vs YAML vs TypeScript configs
|
|
51
|
+
- **Plugin Architecture**: Extensible vs monolithic design for different languages/tools
|
|
52
|
+
- **Distribution Strategy**: npm package vs standalone binary vs Docker
|
|
53
|
+
|
|
54
|
+
### Approval
|
|
55
|
+
|
|
56
|
+
**NEEDS REVISION**: The architecture documentation is insufficient for proper review. While the product concept is solid and the README shows clear market positioning, the actual architectural design is not documented. The auto-generated architecture document provides no meaningful architectural insight.
|
|
57
|
+
|
|
58
|
+
**Critical Missing Elements:**
|
|
59
|
+
|
|
60
|
+
1. Component architecture and module organization
|
|
61
|
+
2. CLI command structure and API design
|
|
62
|
+
3. Configuration and state management patterns
|
|
63
|
+
4. Security implementation architecture
|
|
64
|
+
5. Multi-language support architecture
|
|
65
|
+
6. Testing and quality assurance patterns
|
|
66
|
+
|
|
67
|
+
**Recommendation**: Before implementation proceeds, create comprehensive architecture documentation showing how the system is designed to handle its stated requirements. The gap between the feature-rich product description and the minimal architecture documentation suggests the architecture design phase was incomplete.
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -1,57 +1,41 @@
|
|
|
1
|
-
# Architecture
|
|
1
|
+
# qa-architect - Architecture
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Generated:** 2025-12-27
|
|
4
|
+
**Framework:** Node.js
|
|
5
|
+
**Maturity:** minimal
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
## Overview
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
This is a Node.js application.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
create-qa-architect/
|
|
11
|
-
├── setup.js # Main CLI entry point
|
|
12
|
-
├── lib/ # Core logic (validation, licensing, maturity, telemetry, dependency monitoring)
|
|
13
|
-
├── templates/ # Project templates
|
|
14
|
-
│ ├── ci/ # GitHub Actions + CircleCI/GitLab samples
|
|
15
|
-
│ ├── scripts/ # Helper scripts (smart test strategy, etc.)
|
|
16
|
-
│ ├── integration-tests/# Starter integration tests
|
|
17
|
-
│ ├── test-stubs/ # Unit/E2E placeholders
|
|
18
|
-
│ ├── python/ # Python quality config
|
|
19
|
-
│ └── QUALITY_TROUBLESHOOTING.md
|
|
20
|
-
├── config/ # Defaults and language-specific configs
|
|
21
|
-
│ ├── pyproject.toml
|
|
22
|
-
│ └── quality-python.yml
|
|
23
|
-
└── docs/ # Architecture/testing/SLA/security docs
|
|
24
|
-
```
|
|
11
|
+
## Tech Stack
|
|
25
12
|
|
|
26
|
-
|
|
13
|
+
| Layer | Technology |
|
|
14
|
+
| --------------- | ---------------- |
|
|
15
|
+
| Framework | Node.js |
|
|
16
|
+
| Language | TypeScript |
|
|
17
|
+
| Package Manager | npm |
|
|
18
|
+
| Testing | Jest/Node assert |
|
|
27
19
|
|
|
28
|
-
|
|
29
|
-
2. **Configuration Phase**: Generate appropriate configs
|
|
30
|
-
3. **Installation Phase**: Copy templates, update package.json
|
|
31
|
-
4. **Validation Phase**: Verify setup is complete
|
|
20
|
+
## Project Structure
|
|
32
21
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
22
|
+
```
|
|
23
|
+
├── src/ # Source code
|
|
24
|
+
├── lib/ # Libraries
|
|
25
|
+
├── tests/ # Test files (104 test items)
|
|
26
|
+
└── docs/ # Documentation
|
|
27
|
+
```
|
|
38
28
|
|
|
39
|
-
##
|
|
29
|
+
## Key Components
|
|
40
30
|
|
|
41
|
-
|
|
31
|
+
## Quality Standards
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
| Metric | Target |
|
|
34
|
+
| -------------- | ------- |
|
|
35
|
+
| Test Coverage | 50% |
|
|
36
|
+
| Maturity Level | minimal |
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
---
|
|
48
39
|
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
- `--security-config` - Security validation
|
|
52
|
-
- `--check-maturity` - Project maturity report
|
|
53
|
-
- `--validate` / `--comprehensive` - Full validation suite
|
|
54
|
-
- `--validate-docs` - Documentation validation only
|
|
55
|
-
- `--validate-config` - Validate `.qualityrc.json`
|
|
56
|
-
- `--alerts-slack` / `--pr-comments` - Collaboration hooks
|
|
57
|
-
- `--license-status` - Show current tier/features
|
|
40
|
+
_Auto-generated by VBL Adopt - 2025-12-27_
|
|
41
|
+
_Run `vbl docs` for detailed architecture documentation_
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
# GitHub Actions Cost Analysis: Is qa-architect Over-Engineering CI/CD?
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-01-06
|
|
4
|
+
**Finding**: YES - qa-architect's default setup is 3-5x more expensive than industry standards for solo/small projects.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## The Problem
|
|
9
|
+
|
|
10
|
+
Your projects are costing **$469/month** in GitHub Actions CI when they should cost **$0-50/month**.
|
|
11
|
+
|
|
12
|
+
| Project | Commits/Day | Minutes/Month | Cost/Month | Status |
|
|
13
|
+
| -------------------------- | ----------- | ------------- | ---------- | ----------- |
|
|
14
|
+
| vibebuildlab | 7.4 | 46,852 min | $358 | 🔴 CRITICAL |
|
|
15
|
+
| qa-architect | 1.7 | 15,810 min | $110 | 🔴 HIGH |
|
|
16
|
+
| stark-program-intelligence | 1.6 | 2,160 min | $1.28 | 🟢 OK |
|
|
17
|
+
| vibelab-claude-setup | 2.0 | 531 min | $0 | ✅ OPTIMAL |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Root Cause Analysis
|
|
22
|
+
|
|
23
|
+
### What qa-architect Is Doing (vibebuildlab example)
|
|
24
|
+
|
|
25
|
+
**Current quality.yml**: 161 minutes per commit, runs 221 times/month
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
Jobs running on EVERY push:
|
|
29
|
+
1. detect-maturity (1 job) ~ 2 min
|
|
30
|
+
2. core-checks (2 jobs) ~ 10 min # Node 20 + 22 matrix
|
|
31
|
+
3. linting (1 job) ~ 8 min
|
|
32
|
+
4. security (1 job) ~ 25 min # Gitleaks + Semgrep + 3× npm audit
|
|
33
|
+
5. tests (2 jobs) ~ 30 min # Node 20 + 22 matrix
|
|
34
|
+
6. documentation (1 job) ~ 15 min # Only if production-ready
|
|
35
|
+
7. summary (1 job) ~ 1 min
|
|
36
|
+
|
|
37
|
+
TOTAL: ~90-100 minutes per push (when all jobs run)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Problems identified**:
|
|
41
|
+
|
|
42
|
+
1. ❌ **No path filters** - Runs full CI on docs/README commits
|
|
43
|
+
2. ❌ **Duplicate matrix testing** - Both core-checks AND tests run Node 20/22
|
|
44
|
+
3. ❌ **Security overkill** - Gitleaks + Semgrep + npm audit (3 variants) on EVERY push
|
|
45
|
+
4. ❌ **No job concurrency limits** - Rapid commits queue up expensive builds
|
|
46
|
+
5. ❌ **Production checks on every commit** - Documentation validation should be release-only
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Industry Standards (Successful Projects)
|
|
51
|
+
|
|
52
|
+
### Vite (Major Framework, 1000+ contributors)
|
|
53
|
+
|
|
54
|
+
- **Runtime**: 50-60 min/commit
|
|
55
|
+
- **Path filters**: ✅ Skips tests on docs-only changes
|
|
56
|
+
- **Matrix**: Node 20, 22, 24 (3 versions)
|
|
57
|
+
- **Cross-platform**: Only on latest Node, not all versions
|
|
58
|
+
- **Security**: Runs on schedule, not every commit
|
|
59
|
+
|
|
60
|
+
### Ky (Popular Library, Sindre Sorhus)
|
|
61
|
+
|
|
62
|
+
- **Runtime**: 10-15 min/commit
|
|
63
|
+
- **Matrix**: Node 20, 22, 24, latest (4 versions)
|
|
64
|
+
- **Platform**: macOS only (assumes Linux/Windows compatibility)
|
|
65
|
+
- **Security**: Separate workflow
|
|
66
|
+
|
|
67
|
+
### Common Patterns
|
|
68
|
+
|
|
69
|
+
1. **Minimal on push** - Lint + test current Node only
|
|
70
|
+
2. **Matrix testing** - Only on main branch or scheduled
|
|
71
|
+
3. **Security scans** - Weekly/nightly, not per commit
|
|
72
|
+
4. **Documentation** - Only on release branches
|
|
73
|
+
5. **Path filters** - Skip CI for docs/README/LICENSE changes
|
|
74
|
+
|
|
75
|
+
**Sources**:
|
|
76
|
+
|
|
77
|
+
- [GitHub Actions alternatives for modern CI/CD](https://northflank.com/blog/github-actions-alternatives)
|
|
78
|
+
- [Ultimate free CI/CD for open-source projects](https://dev.to/itnext/the-ultimate-free-ci-cd-for-your-open-source-projects-3bkd)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Recommended Changes
|
|
83
|
+
|
|
84
|
+
### Phase 1: Quick Wins (Reduce by 60-70%)
|
|
85
|
+
|
|
86
|
+
#### 1. Add Path Filters
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
on:
|
|
90
|
+
push:
|
|
91
|
+
paths-ignore:
|
|
92
|
+
- '**.md'
|
|
93
|
+
- 'docs/**'
|
|
94
|
+
- 'LICENSE'
|
|
95
|
+
- '.gitignore'
|
|
96
|
+
- '.editorconfig'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Savings**: ~20% of commits are docs-only
|
|
100
|
+
**vibebuildlab**: 7,117 min/month saved ($57/mo)
|
|
101
|
+
|
|
102
|
+
#### 2. Reduce Matrix Redundancy
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
# BEFORE: 2 matrix jobs (core-checks + tests)
|
|
106
|
+
core-checks:
|
|
107
|
+
matrix:
|
|
108
|
+
node-version: [20, 22] # Runs twice
|
|
109
|
+
|
|
110
|
+
tests:
|
|
111
|
+
matrix:
|
|
112
|
+
node-version: [20, 22] # Runs twice again!
|
|
113
|
+
|
|
114
|
+
# AFTER: 1 matrix job only
|
|
115
|
+
tests:
|
|
116
|
+
matrix:
|
|
117
|
+
node-version: [20, 22] # Runs once
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Savings**: 50% reduction in matrix jobs
|
|
121
|
+
**vibebuildlab**: ~18,000 min/month saved ($144/mo)
|
|
122
|
+
|
|
123
|
+
#### 3. Move Security to Scheduled Workflow
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
# New file: .github/workflows/security-weekly.yml
|
|
127
|
+
on:
|
|
128
|
+
schedule:
|
|
129
|
+
- cron: '0 0 * * 0' # Weekly on Sunday
|
|
130
|
+
workflow_dispatch: # Manual trigger
|
|
131
|
+
|
|
132
|
+
jobs:
|
|
133
|
+
security:
|
|
134
|
+
runs-on: ubuntu-latest
|
|
135
|
+
steps:
|
|
136
|
+
- name: Gitleaks
|
|
137
|
+
- name: Semgrep
|
|
138
|
+
- name: npm audit
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Savings**: From 221 runs/month → 4 runs/month
|
|
142
|
+
**vibebuildlab**: ~5,400 min/month saved ($43/mo)
|
|
143
|
+
|
|
144
|
+
### Phase 2: Industry-Standard Setup (Get under $50/mo total)
|
|
145
|
+
|
|
146
|
+
```yaml
|
|
147
|
+
# .github/workflows/ci.yml
|
|
148
|
+
name: CI
|
|
149
|
+
|
|
150
|
+
on:
|
|
151
|
+
push:
|
|
152
|
+
branches: [main, develop]
|
|
153
|
+
paths-ignore:
|
|
154
|
+
- '**.md'
|
|
155
|
+
- 'docs/**'
|
|
156
|
+
- 'LICENSE'
|
|
157
|
+
pull_request:
|
|
158
|
+
|
|
159
|
+
concurrency:
|
|
160
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
161
|
+
cancel-in-progress: true # Cancel old runs
|
|
162
|
+
|
|
163
|
+
jobs:
|
|
164
|
+
# Quick checks on every commit (current Node only)
|
|
165
|
+
quick-check:
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
steps:
|
|
168
|
+
- uses: actions/checkout@v5
|
|
169
|
+
- uses: actions/setup-node@v6
|
|
170
|
+
with:
|
|
171
|
+
node-version: 22
|
|
172
|
+
cache: npm
|
|
173
|
+
- run: npm ci
|
|
174
|
+
- run: npm run lint
|
|
175
|
+
- run: npm run format:check
|
|
176
|
+
- run: npm test
|
|
177
|
+
|
|
178
|
+
# Matrix testing only on main branch
|
|
179
|
+
cross-version:
|
|
180
|
+
if: github.ref == 'refs/heads/main'
|
|
181
|
+
runs-on: ubuntu-latest
|
|
182
|
+
strategy:
|
|
183
|
+
matrix:
|
|
184
|
+
node-version: [20, 22]
|
|
185
|
+
steps:
|
|
186
|
+
- uses: actions/checkout@v5
|
|
187
|
+
- uses: actions/setup-node@v6
|
|
188
|
+
with:
|
|
189
|
+
node-version: ${{ matrix.node-version }}
|
|
190
|
+
cache: npm
|
|
191
|
+
- run: npm ci
|
|
192
|
+
- run: npm test
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Estimated runtime**:
|
|
196
|
+
|
|
197
|
+
- Pull requests: 5-10 min (quick-check only)
|
|
198
|
+
- Main branch: 15-20 min (quick-check + cross-version)
|
|
199
|
+
|
|
200
|
+
**Estimated cost for vibebuildlab**:
|
|
201
|
+
|
|
202
|
+
- Current: 46,852 min/month ($358/mo)
|
|
203
|
+
- After changes: ~3,500 min/month ($12/mo)
|
|
204
|
+
- **Savings: $346/month (97% reduction)**
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Strategic Recommendations
|
|
209
|
+
|
|
210
|
+
### For Solo Developers / Small Teams
|
|
211
|
+
|
|
212
|
+
**Make all repos public** → GitHub Actions is FREE
|
|
213
|
+
|
|
214
|
+
- If code can be public, this is the best option
|
|
215
|
+
- vibebuildlab, qa-architect could potentially be public
|
|
216
|
+
|
|
217
|
+
### For Private Repos
|
|
218
|
+
|
|
219
|
+
**Option A: Minimal CI** (Recommended)
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
✅ Lint + format on every commit (5 min)
|
|
223
|
+
✅ Test on current Node only (10 min)
|
|
224
|
+
✅ Matrix testing on main branch only
|
|
225
|
+
✅ Security scans weekly, not per commit
|
|
226
|
+
✅ Documentation checks on releases only
|
|
227
|
+
|
|
228
|
+
Total: ~500-1,000 min/month ($0-8/mo)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Option B: Self-Hosted Runner**
|
|
232
|
+
|
|
233
|
+
- Rent $10-20/mo VPS (Hetzner, DigitalOcean)
|
|
234
|
+
- Install GitHub self-hosted runner
|
|
235
|
+
- Total cost: $20/mo for UNLIMITED minutes
|
|
236
|
+
- **Best if you have 5+ active private repos**
|
|
237
|
+
|
|
238
|
+
**Option C: Strategic Testing**
|
|
239
|
+
|
|
240
|
+
```yaml
|
|
241
|
+
# Only test what matters
|
|
242
|
+
on:
|
|
243
|
+
pull_request: # Test on PRs
|
|
244
|
+
push:
|
|
245
|
+
branches: [main] # Test on main
|
|
246
|
+
paths-ignore:
|
|
247
|
+
- '**.md'
|
|
248
|
+
- 'docs/**'
|
|
249
|
+
|
|
250
|
+
# Skip matrix on draft PRs
|
|
251
|
+
if: github.event.pull_request.draft == false
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### For qa-architect Product
|
|
255
|
+
|
|
256
|
+
**Current Default** (what qa-architect creates):
|
|
257
|
+
|
|
258
|
+
- ❌ Enterprise-grade CI for solo devs
|
|
259
|
+
- ❌ Costs $100-350/mo for typical projects
|
|
260
|
+
- ❌ Over-engineering: Gitleaks + Semgrep on every commit
|
|
261
|
+
|
|
262
|
+
**Recommended Default**:
|
|
263
|
+
|
|
264
|
+
```yaml
|
|
265
|
+
Basic (Free tier friendly):
|
|
266
|
+
✅ Lint + format + test (current Node only)
|
|
267
|
+
✅ Security scans weekly
|
|
268
|
+
✅ Matrix testing opt-in only
|
|
269
|
+
✅ Path filters enabled by default
|
|
270
|
+
|
|
271
|
+
Pro tier enhancements:
|
|
272
|
+
✅ Add matrix testing (if needed)
|
|
273
|
+
✅ Add cross-platform testing (if needed)
|
|
274
|
+
✅ Add comprehensive security (scheduled)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Action Items
|
|
280
|
+
|
|
281
|
+
### Immediate (This Week)
|
|
282
|
+
|
|
283
|
+
1. Add path filters to all repos → Save 20% instantly
|
|
284
|
+
2. Move security scans to weekly schedule → Save 95% of security costs
|
|
285
|
+
3. Remove duplicate matrix jobs → Save 50% of test costs
|
|
286
|
+
|
|
287
|
+
### Short Term (This Month)
|
|
288
|
+
|
|
289
|
+
1. Redesign qa-architect default template (minimal-first approach)
|
|
290
|
+
2. Create three tiers:
|
|
291
|
+
- `--minimal`: Lint + test (current Node), FREE tier friendly
|
|
292
|
+
- `--standard`: + matrix testing (main branch only)
|
|
293
|
+
- `--comprehensive`: Current setup (for large teams)
|
|
294
|
+
3. Add `--public` flag that optimizes for unlimited minutes
|
|
295
|
+
|
|
296
|
+
### Long Term (Q1 2026)
|
|
297
|
+
|
|
298
|
+
1. Add cost analyzer to `npx create-qa-architect` (show estimated costs)
|
|
299
|
+
2. Default to minimal setup, prompt for upgrades
|
|
300
|
+
3. Document self-hosted runner setup guide
|
|
301
|
+
4. Create cost monitoring dashboard (track actual usage)
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Conclusion
|
|
306
|
+
|
|
307
|
+
**YES, you're right to question this.**
|
|
308
|
+
|
|
309
|
+
qa-architect is creating **enterprise-grade CI for solo developers**, resulting in:
|
|
310
|
+
|
|
311
|
+
- 3-5x longer CI times than industry standards
|
|
312
|
+
- 10-20x higher costs than necessary
|
|
313
|
+
- Excessive testing that doesn't add proportional value
|
|
314
|
+
|
|
315
|
+
**The fix**: Shift to "minimal by default, comprehensive on demand."
|
|
316
|
+
|
|
317
|
+
For your specific projects:
|
|
318
|
+
|
|
319
|
+
- **vibebuildlab**: $358/mo → $12/mo (implement Phase 1 + 2)
|
|
320
|
+
- **qa-architect**: $110/mo → $5/mo (same changes)
|
|
321
|
+
- **Total savings**: $451/month ($5,412/year)
|
|
322
|
+
|
|
323
|
+
Or just make repos public → **$0/month**.
|