# Contributing to gh-action-readme Thank you for your interest in contributing to gh-action-readme! This guide will help you get started. ## ๐Ÿš€ Quick Start 1. **Fork** the repository on GitHub 2. **Clone** your fork locally 3. **Create** a feature branch from `main` 4. **Make** your changes 5. **Test** your changes 6. **Submit** a pull request ```bash # Clone your fork git clone https://github.com/YOUR_USERNAME/gh-action-readme.git cd gh-action-readme # Create feature branch git checkout -b feature/my-awesome-feature # Install development tools make devtools # Make your changes and test make test make lint # Commit and push git add . git commit -m "feat: add awesome feature" git push origin feature/my-awesome-feature ``` ## ๐Ÿ“‹ Development Guidelines ### Prerequisites - **Go 1.24+** (required) - **golangci-lint** (for code quality) - **pre-commit** (for git hooks) ### Setup Development Environment ```bash # Install development tools make devtools # Install pre-commit hooks make pre-commit-install # Build and verify make build make test make lint ``` ### Code Quality Standards We maintain **zero tolerance** for quality issues: - โœ… **Zero linting violations** - All code must pass `golangci-lint` - โœ… **EditorConfig compliance** - Follow `.editorconfig` rules - โœ… **Test coverage >80%** - Add tests for all new functionality - โœ… **Documentation** - Update docs for user-facing changes - โœ… **Security** - No vulnerabilities in dependencies ### Testing ```bash # Run all tests make test # Run with coverage make test-coverage # Test specific package go test ./internal/generator # Run integration tests go test -tags=integration ./... ``` **Test your changes safely:** ```bash # Use testdata for safe testing (never modifies main README.md) gh-action-readme gen testdata/example-action/ --theme github gh-action-readme gen testdata/composite-action/action.yml --output test.md ``` ## ๐ŸŽฏ Contribution Areas ### ๐ŸŽจ Themes Create new visual themes for different platforms or use cases: 1. Copy existing theme: `cp -r templates/themes/github templates/themes/my-theme` 2. Edit template: `templates/themes/my-theme/readme.tmpl` 3. Test theme: `gh-action-readme gen --theme my-theme testdata/example-action/` 4. Add to theme list in `internal/config.go` ### ๐Ÿ”Œ Features Add new functionality to the core tool: - New output formats (PDF, EPUB, etc.) - Enhanced validation rules - CLI commands and flags - Template functions ### ๐Ÿ› Bug Fixes Fix issues and improve reliability: - Check [GitHub Issues](https://github.com/ivuorinen/gh-action-readme/issues) - Reproduce the bug with test cases - Fix with minimal, targeted changes - Add regression tests ### ๐Ÿ“š Documentation Improve documentation and examples: - Update user guides in `docs/` - Add code examples - Improve error messages - Write tutorials ## ๐Ÿ“ Pull Request Process ### Before Submitting - [ ] Code follows style guidelines (`make lint` passes) - [ ] Tests added for new features (`make test` passes) - [ ] Documentation updated for user-facing changes - [ ] No security vulnerabilities (`make security` passes) - [ ] Commit messages follow [conventional commit format](docs/COMMIT_MESSAGES.md) ### PR Requirements - **Clear title** describing the change - **Detailed description** explaining what and why - **Link related issues** using `Closes #123` syntax - **Screenshots/examples** for UI changes - **Breaking change notes** if applicable ### Review Process 1. **Automated checks** must pass (CI/CD) 2. **Code review** by maintainers 3. **Testing** on multiple platforms if needed 4. **Merge** after approval ## ๐Ÿšจ Critical Guidelines ### README Protection **NEVER modify `/README.md` directly** - it's the main project documentation. **For testing generation:** ```bash # โœ… Correct - target testdata gh-action-readme gen testdata/example-action/ --output test-output.md # โŒ Wrong - overwrites main README gh-action-readme gen # This modifies /README.md ``` ### Security Best Practices - **Never commit secrets** or tokens - **Validate all inputs** especially file paths - **Use secure defaults** in configurations - **Handle errors properly** don't expose internals ## ๐ŸŽจ Code Style ### Go Style Guide We follow standard Go conventions plus: ```go // Package comments for all packages package generator // Function comments for all exported functions // GenerateReadme creates documentation from action.yml files. // It processes the input with the specified theme and format. func GenerateReadme(action *ActionYML, theme, format string) (string, error) { // Implementation... } // Use meaningful variable names actionYML := parseActionFile(filename) outputContent := generateFromTemplate(actionYML, theme) // Handle all errors explicitly if err != nil { return "", fmt.Errorf("failed to parse action: %w", err) } ``` ### Commit Message Format Follow [Conventional Commits](https://conventionalcommits.org/). See [docs/COMMIT_MESSAGES.md](docs/COMMIT_MESSAGES.md) for detailed guidelines. ```bash # Feature additions git commit -m "feat: add support for PDF output format" # Bug fixes git commit -m "fix: resolve template rendering error for empty inputs" # Documentation git commit -m "docs: update configuration guide with new options" # Breaking changes git commit -m "feat!: change CLI argument structure for consistency" ``` ## ๐Ÿงช Testing Guidelines ### Test Structure ```go func TestGenerateReadme(t *testing.T) { tests := []struct { name string action *ActionYML theme string format string want string wantErr bool }{ { name: "successful generation with github theme", action: &ActionYML{ Name: "Test Action", Description: "Test description", }, theme: "github", format: "md", want: "# Test Action\n\nTest description\n", wantErr: false, }, // More test cases... } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := GenerateReadme(tt.action, tt.theme, tt.format) if (err != nil) != tt.wantErr { t.Errorf("GenerateReadme() error = %v, wantErr %v", err, tt.wantErr) return } if got != tt.want { t.Errorf("GenerateReadme() = %v, want %v", got, tt.want) } }) } } ``` ## ๐Ÿ† Recognition Contributors are recognized in: - **GitHub contributors** list - **Release notes** for significant contributions - **Hall of Fame** for major features ## ๐Ÿ’ฌ Community - **Discussions**: [GitHub Discussions](https://github.com/ivuorinen/gh-action-readme/discussions) - **Issues**: [GitHub Issues](https://github.com/ivuorinen/gh-action-readme/issues) - **Security**: [Security Policy](docs/security.md) ## ๐Ÿ“– Additional Resources - **Development Guide**: [docs/development.md](docs/development.md) - **Architecture**: [CLAUDE.md](CLAUDE.md) - **Usage Examples**: [docs/usage.md](docs/usage.md) - **API Reference**: [docs/api.md](docs/api.md) --- ## Happy Contributing! ๐ŸŽ‰ By contributing to gh-action-readme, you're helping make GitHub Actions documentation better for everyone.