Stop manually triaging issues. Start automating the repetitive work that keeps your team from shipping.
Bulk label, assign, close, and route issues across repositories with clean PHP code. Built for teams managing hundreds of issues across multiple projects.
composer require conduit-ui/issueYour team creates 50+ issues per week. You're manually labeling bugs, assigning features to team members, and closing duplicates. This package gives you the tools to automate all of it.
use ConduitUI\Issue\Issue;
// Find and update a single issue
Issue::find('owner/repo', 123)
->addLabels(['bug', 'priority-high'])
->assignTo('username')
->save();
// Bulk operations across multiple issues
Issue::query('owner/repo')
->state('open')
->label('needs-triage')
->get()
->each(fn($issue) => $issue
->removeLabels(['needs-triage'])
->addLabels(['triaged'])
->save()
);Smart Labeling
// Add, remove, or replace labels in bulk
Issue::find('owner/repo', 456)
->addLabels(['bug', 'urgent'])
->removeLabels(['question'])
->save();Assignment & Routing
// Route issues to team members based on labels
Issue::query('owner/repo')
->label('frontend')
->open()
->get()
->each(fn($issue) => $issue->assignTo('frontend-team'));Bulk State Management
// Close stale issues automatically
Issue::query('owner/repo')
->state('open')
->updatedBefore(now()->subMonths(6))
->get()
->each(fn($issue) => $issue->close('Closing due to inactivity'));Advanced Filtering
Issue::query('owner/repo')
->author('username')
->assignee('team-member')
->labels(['bug', 'priority-high'])
->since(now()->subWeek())
->sort('created', 'desc')
->get();Comment Management
// Add automated responses
$issue = Issue::find('owner/repo', 789);
$issue->comment('Thanks for reporting! Our team will investigate.');
// Get all comments
$comments = $issue->comments();Comment Reactions
use ConduitUI\Issue\Facades\Issue;
// Add a reaction to a comment
$reaction = Issue::createCommentReaction('owner', 'repo', $commentId, '+1');
// List all reactions on a comment
$reactions = Issue::listCommentReactions('owner', 'repo', $commentId);
// Filter reactions by type
$thumbsUp = $reactions->filter(fn($r) => $r->isThumbsUp());
// Remove a reaction
Issue::deleteCommentReaction('owner', 'repo', $commentId, $reactionId);Available reaction types: +1, -1, laugh, confused, heart, hooray, rocket, eyes
Lock & Unlock
// Lock heated discussions
$issue->lock('too heated');
// Unlock when ready
$issue->unlock();use ConduitUI\Issue\Issue;
$issue = Issue::find('owner/repo', 123);
$issues = Issue::query('owner/repo')->open()->get();use ConduitUI\Issue\IssueManager;
$manager = new IssueManager('owner/repo');
$issue = $manager->find(123);
$issues = $manager->query()->open()->get();All responses return strongly-typed DTOs:
$issue->id; // int
$issue->number; // int
$issue->title; // string
$issue->state; // 'open' | 'closed'
$issue->author; // User object
$issue->assignees; // Collection of User objects
$issue->labels; // Collection of Label objects
$issue->createdAt; // Carbon instance
$issue->updatedAt; // Carbon instance
$issue->closedAt; // ?Carbon instanceAutomated Triage Bot
// Label bugs automatically based on title keywords
Issue::query('owner/repo')
->state('open')
->created('after', now()->subHour())
->get()
->filter(fn($issue) => str_contains(strtolower($issue->title), 'bug'))
->each(fn($issue) => $issue->addLabels(['bug', 'needs-triage']));Team Assignment
// Route issues to on-call team member
$oncall = getOncallEngineer(); // Your function
Issue::query('owner/repo')
->label('incident')
->open()
->get()
->each(fn($issue) => $issue->assignTo($oncall));Stale Issue Cleanup
// Close issues with no activity for 90 days
Issue::query('owner/repo')
->state('open')
->updatedBefore(now()->subDays(90))
->get()
->each(function($issue) {
$issue->comment('Closing due to inactivity. Please reopen if still relevant.');
$issue->close();
});Publish the config file:
php artisan vendor:publish --tag="issue-config"Set your GitHub token in .env:
GITHUB_TOKEN=your-github-token- PHP 8.2+
- GitHub personal access token with
reposcope
composer test- conduit-ui/pr - Pull request automation
- conduit-ui/repo - Repository governance
- conduit-ui/connector - GitHub API transport layer
Managing issues across 100+ repositories? Contact jordan@partridge.rocks for custom automation solutions.
MIT License. See LICENSE for details.