245 lines
6.1 KiB
Markdown
245 lines
6.1 KiB
Markdown
---
|
|
description: Quality-gated merge to parent branch - validates code quality before allowing merge
|
|
args:
|
|
- name: --force-quality
|
|
description: Override quality threshold (e.g., --force-quality 70)
|
|
required: false
|
|
- name: --skip-tests
|
|
description: Skip test validation (not recommended)
|
|
required: false
|
|
---
|
|
|
|
## User Input
|
|
|
|
```text
|
|
$ARGUMENTS
|
|
```
|
|
|
|
You **MUST** consider the user input before proceeding (if not empty).
|
|
|
|
## Goal
|
|
|
|
Execute final quality gate validation and merge to parent branch.
|
|
|
|
**Purpose**: Enforce quality standards before merging features/bugfixes, preventing low-quality code from entering the codebase.
|
|
|
|
**Workflow**: Quality Analysis → Threshold Check → Merge (if passing)
|
|
|
|
**Quality Gates**:
|
|
- Default threshold: 80% quality score
|
|
- Configurable via `--force-quality` flag
|
|
- Reads `.specswarm/quality-standards.md` for project-specific thresholds
|
|
|
|
---
|
|
|
|
## Pre-Flight Checks
|
|
|
|
```bash
|
|
# Ensure we're in a git repository
|
|
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
|
echo "❌ Error: Not in a git repository"
|
|
echo ""
|
|
echo "This command must be run from within a git repository."
|
|
exit 1
|
|
fi
|
|
|
|
# Get repository root
|
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
cd "$REPO_ROOT"
|
|
|
|
# Parse arguments
|
|
FORCE_QUALITY=""
|
|
SKIP_TESTS=false
|
|
|
|
for arg in $ARGUMENTS; do
|
|
case "$arg" in
|
|
--force-quality)
|
|
shift
|
|
FORCE_QUALITY="$1"
|
|
;;
|
|
--skip-tests)
|
|
SKIP_TESTS=true
|
|
;;
|
|
esac
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## Execution Steps
|
|
|
|
### Step 1: Display Banner
|
|
|
|
```bash
|
|
echo "🚢 SpecSwarm Ship - Quality-Gated Merge"
|
|
echo "══════════════════════════════════════════"
|
|
echo ""
|
|
echo "This command enforces quality standards before merge:"
|
|
echo " 1. Runs comprehensive quality analysis"
|
|
echo " 2. Checks quality score meets threshold"
|
|
echo " 3. If passing: merges to parent branch"
|
|
echo " 4. If failing: reports issues and blocks merge"
|
|
echo ""
|
|
|
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
echo "📍 Current branch: $CURRENT_BRANCH"
|
|
echo ""
|
|
```
|
|
|
|
---
|
|
|
|
### Step 2: Run Quality Analysis
|
|
|
|
**YOU MUST NOW run the quality analysis using the SlashCommand tool:**
|
|
|
|
```
|
|
Use the SlashCommand tool to execute: /specswarm:analyze-quality
|
|
```
|
|
|
|
Wait for the quality analysis to complete and extract the quality score from the output.
|
|
|
|
**Expected Output Pattern**: Look for quality score in output (e.g., "Overall Quality: 85%")
|
|
|
|
Store the quality score as QUALITY_SCORE.
|
|
|
|
---
|
|
|
|
### Step 3: Check Quality Threshold
|
|
|
|
**YOU MUST NOW check if quality meets threshold:**
|
|
|
|
```bash
|
|
# Determine threshold
|
|
DEFAULT_THRESHOLD=80
|
|
|
|
# Check for project-specific threshold in .specswarm/quality-standards.md
|
|
THRESHOLD=$DEFAULT_THRESHOLD
|
|
|
|
if [ -f ".specswarm/quality-standards.md" ]; then
|
|
# Try to extract threshold from quality standards file
|
|
PROJECT_THRESHOLD=$(grep -i "^quality_threshold:" .specswarm/quality-standards.md | grep -oE '[0-9]+' || echo "")
|
|
if [ -n "$PROJECT_THRESHOLD" ]; then
|
|
THRESHOLD=$PROJECT_THRESHOLD
|
|
echo "📋 Using project quality threshold: ${THRESHOLD}%"
|
|
fi
|
|
fi
|
|
|
|
# Override with --force-quality if provided
|
|
if [ -n "$FORCE_QUALITY" ]; then
|
|
THRESHOLD=$FORCE_QUALITY
|
|
echo "⚠️ Quality threshold overridden: ${THRESHOLD}%"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎯 Quality Threshold: ${THRESHOLD}%"
|
|
echo "📊 Actual Quality Score: ${QUALITY_SCORE}%"
|
|
echo ""
|
|
```
|
|
|
|
**Decision Logic**:
|
|
|
|
IF QUALITY_SCORE >= THRESHOLD:
|
|
- ✅ Quality gate PASSED
|
|
- Proceed to Step 4 (Merge)
|
|
ELSE:
|
|
- ❌ Quality gate FAILED
|
|
- Display failure message
|
|
- List top issues from analysis
|
|
- Suggest fixes
|
|
- EXIT without merging
|
|
|
|
```bash
|
|
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ]; then
|
|
echo "✅ Quality gate PASSED (${QUALITY_SCORE}% >= ${THRESHOLD}%)"
|
|
echo ""
|
|
else
|
|
echo "❌ Quality gate FAILED (${QUALITY_SCORE}% < ${THRESHOLD}%)"
|
|
echo ""
|
|
echo "The code quality does not meet the required threshold."
|
|
echo ""
|
|
echo "🔧 Recommended Actions:"
|
|
echo " 1. Review the quality analysis output above"
|
|
echo " 2. Address critical and high-priority issues"
|
|
echo " 3. Run /specswarm:analyze-quality again to verify improvements"
|
|
echo " 4. Run /specswarm:ship again when quality improves"
|
|
echo ""
|
|
echo "💡 Alternatively:"
|
|
echo " - Override threshold: /specswarm:ship --force-quality 70"
|
|
echo " - Note: Overriding quality gates is not recommended for production code"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
### Step 4: Merge to Parent Branch
|
|
|
|
**Quality gate passed! YOU MUST NOW merge using the SlashCommand tool:**
|
|
|
|
```
|
|
Use the SlashCommand tool to execute: /specswarm:complete
|
|
```
|
|
|
|
Wait for the merge to complete.
|
|
|
|
---
|
|
|
|
### Step 5: Success Report
|
|
|
|
**After successful merge, display:**
|
|
|
|
```bash
|
|
echo ""
|
|
echo "══════════════════════════════════════════"
|
|
echo "🎉 SHIP SUCCESSFUL"
|
|
echo "══════════════════════════════════════════"
|
|
echo ""
|
|
echo "✅ Quality gate passed (${QUALITY_SCORE}%)"
|
|
echo "✅ Merged to parent branch"
|
|
echo "✅ Feature/bugfix complete"
|
|
echo ""
|
|
echo "📝 Next Steps:"
|
|
echo " - Pull latest changes in other branches"
|
|
echo " - Consider creating a release tag if ready"
|
|
echo " - Update project documentation if needed"
|
|
echo ""
|
|
```
|
|
|
|
---
|
|
|
|
## Error Handling
|
|
|
|
If any step fails:
|
|
|
|
1. **Quality analysis fails**: Report error and suggest checking logs
|
|
2. **Quality threshold not met**: Display issues and exit (see Step 3)
|
|
3. **Merge fails**: Report git errors and suggest manual resolution
|
|
|
|
**All errors should EXIT with clear remediation steps.**
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
**Design Philosophy**:
|
|
- Quality gates prevent technical debt accumulation
|
|
- Encourages addressing issues before merge (not after)
|
|
- Configurable thresholds balance strictness with pragmatism
|
|
- Override flag available but discouraged for production code
|
|
|
|
**Quality Standards File** (`.specswarm/quality-standards.md`):
|
|
```yaml
|
|
---
|
|
quality_threshold: 85
|
|
enforce_gates: true
|
|
---
|
|
|
|
# Project Quality Standards
|
|
|
|
Minimum quality threshold: 85%
|
|
...
|
|
```
|
|
|
|
If `enforce_gates: false`, ship will warn but not block merge.
|