feat: Add issue generation script and generated issues from roadmap

- Created Python script to parse ROADMAP.md and extract tasks
- Generated 54 GitHub issues:
  - 7 Security Remediation Sprint issues (CRITICAL/HIGH priority)
  - 43 Milestone feature issues (M4-M11)
  - 4 Continuous Improvement issues
- Created issues.json, issues_preview.md, and create_issues.sh
- Added comprehensive README with usage instructions

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-06 22:26:26 +00:00
parent 4bc1d1c48d
commit c3f223c29a
5 changed files with 4150 additions and 0 deletions
+213
View File
@@ -0,0 +1,213 @@
# DMARQ Roadmap Issues
This directory contains auto-generated GitHub issues parsed from the DMARQ roadmap documents.
## 📊 Summary
**Total Issues Generated**: 54
### Breakdown by Category
- **Security Remediation Sprint**: 7 issues (CRITICAL/HIGH priority)
- **Milestone Features**: 43 issues (distributed across milestones 4-11)
- **Continuous Improvements**: 4 issues (ongoing maintenance)
## 📁 Files
### 1. `issues.json`
JSON-formatted issue data suitable for programmatic import or custom processing.
**Structure**:
```json
[
{
"title": "Issue title",
"body": "Issue description in markdown",
"labels": ["label1", "label2"],
"milestone": "Milestone name",
"assignees": []
}
]
```
### 2. `issues_preview.md`
Human-readable preview of all issues, organized by milestone. Review this file to see what issues will be created.
### 3. `create_issues.sh`
Executable bash script that uses GitHub CLI to create all issues automatically.
## 🚀 How to Create Issues
### Option 1: Using GitHub CLI (Recommended)
**Prerequisites**:
- Install [GitHub CLI](https://cli.github.com/)
- Authenticate: `gh auth login`
**Steps**:
```bash
cd generated_issues
./create_issues.sh
```
The script will:
- Check if GitHub CLI is installed and authenticated
- Create all 54 issues in the `christianlouis/dmarq` repository
- Apply appropriate labels to each issue
- Add rate limiting (1 second between issues) to avoid API throttling
**Note**: The script does NOT create milestones automatically. See section below.
### Option 2: Manual Creation
Review `issues_preview.md` and manually create issues through the GitHub web interface.
### Option 3: Custom Import
Use `issues.json` with your own tooling or GitHub API integration.
## 🏷️ Milestones
The following milestones are referenced in the issues. You may want to create these in GitHub before running the import script:
1. **Security Remediation Sprint** (7 issues) - 🔴 PRIORITY
2. **Milestone 4: Enhanced Dashboard & Visualization** (6 issues)
3. **Milestone 5: User Authentication & Multi-User Support** (6 issues)
4. **Milestone 6: Alerting & Notifications** (5 issues)
5. **Milestone 7: Advanced Rule Engine** (5 issues)
6. **Milestone 8: DNS Health & Cloudflare Integration** (5 issues)
7. **Milestone 9: Forensic Reports (RUF) Support** (5 issues)
8. **Milestone 10: Advanced Analytics & Reporting** (5 issues)
9. **Milestone 11: Enterprise Features** (6 issues)
10. **Continuous Improvements** (4 issues)
**To create milestones using GitHub CLI**:
```bash
gh milestone create "Security Remediation Sprint" --repo christianlouis/dmarq
gh milestone create "Milestone 4: Enhanced Dashboard & Visualization" --repo christianlouis/dmarq
# ... etc
```
Or create them through the GitHub web interface: https://github.com/christianlouis/dmarq/milestones
## 🏷️ Labels
The issues use the following labels (you may need to create some):
### Priority Labels
- `priority: critical` - Must be addressed immediately
- `priority: high` - Important, should be addressed soon
- `priority: medium` - Normal priority
- `priority: low` - Can be deferred
### Type Labels
- `security` - Security-related issues
- `security: critical` - Critical security vulnerabilities
- `security: high` - High-severity security issues
- `enhancement` - New features or improvements
- `maintenance` - Ongoing maintenance tasks
- `continuous-improvement` - Part of continuous improvement process
- `documentation` - Documentation updates
- `code-quality` - Code quality improvements
### Milestone Labels
- `milestone-4` through `milestone-11` - Associate with specific milestones
## 📋 Issue Organization
### Security Sprint (Start Here!)
The Security Remediation Sprint contains 7 critical security issues that should be addressed **first**:
1. Authentication & Authorization (CRITICAL)
2. Secret Management (CRITICAL)
3. XML Parsing Security (HIGH)
4. Input Validation (HIGH)
5. Security Headers (MEDIUM)
6. CORS Configuration (MEDIUM)
7. Error Handling (MEDIUM)
### Milestone Features
Features are organized by milestone (4-11), with Milestone 4 being the next to implement after security fixes.
### Continuous Improvements
Four ongoing improvement categories:
- Code Quality
- Security
- Documentation
- Community
## 🔄 Regenerating Issues
If you need to regenerate issues after modifying the roadmap:
```bash
cd /home/runner/work/dmarq/dmarq
python3 scripts/generate_issues.py
```
This will overwrite the files in this directory.
## ⚙️ Customization
### Modifying the Generator
Edit `/home/runner/work/dmarq/dmarq/scripts/generate_issues.py` to customize:
- Issue title formats
- Body templates
- Label assignments
- Milestone mappings
### Filtering Issues
To create only specific issues:
**Security issues only**:
```bash
jq '.[] | select(.labels[] | contains("security"))' issues.json
```
**Specific milestone**:
```bash
jq '.[] | select(.milestone == "Milestone 4: Enhanced Dashboard & Visualization")' issues.json
```
**High priority only**:
```bash
jq '.[] | select(.labels[] | contains("priority: high"))' issues.json
```
## 🎯 Recommended Workflow
1. **Review**: Read through `issues_preview.md` to understand all issues
2. **Create Milestones**: Set up milestones in GitHub
3. **Create Labels**: Ensure all required labels exist
4. **Import Security Issues First**: Consider importing just the Security Sprint issues first
5. **Import Remaining Issues**: Create the rest of the issues
6. **Organize**: Assign issues to milestones and team members
7. **Prioritize**: Adjust priorities based on your team's capacity
## 📞 Support
- **Source**: Generated from [ROADMAP.md](../ROADMAP.md)
- **Script**: [scripts/generate_issues.py](../scripts/generate_issues.py)
- **Questions**: Open an issue in the DMARQ repository
## 🔒 Important Notes
### Security Priority
The Security Remediation Sprint issues are marked as CRITICAL and HIGH priority. These should be addressed **before** implementing new features to ensure the application is secure.
### Milestone Dependencies
Some milestones depend on others:
- Milestone 5 (Authentication) is required before several later features
- Security Sprint should be completed before Milestone 4
- See the roadmap for detailed dependency information
### Rate Limiting
The import script includes rate limiting (1 second between API calls) to avoid GitHub API throttling. Creating all 54 issues will take approximately 1-2 minutes.
---
**Generated**: 2026-02-06
**Script Version**: 1.0
**Issues Count**: 54
+1446
View File
File diff suppressed because it is too large Load Diff
+592
View File
@@ -0,0 +1,592 @@
[
{
"title": "[Security Sprint] Authentication & Authorization",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **CRITICAL**\n\n### Tasks\n\n- [ ] Add authentication middleware to all admin endpoints\n- [ ] Implement proper user authentication system\n- [ ] Add authorization checks on sensitive operations\n- [ ] Add rate limiting to prevent abuse\n\n### Files to Update\n\n- `backend/app/main.py`\n- `backend/app/api/api_v1/endpoints/imap.py`\n- `backend/app/api/api_v1/endpoints/domains.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: critical",
"security: critical"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] Secret Management",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **CRITICAL**\n\n### Tasks\n\n- [ ] Remove default SECRET_KEY value\n- [ ] Add SECRET_KEY validation on startup\n- [ ] Document secret generation in deployment guide\n- [ ] Add warning if default secret is detected\n\n### Files to Update\n\n- `backend/app/core/config.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: critical",
"security: critical"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] XML Parsing Security",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **HIGH**\n\n### Tasks\n\n- [ ] Replace ElementTree with defusedxml\n- [ ] Add file size limits for uploads\n- [ ] Implement zip bomb protection\n- [ ] Add malware scanning hooks (optional)\n\n### Files to Update\n\n- `backend/app/services/dmarc_parser.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: high",
"security: high"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] Input Validation",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **HIGH**\n\n### Tasks\n\n- [ ] Add domain name validation regex\n- [ ] Implement file type validation (MIME + extension)\n- [ ] Add parameter validation on all endpoints\n- [ ] Sanitize error messages\n\n### Files to Update\n\n- `backend/app/api/api_v1/endpoints/domains.py`\n- `backend/app/api/api_v1/endpoints/reports.py`\n- `backend/app/utils/domain_validator.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: high",
"security: high"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] Security Headers",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Add security headers middleware\n- [ ] Implement CSP (Content Security Policy)\n- [ ] Add X-Frame-Options, X-Content-Type-Options\n- [ ] Configure HSTS for production\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: medium"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] CORS Configuration",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Restrict CORS methods and headers\n- [ ] Remove wildcard configurations\n- [ ] Document CORS setup for deployments\n\n### Files to Update\n\n- `backend/app/main.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: medium"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[Security Sprint] Error Handling",
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Implement centralized error handling\n- [ ] Remove sensitive data from error responses\n- [ ] Add error logging with request context\n- [ ] Create user-friendly error messages\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"security",
"priority: medium"
],
"milestone": "Security Remediation Sprint",
"assignees": []
},
{
"title": "[M4] Historical trend charts (Chart.js integration)",
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nHistorical trend charts (Chart.js integration)\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-4",
"priority: high"
],
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
"assignees": []
},
{
"title": "[M4] Compliance rate visualizations",
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nCompliance rate visualizations\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-4",
"priority: high"
],
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
"assignees": []
},
{
"title": "[M4] Volume and sender analytics",
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nVolume and sender analytics\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-4",
"priority: high"
],
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
"assignees": []
},
{
"title": "[M4] Time-series data displays",
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nTime-series data displays\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-4",
"priority: high"
],
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
"assignees": []
},
{
"title": "[M4] Domain comparison views",
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nDomain comparison views\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-4",
"priority: high"
],
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
"assignees": []
},
{
"title": "[M5] FastAPI Users integration",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nFastAPI Users integration\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M5] User registration and management",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nUser registration and management\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M5] JWT-based authentication",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nJWT-based authentication\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M5] Role-based access control (RBAC)",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nRole-based access control (RBAC)\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M5] Password reset functionality",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nPassword reset functionality\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M5] Email verification (optional)",
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nEmail verification (optional)\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-5",
"priority: high"
],
"milestone": "Milestone 5: User Authentication & Multi-User Support",
"assignees": []
},
{
"title": "[M6] Apprise integration",
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nApprise integration\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-6",
"priority: medium"
],
"milestone": "Milestone 6: Alerting & Notifications",
"assignees": []
},
{
"title": "[M6] Customizable alert rules",
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nCustomizable alert rules\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-6",
"priority: medium"
],
"milestone": "Milestone 6: Alerting & Notifications",
"assignees": []
},
{
"title": "[M6] Multi-channel notifications (Email, Slack, etc.)",
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nMulti-channel notifications (Email, Slack, etc.)\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-6",
"priority: medium"
],
"milestone": "Milestone 6: Alerting & Notifications",
"assignees": []
},
{
"title": "[M6] Alert history and management",
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nAlert history and management\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-6",
"priority: medium"
],
"milestone": "Milestone 6: Alerting & Notifications",
"assignees": []
},
{
"title": "[M6] Notification preferences per user",
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nNotification preferences per user\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-6",
"priority: medium"
],
"milestone": "Milestone 6: Alerting & Notifications",
"assignees": []
},
{
"title": "[M7] Custom alert conditions",
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nCustom alert conditions\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-7",
"priority: medium"
],
"milestone": "Milestone 7: Advanced Rule Engine",
"assignees": []
},
{
"title": "[M7] Threshold-based triggers",
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nThreshold-based triggers\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-7",
"priority: medium"
],
"milestone": "Milestone 7: Advanced Rule Engine",
"assignees": []
},
{
"title": "[M7] New sender detection",
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nNew sender detection\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-7",
"priority: medium"
],
"milestone": "Milestone 7: Advanced Rule Engine",
"assignees": []
},
{
"title": "[M7] Anomaly detection",
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nAnomaly detection\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-7",
"priority: medium"
],
"milestone": "Milestone 7: Advanced Rule Engine",
"assignees": []
},
{
"title": "[M7] Scheduled report summaries",
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nScheduled report summaries\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-7",
"priority: medium"
],
"milestone": "Milestone 7: Advanced Rule Engine",
"assignees": []
},
{
"title": "[M8] DNS record health checks",
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nDNS record health checks\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-8",
"priority: medium"
],
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
"assignees": []
},
{
"title": "[M8] SPF/DKIM/DMARC validation",
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nSPF/DKIM/DMARC validation\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-8",
"priority: medium"
],
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
"assignees": []
},
{
"title": "[M8] Cloudflare API integration",
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nCloudflare API integration\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-8",
"priority: medium"
],
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
"assignees": []
},
{
"title": "[M8] Configuration recommendations",
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nConfiguration recommendations\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-8",
"priority: medium"
],
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
"assignees": []
},
{
"title": "[M8] DNS change tracking",
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nDNS change tracking\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-8",
"priority: medium"
],
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
"assignees": []
},
{
"title": "[M9] Forensic report parsing",
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nForensic report parsing\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-9",
"priority: low"
],
"milestone": "Milestone 9: Forensic Reports",
"assignees": []
},
{
"title": "[M9] Failure sample analysis",
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nFailure sample analysis\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-9",
"priority: low"
],
"milestone": "Milestone 9: Forensic Reports",
"assignees": []
},
{
"title": "[M9] PII redaction options",
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nPII redaction options\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-9",
"priority: low"
],
"milestone": "Milestone 9: Forensic Reports",
"assignees": []
},
{
"title": "[M9] Detailed authentication failure views",
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nDetailed authentication failure views\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-9",
"priority: low"
],
"milestone": "Milestone 9: Forensic Reports",
"assignees": []
},
{
"title": "[M9] Sample download/export",
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nSample download/export\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-9",
"priority: low"
],
"milestone": "Milestone 9: Forensic Reports",
"assignees": []
},
{
"title": "[M10] Historical trend analysis",
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nHistorical trend analysis\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-10",
"priority: low"
],
"milestone": "Milestone 10: Advanced Analytics & Reporting",
"assignees": []
},
{
"title": "[M10] Comparative reporting",
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nComparative reporting\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-10",
"priority: low"
],
"milestone": "Milestone 10: Advanced Analytics & Reporting",
"assignees": []
},
{
"title": "[M10] Export capabilities (PDF, CSV)",
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nExport capabilities (PDF, CSV)\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-10",
"priority: low"
],
"milestone": "Milestone 10: Advanced Analytics & Reporting",
"assignees": []
},
{
"title": "[M10] Scheduled reports",
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nScheduled reports\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-10",
"priority: low"
],
"milestone": "Milestone 10: Advanced Analytics & Reporting",
"assignees": []
},
{
"title": "[M10] Custom dashboards",
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nCustom dashboards\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-10",
"priority: low"
],
"milestone": "Milestone 10: Advanced Analytics & Reporting",
"assignees": []
},
{
"title": "[M11] Multi-tenant architecture",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nMulti-tenant architecture\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] API rate limiting",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nAPI rate limiting\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] Advanced RBAC",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nAdvanced RBAC\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] SSO integration (SAML, OAuth)",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nSSO integration (SAML, OAuth)\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] Compliance reporting (SOC 2, GDPR)",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nCompliance reporting (SOC 2, GDPR)\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] High availability setup",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nHigh availability setup\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[M11] Backup and disaster recovery",
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nBackup and disaster recovery\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"enhancement",
"milestone-11",
"priority: low"
],
"milestone": "Milestone 11: Enterprise Features",
"assignees": []
},
{
"title": "[Continuous] Code Quality Improvements",
"body": "## Description\n\nOngoing code quality tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Maintain >80% test coverage\n- [ ] Regular dependency updates\n- [ ] Code review for all changes\n- [ ] Performance optimization\n- [ ] Technical debt reduction\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"maintenance",
"continuous-improvement",
"code-quality"
],
"milestone": "Continuous Improvements",
"assignees": []
},
{
"title": "[Continuous] Security Improvements",
"body": "## Description\n\nOngoing security tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Monthly security audits\n- [ ] Automated vulnerability scanning (GitHub Actions)\n- [ ] Dependency security monitoring\n- [ ] Regular penetration testing\n- [ ] Security training for contributors\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"maintenance",
"continuous-improvement",
"security"
],
"milestone": "Continuous Improvements",
"assignees": []
},
{
"title": "[Continuous] Documentation Improvements",
"body": "## Description\n\nOngoing documentation tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Keep documentation current\n- [ ] API documentation completeness\n- [ ] Security best practices guide\n- [ ] Deployment playbooks\n- [ ] Troubleshooting guides\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"maintenance",
"continuous-improvement",
"documentation"
],
"milestone": "Continuous Improvements",
"assignees": []
},
{
"title": "[Continuous] Community Improvements",
"body": "## Description\n\nOngoing community tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Issue triage and response\n- [ ] PR review and merging\n- [ ] Community engagement\n- [ ] Feature request evaluation\n- [ ] Bug fix prioritization\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
"labels": [
"maintenance",
"continuous-improvement"
],
"milestone": "Continuous Improvements",
"assignees": []
}
]
File diff suppressed because it is too large Load Diff
+499
View File
@@ -0,0 +1,499 @@
#!/usr/bin/env python3
"""
Script to generate GitHub issues from DMARQ roadmap documents.
This script parses the roadmap files and creates structured issue templates
that can be imported to GitHub.
"""
import json
import re
from pathlib import Path
from typing import List, Dict, Any
from dataclasses import dataclass, asdict
@dataclass
class Issue:
"""Represents a GitHub issue."""
title: str
body: str
labels: List[str]
milestone: str = ""
assignees: List[str] = None
def __post_init__(self):
if self.assignees is None:
self.assignees = []
class RoadmapParser:
"""Parser for DMARQ roadmap documents."""
def __init__(self, roadmap_path: Path):
self.roadmap_path = roadmap_path
self.content = roadmap_path.read_text()
self.issues: List[Issue] = []
def parse_security_sprint(self) -> List[Issue]:
"""Parse the Security Remediation Sprint section."""
issues = []
# Pattern to match sections like "#### 1. Authentication & Authorization (CRITICAL)"
section_pattern = r'####\s+(\d+)\.\s+(.+?)\((.+?)\)\s*\n(.*?)(?=####|\n##|\Z)'
for match in re.finditer(section_pattern, self.content, re.DOTALL):
section_num = match.group(1)
title = match.group(2).strip()
priority = match.group(3).strip()
content = match.group(4).strip()
# Extract checklist items
checklist_items = re.findall(r'- \[ \] (.+)', content)
# Extract files to fix
files_section = re.search(r'\*\*Files to Fix\*\*:\s*\n((?:\s*-\s+`.+?`.*\n?)+)', content)
files = []
if files_section:
files = re.findall(r'-\s+`(.+?)`', files_section.group(1))
# Build issue body
body_parts = [
f"## Description",
f"",
f"Part of the **Security Remediation Sprint** - Priority: **{priority}**",
f"",
f"### Tasks",
""
]
for item in checklist_items:
body_parts.append(f"- [ ] {item}")
if files:
body_parts.extend([
"",
"### Files to Update",
""
])
for file in files:
body_parts.append(f"- `{file}`")
body_parts.extend([
"",
"### Related Documentation",
"",
"- [SECURITY.md](../SECURITY.md)",
"- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)",
"",
"---",
"*This issue was auto-generated from the DMARQ roadmap.*"
])
# Determine labels based on priority
labels = ["security"]
if "CRITICAL" in priority:
labels.extend(["priority: critical", "security: critical"])
elif "HIGH" in priority:
labels.extend(["priority: high", "security: high"])
elif "MEDIUM" in priority:
labels.extend(["priority: medium"])
issue = Issue(
title=f"[Security Sprint] {title}",
body="\n".join(body_parts),
labels=labels,
milestone="Security Remediation Sprint"
)
issues.append(issue)
return issues
def parse_milestone_features(self) -> List[Issue]:
"""Parse milestone features from the roadmap."""
issues = []
# Pattern to match milestone sections
milestone_pattern = r'##\s+Milestone\s+(\d+):\s+(.+?)(?:\((.+?)\))?\s*\n(.*?)(?=\n##|\Z)'
for match in re.finditer(milestone_pattern, self.content, re.DOTALL):
milestone_num = match.group(1)
milestone_name = match.group(2).strip()
timeline = match.group(3) or ""
content = match.group(4).strip()
# Skip completed milestones
if "COMPLETE ✅" in milestone_name or "" in content[:100]:
continue
# Extract planned features
features_match = re.search(r'###\s+Planned Features\s*\n((?:- \[ \].+\n?)+)', content, re.MULTILINE)
security_match = re.search(r'###\s+Security (?:Features|Considerations|Enhancements Needed)\s*\n((?:- \[ \].+\n?)+)', content, re.MULTILINE)
if features_match:
features = re.findall(r'- \[ \] (.+)', features_match.group(1))
for feature in features:
body_parts = [
f"## Description",
f"",
f"Feature for **Milestone {milestone_num}: {milestone_name}**",
f"",
]
if timeline:
body_parts.append(f"**Timeline**: {timeline}")
body_parts.append("")
body_parts.extend([
f"### Feature",
f"{feature}",
"",
])
# Add security considerations if they exist
if security_match:
security_items = re.findall(r'- \[ \] (.+)', security_match.group(1))
if security_items:
body_parts.extend([
"### Security Considerations",
""
])
for item in security_items:
body_parts.append(f"- [ ] {item}")
body_parts.append("")
body_parts.extend([
"### Related Documentation",
"",
f"- [Milestone {milestone_num}](../ROADMAP.md#milestone-{milestone_num}-{milestone_name.lower().replace(' ', '-').replace('&', '').replace('(', '').replace(')', '')})",
"",
"---",
"*This issue was auto-generated from the DMARQ roadmap.*"
])
labels = ["enhancement", f"milestone-{milestone_num}"]
# Add priority based on milestone
if int(milestone_num) <= 5:
labels.append("priority: high")
elif int(milestone_num) <= 8:
labels.append("priority: medium")
else:
labels.append("priority: low")
issue = Issue(
title=f"[M{milestone_num}] {feature[:80]}",
body="\n".join(body_parts),
labels=labels,
milestone=f"Milestone {milestone_num}: {milestone_name}"
)
issues.append(issue)
# Create separate issues for security enhancements
if security_match and "Security Enhancements Needed" in content:
security_items = re.findall(r'- \[ \] (.+)', security_match.group(1))
if security_items:
body_parts = [
f"## Description",
f"",
f"Security enhancements for **Milestone {milestone_num}: {milestone_name}**",
f"",
"### Security Tasks",
""
]
for item in security_items:
body_parts.append(f"- [ ] {item}")
body_parts.extend([
"",
"### Related Documentation",
"",
f"- [Milestone {milestone_num}](../ROADMAP.md#milestone-{milestone_num}-{milestone_name.lower().replace(' ', '-').replace('&', '').replace('(', '').replace(')', '')})",
"- [SECURITY.md](../SECURITY.md)",
"",
"---",
"*This issue was auto-generated from the DMARQ roadmap.*"
])
issue = Issue(
title=f"[M{milestone_num}] Security Enhancements for {milestone_name}",
body="\n".join(body_parts),
labels=["security", f"milestone-{milestone_num}", "enhancement"],
milestone=f"Milestone {milestone_num}: {milestone_name}"
)
issues.append(issue)
return issues
def parse_continuous_improvements(self) -> List[Issue]:
"""Parse continuous improvement tasks."""
issues = []
# Find the Continuous Improvements section
ci_start = self.content.find('## Continuous Improvements')
if ci_start == -1:
return issues
# Find the end at "---" or next "##"
content_after_ci = self.content[ci_start:]
# Find the first separator (--- line by itself)
separator_match = re.search(r'\n---\n', content_after_ci)
next_section_match = re.search(r'\n## [^C]', content_after_ci) # Next section that doesn't start with 'C'
# Take whichever comes first
end_pos = len(content_after_ci)
if separator_match and next_section_match:
end_pos = min(separator_match.start(), next_section_match.start())
elif separator_match:
end_pos = separator_match.start()
elif next_section_match:
end_pos = next_section_match.start()
ci_content = content_after_ci[:end_pos]
# Split by ### to get subsections
subsections = re.split(r'\n###\s+', ci_content)
for subsection in subsections[1:]: # Skip the first split (the title)
lines = subsection.split('\n')
if not lines:
continue
category = lines[0].strip()
items = []
for line in lines[1:]:
match = re.match(r'- \[ \] (.+)', line)
if match:
items.append(match.group(1))
if not items:
continue
body_parts = [
f"## Description",
f"",
f"Ongoing {category.lower()} tasks to maintain and improve DMARQ.",
f"",
"### Tasks",
""
]
for item in items:
body_parts.append(f"- [ ] {item}")
body_parts.extend([
"",
"### Related Documentation",
"",
"- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)",
"",
"---",
"*This issue was auto-generated from the DMARQ roadmap.*"
])
labels = ["maintenance", "continuous-improvement"]
if category.lower() == "security":
labels.append("security")
elif category.lower() == "documentation":
labels.append("documentation")
elif category.lower() == "code quality":
labels.append("code-quality")
issue = Issue(
title=f"[Continuous] {category} Improvements",
body="\n".join(body_parts),
labels=labels,
milestone="Continuous Improvements"
)
issues.append(issue)
return issues
def parse_all(self) -> List[Issue]:
"""Parse all issues from the roadmap."""
print(f"Parsing {self.roadmap_path.name}...")
self.issues.extend(self.parse_security_sprint())
print(f" - Found {len(self.issues)} security sprint issues")
milestone_count = len(self.issues)
self.issues.extend(self.parse_milestone_features())
print(f" - Found {len(self.issues) - milestone_count} milestone feature issues")
ci_count = len(self.issues)
self.issues.extend(self.parse_continuous_improvements())
print(f" - Found {len(self.issues) - ci_count} continuous improvement issues")
return self.issues
def save_issues_json(issues: List[Issue], output_path: Path):
"""Save issues to JSON file."""
issues_data = [asdict(issue) for issue in issues]
with output_path.open('w') as f:
json.dump(issues_data, f, indent=2)
print(f"\nSaved {len(issues)} issues to {output_path}")
def save_issues_markdown(issues: List[Issue], output_path: Path):
"""Save issues to Markdown file for easy review."""
with output_path.open('w') as f:
f.write("# DMARQ Roadmap Issues\n\n")
f.write(f"Auto-generated from roadmap documents.\n\n")
f.write(f"**Total Issues**: {len(issues)}\n\n")
f.write("---\n\n")
# Group by milestone
by_milestone = {}
for issue in issues:
milestone = issue.milestone or "No Milestone"
if milestone not in by_milestone:
by_milestone[milestone] = []
by_milestone[milestone].append(issue)
for milestone, milestone_issues in sorted(by_milestone.items()):
f.write(f"## {milestone}\n\n")
f.write(f"**Count**: {len(milestone_issues)}\n\n")
for issue in milestone_issues:
f.write(f"### {issue.title}\n\n")
f.write(f"**Labels**: {', '.join(issue.labels)}\n\n")
f.write("```markdown\n")
f.write(issue.body)
f.write("\n```\n\n")
f.write("---\n\n")
print(f"Saved issues preview to {output_path}")
def save_github_import_script(issues: List[Issue], output_path: Path):
"""Save a bash script to import issues using GitHub CLI."""
script_lines = [
"#!/bin/bash",
"#",
"# Script to create GitHub issues from DMARQ roadmap",
"# Requires: GitHub CLI (gh) - https://cli.github.com/",
"#",
"# Usage: ./create_issues.sh",
"#",
"",
"set -e",
"",
"REPO=\"christianlouis/dmarq\"",
"",
"echo \"Creating GitHub issues for DMARQ roadmap...\"",
"echo \"Repository: $REPO\"",
"echo \"\"",
"",
"# Check if gh is installed",
"if ! command -v gh &> /dev/null; then",
" echo \"Error: GitHub CLI (gh) is not installed.\"",
" echo \"Please install it from: https://cli.github.com/\"",
" exit 1",
"fi",
"",
"# Check if authenticated",
"if ! gh auth status &> /dev/null; then",
" echo \"Error: Not authenticated with GitHub CLI.\"",
" echo \"Please run: gh auth login\"",
" exit 1",
"fi",
"",
"ISSUE_COUNT=0",
""
]
for i, issue in enumerate(issues, 1):
# Escape special characters in title and body
title = issue.title.replace('"', '\\"').replace('$', '\\$')
body = issue.body.replace('"', '\\"').replace('$', '\\$').replace('`', '\\`')
labels = ','.join(issue.labels)
script_lines.extend([
f"# Issue {i}: {issue.title[:50]}...",
f"echo \"Creating issue {i}/{len(issues)}: {title[:50]}...\"",
"gh issue create \\",
f" --repo \"$REPO\" \\",
f" --title \"{title}\" \\",
f" --body \"{body}\" \\",
f" --label \"{labels}\" || echo \" Failed to create issue {i}\"",
"",
"ISSUE_COUNT=$((ISSUE_COUNT + 1))",
"sleep 1 # Rate limiting",
""
])
script_lines.extend([
"echo \"\"",
"echo \"Done! Created $ISSUE_COUNT issues.\"",
"echo \"\"",
"echo \"Next steps:\"",
"echo \"1. Review the created issues at: https://github.com/$REPO/issues\"",
"echo \"2. Create milestones if needed\"",
"echo \"3. Assign issues to milestones and team members\"",
"echo \"4. Start working on the Security Remediation Sprint first!\""
])
script_content = "\n".join(script_lines)
output_path.write_text(script_content)
output_path.chmod(0o755) # Make executable
print(f"Saved GitHub CLI import script to {output_path}")
def main():
"""Main function."""
repo_root = Path(__file__).parent.parent
roadmap_path = repo_root / "ROADMAP.md"
output_dir = repo_root / "generated_issues"
output_dir.mkdir(exist_ok=True)
print("=" * 60)
print("DMARQ Roadmap Issue Generator")
print("=" * 60)
print()
if not roadmap_path.exists():
print(f"Error: Roadmap file not found at {roadmap_path}")
return 1
# Parse roadmap
parser = RoadmapParser(roadmap_path)
issues = parser.parse_all()
print(f"\n{'=' * 60}")
print(f"Total issues generated: {len(issues)}")
print(f"{'=' * 60}\n")
# Save outputs
save_issues_json(issues, output_dir / "issues.json")
save_issues_markdown(issues, output_dir / "issues_preview.md")
save_github_import_script(issues, output_dir / "create_issues.sh")
print("\n" + "=" * 60)
print("Output files created in:", output_dir)
print("=" * 60)
print("\nFiles generated:")
print(f" 1. issues.json - JSON format for programmatic import")
print(f" 2. issues_preview.md - Human-readable preview")
print(f" 3. create_issues.sh - Executable script using GitHub CLI")
print("\nTo create the issues:")
print(f" cd {output_dir}")
print(" ./create_issues.sh")
print("\nNote: You'll need GitHub CLI (gh) installed and authenticated.")
print(" Install from: https://cli.github.com/")
print()
return 0
if __name__ == "__main__":
exit(main())