Slack Integration Plugin
========================

A simple Gerrit plugin that allows the publishing of certain Gerrit events
to a configured Slack Webhook URL. The plugin uses Gerrit's inherited project
configuration support so common config options can be set at a higher level
and shared by many projects along with project specific config options.


Development
-----------

To build the plugin,
[JDK 1.8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
and [Bazel](https://bazel.build/) are required.

Once installed use _bazel_ to build.

    cd ./slack-integration
    bazel build slack-integration

Once packaged, you can install the _./bazel-bin/slack-integration.jar_ file into
Gerrit.


Installation
------------

Installing the Slack Integration Plugin is as simple as copying the resulting
JAR file into the Gerrit plugins directory. Assuming you installation of Gerrit
is located at _/usr/local/gerrit_ you simply execute the following.

    cp ./slack-integration.jar /usr/local/gerrit/plugins

Simple substitute the path to your Gerrit plugins directory as needed. Gerrit
automatically loads new plugins and unloads old plugins, no restart is
required.


Configuration
-------------

The first thing you need to do is setup an incoming webhook integration in
Slack. This is done via my.slack.com - Configure Integrations.

Configuration of the Slack Integration Plugin is done in Gerrit via a project
specific config file. This configuration is stored in the project’s
_project.config_ file on the _refs/meta/config_ branch of the project.

Common configuration options that can be shared between multiple projects
can be placed in the _All-Projects_ config branch, or another project that
serves as an inherited base. Config options can then be overridden in the
actual project's config branch. For example, you may want to specify a default
webhook URL, username and channel then override the channel to be specific
to each project.

Editing a project's config

    mkdir <project>-config
    cd <project>-config
    git init
    git remote add origin ssh://<admin-user>@<gerrit-host>:29418/<project>
    git fetch origin refs/meta/config:refs/remotes/origin/meta/config
    git checkout meta/config

Create the following config block

    vi project.config

    [plugin "slack-integration"]
        enabled = true
        webhookurl = https://<web-hook-url>
        channel = general
        username = gerrit
        ignore = "^WIP.*"

Commit and push changes

    git commit -a
    git push origin meta/config:meta/config


Configuration Options
---------------------

The following configuration options are available

    enabled – boolean (true/false)
        When true, enables Slack integration (defaults to false).
    webhookurl - String
        The Slack webhook URL to publish to (defaults to an
        empty string).
    channel - String
        The Slack channel to publish to (defaults to "general").
    username - String
        The Slack username to publish as (defaults to "gerrit").
    ignore - Pattern
        A "dotall" enabled regular expression pattern that, when matches
        against a commit message, will prevent the publishing of patchset
        created event messages (defaults to an empty string).
    ignore-unchanged-patch-set - boolean (true/false)
        Whether a Slack notification about a new patch-set shouldn't be
        published when code didn't change (defaults to true).
    ignore-wip-patch-set - boolean (true/false)
        Whether any Slack notifications regarding a work-in-progress change
        shouldn't be published (defaults to true).
    ignore-private-patch-set - boolean (true/false)
        Whether any Slack notifications regarding a private change shouldn't
        be published (defaults to true).
    ignore-comment-author - Pattern
        A "dotall" enabled regular expression pattern that, when matches
        against the comment author username, will prevent the publishing
        of comment added event messages (defaults to an empty string).
    publish-on-patch-set-created - boolean (true/false)
        Whether a Slack notification should be published when a new patch set
        is created.
    publish-on-change-merged - boolean (true/false)
        Whether a Slack notification should be published when a change is
        merged.
    publish-on-comment-added - boolean (true/false)
        Whether a Slack notification should be published when a comment is
        added to a review.
    publish-on-reviewer-added - boolean (true/false)
        Whether a Slack notification should be published when a reviewer is
        added to a review.
    publish-on-wip-ready - boolean(true/false)
        Whether a Slack notification should be published when a
        work-in-progress change is marked ready (defaults to the value for
        publish-on-patch-set-created).
    publish-on-private-to-public - boolean(true/false)
        Whether a Slack notification should be published when a
        private change is changed to public (defaults to the value for
        publish-on-patch-set-created).
   
        
Proxy Configuration
-------------------

If a proxy is needed to connect externally to Slack, a proxy server may
be configured via Gerrit's main configuration file. The path to this file will
vary based on where Gerrit was installed. This example assumes that Gerrit was 
installed in _/usr/local/gerrit_.

Edit _/usr/local/gerrit/etc/gerrit.config_ and add the following block.

    [plugin "slack-integration"]
        proxy-host = <hostname or IP address of the proxy server>
        proxy-port = <port of the proxy server>


Proxy Configuration Options
---------------------------

The following configuration options are available
    
    proxy-host - String
        The host of the proxy server, e.g. my.proxy.host (defaults to null).
    proxy-port - int
        The port of the proxy server (defaults to 8080)
    proxy-username - String
        The username, if needed, to authenticate to the proxy server 
        (defaults to null).
    proxy-password - String
        The password, if needed, for the specified username to authenticate to 
        the proxy server, (defaults to null).
