mirror of
https://github.com/ivuorinen/gh-action-readme.git
synced 2026-02-09 21:47:46 +00:00
feat: update go version, renovate config, tooling, fixes (#28)
* feat(deps): update go version, renovate config, tooling * chore(deps): update google/go-github to v74 * feat(deps): migrate from yaml.v3 to goccy/go-yaml * chore(deps): update goccy/go-yaml to v1.18.0 and address security concerns * feat: improve issue templates and project configuration - Update GitHub issue templates with CLI-specific fields for better bug reports - Add specialized templates for documentation, theme, and performance issues - Update pre-commit config to include comprehensive documentation linting - Remove outdated Snyk configuration and security references - Update Go version from 1.23+ to 1.24+ across project - Streamline README.md organization and improve clarity - Update CHANGELOG.md and CLAUDE.md formatting - Create comprehensive CONTRIBUTING.md with development guidelines - Remove TODO.md (replaced by docs/roadmap.md) - Move SECURITY.md to docs/security.md * docs: fix markdown linting violations across documentation * fix: resolve template placeholder issues and improve uses statement generation * fix: remove trailing whitespace from GitHub issue template
This commit is contained in:
447
docs/development.md
Normal file
447
docs/development.md
Normal file
@@ -0,0 +1,447 @@
|
||||
# Development Guide
|
||||
|
||||
Comprehensive guide for developing and contributing to gh-action-readme.
|
||||
|
||||
## 🚨 CRITICAL: README Protection
|
||||
|
||||
**NEVER overwrite `/README.md`** - The root README.md is the main project documentation.
|
||||
|
||||
**For testing generation commands:**
|
||||
|
||||
```bash
|
||||
# New enhanced targeting (recommended)
|
||||
gh-action-readme gen testdata/example-action/
|
||||
gh-action-readme gen testdata/composite-action/action.yml
|
||||
|
||||
# Traditional method (still supported)
|
||||
cd testdata/
|
||||
../gh-action-readme gen [options]
|
||||
```
|
||||
|
||||
## 🛠️ Development Setup
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- **Go 1.24+** (required)
|
||||
- **golangci-lint** (for linting)
|
||||
- **pre-commit** (for git hooks)
|
||||
- **Docker** (optional, for containerized testing)
|
||||
|
||||
### Quick Start
|
||||
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/ivuorinen/gh-action-readme.git
|
||||
cd gh-action-readme
|
||||
|
||||
# Install development tools
|
||||
make devtools
|
||||
|
||||
# Install pre-commit hooks
|
||||
make pre-commit-install
|
||||
|
||||
# Build and test
|
||||
make build
|
||||
make test
|
||||
make lint
|
||||
```
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
- **`main.go`** - CLI with Cobra framework, enhanced gen command
|
||||
- **`internal/generator.go`** - Core generation logic with custom output paths
|
||||
- **`internal/config.go`** - Viper configuration (XDG compliant)
|
||||
- **`internal/output.go`** - Colored terminal output with progress bars
|
||||
- **`internal/errors/`** - Contextual error handling with suggestions
|
||||
- **`internal/wizard/`** - Interactive configuration wizard
|
||||
- **`internal/progress.go`** - Progress indicators for batch operations
|
||||
|
||||
### Template System
|
||||
|
||||
- **`templates/readme.tmpl`** - Default template
|
||||
- **`templates/themes/`** - Theme-specific templates
|
||||
- `github/` - GitHub-style with badges
|
||||
- `gitlab/` - GitLab CI/CD focused
|
||||
- `minimal/` - Clean, concise
|
||||
- `professional/` - Comprehensive with ToC
|
||||
- `asciidoc/` - AsciiDoc format
|
||||
|
||||
### Testing Framework
|
||||
|
||||
- **`testutil/`** - Comprehensive testing utilities
|
||||
- **`testdata/`** - Test fixtures and sample actions
|
||||
- **Table-driven tests** - Consistent testing patterns
|
||||
- **Mock implementations** - Isolated unit tests
|
||||
|
||||
## 🧪 Testing Strategy
|
||||
|
||||
### Running Tests
|
||||
|
||||
```bash
|
||||
# All tests
|
||||
make test
|
||||
|
||||
# With coverage
|
||||
make test-coverage
|
||||
|
||||
# Specific package
|
||||
go test ./internal/generator
|
||||
|
||||
# Verbose output
|
||||
go test -v ./...
|
||||
|
||||
# Race condition detection
|
||||
go test -race ./...
|
||||
```
|
||||
|
||||
### Test Types
|
||||
|
||||
**Unit Tests** (`*_test.go`):
|
||||
|
||||
```bash
|
||||
go test ./internal # Core logic tests
|
||||
go test ./testutil # Test framework tests
|
||||
```
|
||||
|
||||
**Integration Tests** (`*_integration_test.go`):
|
||||
|
||||
```bash
|
||||
go test -tags=integration ./...
|
||||
```
|
||||
|
||||
**Comprehensive Tests** (`comprehensive_test.go`):
|
||||
|
||||
```bash
|
||||
go test ./internal -run Comprehensive
|
||||
```
|
||||
|
||||
### Testing Best Practices
|
||||
|
||||
1. **Use testutil framework** for consistent test patterns
|
||||
2. **Table-driven tests** for multiple scenarios
|
||||
3. **Mock external dependencies** (GitHub API, filesystem)
|
||||
4. **Test error conditions** and edge cases
|
||||
5. **Verify thread safety** with race detection
|
||||
|
||||
### Test Coverage
|
||||
|
||||
Current coverage: **51.2%** overall
|
||||
|
||||
- **Cache module**: 91.4%
|
||||
- **Errors module**: 91.5%
|
||||
- **Git detector**: 78.4%
|
||||
- **Validation**: 76.2%
|
||||
|
||||
Target: **>80%** coverage for all new code
|
||||
|
||||
## 🔧 Build System
|
||||
|
||||
### Makefile Targets
|
||||
|
||||
```bash
|
||||
# Building
|
||||
make build # Build binary
|
||||
make clean # Clean build artifacts
|
||||
|
||||
# Testing
|
||||
make test # Run all tests
|
||||
make test-coverage # Run tests with coverage
|
||||
make lint # Run all linters
|
||||
|
||||
# Development
|
||||
make devtools # Install dev tools
|
||||
make format # Format code
|
||||
make pre-commit-install # Install git hooks
|
||||
|
||||
# Security
|
||||
make security # Run security scans
|
||||
make vulncheck # Go vulnerability check
|
||||
|
||||
# Dependencies
|
||||
make deps-check # Check outdated dependencies
|
||||
make deps-update # Interactive dependency updates
|
||||
```
|
||||
|
||||
### Build Configuration
|
||||
|
||||
```bash
|
||||
# Build with version info
|
||||
go build -ldflags "-X main.version=v1.0.0 -X main.commit=$(git rev-parse HEAD)"
|
||||
|
||||
# Cross-platform builds (handled by GoReleaser)
|
||||
GOOS=linux GOARCH=amd64 go build
|
||||
GOOS=darwin GOARCH=arm64 go build
|
||||
GOOS=windows GOARCH=amd64 go build
|
||||
```
|
||||
|
||||
## 📝 Code Style & Quality
|
||||
|
||||
### Linting Configuration
|
||||
|
||||
- **golangci-lint** with 35+ enabled linters
|
||||
- **EditorConfig** compliance required
|
||||
- **Pre-commit hooks** for automated checking
|
||||
- **Zero linting violations** policy
|
||||
|
||||
### Code Quality Standards
|
||||
|
||||
- ✅ **Cyclomatic complexity** <10 for all functions
|
||||
- ✅ **Test coverage** >80% for critical modules
|
||||
- ✅ **Error handling** for all possible errors
|
||||
- ✅ **Documentation** for all exported functions
|
||||
- ✅ **Thread safety** for concurrent operations
|
||||
|
||||
### Formatting Rules
|
||||
|
||||
```bash
|
||||
# Auto-format code
|
||||
make format
|
||||
|
||||
# Check formatting
|
||||
gofmt -d .
|
||||
goimports -d .
|
||||
```
|
||||
|
||||
## 🔄 Adding New Features
|
||||
|
||||
### New Theme
|
||||
|
||||
1. Create `templates/themes/THEME_NAME/readme.tmpl`
|
||||
2. Add to `resolveThemeTemplate()` in `config.go`
|
||||
3. Update `configThemesHandler()` in `main.go`
|
||||
4. Add tests and documentation
|
||||
|
||||
### New Output Format
|
||||
|
||||
1. Add constant to `generator.go`
|
||||
2. Add case to `GenerateFromFile()` switch
|
||||
3. Implement `generate[FORMAT]()` method
|
||||
4. Update CLI help and documentation
|
||||
|
||||
### New CLI Command
|
||||
|
||||
1. Add command in `main.go` using Cobra
|
||||
2. Implement handler function
|
||||
3. Add flags and validation
|
||||
4. Write tests and update documentation
|
||||
|
||||
### New Template Functions
|
||||
|
||||
Add to `templateFuncs()` in `internal/template.go`:
|
||||
|
||||
```go
|
||||
"myFunction": func(input string) string {
|
||||
// Implementation
|
||||
return processed
|
||||
},
|
||||
```
|
||||
|
||||
## 🚀 Performance Optimization
|
||||
|
||||
### Profiling
|
||||
|
||||
```bash
|
||||
# CPU profiling
|
||||
go test -cpuprofile=cpu.prof -bench=.
|
||||
go tool pprof cpu.prof
|
||||
|
||||
# Memory profiling
|
||||
go test -memprofile=mem.prof -bench=.
|
||||
go tool pprof mem.prof
|
||||
|
||||
# Benchmark testing
|
||||
go test -bench=. -benchmem
|
||||
```
|
||||
|
||||
### Performance Guidelines
|
||||
|
||||
- **Use sync.Pool** for frequently allocated objects
|
||||
- **Implement caching** for expensive operations
|
||||
- **Minimize memory allocations** in hot paths
|
||||
- **Concurrent processing** for I/O bound operations
|
||||
- **Profile before optimizing**
|
||||
|
||||
## 🔐 Security Practices
|
||||
|
||||
### Security Scanning
|
||||
|
||||
```bash
|
||||
make security # Run all scans
|
||||
make vulncheck # Go vulnerabilities
|
||||
make trivy # Filesystem scan
|
||||
make gitleaks # Secrets detection
|
||||
```
|
||||
|
||||
### Secure Coding
|
||||
|
||||
- **Validate all inputs** especially user-provided data
|
||||
- **Use secure defaults** for all configurations
|
||||
- **Sanitize file paths** to prevent directory traversal
|
||||
- **Handle secrets safely** never log or expose tokens
|
||||
- **Regular dependency updates** with security patches
|
||||
|
||||
### GitHub Token Handling
|
||||
|
||||
```go
|
||||
// ❌ Wrong - logging token
|
||||
log.Printf("Using token: %s", token)
|
||||
|
||||
// ✅ Correct - masking sensitive data
|
||||
log.Printf("Using token: %s", maskToken(token))
|
||||
|
||||
func maskToken(token string) string {
|
||||
if len(token) < 8 {
|
||||
return "***"
|
||||
}
|
||||
return token[:4] + "***" + token[len(token)-4:]
|
||||
}
|
||||
```
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
### Documentation Standards
|
||||
|
||||
- **godoc comments** for all exported functions
|
||||
- **README updates** for user-facing changes
|
||||
- **CHANGELOG entries** following Keep a Changelog format
|
||||
- **Architecture Decision Records** for significant changes
|
||||
|
||||
### Writing Guidelines
|
||||
|
||||
```go
|
||||
// Package generator provides core documentation generation functionality.
|
||||
//
|
||||
// The generator processes GitHub Action YAML files and produces formatted
|
||||
// documentation in multiple output formats (Markdown, HTML, JSON, AsciiDoc).
|
||||
package generator
|
||||
|
||||
// GenerateReadme creates formatted documentation from an ActionYML struct.
|
||||
//
|
||||
// The function applies the specified theme and output format to generate
|
||||
// comprehensive documentation including input/output tables, usage examples,
|
||||
// and metadata sections.
|
||||
//
|
||||
// Parameters:
|
||||
// - action: Parsed action.yml data structure
|
||||
// - theme: Template theme name (github, gitlab, minimal, professional, default)
|
||||
// - format: Output format (md, html, json, asciidoc)
|
||||
//
|
||||
// Returns formatted documentation string and any processing error.
|
||||
func GenerateReadme(action *ActionYML, theme, format string) (string, error) {
|
||||
// Implementation...
|
||||
}
|
||||
```
|
||||
|
||||
## 🤝 Contributing Guidelines
|
||||
|
||||
### Contribution Process
|
||||
|
||||
1. **Fork repository** and create feature branch
|
||||
2. **Make changes** following code style guidelines
|
||||
3. **Add tests** for new functionality
|
||||
4. **Update documentation** as needed
|
||||
5. **Run quality checks** (`make test lint`)
|
||||
6. **Submit pull request** with clear description
|
||||
|
||||
### Pull Request Guidelines
|
||||
|
||||
- **Clear title** describing the change
|
||||
- **Detailed description** of what and why
|
||||
- **Link related issues** if applicable
|
||||
- **Include tests** for new features
|
||||
- **Update documentation** for user-facing changes
|
||||
- **Ensure CI passes** all quality checks
|
||||
|
||||
### Code Review Process
|
||||
|
||||
- **Two approvals** required for merging
|
||||
- **All checks must pass** (tests, linting, security)
|
||||
- **Documentation review** for user-facing changes
|
||||
- **Performance impact** assessment for core changes
|
||||
|
||||
## 🐛 Debugging
|
||||
|
||||
### Debug Mode
|
||||
|
||||
```bash
|
||||
# Enable verbose output
|
||||
gh-action-readme gen --verbose
|
||||
|
||||
# Debug configuration
|
||||
gh-action-readme config show --debug
|
||||
|
||||
# Trace execution
|
||||
TRACE=1 gh-action-readme gen
|
||||
```
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Template Errors:**
|
||||
|
||||
```bash
|
||||
# Validate action.yml syntax
|
||||
gh-action-readme validate --verbose
|
||||
|
||||
# Check template syntax
|
||||
gh-action-readme gen --dry-run --verbose
|
||||
```
|
||||
|
||||
**GitHub API Issues:**
|
||||
|
||||
```bash
|
||||
# Check rate limits
|
||||
curl -H "Authorization: token $GITHUB_TOKEN" \
|
||||
https://api.github.com/rate_limit
|
||||
|
||||
# Test API access
|
||||
gh-action-readme gen --verbose --github-token $GITHUB_TOKEN
|
||||
```
|
||||
|
||||
**Build Issues:**
|
||||
|
||||
```bash
|
||||
# Clean and rebuild
|
||||
make clean
|
||||
make build
|
||||
|
||||
# Check dependencies
|
||||
go mod verify
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
## 📊 Metrics & Monitoring
|
||||
|
||||
### Performance Metrics
|
||||
|
||||
- **Generation time** per action
|
||||
- **GitHub API** request count and timing
|
||||
- **Memory usage** during processing
|
||||
- **Cache hit rates** for repeated operations
|
||||
|
||||
### Quality Metrics
|
||||
|
||||
- **Test coverage** percentage
|
||||
- **Linting violations** count
|
||||
- **Security vulnerabilities** detected
|
||||
- **Documentation coverage** for public APIs
|
||||
|
||||
### Tracking Tools
|
||||
|
||||
```bash
|
||||
# Performance benchmarks
|
||||
go test -bench=. -benchmem ./...
|
||||
|
||||
# Memory profiling
|
||||
go test -memprofile=mem.prof ./...
|
||||
|
||||
# Coverage reporting
|
||||
go test -coverprofile=coverage.out ./...
|
||||
go tool cover -html=coverage.out
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Status**: ENTERPRISE READY ✅
|
||||
*Enhanced gen command, thread-safety, comprehensive testing, and enterprise features fully implemented.*
|
||||
Reference in New Issue
Block a user