NAME
    TAP::Formatter::TeamCity - Emit test results as TeamCity service
    messages

SYNOPSIS
       # When using prove(1):
       prove -formatter TAP::Formatter::TeamCity my_test.t

       # From within a Module::Build subclass:
       sub tap_harness_args { return {formatter_class => 'TAP::Formatter::TeamCity'} }

DESCRIPTION
    TAP::Formatter::TeamCity is a plugin for TAP::Harness that emits
    TeamCity service messages to the console, rather than the usual output.
    The TeamCity build server is able to process these messages in the build
    log and present your test results in its web interface (along with some
    nice statistics and graphs).

    This is very much alpha code, and is subject to change.

SEE IT IN ACTION
    If you're not familiar with continuous integration systems (in general)
    or TeamCity (in particular), you're welcome to explore the TeamCity
    build server we use for the Perl::Critic project. Just go to
    <http://perlcritic.com:8111> and click on the "Login as a Guest" link.
    From there, you can browse the build history, review test results, and
    examine the artifacts (such as test coverage reports and performance
    profiles). All the information you see there was generated from
    TAP-based tests using this module to communicate the results to the
    TeamCity server.

SUGGESTED USAGE
    The TeamCity service messages are generally not human-readable, so you
    probably only want to use this Formatter when the tests are being run by
    a TeamCity build agent and the TAP::Formatter::TeamCity module is
    available. I suggest using an environment variable to activate the
    Formatter. If you're using a recent version of Module::Build you might
    do something like this in your Build.PL file:

      # Regular build configuration here:
      my $builder = Module::Build->new( ... )

      # Specify this Formatter, if the environment variable is set:
      $builder->tap_harness_args( {formatter_class => 'TAP::Formatter::TeamCity'} )
        if $ENV{RUNNING_UNDER_TEAMCITY} && eval {require TAP::Formatter::TeamCity};

      # Generate build script as ususal:
      $builder->create_build_script();

    And then set the "RUNNING_UNDER_TEAMCITY" environment variable to a true
    value in your TeamCity build configuration.

    TODO: Figure out if/how to do this with ExtUtils::MakeMaker.

LIMITATIONS
    TeamCity comes from a jUnit culture, so it doesn't understand SKIP and
    TODO tests in the same way that Perl testing harnesses do. Therefore,
    this formatter simply instructs TeamCity to ignore tests that are marked
    SKIP or TODO.

    Also, I haven't yet figured out how to transmit test diagnostic
    messages, so those probably won't appear in the TeamCity web interface.
    But I'm working on it :)

SOME EXTRA CANDY
    TeamCity, CruiseControl, and some other continuous integration systems
    are oriented towards Java code. As such, they don't have native support
    for Perl's customary build tools like Module::Build. But they do have
    nice support for running Ant. This distribution contains an Ant build
    script at build.xml which wraps Module::Build actions in Ant targets.
    This makes it easier to configure TeamCity and CruiseControl to build
    your Perl code. If you're using the EPIC plug-in with Eclipse, you can
    also use this Ant script to build your code from within the IDE. Feel
    free to copy the build.xml into your own projects.

SEE ALSO
    TeamCity::BuildMessages

AUTHOR
    Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>

COPYRIGHT
    Copyright (c) 2009 Imaginative Software Systems. All rights reserved.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself. The full text of this license can
    be found in the LICENSE file included with this module.

