Skip to content

Language-agnostic code quality control tool with Git hooks A code quality control tool built in Go, distributed as a single binary with no external runtime dependencies. Provides enhanced visual feedback with spinners, execution timing, and structured JSON output.

License

Notifications You must be signed in to change notification settings

dmux/go-quality-gate

Repository files navigation

en pt-br

Go Quality Gate Logo

Go Quality Gate

Go Version License CI Release Docker PRs Welcome

Language-agnostic code quality control tool with Git hooks

A code quality control tool built in Go, distributed as a single binary with no external runtime dependencies. Provides enhanced visual feedback with spinners, execution timing, and structured JSON output.

✨ Key Features

  • 🏗️ Single Binary: Zero runtime dependencies (Python, Node.js)
  • 🔧 Automatic Setup: Installs quality tools automatically
  • 🌍 Multi-language: Supports multiple languages in the same repository
  • 📊 Observability: Spinners, timing, and real-time visual feedback
  • 🔒 Built-in Security: Secret scanning in commit workflow
  • ⚡ Native Performance: Instant execution without interpreters
  • 🚀 CI/CD Ready: Clean JSON output for automation pipelines

🚀 Quick Start

1. Installation

Option A: Download Pre-built Binary (Recommended)

# Download the latest release for your platform
# Linux (x64)
wget https://github.com/dmux/go-quality-gate/releases/latest/download/quality-gate-linux-amd64
chmod +x quality-gate-linux-amd64
sudo mv quality-gate-linux-amd64 /usr/local/bin/quality-gate

# Linux (ARM64)
wget https://github.com/dmux/go-quality-gate/releases/latest/download/quality-gate-linux-arm64
chmod +x quality-gate-linux-arm64
sudo mv quality-gate-linux-arm64 /usr/local/bin/quality-gate

# macOS (Intel)
wget https://github.com/dmux/go-quality-gate/releases/latest/download/quality-gate-darwin-amd64
chmod +x quality-gate-darwin-amd64
sudo mv quality-gate-darwin-amd64 /usr/local/bin/quality-gate

# macOS (Apple Silicon)
wget https://github.com/dmux/go-quality-gate/releases/latest/download/quality-gate-darwin-arm64
chmod +x quality-gate-darwin-arm64
sudo mv quality-gate-darwin-arm64 /usr/local/bin/quality-gate

# Windows (download .exe from releases page)
# https://github.com/dmux/go-quality-gate/releases/latest

Option B: Using Go Install

go install github.com/dmux/go-quality-gate/cmd/quality-gate@latest

Option C: Using Docker

# Run directly with Docker
docker run --rm ghcr.io/dmux/go-quality-gate:latest --version

# Create alias for easier usage
echo 'alias quality-gate="docker run --rm -v $(pwd):/workspace -w /workspace ghcr.io/dmux/go-quality-gate:latest"' >> ~/.bashrc
source ~/.bashrc

Option D: Build from Source

# Clone and build
git clone https://github.com/dmux/go-quality-gate.git
cd go-quality-gate
make build

# Install hooks in your project
./quality-gate --install

2. Configuration

Create a quality.yml in your project:

# Generate initial configuration based on your project
./quality-gate --init

3. Usage

# Automatic execution via Git hooks
git commit -m "feat: new feature"

# Manual execution
./quality-gate pre-commit

# JSON output for CI/CD
./quality-gate --output=json pre-commit

# Auto-fix
./quality-gate --fix pre-commit

⚙️ Configuration (quality.yml)

tools:
  - name: "Gitleaks"
    check_command: "gitleaks version"
    install_command: "go install github.com/zricethezav/gitleaks/v8@latest"
  - name: "Ruff (Python)"
    check_command: "ruff --version"
    install_command: "pip install ruff"

hooks:
  security:
    pre-commit:
      - name: "🔒 Security Check"
        command: "gitleaks detect --no-git --source . --verbose"
        output_rules:
          on_failure_message: "Secret leak detected!"

  python-backend:
    pre-commit:
      - name: "🎨 Format Check (Ruff)"
        command: "ruff format ./backend --check"
        fix_command: "ruff format ./backend"
        output_rules:
          show_on: failure
          on_failure_message: "Run './quality-gate --fix' to format."

  typescript-frontend:
    pre-commit:
      - name: "🎨 Format Check (Prettier)"
        command: "npx prettier --check 'frontend/**/*.{ts,tsx}'"
        fix_command: "npx prettier --write 'frontend/**/*.{ts,tsx}'"

📘 How to Use

1. Build

