mirror of https://github.com/zulip/zulip.git
markdown: Rewrite include plugin without markdown-include.
markdown-include is GPL licensed. Also, rewrite it as a block processor, so that it works correctly inside indented blocks. Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
7f0e11bd06
commit
dc33a0ae67
|
@ -76,7 +76,7 @@ Here are a few common macros used to document Zulip's integrations:
|
||||||
integration or incoming webhook. For an example rendering, see **Step 1** of
|
integration or incoming webhook. For an example rendering, see **Step 1** of
|
||||||
[the docs for Zulip's GitHub integration][github-integration].
|
[the docs for Zulip's GitHub integration][github-integration].
|
||||||
|
|
||||||
- `{!create-bot-construct-url-indented.md!}` macro - Instructs users to create a bot
|
- `{!create-bot-construct-url.md!}` macro - Instructs users to create a bot
|
||||||
for a given integration and construct a webhook URL using the bot API key
|
for a given integration and construct a webhook URL using the bot API key
|
||||||
and stream name. The URL is generated automatically for every incoming webhook
|
and stream name. The URL is generated automatically for every incoming webhook
|
||||||
by using attributes in the `WebhookIntegration` class in
|
by using attributes in the `WebhookIntegration` class in
|
||||||
|
@ -94,12 +94,12 @@ Here are a few common macros used to document Zulip's integrations:
|
||||||
- `{!append-stream-name.md!}` macro - Recommends appending `&stream=stream_name`
|
- `{!append-stream-name.md!}` macro - Recommends appending `&stream=stream_name`
|
||||||
to a URL in cases where supplying a stream name in the URL is optional.
|
to a URL in cases where supplying a stream name in the URL is optional.
|
||||||
Supplying a stream name is optional for most Zulip integrations. If you use
|
Supplying a stream name is optional for most Zulip integrations. If you use
|
||||||
`{!create-bot-construct-url-indented.md!}`, this macro need not be used.
|
`{!create-bot-construct-url.md!}`, this macro need not be used.
|
||||||
|
|
||||||
- `{!append-topic.md!}` macro - Recommends appending `&topic=my_topic` to a URL
|
- `{!append-topic.md!}` macro - Recommends appending `&topic=my_topic` to a URL
|
||||||
to supply a custom topic for webhook notification messages. Supplying a custom
|
to supply a custom topic for webhook notification messages. Supplying a custom
|
||||||
topic is optional for most Zulip integrations. If you use
|
topic is optional for most Zulip integrations. If you use
|
||||||
`{!create-bot-construct-url-indented.md!}`, this macro need not be used.
|
`{!create-bot-construct-url.md!}`, this macro need not be used.
|
||||||
|
|
||||||
- `{!congrats.md!}` macro - Inserts congratulatory lines signifying the
|
- `{!congrats.md!}` macro - Inserts congratulatory lines signifying the
|
||||||
successful setup of a given integration. This macro is usually used at
|
successful setup of a given integration. This macro is usually used at
|
||||||
|
@ -127,7 +127,7 @@ Here are a few common macros used to document Zulip's integrations:
|
||||||
see the last paragraph of **Step 2** in
|
see the last paragraph of **Step 2** in
|
||||||
[the docs for Zulip's GitHub integration][github-integration].
|
[the docs for Zulip's GitHub integration][github-integration].
|
||||||
|
|
||||||
- `{!webhook-url.md!}` - Used internally by `{!create-bot-construct-url-indented.md!}`
|
- `{!webhook-url.md!}` - Used internally by `{!create-bot-construct-url.md!}`
|
||||||
to generate the webhook URL.
|
to generate the webhook URL.
|
||||||
|
|
||||||
- `{!zulip-config.md!}` - Used internally by `{!change-zulip-config-file.md!}`
|
- `{!zulip-config.md!}` - Used internally by `{!change-zulip-config-file.md!}`
|
||||||
|
@ -202,7 +202,7 @@ A typical doc will then have the following steps.
|
||||||
|
|
||||||
##### "Create the bot" step
|
##### "Create the bot" step
|
||||||
|
|
||||||
- Typically, use the `create-bot-construct-url-indented` macro.
|
- Typically, use the `create-bot-construct-url` macro.
|
||||||
- [Existing macros](#markdown-macros) should be used for this if they exist, but if the macro
|
- [Existing macros](#markdown-macros) should be used for this if they exist, but if the macro
|
||||||
defaults don’t work, it may make sense to write something custom for the
|
defaults don’t work, it may make sense to write something custom for the
|
||||||
integration in question. This step is mandatory for all integrations.
|
integration in question. This step is mandatory for all integrations.
|
||||||
|
|
|
@ -69,7 +69,6 @@ module = [
|
||||||
"gitlint.*",
|
"gitlint.*",
|
||||||
"jsonref.*",
|
"jsonref.*",
|
||||||
"ldap.*",
|
"ldap.*",
|
||||||
"markdown_include.*",
|
|
||||||
"moto.*", # https://github.com/spulec/moto/issues/4944
|
"moto.*", # https://github.com/spulec/moto/issues/4944
|
||||||
"onelogin.*",
|
"onelogin.*",
|
||||||
"openapi_core.*",
|
"openapi_core.*",
|
||||||
|
|
|
@ -61,9 +61,6 @@ premailer
|
||||||
# Needed for JWT-based auth
|
# Needed for JWT-based auth
|
||||||
PyJWT
|
PyJWT
|
||||||
|
|
||||||
# Needed for including other Markdown files for user docs
|
|
||||||
markdown-include
|
|
||||||
|
|
||||||
# Needed to access RabbitMQ
|
# Needed to access RabbitMQ
|
||||||
pika
|
pika
|
||||||
|
|
||||||
|
|
|
@ -902,11 +902,6 @@ lxml-stubs==0.4.0 \
|
||||||
markdown==3.3.7 \
|
markdown==3.3.7 \
|
||||||
--hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874 \
|
--hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874 \
|
||||||
--hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621
|
--hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621
|
||||||
# via
|
|
||||||
# -r requirements/common.in
|
|
||||||
# markdown-include
|
|
||||||
markdown-include==0.6.0 \
|
|
||||||
--hash=sha256:6f5d680e36f7780c7f0f61dca53ca581bd50d1b56137ddcd6353efafa0c3e4a2
|
|
||||||
# via -r requirements/common.in
|
# via -r requirements/common.in
|
||||||
markdown-it-py==2.1.0 \
|
markdown-it-py==2.1.0 \
|
||||||
--hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \
|
--hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \
|
||||||
|
|
|
@ -584,11 +584,6 @@ lxml==4.6.5 \
|
||||||
markdown==3.3.7 \
|
markdown==3.3.7 \
|
||||||
--hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874 \
|
--hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874 \
|
||||||
--hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621
|
--hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621
|
||||||
# via
|
|
||||||
# -r requirements/common.in
|
|
||||||
# markdown-include
|
|
||||||
markdown-include==0.6.0 \
|
|
||||||
--hash=sha256:6f5d680e36f7780c7f0f61dca53ca581bd50d1b56137ddcd6353efafa0c3e4a2
|
|
||||||
# via -r requirements/common.in
|
# via -r requirements/common.in
|
||||||
markupsafe==2.1.1 \
|
markupsafe==2.1.1 \
|
||||||
--hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
|
--hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
Open `/usr/local/share/zulip/integrations/{{ integration_name }}/zulip_{{ integration_name }}_config.py`
|
|
||||||
with your favorite editor, and change the following lines to specify the
|
|
||||||
email address and API key for your {{ integration_display_name }} bot:
|
|
||||||
|
|
||||||
```
|
|
||||||
ZULIP_USER = "{{ integration_name }}-bot@example.com"
|
|
||||||
ZULIP_API_KEY = "0123456789abcdef0123456789abcdef"
|
|
||||||
ZULIP_SITE = "{{ api_url }}"
|
|
||||||
```
|
|
|
@ -1,9 +1,9 @@
|
||||||
On your {{ settings_html|safe }}, create a bot for
|
Open `/usr/local/share/zulip/integrations/{{ integration_name }}/zulip_{{ integration_name }}_config.py`
|
||||||
{{ integration_display_name }}.
|
|
||||||
|
|
||||||
Next, open
|
|
||||||
`/usr/local/share/zulip/integrations/{{ integration_name }}/zulip_{{ integration_name }}_config.py`
|
|
||||||
with your favorite editor, and change the following lines to specify the
|
with your favorite editor, and change the following lines to specify the
|
||||||
email address and API key for your {{ integration_display_name }} bot:
|
email address and API key for your {{ integration_display_name }} bot:
|
||||||
|
|
||||||
{!zulip-config.md!}
|
```
|
||||||
|
ZULIP_USER = "{{ integration_name }}-bot@example.com"
|
||||||
|
ZULIP_API_KEY = "0123456789abcdef0123456789abcdef"
|
||||||
|
ZULIP_SITE = "{{ api_url }}"
|
||||||
|
```
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[Create a bot](/help/add-a-bot-or-integration) for
|
|
||||||
{{ integration_display_name }}. Make sure that you select
|
|
||||||
**Incoming webhook** as the **Bot type**:
|
|
||||||
|
|
||||||
![](/static/images/integrations/bot_types.png)
|
|
|
@ -1,15 +0,0 @@
|
||||||
{!create-a-bot-indented.md!}
|
|
||||||
|
|
||||||
Construct the URL for the {{ integration_display_name }}
|
|
||||||
bot using the bot's API key and the desired stream name:
|
|
||||||
|
|
||||||
{!webhook-url.md!}
|
|
||||||
|
|
||||||
Modify the parameters of the URL above, where `api_key` is the API key
|
|
||||||
of your Zulip bot, and `stream` is the [URL-encoded](https://www.urlencoder.org/)
|
|
||||||
stream name you want the notifications sent to. If you do not specify a
|
|
||||||
`stream`, the bot will send notifications via PMs to the creator of the bot.
|
|
||||||
|
|
||||||
If you'd like this integration to always send to a specific topic,
|
|
||||||
just include the (URL-encoded) topic as an additional parameter
|
|
||||||
(E.g. for `your topic`, append `&topic=your%20topic` to the URL).
|
|
|
@ -1,4 +0,0 @@
|
||||||
You can also limit the branches you receive notifications for by
|
|
||||||
specifying them in a comma-separated list at the end of the URL,
|
|
||||||
like so:
|
|
||||||
`{{ api_url }}{{ integration_url }}?api_key=abcdefgh&stream={{ recommended_stream_name }}&branches=main,development`
|
|
|
@ -1,5 +1,4 @@
|
||||||
You can also limit the branches you receive notifications for by
|
You can also limit the branches you receive notifications for by
|
||||||
specifying them in a comma-separated list at the end of the URL,
|
specifying them in a comma-separated list at the end of the URL,
|
||||||
like so:
|
like so:
|
||||||
|
|
||||||
`{{ api_url }}{{ integration_url }}?api_key=abcdefgh&stream={{ recommended_stream_name }}&branches=main,development`
|
`{{ api_url }}{{ integration_url }}?api_key=abcdefgh&stream={{ recommended_stream_name }}&branches=main,development`
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
Construct the URL for the {{ integration_display_name }}
|
|
||||||
bot using the bot's API key and email address:
|
|
||||||
|
|
||||||
`{{ external_uri_scheme }}bot_email:bot_api_key@{{ api_url_scheme_relative }}{{ integration_url }}`
|
|
||||||
|
|
||||||
Modify the parameters of the URL above, where `bot_email` is
|
|
||||||
the bot's URL-encoded email address and `bot_api_key` is the
|
|
||||||
bot's API key. To URL-encode the email address, you just need
|
|
||||||
to replace `@` in the bot's email address with `%40`.
|
|
|
@ -1,7 +1,9 @@
|
||||||
In the URL field, enter:
|
Construct the URL for the {{ integration_display_name }}
|
||||||
|
bot using the bot's API key and email address:
|
||||||
|
|
||||||
`{{ external_uri_scheme }}bot_email:bot_api_key@{{ api_url_scheme_relative }}{{ integration_url }}`
|
`{{ external_uri_scheme }}bot_email:bot_api_key@{{ api_url_scheme_relative }}{{ integration_url }}`
|
||||||
|
|
||||||
Replace `bot_email` and `bot_api_key` above with the URL-encoded email
|
Modify the parameters of the URL above, where `bot_email` is
|
||||||
address and API key of the bot. To URL-encode the email address, you
|
the bot's URL-encoded email address and `bot_api_key` is the
|
||||||
just need to replace `@` in the bot's email address with `%40`.
|
bot's API key. To URL-encode the email address, you just need
|
||||||
|
to replace `@` in the bot's email address with `%40`.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Get Zulip notifications for your Capistrano deploys!
|
Get Zulip notifications for your Capistrano deploys!
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
1. {!download-python-bindings.md!}
|
1. {!download-python-bindings.md!}
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ Get Codebase notifications in Zulip!
|
||||||
updates. We recommend naming the streams `codebase` and `tickets`, respectively.
|
updates. We recommend naming the streams `codebase` and `tickets`, respectively.
|
||||||
After creating these streams, make sure to subscribe all interested parties.
|
After creating these streams, make sure to subscribe all interested parties.
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
1. {!download-python-bindings.md!}
|
1. {!download-python-bindings.md!}
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
You may also need to update the value of `ZULIP_TICKETS_STREAM_NAME` and
|
You may also need to update the value of `ZULIP_TICKETS_STREAM_NAME` and
|
||||||
`ZULIP_COMMITS_STREAM_NAME`.
|
`ZULIP_COMMITS_STREAM_NAME`.
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
Get Zulip notifications for your Git repositories!
|
Get Zulip notifications for your Git repositories!
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
1. {!download-python-bindings.md!}
|
1. {!download-python-bindings.md!}
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
You may also need to change the value of `STREAM_NAME`.
|
You may also need to change the value of `STREAM_NAME`.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
1. Install the "Zulip" plugin by going to
|
1. Install the "Zulip" plugin by going to
|
||||||
**Manage Jenkins > Manage Plugins > Available**,
|
**Manage Jenkins > Manage Plugins > Available**,
|
||||||
|
|
|
@ -16,7 +16,7 @@ in an OpenShift instance.
|
||||||
|
|
||||||
![Connecting to application](/static/images/integrations/openshift/002.png)
|
![Connecting to application](/static/images/integrations/openshift/002.png)
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
1. You can also specify which pushes will result in notifications and to
|
1. You can also specify which pushes will result in notifications and to
|
||||||
what stream the notifications will be sent by modifying the
|
what stream the notifications will be sent by modifying the
|
||||||
|
|
|
@ -8,7 +8,7 @@ that fires once a changelist is submitted and committed.
|
||||||
1. The Perforce trigger will be installed to a location like
|
1. The Perforce trigger will be installed to a location like
|
||||||
`/usr/local/share/zulip/integrations/perforce`.
|
`/usr/local/share/zulip/integrations/perforce`.
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
1. If you have a P4Web viewer set up, you may change `P4_WEB`
|
1. 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,
|
to point at the base URL of the server. If this is configured,
|
||||||
|
|
|
@ -11,7 +11,7 @@ post-commit hook. To do this:
|
||||||
|
|
||||||
[1]: http://pysvn.tigris.org/project_downloads.html
|
[1]: http://pysvn.tigris.org/project_downloads.html
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
1. Copy `integrations/svn/zulip_svn_config.py` and
|
1. Copy `integrations/svn/zulip_svn_config.py` and
|
||||||
`integrations/svn/post-commit` from the API bindings directory
|
`integrations/svn/post-commit` from the API bindings directory
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
1. {!download-python-bindings.md!}
|
1. {!download-python-bindings.md!}
|
||||||
|
|
||||||
1. {!change-zulip-config-file-indented.md!}
|
1. {!change-zulip-config-file.md!}
|
||||||
|
|
||||||
1. Also, change the following lines:
|
1. Also, change the following lines:
|
||||||
|
|
||||||
|
|
|
@ -48,4 +48,4 @@ API_FEATURE_LEVEL = 132
|
||||||
# historical commits sharing the same major version, in which case a
|
# historical commits sharing the same major version, in which case a
|
||||||
# minor version bump suffices.
|
# minor version bump suffices.
|
||||||
|
|
||||||
PROVISION_VERSION = "191.1"
|
PROVISION_VERSION = "192.0"
|
||||||
|
|
|
@ -2191,6 +2191,7 @@ class Markdown(markdown.Markdown):
|
||||||
parser.blockprocessors.register(OListProcessor(parser), "olist", 65)
|
parser.blockprocessors.register(OListProcessor(parser), "olist", 65)
|
||||||
parser.blockprocessors.register(UListProcessor(parser), "ulist", 60)
|
parser.blockprocessors.register(UListProcessor(parser), "ulist", 60)
|
||||||
parser.blockprocessors.register(BlockQuoteProcessor(parser), "quote", 55)
|
parser.blockprocessors.register(BlockQuoteProcessor(parser), "quote", 55)
|
||||||
|
# We get priority 51 from our 'include' extension
|
||||||
parser.blockprocessors.register(
|
parser.blockprocessors.register(
|
||||||
markdown.blockprocessors.ParagraphProcessor(parser), "paragraph", 50
|
markdown.blockprocessors.ParagraphProcessor(parser), "paragraph", 50
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,70 +1,54 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from typing import Any, List
|
from typing import List, Match
|
||||||
|
from xml.etree.ElementTree import Element
|
||||||
|
|
||||||
import markdown
|
from markdown import Extension, Markdown
|
||||||
from markdown_include.include import IncludePreprocessor, MarkdownInclude
|
from markdown.blockparser import BlockParser
|
||||||
|
from markdown.blockprocessors import BlockProcessor
|
||||||
|
|
||||||
from zerver.lib.exceptions import InvalidMarkdownIncludeStatement
|
from zerver.lib.exceptions import InvalidMarkdownIncludeStatement
|
||||||
from zerver.lib.markdown.priorities import PREPROCESSOR_PRIORITES
|
from zerver.lib.markdown.priorities import BLOCK_PROCESSOR_PRIORITIES
|
||||||
|
|
||||||
INC_SYNTAX = re.compile(r"\{!\s*(.+?)\s*!\}")
|
|
||||||
|
|
||||||
|
|
||||||
class MarkdownIncludeCustom(MarkdownInclude):
|
class IncludeExtension(Extension):
|
||||||
def extendMarkdown(self, md: markdown.Markdown) -> None:
|
def __init__(self, base_path: str) -> None:
|
||||||
md.preprocessors.register(
|
super().__init__()
|
||||||
IncludeCustomPreprocessor(md, self.getConfigs()),
|
self.base_path = base_path
|
||||||
"include_wrapper",
|
|
||||||
PREPROCESSOR_PRIORITES["include"],
|
def extendMarkdown(self, md: Markdown) -> None:
|
||||||
|
md.parser.blockprocessors.register(
|
||||||
|
IncludeBlockProcessor(md.parser, self.base_path),
|
||||||
|
"include",
|
||||||
|
BLOCK_PROCESSOR_PRIORITIES["include"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class IncludeCustomPreprocessor(IncludePreprocessor):
|
class IncludeBlockProcessor(BlockProcessor):
|
||||||
"""
|
RE = re.compile(r"^ {,3}\{!([^!]+)!\} *$", re.M)
|
||||||
This is a custom implementation of the markdown_include
|
|
||||||
extension that checks for include statements and if the included
|
|
||||||
macro file does not exist or can't be opened, raises a custom
|
|
||||||
JsonableError exception. The rest of the functionality is identical
|
|
||||||
to the original markdown_include extension.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def run(self, lines: List[str]) -> List[str]:
|
def __init__(self, parser: BlockParser, base_path: str) -> None:
|
||||||
done = False
|
super().__init__(parser)
|
||||||
while not done:
|
self.base_path = base_path
|
||||||
for line in lines:
|
|
||||||
loc = lines.index(line)
|
|
||||||
m = INC_SYNTAX.search(line)
|
|
||||||
|
|
||||||
if m:
|
def test(self, parent: Element, block: str) -> bool: # type: ignore[override] # https://github.com/python/typeshed/pull/8166
|
||||||
filename = m.group(1)
|
return bool(self.RE.search(block))
|
||||||
filename = os.path.expanduser(filename)
|
|
||||||
if not os.path.isabs(filename):
|
|
||||||
filename = os.path.normpath(
|
|
||||||
os.path.join(self.base_path, filename),
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
with open(filename, encoding=self.encoding) as r:
|
|
||||||
text = r.readlines()
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Warning: could not find file {filename}. Error: {e}")
|
|
||||||
lines[loc] = INC_SYNTAX.sub("", line)
|
|
||||||
raise InvalidMarkdownIncludeStatement(m.group(0).strip())
|
|
||||||
|
|
||||||
line_split = INC_SYNTAX.split(line)
|
def expand_include(self, m: Match[str]) -> str:
|
||||||
if len(text) == 0:
|
try:
|
||||||
text.append("")
|
with open(os.path.normpath(os.path.join(self.base_path, m[1]))) as f:
|
||||||
for i in range(len(text)):
|
lines = f.read().splitlines()
|
||||||
text[i] = text[i].rstrip("\r\n")
|
except OSError as e:
|
||||||
text[0] = line_split[0] + text[0]
|
raise InvalidMarkdownIncludeStatement(m[0].strip()) from e
|
||||||
text[-1] = text[-1] + line_split[2]
|
|
||||||
lines = lines[:loc] + text + lines[loc + 1 :]
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
done = True
|
|
||||||
|
|
||||||
return lines
|
for prep in self.parser.md.preprocessors:
|
||||||
|
lines = prep.run(lines)
|
||||||
|
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
def run(self, parent: Element, blocks: List[str]) -> None:
|
||||||
|
blocks[:1] = self.RE.sub(self.expand_include, blocks[0]).split("\n\n")
|
||||||
|
|
||||||
|
|
||||||
def makeExtension(*args: Any, **kwargs: str) -> MarkdownIncludeCustom:
|
def makeExtension(base_path: str) -> IncludeExtension:
|
||||||
return MarkdownIncludeCustom(kwargs)
|
return IncludeExtension(base_path=base_path)
|
||||||
|
|
|
@ -10,8 +10,6 @@ PREPROCESSOR_PRIORITES = {
|
||||||
"generate_code_example": 525,
|
"generate_code_example": 525,
|
||||||
"generate_return_values": 510,
|
"generate_return_values": 510,
|
||||||
"generate_api_arguments": 505,
|
"generate_api_arguments": 505,
|
||||||
"include": 500,
|
|
||||||
# "include_wrapper": 500,
|
|
||||||
"help_relative_links": 475,
|
"help_relative_links": 475,
|
||||||
"setting": 450,
|
"setting": 450,
|
||||||
# "normalize_whitespace": 30,
|
# "normalize_whitespace": 30,
|
||||||
|
@ -21,3 +19,7 @@ PREPROCESSOR_PRIORITES = {
|
||||||
"nested_code_blocks": -500,
|
"nested_code_blocks": -500,
|
||||||
"emoticon_translations": -505,
|
"emoticon_translations": -505,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BLOCK_PROCESSOR_PRIORITIES = {
|
||||||
|
"include": 51,
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
from unittest.mock import MagicMock, call, patch
|
|
||||||
|
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
|
|
||||||
from zerver.lib.exceptions import InvalidMarkdownIncludeStatement
|
from zerver.lib.exceptions import InvalidMarkdownIncludeStatement
|
||||||
|
@ -118,8 +116,7 @@ footer
|
||||||
)
|
)
|
||||||
self.assertEqual(content_sans_whitespace, expected)
|
self.assertEqual(content_sans_whitespace, expected)
|
||||||
|
|
||||||
@patch("builtins.print")
|
def test_custom_markdown_include_extension(self) -> None:
|
||||||
def test_custom_markdown_include_extension(self, mock_print: MagicMock) -> None:
|
|
||||||
template = get_template("tests/test_markdown.html")
|
template = get_template("tests/test_markdown.html")
|
||||||
context = {
|
context = {
|
||||||
"markdown_test_file": "zerver/tests/markdown/test_custom_include_extension.md",
|
"markdown_test_file": "zerver/tests/markdown/test_custom_include_extension.md",
|
||||||
|
@ -129,14 +126,6 @@ footer
|
||||||
InvalidMarkdownIncludeStatement, "Invalid Markdown include statement"
|
InvalidMarkdownIncludeStatement, "Invalid Markdown include statement"
|
||||||
):
|
):
|
||||||
template.render(context)
|
template.render(context)
|
||||||
self.assertEqual(
|
|
||||||
mock_print.mock_calls,
|
|
||||||
[
|
|
||||||
call(
|
|
||||||
"Warning: could not find file templates/zerver/help/include/nonexistent-macro.md. Error: [Errno 2] No such file or directory: 'templates/zerver/help/include/nonexistent-macro.md'"
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_custom_markdown_include_extension_empty_macro(self) -> None:
|
def test_custom_markdown_include_extension_empty_macro(self) -> None:
|
||||||
template = get_template("tests/test_markdown.html")
|
template = get_template("tests/test_markdown.html")
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Airbrake bug tracker!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your project's settings on the Airbrake site. Click on the
|
1. Go to your project's settings on the Airbrake site. Click on the
|
||||||
**Integration** section, and select **Webhook**.
|
**Integration** section, and select **Webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications from Alertmanager!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
Additionally, you may specify URL parameters named `name` and `desc` to specify which labels
|
Additionally, you may specify URL parameters named `name` and `desc` to specify which labels
|
||||||
or annotations will be used to construct the alert message. This allows you to use arbitrary labels
|
or annotations will be used to construct the alert message. This allows you to use arbitrary labels
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Ansible Tower notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Ansible Tower or AWX Admin Portal. Click **Notifications** on
|
1. Go to your Ansible Tower or AWX Admin Portal. Click **Notifications** on
|
||||||
the left sidebar, and click **Add**.
|
the left sidebar, and click **Add**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ using the Zulip AppFollow integration!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. In AppFollow, click on **Integrations** on the left sidebar, and click **Add new integration**.
|
1. In AppFollow, click on **Integrations** on the left sidebar, and click **Add new integration**.
|
||||||
Click on your app under **Tracked apps**.
|
Click on your app under **Tracked apps**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive AppVeyor notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your AppVeyor Project Settings, and click **Notifications**.
|
1. Go to your AppVeyor Project Settings, and click **Notifications**.
|
||||||
Click **Add notification** and select **Webhook**.
|
Click **Add notification** and select **Webhook**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ events in Basecamp.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your project on Basecamp. From the **Settings** menu in
|
1. Go to your project on Basecamp. From the **Settings** menu in
|
||||||
the top right corner, choose **Set up webhooks**. Click on
|
the top right corner, choose **Set up webhooks**. Click on
|
||||||
|
|
|
@ -2,9 +2,9 @@ Zulip supports both SVN and Git notifications from Beanstalk.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
{!webhook-url-with-bot-email-indented.md!}
|
{!webhook-url-with-bot-email.md!}
|
||||||
{!git-append-branches.md!}
|
{!git-append-branches.md!}
|
||||||
|
|
||||||
1. On your repository's webpage, click on the **Settings**
|
1. On your repository's webpage, click on the **Settings**
|
||||||
|
|
|
@ -3,7 +3,7 @@ to derail from your goal!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Beeminder **Reminders** settings.
|
1. Go to your Beeminder **Reminders** settings.
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ Bitbucket Server click [here](./bitbucket3).
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
1. On your repository's web page, click on **Settings**. Select
|
1. On your repository's web page, click on **Settings**. Select
|
||||||
**Webhooks**, and click **Add webhook**.
|
**Webhooks**, and click **Add webhook**.
|
||||||
|
|
|
@ -8,8 +8,8 @@ Bitbucket Cloud (SAAS service) click [here](./bitbucket2).
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
2. {!create-bot-construct-url-indented.md!}
|
2. {!create-bot-construct-url.md!}
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
3. On your repository's web page, click on **Settings**. Select
|
3. On your repository's web page, click on **Settings**. Select
|
||||||
**Webhooks**, and click **Add webhook**.
|
**Webhooks**, and click **Add webhook**.
|
||||||
|
|
|
@ -6,7 +6,7 @@ Get Zulip notifications for your Buildbot builds!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-a-bot-indented.md!}
|
1. {!create-a-bot.md!}
|
||||||
|
|
||||||
1. Edit the Buildbot configuration file to add a new Zulip reporter
|
1. Edit the Buildbot configuration file to add a new Zulip reporter
|
||||||
([or follow the steps listed here][1]):
|
([or follow the steps listed here][1]):
|
||||||
|
|
|
@ -4,7 +4,7 @@ See your Thinkst Canarytoken alerts in Zulip! This integration works with Canary
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to [canarytokens.org][canarytokens], and select the type of
|
1. Go to [canarytokens.org][canarytokens], and select the type of
|
||||||
webhook that you want to create and add a reminder note.
|
webhook that you want to create and add a reminder note.
|
||||||
|
|
|
@ -3,7 +3,7 @@ your build statuses.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Add the following to the bottom of your `circle.yml` file:
|
1. Add the following to the bottom of your `circle.yml` file:
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Clubhouse Stories and Epics!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Clubhouse Dashboard, and click on the settings icon in
|
1. Go to your Clubhouse Dashboard, and click on the settings icon in
|
||||||
the top-right corner. Click on **Integrations**, and select **Webhooks**.
|
the top-right corner. Click on **Integrations**, and select **Webhooks**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ your build statuses.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your project's webpage, click on **Project Settings** in
|
1. On your project's webpage, click on **Project Settings** in
|
||||||
the top right corner. Click on the **Notifications** tab, and click on
|
the top right corner. Click on the **Notifications** tab, and click on
|
||||||
|
|
|
@ -3,7 +3,7 @@ about Crashlytics issues.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Select the app you'd like to be notified about in your
|
1. Select the app you'd like to be notified about in your
|
||||||
[Crashlytics settings panel](https://fabric.io/settings/apps).
|
[Crashlytics settings panel](https://fabric.io/settings/apps).
|
||||||
|
|
|
@ -3,7 +3,7 @@ about updates in feedback responses organized by Delighted.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Delighted dashboard, click on **Settings** in the
|
1. On your Delighted dashboard, click on **Settings** in the
|
||||||
top-right corner. Click on **Integrations**. Scroll down
|
top-right corner. Click on **Integrations**. Scroll down
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Dropbox notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your [Dropbox apps page](https://www.dropbox.com/developers/apps).
|
1. Go to your [Dropbox apps page](https://www.dropbox.com/developers/apps).
|
||||||
Click on **Create app** near the top-right corner, and follow the on-screen
|
Click on **Create app** near the top-right corner, and follow the on-screen
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for the Errbit error tracker!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your project's settings on the Errbit site. Click on the
|
1. Go to your project's settings on the Errbit site. Click on the
|
||||||
**Edit** button for your Errbit app, and select **Webhook**.
|
**Edit** button for your Errbit app, and select **Webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications from your Flock channels.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Click on **Apps** in the bottom-right corner.
|
1. Click on **Apps** in the bottom-right corner.
|
||||||
Click on **Admin Panel**, and click on **Webhooks**.
|
Click on **Admin Panel**, and click on **Webhooks**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ integration!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
### Add notifications for new Freshdesk tickets
|
### Add notifications for new Freshdesk tickets
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Freshping notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your **Freshping** dashboard and click **Settings**.
|
1. Go to your **Freshping** dashboard and click **Settings**.
|
||||||
Click **Integrations** and then click **Create Integration**
|
Click **Integrations** and then click **Create Integration**
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Freshstatus notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Freshstatus dashboard, click **Settings** and click **Integrations**.
|
1. On your Freshstatus dashboard, click **Settings** and click **Integrations**.
|
||||||
Go to **Webhooks** and click **Manage**. Click **New Webhook**
|
Go to **Webhooks** and click **Manage**. Click **New Webhook**
|
||||||
|
|
|
@ -4,7 +4,7 @@ to receive Front notifications without leaving Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to the **Settings** page of your Front organization. Click on the
|
1. Go to the **Settings** page of your Front organization. Click on the
|
||||||
**Integrations** tab, and enable the **Webhooks** integration. Click on
|
**Integrations** tab, and enable the **Webhooks** integration. Click on
|
||||||
|
|
|
@ -4,7 +4,7 @@ you can now get Task notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Send an email to `gci-support@google.com` asking them to enable webhooks
|
1. Send an email to `gci-support@google.com` asking them to enable webhooks
|
||||||
for your organization. They'll need the name of your organization, and
|
for your organization. They'll need the name of your organization, and
|
||||||
|
|
|
@ -2,9 +2,9 @@ Receive Gitea notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
1. Go to your repository on Gitea and click on **Settings**. Select
|
1. Go to your repository on Gitea and click on **Settings**. Select
|
||||||
**Webhooks** on the left sidebar, and click **Add Webhook**.
|
**Webhooks** on the left sidebar, and click **Add Webhook**.
|
||||||
|
|
|
@ -2,9 +2,9 @@ Get GitHub notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
1. Go to your repository on GitHub and click on the **Settings** tab.
|
1. Go to your repository on GitHub and click on the **Settings** tab.
|
||||||
Select **Webhooks**. Click on **Add webhook**. GitHub may prompt
|
Select **Webhooks**. Click on **Add webhook**. GitHub may prompt
|
||||||
|
|
|
@ -2,13 +2,13 @@ Receive GitLab notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
By default, the Zulip topics for merge requests will contain the
|
By default, the Zulip topics for merge requests will contain the
|
||||||
title of the GitLab merge request. You can change the topic format to
|
title of the GitLab merge request. You can change the topic format to
|
||||||
just contain the merge request ID by adding
|
just contain the merge request ID by adding
|
||||||
`&use_merge_request_title=false` at the end of the URL.
|
`&use_merge_request_title=false` at the end of the URL.
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
1. Go to your repository on GitLab and click **Settings** on the left
|
1. Go to your repository on GitLab and click **Settings** on the left
|
||||||
sidebar. Click on **Integrations**.
|
sidebar. Click on **Integrations**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ your build statuses.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Add the following to your `Config.XML` file.
|
1. Add the following to your `Config.XML` file.
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@ Receive Gogs notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
{!git-webhook-url-with-branches-indented.md!}
|
{!git-webhook-url-with-branches.md!}
|
||||||
|
|
||||||
1. Go to your repository on Gogs and click on **Settings**. Select
|
1. Go to your repository on Gogs and click on **Settings**. Select
|
||||||
**Webhooks** on the left sidebar, and click **Add Webhook**.
|
**Webhooks** on the left sidebar, and click **Add Webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive GoSquared notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your project's **Settings** and click on **Services**.
|
1. Go to your project's **Settings** and click on **Services**.
|
||||||
Scroll down and next to **Webhook**, click on **Connect**. Click
|
Scroll down and next to **Webhook**, click on **Connect**. Click
|
||||||
|
|
|
@ -2,7 +2,7 @@ See your Grafana dashboard alerts in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. In Grafana, go to **Alerting**. Click on **Notification channels**.
|
1. In Grafana, go to **Alerting**. Click on **Notification channels**.
|
||||||
Configure **Edit Notification Channel** as appropriate for your
|
Configure **Edit Notification Channel** as appropriate for your
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Greenhouse notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Greenhouse **Dashboard**, click on the
|
1. On your Greenhouse **Dashboard**, click on the
|
||||||
**gear** (<i class="fa fa-cog"></i>) icon in the upper right
|
**gear** (<i class="fa fa-cog"></i>) icon in the upper right
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Groove events!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Groove dashboard, click on **Settings**. Under **Company**,
|
1. On your Groove dashboard, click on **Settings**. Under **Company**,
|
||||||
click on **API**. Open the **Add Webhook** dropdown and select an
|
click on **API**. Open the **Add Webhook** dropdown and select an
|
||||||
|
|
|
@ -4,7 +4,7 @@ Harbor's webhooks feature is available in version 1.9 and later.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Harbor **Projects** page. Open a project and click on the **Webhooks** tab.
|
1. Go to your Harbor **Projects** page. Open a project and click on the **Webhooks** tab.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Configuring the HelloSign integration is easy!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your HelloSign account **Settings**. Select **Integrations** and
|
1. Go to your HelloSign account **Settings**. Select **Integrations** and
|
||||||
click on **API**.
|
click on **API**.
|
||||||
|
|
|
@ -3,7 +3,7 @@ is pushed to Heroku using the Zulip Heroku plugin!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your project on Heroku
|
1. Go to your project on Heroku
|
||||||
and click the **Resources** tab. Add the **Deploy Hooks** add-on.
|
and click the **Resources** tab. Add the **Deploy Hooks** add-on.
|
||||||
|
|
|
@ -5,7 +5,7 @@ in Zulip.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Create an [IFTTT account](https://ifttt.com/join). Select the service you'd like
|
1. Create an [IFTTT account](https://ifttt.com/join). Select the service you'd like
|
||||||
to receive notifications from as `this`. Select **Webhooks** as
|
to receive notifications from as `this`. Select **Webhooks** as
|
||||||
|
|
|
@ -4,7 +4,7 @@ a website or service is up and running or down.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Insping **Dashboard**, click on **Integrations**. Click
|
1. On your Insping **Dashboard**, click on **Integrations**. Click
|
||||||
on **Create Webhook**.
|
on **Create Webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Intercom notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Intercom account's **Settings** page and click on **Developers**
|
1. Go to your Intercom account's **Settings** page and click on **Developers**
|
||||||
on the left sidebar. Click on **Developer Hub** and click **New app**.
|
on the left sidebar. Click on **Developer Hub** and click **New app**.
|
||||||
|
|
|
@ -5,7 +5,7 @@ These instructions apply to Atlassian Cloud's hosted Jira, and Jira Server versi
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Jira **Site administration** page. Click **Jira** on the left.
|
1. Go to your Jira **Site administration** page. Click **Jira** on the left.
|
||||||
On the left sidebar, scroll down, and under **Advanced**, click **WebHooks**.
|
On the left sidebar, scroll down, and under **Advanced**, click **WebHooks**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Jotform responses!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
By default, the integration will use the form's title as the topic.
|
By default, the integration will use the form's title as the topic.
|
||||||
|
|
||||||
1. In Jotform, go to **Form Builder**, and click on **Settings** tab.
|
1. In Jotform, go to **Form Builder**, and click on **Settings** tab.
|
||||||
|
|
|
@ -5,7 +5,7 @@ integration](/api/incoming-webhooks-overview).
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Configure your application to send the webhook
|
1. Configure your application to send the webhook
|
||||||
payload to the **URL** generated above.
|
payload to the **URL** generated above.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Librato/AppOptics alerts!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
By default, the integration will use the name of the alert.
|
By default, the integration will use the name of the alert.
|
||||||
|
|
||||||
1. Go to your AppOptics/Librato homepage, and click on **Settings**
|
1. Go to your AppOptics/Librato homepage, and click on **Settings**
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Lidarr notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Lidarr dashboard. Click **Settings** and
|
1. Go to your Lidarr dashboard. Click **Settings** and
|
||||||
click **Connect**. Click the **+** icon.
|
click **Connect**. Click the **+** icon.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Mention notifications within Zulip via Zapier!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Mention feed, and click on your profile in the top-right
|
1. Go to your Mention feed, and click on your profile in the top-right
|
||||||
corner. Select **Settings**. Click on **Integrations**. Select the
|
corner. Select **Settings**. Click on **Integrations**. Select the
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Netlify deployments!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
2. {!create-bot-construct-url-indented.md!}
|
2. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
3. Go to your Netlify project, and click **Settings**. Click **Build & deploy**, and select **Deploy notifications**.
|
3. Go to your Netlify project, and click **Settings**. Click **Build & deploy**, and select **Deploy notifications**.
|
||||||
Click **Add Notification**, and select **Outgoing webhook**.
|
Click **Add Notification**, and select **Outgoing webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ New Relic can send messages to a Zulip stream for incidents.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On [New Relic](https://one.newrelic.com),
|
1. On [New Relic](https://one.newrelic.com),
|
||||||
select **Alerts & AI**.
|
select **Alerts & AI**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Opbeat events!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Opbeat **Organization Settings**.
|
1. Go to your Opbeat **Organization Settings**.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ when a new member signs-up on an **Open Collective** page.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to [Open Collective Website](https://opencollective.com/), find
|
1. Go to [Open Collective Website](https://opencollective.com/), find
|
||||||
your desired collective page, then go to *Settings* -> *Webhooks*, paste the
|
your desired collective page, then go to *Settings* -> *Webhooks*, paste the
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Opsgenie events!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to <https://app.opsgenie.com/integration>. Click on
|
1. Go to <https://app.opsgenie.com/integration>. Click on
|
||||||
**Add New Integrations**, and select **Webhook**.
|
**Add New Integrations**, and select **Webhook**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your PagerDuty services!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Open the **Integrations** tab, and click **Generic Webhooks (v3)**.
|
1. Open the **Integrations** tab, and click **Generic Webhooks (v3)**.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Papertrail logs!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Papertrail dashboard, search for the logs you'd like
|
1. On your Papertrail dashboard, search for the logs you'd like
|
||||||
to set up alerts for, and click on **Save Search**. Provide a
|
to set up alerts for, and click on **Save Search**. Provide a
|
||||||
|
|
|
@ -3,7 +3,7 @@ uptime status changes from your Pingdom dashboard.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Next, go to the following URL:
|
1. Next, go to the following URL:
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for the stories in your Pivotal Tracker project!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Pivotal project's **Settings** page, and click on **Webhooks**.
|
1. Go to your Pivotal project's **Settings** page, and click on **Webhooks**.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Radarr notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Radarr dashboard. Click **Settings** and click **Connect**.
|
1. Go to your Radarr dashboard. Click **Settings** and click **Connect**.
|
||||||
Click the **+** icon.
|
Click the **+** icon.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Raygun events!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Raygun dashboard, and click on **Integrations**.
|
1. Go to your Raygun dashboard, and click on **Integrations**.
|
||||||
Click on **Webhook**, and click on the **Setup** tab.
|
Click on **Webhook**, and click on the **Setup** tab.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Review Board notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Review Board **Dashboard**, click your team's name in the top-right
|
1. On your Review Board **Dashboard**, click your team's name in the top-right
|
||||||
corner, and click **Team administration**. Select **WebHooks** on the
|
corner, and click **Team administration**. Select **WebHooks** on the
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Semaphore builds!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. In Semaphore 2.0, under **Configuration** select **Notifications**. Click on
|
1. In Semaphore 2.0, under **Configuration** select **Notifications**. Click on
|
||||||
**Create New Notification**. Add the the URL constructed above to the Webhook
|
**Create New Notification**. Add the the URL constructed above to the Webhook
|
||||||
|
|
|
@ -6,7 +6,7 @@ us](/help/contact-support) if a platform you care about is missing.
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
2. {!create-bot-construct-url-indented.md!}
|
2. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
The default topic, if not set in the URL, will be the title of the
|
The default topic, if not set in the URL, will be the title of the
|
||||||
issue or event.
|
issue or event.
|
||||||
|
|
|
@ -5,7 +5,7 @@ See also the [Slack-compatible webhook](/integrations/doc/slack_incoming).
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
If you'd like to map Slack channels to different topics within the same
|
If you'd like to map Slack channels to different topics within the same
|
||||||
stream, add `&channels_map_to_topics=1` to the end of the URL. The `topic`
|
stream, add `&channels_map_to_topics=1` to the end of the URL. The `topic`
|
||||||
|
|
|
@ -4,7 +4,7 @@ API](https://api.slack.com/messaging/webhooks).
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Use your new webhook URL any place that you would use a Slack webhook.
|
1. Use your new webhook URL any place that you would use a Slack webhook.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Solano CI builds!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Solano CI **Organizations** page, and click on
|
1. Go to your Solano CI **Organizations** page, and click on
|
||||||
**Organization Settings**. Click on **Web Hooks**.
|
**Organization Settings**. Click on **Web Hooks**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Sonarqube code analysis!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. To configure webhooks for a specific SonarQube project, go to the project and select **Administration**. Select
|
1. To configure webhooks for a specific SonarQube project, go to the project and select **Administration**. Select
|
||||||
**Webhooks** and click **Create**. **Note**: you can also configure webhooks globally by going to **Configurations** ->
|
**Webhooks** and click **Create**. **Note**: you can also configure webhooks globally by going to **Configurations** ->
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Sonarr notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Sonarr dashboard. Click **Settings** and click **Connect**.
|
1. Go to your Sonarr dashboard. Click **Settings** and click **Connect**.
|
||||||
Click the **+** icon.
|
Click the **+** icon.
|
||||||
|
|
|
@ -2,7 +2,7 @@ See your Splunk Search alerts in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
If you do not specify a topic, the name of the search is used
|
If you do not specify a topic, the name of the search is used
|
||||||
(truncated to fit if needed).
|
(truncated to fit if needed).
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your Statuspage.io subscriptions!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Statuspage Dashboard, and click on **Notifications**
|
1. Go to your Statuspage Dashboard, and click on **Notifications**
|
||||||
near the bottom-left corner. Select the **Webhook** tab. If webhook
|
near the bottom-left corner. Select the **Webhook** tab. If webhook
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for Stripe events!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Stripe Dashboard, click on **Developers** on the left
|
1. On your Stripe Dashboard, click on **Developers** on the left
|
||||||
sidebar. Click on **Webhooks**, and click on **+ Add endpoint**.
|
sidebar. Click on **Webhooks**, and click on **+ Add endpoint**.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Receive Zulip notifications for your Taiga projects!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
Make sure to specify the topic in the URL above. Otherwise, the
|
Make sure to specify the topic in the URL above. Otherwise, the
|
||||||
default topic `General` will be used.
|
default topic `General` will be used.
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Zulip notifications for your TeamCity builds!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Install the [tcWebHooks plugin](https://github.com/tcplugins/tcWebHooks/releases)
|
1. Install the [tcWebHooks plugin](https://github.com/tcplugins/tcWebHooks/releases)
|
||||||
onto your TeamCity server. Follow the plugin instructions in your
|
onto your TeamCity server. Follow the plugin instructions in your
|
||||||
|
|
|
@ -4,7 +4,7 @@ Canarytokens from Thinkst's paid product, not [canarytokens.org][canarytokens] -
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. Go to your Thinkst Canary settings, and click on **Webhooks** on
|
1. Go to your Thinkst Canary settings, and click on **Webhooks** on
|
||||||
the left sidebar. Select the **Generic** tab. Press
|
the left sidebar. Select the **Generic** tab. Press
|
||||||
|
|
|
@ -2,7 +2,7 @@ Get Transifex notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. On your Transifex Dashboard, select your project, and click on
|
1. On your Transifex Dashboard, select your project, and click on
|
||||||
**Settings**. Click on the **Webhooks** tab, and click
|
**Settings**. Click on the **Webhooks** tab, and click
|
||||||
|
|
|
@ -2,7 +2,7 @@ See your Travis CI build notifications in Zulip!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
By default, pull request events are ignored since most people
|
By default, pull request events are ignored since most people
|
||||||
don't want notifications for new pushes to pull requests. To
|
don't want notifications for new pushes to pull requests. To
|
||||||
enable notifications for pull request builds, just
|
enable notifications for pull request builds, just
|
||||||
|
|
|
@ -9,7 +9,7 @@ Get Zulip notifications from your Trello boards!
|
||||||
|
|
||||||
1. {!create-stream.md!}
|
1. {!create-stream.md!}
|
||||||
|
|
||||||
1. {!create-bot-construct-url-indented.md!}
|
1. {!create-bot-construct-url.md!}
|
||||||
|
|
||||||
1. **Log in to Trello**, and collect the following three items:
|
1. **Log in to Trello**, and collect the following three items:
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue