#!/usr/bin/perl
# Sample Perl client accessing JIRA via SOAP using the CPAN
# JIRA::Client module. This is mostly a translation of the Python
# client example at
# http://confluence.atlassian.com/display/JIRA/Creating+a+SOAP+Client.
use strict;
use warnings;
use Data::Dumper;
use DateTime;
use JIRA::Client;
my $jirauser = 'soaptester';
my $passwd = 'soaptester';
my $jira = JIRA::Client->new('http://jira.atlassian.com/', $jirauser, $passwd);
my $issue = $jira->getIssue('TST-3410');
print "Retrieved issue:", Dumper($issue), "\n";
my $baseurl = $jira->getServerInfo()->{baseUrl};
# Note: JIRA::Client's create_issue method encapsulates the API's
# createIssue, dealing with several name convertions such as issue
# types, versions, components, dates, and custom fields. It's usually
# much easier to use than the bare method directly.
#
# These name conversions are performed with implicit calls to the
# get_* API methods. They usually require administrative priviledges
# to get called. Be warned!
my $newissue = $jira->create_issue({
project => 'TST',
type => 'Bug',
summary => 'Issue created with Perl!'
});
print "Created $baseurl/browse/$newissue->{key}\n";
print "Adding comment..\n";
# Note: JIRA::Client converts transparently addComment's first
# argument from a RemoteIssue object into an issue key and its second
# argument from a string into a RemoteComment object. This kind of
# implicit conversion is performed for several methods, making it
# easier to use the API.
$jira->addComment($newissue, 'Comment added with SOAP');
print "Updating issue..\n";
# Note: JIRA::Client's update_issue method encapsulates the API's
# updateIssue, in much the same way as create_issue encapsulates
# createIssue above. Note that duedate's value may be specified with a
# DateTime object. Also note how you can specify custom fields by
# name.
$jira->update_issue(
$newissue,
{
summary => '[Updated] Issue created with Perl',
type => 'New feature',
fixVersions => '1.0.1',
duedate => DateTime->today->add(days => 3),
custom_fields => {
'Client' => 'CPqD',
'Location' => 'Campinas',
},
},
);
print "Resolving issue..\n";
# Note: JIRA::Client's progress_workflow_action_safely method
# encapsulates the API's progressWorkflowAction in much the same way
# as create_issue encapsulates createIssue above. It also avoids the
# need to specify values for all the screen values, lest the
# unspecified ones be undefined as a result. Non-specified fields have
# their current values fetched from the Issue and inserted in the
# paramenters to progressWorkflowAction.
$jira->progress_workflow_action_safely(
$newissue,
'Resolve Issue',
{
assigne => 'jefft',
fixVersions => '1.1.0',
resolution => "Won't Fix",
},
);
# This works if you have the right permissions
my $user = $jira->createUser("testuser2", "testuser2", "SOAP-created user", 'newuser@localhost');
print "Created user $user\n";
my $group = $jira->getGroup("jira-developers");
$jira->addUserToGroup($group, $user);
$jira->addVersion("TST", {name => 'Version 1'});
print "Done!\n";