Files
gh-action-readme/CONTRIBUTING.md
Ismo Vuorinen 3fbb608f9f 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
2025-08-07 05:22:44 +03:00

7.1 KiB

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
# 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

# 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

# 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:

# 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
  • 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 format

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:

# ✅ 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:

// 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:

# 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

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

📖 Additional Resources


Happy Contributing! 🎉

By contributing to gh-action-readme, you're helping make GitHub Actions documentation better for everyone.