581 lines
16 KiB
Plaintext
581 lines
16 KiB
Plaintext
// Moved from docs/05-operations/jenkins-pipeline-guide.adoc to docs/working/archive/operations/jenkins-pipeline-guide.adoc on 2026-06-16 (docs reorg Phase 2)
|
|
= StarForth Jenkins Pipeline Guide
|
|
:toc: left
|
|
:toclevels: 2
|
|
:sectnums:
|
|
:source-highlighter: groovy
|
|
:icons: font
|
|
|
|
== Overview
|
|
|
|
This document describes the StarForth Jenkins pipeline architecture and how to use it across different environments (Developer, Test, QA, Production).
|
|
|
|
**Current Status:** Developer Pipeline (baseline) is complete
|
|
**Next Steps:** Test/QA/Production pipelines derived from this baseline
|
|
|
|
---
|
|
|
|
== Pipeline Architecture
|
|
|
|
### Current: Developer Pipeline (Jenkinsfile)
|
|
|
|
A comprehensive torture test and verification pipeline for continuous integration during development.
|
|
|
|
**Duration:** ~2 hours
|
|
**Scope:** Full system validation + formal verification + packaging
|
|
|
|
**Pipeline Flow:**
|
|
|
|
```
|
|
1. 🧹 Cleanup & Preparation
|
|
↓
|
|
2. 🔨 Build Gauntlet (4 configurations)
|
|
├─ DEBUG
|
|
├─ STANDARD
|
|
├─ FASTEST
|
|
└─ FAST
|
|
↓
|
|
3. 🧪 Smoke Test
|
|
↓
|
|
4. ✅ Comprehensive Test Suite (936 tests)
|
|
↓
|
|
5. 🏇 Benchmark Gauntlet
|
|
├─ Quick benchmark (1M iterations)
|
|
├─ Full benchmark suite
|
|
├─ Stack operations stress (10M)
|
|
├─ Arithmetic operations stress (10M)
|
|
└─ Logic operations stress (10M)
|
|
↓
|
|
6. 💀 Extreme Stress Tests
|
|
├─ Deep recursion limits
|
|
├─ Maximum stack depth
|
|
├─ Memory allocation patterns
|
|
├─ Long-running stability
|
|
└─ Nested loops
|
|
↓
|
|
7. 🔥 Thermal & Performance Monitoring
|
|
↓
|
|
8. 🧠 Memory Leak Detection (Valgrind)
|
|
↓
|
|
9. ⚡ Profile-Guided Optimization Build
|
|
↓
|
|
10. 📊 PGO Performance Comparison
|
|
↓
|
|
11. 🎯 Edge Case Testing
|
|
├─ Division by zero
|
|
├─ Stack underflow
|
|
├─ Stack overflow
|
|
└─ Invalid memory access
|
|
↓
|
|
12. 📈 Performance Regression Check
|
|
↓
|
|
13. 🔍 Code Quality Checks
|
|
├─ Compiler warnings
|
|
└─ Lines of code analysis
|
|
↓
|
|
14. 🔬 Formal Verification & Isabelle Theories
|
|
├─ Build Isabelle theories (audit mode)
|
|
├─ Refinement status check
|
|
├─ Code annotation validation
|
|
├─ Refinement report generation
|
|
└─ Archive formal verification artifacts
|
|
↓
|
|
15. 📚 Documentation Build
|
|
├─ API documentation (Doxygen)
|
|
├─ LaTeX conversion
|
|
└─ Archive documentation
|
|
↓
|
|
16. 📦 Package Build (DEB & RPM)
|
|
├─ Debian package (if fpm available)
|
|
└─ RPM package (if fpm available)
|
|
↓
|
|
17. 📋 Generate Test Report
|
|
↓
|
|
✅ SUCCESS or ❌ FAILURE
|
|
```
|
|
|
|
---
|
|
|
|
## Stage Details
|
|
|
|
### Stages 1-13: Existing Testing & Analysis
|
|
See Jenkinsfile comments for details. These validate:
|
|
- ✅ Code compilation (4 configurations)
|
|
- ✅ Functional correctness (936 tests)
|
|
- ✅ Performance (benchmarks & regression)
|
|
- ✅ Stability (stress tests, thermal monitoring)
|
|
- ✅ Memory safety (leak detection)
|
|
- ✅ Resilience (edge cases, error handling)
|
|
- ✅ Code quality (warnings, metrics)
|
|
|
|
### Stage 14: 🔬 Formal Verification & Isabelle Theories (NEW)
|
|
|
|
**Purpose:** Verify C implementation against formal spec
|
|
|
|
**Steps:**
|
|
1. Check Isabelle availability
|
|
2. Build Isabelle theories (audit mode - never fails even with incomplete proofs)
|
|
3. Check refinement status (CAPA tracking)
|
|
4. Validate code annotations against theory
|
|
5. Generate refinement report
|
|
6. Archive all formal verification artifacts
|
|
|
|
**Artifacts Produced:**
|
|
- `isabelle-docs/` - Theory documentation (AsciiDoc + build logs)
|
|
- `REFINEMENT_CAPA.adoc` - Defect tracking log
|
|
- `refinement-status.md` - Status report
|
|
- `REFINEMENT_ANNOTATIONS.adoc` - Code annotation guide
|
|
- `REFINEMENT_ROADMAP.adoc` - Implementation roadmap
|
|
- Logs: `isabelle-build.log`, `refinement-status.log`, `annotation-check.log`
|
|
|
|
**Logs:**
|
|
- `isabelle-build.log` - Theory verification output (most critical)
|
|
- `refinement-status.log` - Refinement defect counts
|
|
- `annotation-check.log` - Code annotation coverage
|
|
|
|
**Success Criteria:**
|
|
- Stage always succeeds (graceful handling if Isabelle not installed)
|
|
- All artifacts archived for auditor review
|
|
|
|
### Stage 15: 📚 Documentation Build (NEW)
|
|
|
|
**Purpose:** Generate complete documentation suite
|
|
|
|
**Generates:**
|
|
- API documentation from Doxygen (XML → AsciiDoc)
|
|
- LaTeX versions for formal reports
|
|
- All documentation properly archived
|
|
|
|
**Artifacts:**
|
|
- `api-docs/` - API reference documentation
|
|
- `latex-docs/` - LaTeX sources for formal documents
|
|
|
|
### Stage 16: 📦 Package Build (DEB & RPM) (NEW)
|
|
|
|
**Purpose:** Build distribution packages
|
|
|
|
**Requirements:**
|
|
- `fpm` (Effing Package Manager) for packaging
|
|
```bash
|
|
sudo apt-get install ruby-dev
|
|
gem install fpm
|
|
```
|
|
|
|
**Produces:**
|
|
- `starforth_*.deb` - Debian package
|
|
- `starforth-*.rpm` - Red Hat package
|
|
|
|
**Graceful Degradation:**
|
|
- Skips if `fpm` not installed
|
|
- Shows helpful installation message
|
|
|
|
---
|
|
|
|
## Artifacts & Logs
|
|
|
|
All artifacts and logs are archived in Jenkins and available for download.
|
|
|
|
### Artifacts Directory (`artifacts/`)
|
|
|
|
```
|
|
artifacts/
|
|
├── starforth-debug # Debug build (O0, symbols)
|
|
├── starforth-standard # Standard optimized build
|
|
├── starforth-fastest # Maximum optimization build
|
|
├── starforth-fast # Fast build (no LTO)
|
|
├── starforth-pgo # PGO optimized build
|
|
├── starforth_*.deb # Debian package
|
|
├── starforth-*.rpm # Red Hat package
|
|
│
|
|
├── isabelle-docs/ # Isabelle theory documentation
|
|
├── REFINEMENT_CAPA.adoc # Formal verification defect log
|
|
├── refinement-status.md # Refinement status report
|
|
├── REFINEMENT_ANNOTATIONS.adoc # Code annotation guide
|
|
├── REFINEMENT_ROADMAP.adoc # Implementation roadmap
|
|
│
|
|
├── api-docs/ # API documentation
|
|
├── latex-docs/ # LaTeX documentation
|
|
│
|
|
└── test-report.md # Comprehensive test report
|
|
```
|
|
|
|
### Logs Directory (`logs/`)
|
|
|
|
```
|
|
logs/
|
|
├── system-info.log # Build machine info
|
|
│
|
|
├── build-debug.log # DEBUG build output
|
|
├── build-standard.log # STANDARD build output
|
|
├── build-fastest.log # FASTEST build output
|
|
├── build-fast.log # FAST build output
|
|
├── build-pgo.log # PGO build output
|
|
├── compiler-warnings.log # Compiler warnings
|
|
├── loc-analysis.txt # Lines of code analysis
|
|
│
|
|
├── smoke-test.log # Smoke test output
|
|
├── full-test-suite.log # Complete test suite (936 tests)
|
|
├── test-summary.txt # Test results summary
|
|
│
|
|
├── bench-quick.log # Quick benchmark (1M iterations)
|
|
├── bench-full.log # Full benchmark suite
|
|
├── bench-stack-torture.log # Stack operations (10M)
|
|
├── bench-math-torture.log # Arithmetic operations (10M)
|
|
├── bench-logic-torture.log # Logic operations (10M)
|
|
├── pgo-comparison.log # PGO vs regular performance
|
|
├── performance-baseline.csv # Performance metrics
|
|
│
|
|
├── stress-recursion.log # Recursion limit test
|
|
├── stress-stack-depth.log # Stack depth test
|
|
├── stress-memory.log # Memory allocation test
|
|
├── stress-long-run.log # Long-running stability
|
|
├── stress-nested-loops.log # Nested loops test
|
|
│
|
|
├── edge-div-zero.log # Division by zero handling
|
|
├── edge-stack-underflow.log # Stack underflow handling
|
|
├── edge-stack-overflow.log # Stack overflow handling
|
|
├── edge-invalid-memory.log # Invalid memory access
|
|
│
|
|
├── thermal-test.log # Sustained load test
|
|
├── system-metrics.csv # System load during test
|
|
│
|
|
├── valgrind-leak-check.log # Memory leak detection
|
|
│
|
|
├── isabelle-build.log # Isabelle theory build (CRITICAL)
|
|
├── refinement-status.log # Refinement status
|
|
├── annotation-check.log # Code annotation validation
|
|
├── refinement-report.log # Refinement report generation
|
|
│
|
|
├── api-docs-build.log # API documentation build
|
|
├── docs-latex-build.log # LaTeX conversion
|
|
│
|
|
├── package-build.log # Package build configuration
|
|
├── deb-build.log # Debian package build
|
|
└── rpm-build.log # RPM package build
|
|
```
|
|
|
|
---
|
|
|
|
## Pipeline Variants (Future)
|
|
|
|
The current Developer Pipeline is the baseline. Future variants:
|
|
|
|
### Test Pipeline (Jenkinsfile.test)
|
|
- Reduced scope: Stages 1-8, 13-17
|
|
- Skip: Stages 9-12 (PGO, performance comparison, regression)
|
|
- Focus: Correctness + formal verification + packaging
|
|
- Duration: ~1 hour
|
|
- Use: Integration testing, per-commit validation
|
|
|
|
### QA Pipeline (Jenkinsfile.qa)
|
|
- Focus on validation: Stages 1-7, 13-17
|
|
- Include: Edge case testing, code quality
|
|
- Skip: Long-running stress tests, PGO builds
|
|
- Add: Artifact signing, release notes generation
|
|
- Duration: ~45 minutes
|
|
- Use: Release candidates, manual QA gates
|
|
|
|
### Production Pipeline (Jenkinsfile.prod)
|
|
- Minimal scope: Stages 1-4, 13-17
|
|
- Add: Security scanning, package signing, upload to repositories
|
|
- Focus: Fast feedback, artifact publication
|
|
- Skip: Benchmarks, stress tests, memory leak detection
|
|
- Duration: ~15 minutes
|
|
- Use: Final release builds, automatic repository upload
|
|
|
|
**Derivation Pattern:**
|
|
```
|
|
Developer Pipeline (baseline - all stages)
|
|
↓
|
|
├─→ Test Pipeline (stages: 1-8, 13-17)
|
|
├─→ QA Pipeline (stages: 1-7, 13-17)
|
|
└─→ Production Pipeline (stages: 1-4, 13-17)
|
|
```
|
|
|
|
---
|
|
|
|
## Using the Pipeline
|
|
|
|
### Local Development
|
|
|
|
Run equivalent stages locally:
|
|
```bash
|
|
# Single stage testing
|
|
make smoke # Stage 3
|
|
make test # Stage 4
|
|
make bench # Stage 5
|
|
make docs-isabelle # Stage 14 (partial)
|
|
make refinement-status # Stage 14 (partial)
|
|
|
|
# Full pipeline equivalent
|
|
make clean && make fastest # Stages 1-2
|
|
make test # Stage 4
|
|
make docs-isabelle # Stage 14
|
|
make deb # Stage 16
|
|
```
|
|
|
|
### Jenkins Integration
|
|
|
|
**To use this pipeline:**
|
|
|
|
1. **Create a Jenkins job with this Jenkinsfile**
|
|
```
|
|
Job Name: StarForth-Develop
|
|
Pipeline Script from SCM
|
|
Repository: https://github.com/rajames440/StarForth.git
|
|
Branch: master
|
|
Script Path: Jenkinsfile
|
|
```
|
|
|
|
2. **Install required tools on build agent:**
|
|
```bash
|
|
# Isabelle (optional but recommended)
|
|
wget https://isabelle.in.tum.de/dist/Isabelle2025_linux.tar.gz
|
|
tar -xzf Isabelle2025_linux.tar.gz
|
|
# Add to PATH
|
|
|
|
# FPM (for packaging)
|
|
sudo apt-get install ruby-dev
|
|
sudo gem install fpm
|
|
|
|
# Valgrind (for memory testing)
|
|
sudo apt-get install valgrind
|
|
|
|
# Doxygen (for API docs)
|
|
sudo apt-get install doxygen
|
|
```
|
|
|
|
3. **Configure Jenkins agent:**
|
|
```
|
|
Node: any (or specific builder)
|
|
Timeout: 2 hours
|
|
Workspace cleanup: enable (optional)
|
|
Build retention: 10 builds
|
|
```
|
|
|
|
4. **Run the pipeline:**
|
|
```
|
|
Trigger: Push to master (or manual)
|
|
Monitor: Jenkins UI → StarForth-Develop → Build logs
|
|
Artifacts: Jenkins UI → Build artifacts
|
|
```
|
|
|
|
### Reading the Pipeline Output
|
|
|
|
**Key metrics to watch:**
|
|
|
|
1. **Build Stage** - Should complete in < 2 minutes per configuration
|
|
2. **Test Stage** - Should pass 936/936 tests
|
|
3. **Benchmark Stage** - Baseline for performance regression checks
|
|
4. **Stress Tests** - Verify stability under extreme load
|
|
5. **Memory Leak Detection** - Should show "No leaks" in summary
|
|
6. **Formal Verification** - Check `isabelle-build.log` for theory errors
|
|
7. **Refinement Status** - Monitor OPEN defects in REFINEMENT_CAPA.adoc
|
|
8. **Package Build** - Verify .deb and .rpm created successfully
|
|
|
|
---
|
|
|
|
## Customization
|
|
|
|
### Adding New Stages
|
|
|
|
To add a new stage (e.g., performance regression):
|
|
|
|
```groovy
|
|
stage('📊 New Analysis') {
|
|
steps {
|
|
echo "Running new analysis..."
|
|
sh 'make new-target 2>&1 | tee ${LOG_DIR}/new-analysis.log'
|
|
|
|
// Archive results
|
|
sh 'cp results.json ${ARTIFACT_DIR}/ || true'
|
|
}
|
|
}
|
|
```
|
|
|
|
### Conditional Execution
|
|
|
|
Skip stages based on conditions:
|
|
|
|
```groovy
|
|
stage('Name') {
|
|
when {
|
|
expression {
|
|
currentBuild.result == null || currentBuild.result == 'SUCCESS'
|
|
}
|
|
}
|
|
steps {
|
|
// Only run if previous stages passed
|
|
}
|
|
}
|
|
```
|
|
|
|
### Parallel Execution
|
|
|
|
Run independent tests in parallel:
|
|
|
|
```groovy
|
|
stage('Parallel Tests') {
|
|
parallel {
|
|
stage('Benchmark') {
|
|
steps { sh 'make bench' }
|
|
}
|
|
stage('Memory Check') {
|
|
steps { sh 'valgrind ./build/starforth' }
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "Isabelle not found"
|
|
**Solution:**
|
|
```bash
|
|
# Install Isabelle
|
|
wget https://isabelle.in.tum.de/dist/Isabelle2025_linux.tar.gz
|
|
tar -xzf Isabelle2025_linux.tar.gz
|
|
# Add to PATH:
|
|
export PATH=$PATH:/path/to/Isabelle2025/bin
|
|
```
|
|
|
|
### "fpm not found" (packaging skipped)
|
|
**Solution:**
|
|
```bash
|
|
sudo apt-get install ruby-dev
|
|
sudo gem install fpm
|
|
```
|
|
|
|
### "Valgrind: command not found"
|
|
**Solution:**
|
|
```bash
|
|
sudo apt-get install valgrind
|
|
```
|
|
|
|
### Build timeout (2 hours exceeded)
|
|
**Solution:**
|
|
1. Skip PGO build (Stages 9-10)
|
|
2. Skip thermal monitoring (Stage 7)
|
|
3. Reduce stress test iterations
|
|
4. Use faster hardware
|
|
|
|
### Pipeline fails at formal verification
|
|
**Cause:** Isabelle theories have errors
|
|
**Action:**
|
|
1. Review `logs/isabelle-build.log`
|
|
2. Check `REFINEMENT_CAPA.adoc` for tracked issues
|
|
3. Run `make refinement-status` locally
|
|
4. See REFINEMENT_ROADMAP.adoc for resolution steps
|
|
|
|
---
|
|
|
|
## Metrics & Reporting
|
|
|
|
### Performance Baseline
|
|
|
|
Captured in `performance-baseline.csv`:
|
|
```csv
|
|
timestamp,operation,iterations,duration_seconds
|
|
1635696000,stack_ops,1000000,1.234
|
|
1635696010,arithmetic,1000000,2.567
|
|
```
|
|
|
|
**Use:** Track performance regressions across builds
|
|
|
|
### Test Coverage
|
|
|
|
From test suite logs:
|
|
- Total tests: 936
|
|
- Passing: (tracked by test runner)
|
|
- Failing: (indicates bugs or regressions)
|
|
|
|
### Memory Profile
|
|
|
|
From valgrind logs:
|
|
```
|
|
LEAK SUMMARY:
|
|
definitely lost: 0 bytes
|
|
indirectly lost: 0 bytes
|
|
possibly lost: 0 bytes
|
|
```
|
|
|
|
**Success Criteria:** Zero leaks reported
|
|
|
|
### Formal Verification Metrics
|
|
|
|
From refinement status:
|
|
- Total defects: (count in REFINEMENT_CAPA.adoc)
|
|
- OPEN: (active issues)
|
|
- IN-PROGRESS: (being worked on)
|
|
- CLOSED: (resolved)
|
|
|
|
**Success Criteria:** OPEN → 0 as phases complete
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### For Developers
|
|
|
|
1. **Check pipeline logs before pushing** - Run locally first
|
|
2. **Monitor formal verification** - Review REFINEMENT_CAPA.adoc regularly
|
|
3. **Keep stress tests passing** - Don't regress stability
|
|
4. **Follow annotation guide** - Add REFINEMENT headers to new code
|
|
|
|
### For DevOps
|
|
|
|
1. **Archive all artifacts** - Keep 10+ builds for analysis
|
|
2. **Monitor disk space** - Logs and artifacts accumulate
|
|
3. **Set alerts on failure** - Email or Slack notifications
|
|
4. **Rotate logs** - Keep for audit trail (90+ days)
|
|
|
|
### For Auditors
|
|
|
|
1. **Review formal verification section** - Core correctness evidence
|
|
2. **Check REFINEMENT_CAPA.adoc** - Tracking of all discrepancies
|
|
3. **Inspect code annotations** - Theory↔code correspondence
|
|
4. **Validate test coverage** - 936 tests + edge cases
|
|
5. **Check memory safety** - Valgrind reports
|
|
|
|
---
|
|
|
|
## Support & Questions
|
|
|
|
**Q: How do I run the developer pipeline locally?**
|
|
A: Use `make` targets directly:
|
|
```bash
|
|
make smoke # Quick validation
|
|
make test # Full test suite
|
|
make docs-isabelle # Formal verification
|
|
make deb rpm # Packaging
|
|
```
|
|
|
|
**Q: Can I run stages in parallel?**
|
|
A: Some can (benchmarks, memory check). See "Parallel Execution" section.
|
|
|
|
**Q: How do I skip certain stages?**
|
|
A: Modify the Jenkinsfile to remove unwanted stages. Or create a new pipeline (test/qa).
|
|
|
|
**Q: Where are the artifacts?**
|
|
A: Jenkins → Build → Artifacts tab, or `artifacts/` directory in workspace.
|
|
|
|
**Q: How do I integrate formal verification into my CI?**
|
|
A: The pipeline already does! See Stage 14.
|
|
|
|
---
|
|
|
|
## Version Control
|
|
|
|
This pipeline is maintained in:
|
|
- **File:** `Jenkinsfile` (developer baseline)
|
|
- **Future:** `Jenkinsfile.test`, `Jenkinsfile.qa`, `Jenkinsfile.prod`
|
|
|
|
**Status:** ACTIVE
|
|
**Last Updated:** 2025-10-30
|
|
**Next Review:** After first production deployment
|
|
|
|
---
|
|
|
|
Generated: {docdate} |