Skip to content

Latest commit

 

History

History
221 lines (165 loc) · 7.77 KB

File metadata and controls

221 lines (165 loc) · 7.77 KB

vext Project Overview

Executive Summary

vext (Rhodium Standard Edition) is a modernized, well-maintained fork of the irker IRC notification daemon. It provides real-time commit notifications from version control systems (Git, Mercurial, Subversion) to IRC channels with minimal resource overhead and no join/leave connection spam.

Problem Statement

Traditional commit notification systems suffer from several challenges:

  1. Connection Overhead: Individual notification scripts create new IRC connections for each commit, generating wasteful join/leave spam
  2. Resource Inefficiency: Spawning new processes for every notification consumes system resources
  3. Single Point of Failure: Centralized notification services create dependencies
  4. Inflexibility: Hard-coded or difficult-to-configure notification formats
  5. Maintenance Burden: Original irker lacks modern documentation and active maintenance

Solution

vext solves these problems through:

  • Persistent Daemon Architecture: Single long-running process maintains connection state
  • Decentralized Design: Each repository maintains its own irker instance, no central server
  • Lightweight Implementation: Python-based with minimal dependencies
  • JSON Protocol: Language-agnostic, extensible notification format
  • Active Maintenance: Improved documentation, modern Python support, community-driven development

Core Concept

vext works through a two-component system:

Repository Commit
        ↓
Post-Commit Hook (irkerhook.py)
        ↓ JSON Notification
Daemon Listener (irkerd)
        ↓ Long-lived connections
IRC Server & Channels

The hook script triggers on commit, sends a JSON message to the daemon, and the daemon handles IRC delivery. This separation of concerns enables efficient connection management while keeping hooks simple and stateless.

Use Cases

Primary Use Cases

  1. Development Team Coordination

    • Real-time visibility of repository activity
    • Multiple developers stay informed without email spam
    • Rapid feedback for code reviews and merges
  2. Continuous Integration Pipelines

    • Trigger CI workflows based on commit notifications
    • Route test results and build status to project channels
    • Integration with existing IRC-based workflows
  3. Project Milestone Tracking

    • Announce releases and major commits
    • Multi-channel broadcasting (e.g., #releases, #commits)
    • Historical log of project activity in IRC archives
  4. Multi-Team Awareness

    • Route commits from multiple repositories to dedicated channels
    • Cross-team visibility and collaboration signals
    • Integration with legacy IRC infrastructure

Secondary Use Cases

  • Forge site deployment (GitHub, GitLab, Gitea instances)
  • Academic project collaboration
  • Open-source project governance
  • Legacy system integration

Technical Architecture

Components

  1. irkerd: Daemon process that:

    • Listens on configurable TCP/UDP port (default 6659)
    • Maintains connection state to IRC servers
    • Parses JSON notification requests
    • Routes messages to destination channels
    • Handles rate limiting and flood prevention
  2. irkerhook.py: Hook script that:

    • Integrates with repository post-commit hooks
    • Extracts commit metadata from VCS
    • Formats notification JSON
    • Sends to daemon via network socket
    • Supports Git, Mercurial, and Subversion
  3. Configuration System:

    • Environment variables for simple deployment
    • Configuration files for advanced setups
    • Systemd service files for Linux integration

Data Flow

{
  "to": "irc://irc.libera.chat#myproject",
  "privmsg": "[abc1234] Alice: Fix critical bug in parser",
  "nick": "myproject-bot",
  "color": "ANSI"
}

Advantages

Feature vext Email Slack Centralized CI
Real-time
No central dependency
Self-hosted
Low resource overhead
Works offline
IRC integration
No spam (no join/leave)

Technology Stack

  • Primary Language: Python 2.7+, Python 3.4+
  • Architecture Style: Event-driven daemon with threading
  • Network Protocols: TCP, UDP, IRC (RFC 1459)
  • Data Format: JSON
  • Deployment: systemd (Linux), traditional sysvinit, manual process management
  • Dependencies: Python standard library (minimal external deps)

Installation Footprint

  • Binary Size: ~50-100 KB (Python bytecode)
  • Memory Usage: ~10-50 MB running (depends on connected channels)
  • Storage: ~1 MB for code and configs
  • Network: Outbound TCP/UDP to IRC server, inbound on configured port

Security Considerations

  1. Network Security:

    • Restrict daemon listener to internal networks if not needed externally
    • Use firewall rules to limit access to repository hooks
    • Consider placing daemon behind SSH tunnel for remote deployments
  2. Process Security:

    • Run daemon as unprivileged user (e.g., 'irker')
    • Use seccomp sandboxing if available
    • Limit process file descriptor count
  3. Data Security:

    • Commit messages may contain sensitive information
    • Configure channel access controls
    • Consider encrypted IRC connections (TLS)

Performance Characteristics

  • Notification Latency: <100ms from commit to IRC message (typically <50ms)
  • Memory per Channel: ~1-5 MB
  • CPU Usage: <1% idle, <5% under heavy notification load
  • Concurrent Connections: 100+ channels from single daemon
  • Message Throughput: 1000+ messages/second capacity

Scalability

vext scales through:

  1. Horizontal: Deploy multiple daemon instances for different projects/teams
  2. Vertical: Single daemon handles many channels efficiently
  3. Geographic: Route to different IRC servers by project/team
  4. Topical: Multiple channels per repository for different notification types

Maintenance Model

vext uses a community-maintained development model:

  • Regular updates for Python version compatibility
  • Bug fixes and security patches
  • Documentation improvements
  • Community contributions and extensions
  • Compatibility with modern IRC servers (libera.chat, etc.)

Comparison with irker

Aspect irker (original) vext (RSR)
Python 3 support Partial Full
Documentation Basic Comprehensive
Active maintenance Maintenance mode Active
Configuration Minimal Enhanced
VCS support Git/Hg/SVN Git/Hg/SVN + extensible
Testing Limited Comprehensive
Examples Few Many
Community Small Growing

Deployment Options

  1. Single Server: One daemon instance for organization
  2. Per-Team: Separate daemons for different teams/projects
  3. High Availability: Multiple daemons with load balancing
  4. Cloud Native: Container deployment with orchestration

Roadmap

Planned enhancements for vext:

  1. Short Term (v1.x):

    • Enhanced configuration management
    • Improved error handling and logging
    • Better testing coverage
  2. Medium Term (v2.x):

    • Matrix/Element support alongside IRC
    • Kubernetes-native deployment
    • Web-based administration interface
  3. Long Term (v3.x):

    • Plugin architecture for custom VCS support
    • Advanced routing and filtering
    • Metrics and observability improvements

Conclusion

vext represents the Rhodium Standard Edition of IRC-based commit notification, maintaining the elegant simplicity of irker while adding modern maintenance, comprehensive documentation, and production-ready tooling. It's ideal for teams that already use IRC infrastructure or need a lightweight, self-hosted notification system without external dependencies.