JIRA provides REST APIs that you can use to interact with JIRA programmatically. This API client will help you interact with JIRA by REST API.
MIT License
https://docs.atlassian.com/jira/REST/latest/
To create new endpoint - create issue or create pull request
composer require madmis/jira-api 1.0.* $api = new madmis\JiraApi\JiraApi('http://localhost:8080/', '/rest/api/2'); $auth = new madmis\JiraApi\Authentication\Basic('email@test.com', 'password'); $api->setAuthentication($auth); $projectList = $api->project()->getProjects(); $project = $api->project()->getProject('MFTP'); $issue = $api->issue()->getIssue('MFTP-4'); // Issue result array [ 'expand' => "renderedFields,names,schema,transitions,operations,editmeta,changelog" 'id' => "10003" 'self' => "http://localhost:8080/rest/api/2/issue/10003" 'key' => "MFTP-4" 'fields' => { ... } ]###Create Issue
$api = new madmis\JiraApi\JiraApi('http://localhost:8080/', '/rest/api/2'); $auth = new madmis\JiraApi\Authentication\Basic('email@test.com', 'password'); $api->setAuthentication($auth); // without mapping $result = $api->issue()->createIssue('PROJ', 'summary', 1, ['description' => 'description']); // Issue result array [ 'id' => "10105" 'key' => "PROJ-9" 'self' => "http://127.0.0.1:8080/rest/api/2/issue/10105" ] // with mapping $result = $api->issue()->createIssue('PROJ', 'summary', 1, ['description' => 'description'], true); // Issue result class madmis\JiraApi\Model\Issue { protected $self => "http://127.0.0.1:8080/rest/api/2/issue/10104" protected $id => 10104 protected $key => "PROJ-8" protected $labels => [] protected $description => NULL protected $summary => NULL protected $updated => NULL protected $created => NULL protected $issueType => NULL protected $project => NULL protected $creator => NULL protected $reporter => NULL protected $assignee => NULL protected $status => NULL }###Tempo worklog (Tempo timesheets)
// This is default options, it is not required to set them. // Set them only it Tempo REST API has another urn $options = [ 'tempo_timesheets_urn' => '/rest/tempo-timesheets/3', ]; $api = new madmis\JiraApi\JiraApi('http://localhost:8080/', '/rest/api/2', $options); $auth = new madmis\JiraApi\Authentication\Basic('email@test.com', 'password'); $api->setAuthentication($auth); $issue = $api->issue()->getIssue('MFTP-4'); // Tempo worklog result array [ array [ 'timeSpentSeconds' => 28800 'dateStarted' => "2015-08-29T00:00:00.000" 'comment' => "2323" 'self' => "http://127.0.0.1:8080/rest/tempo-timesheets/3/worklogs/10000" 'id' => 10000 'author' => [ ... ] 'issue' => [ ... ] 'worklogAttributes' => [ ... ] ] ]###Mapping
$issue = $api->issue()->getIssue('MFTP-4', '*all', '', true); // Result class madmis\JiraApi\Model\Issue { protected $self => "http://localhost:8080/rest/api/2/issue/10003" protected $id => 10003 protected $key => "MFTP-4" protected $updated => class DateTime protected $issueType => class madmis\JiraApi\Model\IssueType protected $project => class madmis\JiraApi\Model\Project protected $creator => class madmis\JiraApi\Model\User protected $reporter => class madmis\JiraApi\Model\User protected $assignee => class madmis\JiraApi\Model\User protected $status => class madmis\JiraApi\Model\IssueStatus }###Error handling Each client request errors wrapped to custom exception madmis\JiraApi\Exception\ClientException
class madmis\JiraApi\Exception\ClientException { private $request => class GuzzleHttp\Psr7\Request private $response => NULL protected $message => "cURL error 7: Failed to connect to 127.0.0.1 port 8080: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)" ... }ClientException contains original request object and response object if response available
class madmis\JiraApi\Exception\ClientException { private $request => class GuzzleHttp\Psr7\Request private $response => class GuzzleHttp\Psr7\Response { private $reasonPhrase => "Unauthorized" private $statusCode => 401 ... } protected $message => "Client error: 401" ... }So, to handle errors use try/catch
try { $issue = $api->issue()->getIssue('MFTP-4'); } catch (madmis\JiraApi\Exception\ClientException $ex) { // any actions (log error, send email, ...) }To run the tests, you'll need to install phpunit and behat. Easiest way to do this is through composer.
composer install php vendor/bin/phpunit -c phpunit.xml.dist To run Behat test you'll need to install Jira. Create config file from example behat.yml.dist
php vendor/bin/behat -c behat.yml 