Airbrake

Monitoring

Airbyte

Monitoring

Prometheus Alertmanager

Monitoring

Ansible Tower

Deployment

AppFollow

Customer support

AppVeyor

Continuous integration

Asana

Project management

Assembla

Version control

AzureDevOps

Version control

Basecamp

Project management

Beanstalk

Version control

Beeminder

Miscellaneous

BigBlueButton

Communication

Bitbucket

(Enterprise)

Version control

Bitbucket

Version control

Bitbucket Server

Version control

Bonusly

Human resources

Buildbot

Continuous integration

Thinkst Canarytokens

Monitoring

Capistrano

Deployment

Chartbeat

Marketing

CircleCI

Continuous integration

Clubhouse

Project management

Codebase

Version control

Codeship

Continuous integration

Crashlytics

Monitoring

Dark Sky

Miscellaneous

Delighted

Customer support

Desk.com

Customer support

Dialogflow

Customer support

Discourse

Communication

Dropbox

Productivity

Email

Communication

Errbit

Monitoring

Errbot

Integration frameworks

Flock

Customer support

Freshdesk

Customer support

Freshping

Monitoring

Freshstatus

Monitoring

Front

Customer support

GIPHY

Miscellaneous

Git

Version control

Gitea

Version control

GitHub

Version control

GitHub Actions

Continuous integration

GitHub Detail Bot

Version control

GitHub Sponsors

Financial

GitLab

Version control

GoCD

Continuous integration

Gogs

Version control

Google Calendar

Productivity

Google Translate

Miscellaneous

GoSquared

Marketing

Grafana

Monitoring

Greenhouse

Human resources

Groove

Customer support

Harbor

Deployment

HelloSign

Productivity

Hello World

Miscellaneous

Heroku

Deployment

Home Assistant

Miscellaneous

Hubot

Integration frameworks

IFTTT

Integration frameworks

Insping

Monitoring

Instagram

Miscellaneous

Intercom

Customer support

IRC

Communication

Jenkins

Continuous integration

Jira

Project management

Jira

(locally installed)

Project management

Jitsi Meet

Communication

Jotform

Miscellaneous

JSON formatter

Miscellaneous

Librato

Monitoring

Lidarr

Entertainment

Linear

Project management

Mailchimp

Communication

Mastodon

Communication

Matrix

Communication

Mention

Marketing

Mercurial (hg)

Version control

Nagios

Monitoring

Netlify

Continuous integration

New Relic

Monitoring

Notion

Productivity

Open Collective

Financial

OpenShift

Deployment

Opsgenie

Integration frameworks

PagerDuty

Monitoring

Papertrail

Monitoring

Patreon

Financial

Perforce

Version control

Phabricator

Version control

Pingdom

Monitoring

Pivotal Tracker

Project management

Puppet

Deployment

Radarr

Entertainment

Raygun

Monitoring

Redmine

Project management

Review Board

Version control

RhodeCode

Version control

RSS

Communication

Rundeck

Deployment

Semaphore

Continuous integration

Sentry

Monitoring

Slack

Communication

Slack-compatible webhook

Communication

SonarQube

Continuous integration

Sonarr

Entertainment

Splunk

Monitoring

Statuspage

Customer support

Stripe

Financial

Subversion

Version control

Taiga

Project management

Teamcity

Continuous integration

Thinkst

Monitoring

Trac

Project management

Transifex

Miscellaneous

Travis CI

Continuous integration

Trello

Project management

Twitter

Customer support

Updown

Monitoring

UptimeRobot

Monitoring

Wekan

Productivity

WordPress

Marketing

xkcd Bot

Interactive bots

YouTube

Miscellaneous

Zabbix

Monitoring

Zapier

Integration frameworks

Zendesk

Customer support

Zoom

Communication


Don't see an integration you need? We'd love to help.

Create your own or Request an integration
Back to list

Perforce

Version control

Zulip supports integration with Perforce as a trigger that fires once a changelist is submitted and committed.

  1. Download and install our Python bindings and example scripts on the server where the Perforce bot will live.

  2. The Perforce trigger will be installed to a location like /usr/local/share/zulip/integrations/perforce.

  3. Open /usr/local/share/zulip/integrations/perforce/zulip_perforce_config.py with your favorite editor, and change the following lines to specify the email address and API key for your Perforce bot:

    ZULIP_USER = "perforce-bot@example.com"
    ZULIP_API_KEY = "0123456789abcdef0123456789abcdef"
    ZULIP_SITE = "https://conda.zulipchat.com/api"
    
  4. If you have a P4Web viewer set up, you may change P4_WEB to point at the base URL of the server. If this is configured, then the changelist number of each commit will be converted to a hyperlink that displays the commit details on P4Web.

  5. Edit your trigger table with p4 triggers and add an entry something like the following:

    notify_zulip change-commit //depot/... "/usr/local/share/zulip/integrations/perforce/zulip_change-commit.py %change% %changeroot%"
    
  6. By default, this hook will send to streams of the form depot_subdirectory-commits. So, a changelist that modifies files in //depot/foo/bar/baz will result in a message to stream foo-commits. Messages about changelists that modify files in the depot root or files in multiple direct subdirectories of the depot root will be sent to depot-commits. If you'd prefer different behavior, such as all commits across your depot going to one stream, change it now in zulip_perforce_config.py. Make sure that everyone interested in getting these post-commit Zulips is subscribed to the relevant streams!

  7. By default, this hook will send a message to Zulip even if the destination stream does not yet exist. Messages to nonexistent streams prompt the Zulip Notification Bot to inform the bot's owner by direct message that they may wish to create the stream. If this behaviour is undesirable, for example with a large and busy Perforce server, change the ZULIP_IGNORE_MISSING_STREAM variable in zulip_perforce_config.py to True. This will change the hook's behaviour to first check whether the destination stream exists and silently drop messages if it does not.

You're done! Your Perforce notifications may look like this:

Perforce notification bot message

Logos are trademarks of their respective owners. None of the integrations on this page are created by, affiliated with, or supported by the companies represented by the logos.