Skip to content

smyklot

GitHub App

smyklot

GitHub App

πŸ€– Smyklot

Automated PR approvals and merges based on CODEOWNERS permissions.

Overview

Smyklot is a GitHub App that automates pull request approvals and merges by validating permissions against your repository's CODEOWNERS file. Simply comment on a PR or add emoji reactions, and Smyklot handles the rest.

✨ Features

  • CODEOWNERS-based permissions - Only repository owners defined in .github/CODEOWNERS can approve/merge
  • Multiple command formats - Supports slash commands (/approve), mentions (@smyklot approve), and bare commands (lgtm, merge)
  • Reaction-based commands - Use πŸ‘ to approve or πŸš€ to merge
  • Flexible configuration - Configure via individual variables, full JSON config, or environment variables
  • Emoji feedback - Get instant visual confirmation with βœ… (success), ❌ (error), or ⚠️ (warning)
  • Comment edit/delete handling - Reacts to command edits and removes reactions when commands are deleted
  • Reaction removal tracking - Automatically removes approvals/merges when reactions are removed
  • Multi-command support - Execute multiple commands in a single comment

πŸš€ Supported Commands

Comment Commands

Command Aliases Format Action
approve lgtm, accept /approve, @smyklot approve, approve Approve the pull request
merge - /merge, @smyklot merge, merge Merge the pull request
unapprove - /unapprove, @smyklot unapprove Remove approval
help - /help, @smyklot help Show help information

Reaction Commands

Reaction Action
πŸ‘ Approve the pull request
πŸš€ Merge the pull request

Note: Removing a reaction will automatically undo the corresponding action (remove approval/merge labels).

πŸ“ Usage Examples

# Comment-based commands
/approve
@smyklot merge
lgtm

# Multiple commands in one comment
/approve
/merge

# Reaction-based (just add emoji reaction to any comment)
πŸ‘  # Approve
πŸš€  # Merge

βš™οΈ Configuration

Option 1: Full JSON Configuration (Recommended)

Set a SMYKLOT_CONFIG repository variable (Settings β†’ Secrets and variables β†’ Actions β†’ Variables) with your complete configuration:

{
  "quiet_success": false,
  "quiet_reactions": false,
  "allowed_commands": ["approve", "merge"],
  "command_aliases": {
    "ok": "approve",
    "ship": "merge"
  },
  "command_prefix": "/",
  "disable_mentions": false,
  "disable_bare_commands": false,
  "disable_unapprove": false,
  "disable_reactions": false,
  "disable_deleted_comments": false
}

Option 2: Individual Variables

Configure individual settings via repository variables or environment variables with SMYKLOT_ prefix:

Variable Type Default Description
SMYKLOT_QUIET_SUCCESS boolean false Disable success feedback comments
SMYKLOT_QUIET_REACTIONS boolean false Disable reaction-based approval/merge comments
SMYKLOT_ALLOWED_COMMANDS list all Limit which commands are allowed
SMYKLOT_COMMAND_ALIASES map default Define custom command aliases
SMYKLOT_COMMAND_PREFIX string / Custom command prefix
SMYKLOT_DISABLE_MENTIONS boolean false Disable mention commands
SMYKLOT_DISABLE_BARE_COMMANDS boolean false Disable bare commands
SMYKLOT_DISABLE_UNAPPROVE boolean false Disable unapprove command
SMYKLOT_DISABLE_REACTIONS boolean false Disable reaction-based approvals/merges
SMYKLOT_DISABLE_DELETED_COMMENTS boolean false Disable handling of deleted comments

Configuration Precedence: CLI flags > Environment variables > Repository variables > Defaults

πŸ”§ Setup

  1. Install the Smyklot GitHub App on your repository

  2. Create a .github/CODEOWNERS file with global owners:

    * @username
  3. (Optional) Configure behavior via SMYKLOT_CONFIG or individual variables

  4. Comment on PRs with commands or add emoji reactions

πŸ“š Documentation

πŸ”’ Permissions

Smyklot requires the following permissions:

  • Contents: Read (to access CODEOWNERS)
  • Pull requests: Read & Write (to approve and merge)
  • Metadata: Read (default)

πŸ“‹ Current Status

Phase 1: GitHub Actions implementation with global CODEOWNERS support βœ…
Phase 2 (planned): Path-specific permissions and team support


Made with ❀️ by @bartsmykla

Developer

smyklot is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.

Report abuse