go build -o quality-gate ./cmd/quality-gate

This will create an executable named quality-gate in the current directory.

2. Install Git Hooks

./quality-gate --install

The program will automatically configure pre-commit and pre-push hooks.

3. Advanced Commands

  • ./quality-gate --init: (Experimental) Analyzes your project structure and generates an initial quality.yml file with suggestions
  • ./quality-gate --fix: Executes automatic fix commands (fix_command) defined in your quality.yml
  • ./quality-gate pre-commit --output=json: Executes the specified hook and returns the result in JSON format

4. Configuration (quality.yml)

The configuration is divided into two main sections:

  • tools: List of tools required for the project

    • name: Human-readable tool name
    • check_command: Command that returns success (exit code 0) if the tool is installed
    • install_command: Command executed to install the tool if check_command fails
  • hooks: Quality check configuration

Complete Example

tools:
  - name: "Gitleaks"
    check_command: "gitleaks version"
    install_command: "go install github.com/zricethezav/gitleaks/v8@latest"
  - name: "Ruff (Python Linter/Formatter)"
    check_command: "ruff --version"
    install_command: "pip install ruff"
  - name: "Prettier (Code Formatter)"
    check_command: "npx prettier --version"
    install_command: "npm install --global prettier"

hooks:
  security:
    pre-commit:
      - name: "🔒 Security Check (Gitleaks)"
        command: "gitleaks detect --no-git --source . --verbose"
        output_rules:
          on_failure_message: "Secret leak detected! Review code before committing."

  python-backend:
    pre-commit:
      - name: "🎨 Format Check (Ruff)"
        command: "ruff format ./backend --check"
        fix_command: "ruff format ./backend"
        output_rules:
          show_on: failure
          on_failure_message: "Code formatting issue. Run './quality-gate --fix' to fix."
      - name: "🧪 Tests (Pytest)"
        command: "pytest ./backend"
        output_rules:
          show_on: always

  typescript-frontend:
    pre-commit:
      - name: "🎨 Format Check (Prettier)"
        command: "npx prettier --check 'frontend/**/*.{ts,tsx}'"
        fix_command: "npx prettier --write 'frontend/**/*.{ts,tsx}'"

📋 Available Commands

Command Description Example
--install Installs Git hooks in repository ./quality-gate --install
--init Generates initial quality.yml with intelligent analysis ./quality-gate --init
--fix Executes automatic fixes ./quality-gate --fix pre-commit
--version, -v Shows version information ./quality-gate --version
--output=json Structured output for CI/CD ./quality-gate --output=json pre-commit

📊 Version Information

# Simple version
./quality-gate --version
# Output: quality-gate version 1.2.0

# JSON version with build details
./quality-gate --version --output json
# Output:
{
  "version": "1.2.0",
  "build_date": "2025-10-21T16:34:44Z",
  "git_commit": "f7b01a2"
}

🎯 JSON Output for CI/CD

{
  "status": "success",
  "results": [
    {
      "hook": {
        "Name": "🔒 Security Check",
        "Command": "gitleaks detect --source ."
      },
      "success": true,
      "output": "",
      "duration_ms": 150,
      "duration": "150ms"
    }
  ]
}

🛠️ Development

Prerequisites

  • Go 1.18+
  • Git
  • Package managers for your project languages (pip, npm, etc.)

Local Setup

# Clone the repository
git clone <repo>
cd go-quality-gate

# Install dependencies
go mod tidy

# Build
go build -o quality-gate ./cmd/quality-gate

# Run tests
go test ./...

# Test locally
./quality-gate --init
./quality-gate --install

Architecture

cmd/quality-gate/     # Main application
internal/
  domain/            # Entities and business rules
  service/           # Application logic
  infra/             # Infrastructure (git, shell, logger)
  repository/        # Persistence interfaces
  config/            # Configuration and parsing

🤝 Contributing

  1. Fork the project
  2. Create a branch: git checkout -b feature/new-feature
  3. Commit your changes: git commit -m 'feat: new feature'
  4. Push to the branch: git push origin feature/new-feature
  5. Open a Pull Request

See TODO.md for detailed roadmap and available tasks.

📄 License

This project is under the MIT license. See the LICENSE file for more details.


Version: v1.1.x
Status: Active development
Complete documentation: TODO.md

About

Language-agnostic code quality control tool with Git hooks A code quality control tool built in Go, distributed as a single binary with no external runtime dependencies. Provides enhanced visual feedback with spinners, execution timing, and structured JSON output.

Topics

Resources

License

Stars

Watchers

Forks