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/CODEOWNERScan 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
-
Install the Smyklot GitHub App on your repository
-
Create a
.github/CODEOWNERSfile with global owners:* @username
-
(Optional) Configure behavior via
SMYKLOT_CONFIGor individual variables -
Comment on PRs with commands or add emoji reactions
π Documentation
- Repository: https://github.com/bartsmykla/smyklot
- Documentation: https://github.com/bartsmykla/smyklot#readme
- Issues: https://github.com/bartsmykla/smyklot/issues
π 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