add stale bot example
This commit is contained in:
parent
7e7ea149d8
commit
e1a240873f
62
src/stale.php
Normal file
62
src/stale.php
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/php
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
1. loop through all issues:
|
||||||
|
2. if issue has stale "label":
|
||||||
|
2.1. if activity since label was added then remove label
|
||||||
|
2.2. if still no activity in 7 days then close
|
||||||
|
3. if issue doesn not has stale "label"
|
||||||
|
3.1. if no activity in >30 dyas then add "stale" label
|
||||||
|
*/
|
||||||
|
|
||||||
|
// load the config, create the connection and load the repo sepcified on the cmd line args
|
||||||
|
// we will then have $client and $repo available
|
||||||
|
require 'setup.php';
|
||||||
|
|
||||||
|
//get the stale label or create if not exist
|
||||||
|
if (!$staleLabel = $repo->getLabelByName('stale')) {
|
||||||
|
$staleLabel = $repo->createLabel(['name' => 'stale', 'color' => '#ffffff']);
|
||||||
|
}
|
||||||
|
|
||||||
|
//define the function to process each issue
|
||||||
|
$callback = function($issue) use ($staleLabel) {
|
||||||
|
$updatedTime=strtotime($issue->updated_at);
|
||||||
|
$updateDaysAgo=(time()-$updatedTime)/60/60/24;
|
||||||
|
echo "#{$issue->number} - $updateDaysAgo days ago - {$issue->title}\n";
|
||||||
|
if($issue->hasLabel($staleLabel)){
|
||||||
|
//when was it added?
|
||||||
|
$staleTime=null;
|
||||||
|
foreach($issue->getComments() as $comment){
|
||||||
|
if(substr($comment->body,0,35)=='This issue has been marked as stale'){
|
||||||
|
$staleTime=strtotime($comment->created_at);
|
||||||
|
$staleDaysAgo=(time()-$staleTime)/60/60/24;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$staleTime){
|
||||||
|
echo "ERROR: cant find stale time\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if activity sice added then remove label
|
||||||
|
if($updatedTime>$staleTime){
|
||||||
|
$issue->removeLabel($staleLabel);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if no activity in 7 days then close
|
||||||
|
if($updateDaysAgo>7) {
|
||||||
|
$issue->state = 'closed';
|
||||||
|
$issue->save();
|
||||||
|
$issue->addComment('This issue has been automatically closed due to inactivity.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}elseif($updateDaysAgo>30){ //no stale label and >30 days
|
||||||
|
$issue->addLabel($staleLabel);
|
||||||
|
$issue->addComment('This issue has been marked as stale due to 30+ days of inactivity. If there is no futrher activity in the next 7 days it will be automatically closed.');
|
||||||
|
$issue->save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//loop through all issues and call the callback
|
||||||
|
$repo->forIssues($callback);
|
Loading…
Reference in New Issue
Block a user