YouTrackSharp: A .NET Client for YouTrack

On and off I’ve been working on a .NET library that is a wrapper around YouTrack ReST API’s. YouTrack offers quite a lot of possibilities when it comes to interacting with it. I’ve previously blogged about how we can easily create some HTML 5 graphs using nothing but the ReST API and some jQuery. Of course, we could also take advantage of this API from .NET using merely an HTTP client.

YouTrackSharp

What YouTrackSharp brings to the table is a compact interface to work with YouTrack without worrying about things like cookies, URL’s and other HTTP concerns. It abstracts all that way to provide a simple series of classes to work with YouTrack.

Here’s a sample of a command line app I just wrote to make feature logging easier for ReSharper:

var connection = new Connection(“youtrack.jetbrains.net”);

connection.Authenticate(“username”, “password”);

var issueManagement = new IssueManagement(connection);

var issue = new Issue
{
Assignee = “ReSharperProjectManager”,
Summary = summary,
Description = description,
ProjectShortName = “RSRP”,
Type = “Feature”
};

issueManagement.CreateIssue(issue);

Console.WriteLine(“Feature request logged”);

Currently it allows you to Create Issues, Upload Attachments, Get Issues, Apply Commands to issues as well as a bunch of tasks on Projects. I’m adding features as and when I can, so if there’s something you’d like, log it here.

How to use it

YouTrackSharp is available as a NuGet package and source code is available on GitHub. To use it, just do:

install-package YouTrackSharp

You first need to create a Connection object (providing host) and then either a IssueManagement or ProjectManagement based on what you need to do. The classes are simple and the methods should be self explanatory. The project also comes with tests using MSpec which describe many scenarios. If you have any questions, shout!

Ruby

If you are a Ruby developer, know that Anna Zhdan, a colleague at JetBrains, has also started working on a Ruby library for YouTrack, which is available on GitHub

This entry was posted in tips and tagged . Bookmark the permalink.

19 Responses to YouTrackSharp: A .NET Client for YouTrack

  1. AntonK says:

    Thanks for sharing!
    As far as I understand https://github.com/hhariri/YouTrackSharp was forked from https://github.com/JetBrains/YouTrackSharp… so which branch is official and in sync with YouTrack releases?

  2. Hadi Hariri says:

    Hi Anton

    The one on JetBrains is the official one now. We moved it under the company account.

  3. AntonK says:

    I’ve already found your note at http://hadihariri.com/2011/08/17/youtracksharp-and-youtrackforresharper-on-jetbrains-github/ , saying that you’ve transferred the YouTrackSharp project over to the JetBrains account on github, so https://github.com/JetBrains/YouTrackSharp is the “official version” :)

  4. KevinTran says:

    Nice post!

  5. Mike says:

    Do you have any examples of creating issues with custom fields?

    • Hadi Hariri says:

      YouTrackSharp is now based on dynamic type so any field you add (custom) will automatically be persisted. In fact expect for a couple of fields, everything else is custom (dynamic)

  6. RichieB says:

    Great piece of work, especially using dynamics.

    One question I have is how do I translate the date and time values (i.e. created) into a C# datetime? Initially I thought it was ticks but that isn’t anywhere close. I’m creating a tray icon application that pops up a balloon whenever an issue has been logged within the past couple of minutes and just need to compare the time that the issue was created to Now.

    Thanks

  7. Tom Fanning says:

    So, now it’s all using C# dynamics, it’s not so self explanatory any more. Where’s the documentation?

    • Hadi Hariri says:

      Docs for?

      • David Wimbley says:

        What I think Tom means is that using the above code sample paired with the latest version of YouTrackSharp from NuGet, the sample provided in this article no longer works.

        I think the only change needed to the above sample is to make the code not use object initialization assignment method.

        Change

        var issue = new Issue
        {
        Assignee = “ReSharperProjectManager”,
        Summary = summary,
        Description = description,
        ProjectShortName = “RSRP”,
        Type = “Feature”
        };

        To

        dynamic issue = new Issue();
        issue.Assignee = “ReSharperProjectManager”;
        issue.Summary = “summary”;
        issue.Description = “description”;
        issue.ProjectShortName = “RSRP”;
        issue.Type = “Feature”;

        And I think that solves all the issues that people will have going forward.

  8. Ivan Sakharov says:

    Is there a way to get timetracking data for the selected issue? Someting like issueManagement.GetCommentsForIssue() but for work items of Issue?

    • Hadi Hariri says:

      I think the latest version has support for Time tracking info. If you look at the tests there should be sample usage.

      • Ivan Sakharov says:

        Firstly I would like to say thank you for your hard work. Your program has saved me a lot of time.
        But I can not find the methods of object Issue for reading timetrack info. And I can not find samples you specified. I’m looking at version https://github.com/JetBrains/YouTrackSharp/tree/master/src/YouTrackSharp/Issues. Perhaps I need to look somewhere else?
        I made workaround of this problem by creating and using in my programm a class Workitem.cs that is similar to the Comment.cs. But if there is a newer version of the program that would be better.

        • Hadi Hariri says:

          @Ivan,

          Sorry, my bad. Thought it supported it. If you’d like to add support, I’d be happy to accept a Pull Request.

  9. abrahamk says:

    How do I determine the value to use for connection? Using “youtrack.jetbrains.net” causes an AuthenticationException (Forbidden).

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">