docs: Update .html links to .md.

Sphinx/ReadTheDocs supports automatically translating links written as
to `.md` files to point to the corresponding `.html` files, so this
migration does not change the resulting HTML output in ReadTheDocs.
But it does fix apparent broken links on GitHub.

This doesn't prevent people from reading the documentation on GitHub
(so doesn't mitigate the fact that some rtd-specific syntax does not
render properly on GH), but it will prevent us from getting erroneous
issues reported about the hyperlinks not working.

Fixes: #11087.
This commit is contained in:
Samuel Searles-Bryant 2019-03-06 16:57:27 +00:00 committed by Tim Abbott
parent 6191b4d93a
commit c87893feea
72 changed files with 311 additions and 310 deletions

View File

@ -32,7 +32,7 @@ minutes to a few hours, depending on the time of day.
[gender-neutral language](https://en.wikipedia.org/wiki/Gender-neutral_language).
For example, avoid using a pronoun like her or his in sentences like
"Every developer should clean [their] keyboard at least once a week."
* Follow the community [code of conduct](../code-of-conduct.html).
* Follow the community [code of conduct](../code-of-conduct.md).
* Participate! Zulip is a friendly and welcoming community, and we
love meeting new people, hearing about what brought them to Zulip,
and getting their feedback. If you're not sure where to start,

View File

@ -78,7 +78,7 @@ this?". Good choices include
up a page in the CI that has more details on why the job failed.
For example [this](https://circleci.com/gh/zulip/zulip/16617)
is the page of the `bionic-python-3.6` job. See our docs on
[continuous integration](../testing/continuous-integration.html)
[continuous integration](../testing/continuous-integration.md)
to learn more.
* *Technical design.* There are a lot of considerations here:
@ -105,7 +105,7 @@ this?". Good choices include
change being made. Tests that exclude whole classes of potential
bugs are preferred when possible (e.g., the common test suite
`test_bugdown.py` between the Zulip server's [frontend and backend
Markdown processors](../subsystems/markdown.html), or the `GetEventsTest` test for
Markdown processors](../subsystems/markdown.md), or the `GetEventsTest` test for
buggy race condition handling).
* *Translation.* Make sure that the strings are marked for
@ -194,11 +194,11 @@ We also strongly recommend reviewers to go through the following resources.
* [Code Review - A consolidation of advice and stuff from the
sinternet](https://gist.github.com/porterjamesj/002fb27dd70df003646df46f15e898de)
article by James J. Porter
* [Zulip Code of Conduct](../code-of-conduct.html)
* [Zulip Code of Conduct](../code-of-conduct.md)
[code-style]: ../contributing/code-style.html
[commit-messages]: ../contributing/version-control.html#commit-messages
[test-writing]: ../testing/testing.html
[mypy]: ../testing/mypy.html
[git tool]: ../git/zulip-tools.html#fetch-a-pull-request-and-rebase
[translation]: ../translating/translating.html
[code-style]: ../contributing/code-style.md
[commit-messages]: ../contributing/version-control.md#commit-messages
[test-writing]: ../testing/testing.md
[mypy]: ../testing/mypy.md
[git tool]: ../git/zulip-tools.md#fetch-a-pull-request-and-rebase
[translation]: ../translating/translating.md

View File

@ -163,7 +163,7 @@ Don't use it:
### Translation tags
Remember to
[tag all user-facing strings for translation](../translating/translating.html), whether
[tag all user-facing strings for translation](../translating/translating.md), whether
they are in HTML templates or JavaScript editing the HTML (e.g. error
messages).
@ -292,5 +292,5 @@ All significant new features should come with tests. See testing.
### Third party code
See [our docs on dependencies](../subsystems/dependencies.html) for discussion of
See [our docs on dependencies](../subsystems/dependencies.md) for discussion of
rules about integrating third-party projects.

View File

@ -82,14 +82,14 @@ And if you've setup the Zulip development environment on a remote
machine, take a look at our tips for
[developing remotely][dev-remote].
[dev-remote]: remote.html
[install-direct]: ../development/setup-advanced.html#installing-directly-on-ubuntu-debian-centos-or-fedora
[install-docker]: ../development/setup-advanced.html#using-docker-experimental
[install-generic]: ../development/setup-advanced.html#installing-manually-on-unix
[install-vagrant]: ../development/setup-vagrant.html
[dev-remote]: remote.md
[install-direct]: ../development/setup-advanced.md#installing-directly-on-ubuntu-debian-centos-or-fedora
[install-docker]: ../development/setup-advanced.md#using-docker-experimental
[install-generic]: ../development/setup-advanced.md#installing-manually-on-linux
[install-vagrant]: ../development/setup-vagrant.md
[self-install-remote]: #installing-remotely
[self-slow-internet]: #slow-internet-connections
[configure-proxy]: ../development/setup-vagrant.html#specifying-a-proxy
[using-dev-env]: using.html
[testing]: ../testing/testing.html
[ci]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[configure-proxy]: ../development/setup-vagrant.md#specifying-a-proxy
[using-dev-env]: using.md
[testing]: ../testing/testing.md
[ci]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork

View File

@ -129,7 +129,7 @@ don't have a favorite, here are some suggestions:
* [spacemacs](https://github.com/syl20bnr/spacemacs)
* [sublime](https://www.sublimetext.com/)
Next, follow our [Git and GitHub Guide](../git/index.html) to clone and configure
Next, follow our [Git and GitHub Guide](../git/index.md) to clone and configure
your fork of zulip on your local computer.
Once you have cloned your code locally, you can get to work.
@ -214,11 +214,12 @@ Next, read the following to learn more about developing for Zulip:
* [Using the Development Environment][rtd-using-dev-env]
* [Testing][rtd-testing]
[install-direct]: ../development/setup-advanced.html#installing-directly-on-ubuntu-debian-centos-or-fedora
[install-vagrant]: ../development/setup-vagrant.html
[rtd-git-guide]: ../git/index.html
[rtd-using-dev-env]: using.html
[rtd-testing]: ../testing/testing.html
[install-direct]: ../development/setup-advanced.md#installing-directly-on-ubuntu-debian-centos-or-fedora
[install-generic]: ../development/setup-advanced.md#installing-manually-on-linux
[install-vagrant]: ../development/setup-vagrant.md
[rtd-git-guide]: ../git/index.md
[rtd-using-dev-env]: using.md
[rtd-testing]: ../testing/testing.md
[git-bash]: https://git-for-windows.github.io/
[codeanywhere]: https://codeanywhere.com/
[img-ca-settings]: ../images/codeanywhere-settings.png
@ -236,7 +237,7 @@ that the user is `zulipdev`; edit accordingly if the situation is
different.
1. First, get an SSL certificate; you can use
[our certbot wrapper script used for production](../production/ssl-certificates.html#certbot-recommended)
[our certbot wrapper script used for production](../production/ssl-certificates.md#certbot-recommended)
by running the following commands as root:
```
# apt install -y crudini

View File

@ -67,14 +67,14 @@ Once your remote dev instance is ready:
Once you've confirmed you can connect to your remote server, take a look at:
* [developing remotely](../development/remote.html) for tips on using the remote dev
* [developing remotely](../development/remote.md) for tips on using the remote dev
instance, and
* our [Git & GitHub Guide](../git/index.html) to learn how to use Git with Zulip.
* our [Git & GitHub Guide](../git/index.md) to learn how to use Git with Zulip.
Next, read the following to learn more about developing for Zulip:
* [Using the Development Environment](../development/using.html)
* [Testing](../testing/testing.html)
* [Using the Development Environment](../development/using.md)
* [Testing](../testing/testing.md)
[github-join]: https://github.com/join
[github-help-add-ssh-key]: https://help.github.com/en/articles/adding-a-new-ssh-key-to-your-github-account

View File

@ -21,9 +21,9 @@ that's running one of:
You can just run the Zulip provision script on your machine.
**Note**: you should not use the `root` user to run the installation.
If you are using a [remote server](../development/remote.html), see
If you are using a [remote server](../development/remote.md), see
the
[section on creating appropriate user accounts](../development/remote.html#setting-up-user-accounts).
[section on creating appropriate user accounts](../development/remote.md#setting-up-user-accounts).
**Warning**: there is no supported uninstallation process with this
method. If you want that, use the Vagrant environment, where you can
@ -50,7 +50,7 @@ source /srv/zulip-py3-venv/bin/activate
Once you've done the above setup, you can pick up the [documentation
on using the Zulip development
environment](../development/setup-vagrant.html#step-4-developing),
environment](../development/setup-vagrant.md#step-4-developing),
ignoring the parts about `vagrant` (since you're not using it).
## Installing manually on Unix
@ -310,7 +310,7 @@ docker run -itv $(pwd):/srv/zulip -p 9991:9991 user/zulipdev:v2 \
```
You'll want to
[read the guide for Zulip development](../development/setup-vagrant.html#step-4-developing)
[read the guide for Zulip development](../development/setup-vagrant.md#step-4-developing)
to understand how to use the Zulip development. Note that
`start-dockers` automatically runs `tools/run-dev.py` inside the
container; you can then visit http://localhost:9991 to connect to your
@ -363,6 +363,6 @@ Currently, the Docker workflow is substantially less convenient than
the Vagrant workflow and less documented; please contribute to this
guide and the Docker tooling if you are using Docker to develop Zulip!
[zulip-rtd-git-cloning]: ../git/cloning.html#step-1b-clone-to-your-machine
[zulip-rtd-git-connect]: ../git/cloning.html#step-1c-connect-your-fork-to-zulip-upstream
[port-forward-setup]: ../development/remote.html#running-the-development-server
[zulip-rtd-git-cloning]: ../git/cloning.md#step-1b-clone-to-your-machine
[zulip-rtd-git-connect]: ../git/cloning.md#step-1c-connect-your-fork-to-zulip-upstream
[port-forward-setup]: ../development/remote.md#running-the-development-server

View File

@ -24,7 +24,7 @@ environment,** check
[Troubleshooting and Common Errors](#troubleshooting-and-common-errors). If
that doesn't help, please visit
[#provision help](https://chat.zulip.org/#narrow/stream/21-provision-help)
in the [Zulip development community server](../contributing/chat-zulip-org.html) for
in the [Zulip development community server](../contributing/chat-zulip-org.md) for
real-time help, send a note to the
[Zulip-devel Google group](https://groups.google.com/forum/#!forum/zulip-devel)
or [file an issue](https://github.com/zulip/zulip/issues).
@ -285,8 +285,8 @@ projects and to instead follow these instructions exactly.)
2. Open Terminal (macOS/Ubuntu) or Git BASH (Windows; must
**run as an Administrator**).
3. In Terminal/Git BASH,
[clone your fork of the Zulip repository](../git/cloning.html#step-1b-clone-to-your-machine) and
[connect the Zulip upstream repository](../git/cloning.html#step-1c-connect-your-fork-to-zulip-upstream):
[clone your fork of the Zulip repository](../git/cloning.md#step-1b-clone-to-your-machine) and
[connect the Zulip upstream repository](../git/cloning.md#step-1c-connect-your-fork-to-zulip-upstream):
```
git clone --config pull.rebase git@github.com:YOURUSERNAME/zulip.git
@ -340,7 +340,7 @@ does the following:
downloads all required dependencies, sets up the python environment for
the Zulip development server, and initializes a default test
database. We call this process "provisioning", and it is documented
in some detail in our [dependencies documentation](../subsystems/dependencies.html).
in some detail in our [dependencies documentation](../subsystems/dependencies.md).
You will need an active internet connection during the entire
process. (See [Specifying a proxy](#specifying-a-proxy) if you need a
@ -352,7 +352,7 @@ documented in the
[Troubleshooting and Common Errors](#troubleshooting-and-common-errors)
section. If that doesn't help, please visit
[#provision help](https://chat.zulip.org/#narrow/stream/21-provision-help)
in the [Zulip development community server](../contributing/chat-zulip-org.html) for
in the [Zulip development community server](../contributing/chat-zulip-org.md) for
real-time help.
On Windows, you will see `The system cannot find the path specified.` message
@ -489,7 +489,7 @@ It's good to have the terminal running `run-dev.py` up as you work since error
messages including tracebacks along with every backend request will be printed
there.
See [Logging](../subsystems/logging.html) for further details on the run-dev.py console
See [Logging](../subsystems/logging.md) for further details on the run-dev.py console
output.
#### Committing and pushing changes with git
@ -518,7 +518,7 @@ After provisioning, you'll want to
If you run into any trouble, the
[#provision help](https://chat.zulip.org/#narrow/stream/21-provision-help)
in the [Zulip development community server](../contributing/chat-zulip-org.html) for
in the [Zulip development community server](../contributing/chat-zulip-org.md) for
is a great place to ask for help.
#### Rebuilding the development environment
@ -615,7 +615,7 @@ If these solutions aren't working for you or you encounter an issue not
documented below, there are a few ways to get further help:
* Ask in [#provision help](https://chat.zulip.org/#narrow/stream/21-provision-help)
in the [Zulip development community server](../contributing/chat-zulip-org.html),
in the [Zulip development community server](../contributing/chat-zulip-org.md),
* send a note to the [Zulip-devel Google
group](https://groups.google.com/forum/#!forum/zulip-devel), or
* [File an issue](https://github.com/zulip/zulip/issues).
@ -883,7 +883,7 @@ Likely causes are:
1. Networking issues
2. Insufficient RAM. Check whether you've allotted at least two
gigabytes of RAM, which is the minimum Zulip
[requires](../development/setup-vagrant.html#requirements). If
[requires](../development/setup-vagrant.md#requirements). If
not, go to your VM settings and increase the RAM, then restart
the VM.
@ -967,7 +967,7 @@ Users who are unable to do "vagrant up" due to a VT-X unavailability error need
#### Permissions errors when running the test suite in LXC
See ["Possible testing issues"](../testing/testing.html#possible-testing-issues).
See ["Possible testing issues"](../testing/testing.md#possible-testing-issues).
#### Mounting NFS fails on macOS Mojave
@ -1099,13 +1099,13 @@ for the IP address that means any IP address can connect to your development ser
[vmware-fusion-dl]: http://www.vmware.com/products/fusion.html
[vagrant-vmware-fusion-dl]: https://www.vagrantup.com/vmware/
[avoiding-sudo]: https://github.com/fgrehm/vagrant-lxc#avoiding-sudo-passwords
[install-advanced]: ../development/setup-advanced.html
[install-advanced]: ../development/setup-advanced.md
[lxc-sf]: https://github.com/fgrehm/vagrant-lxc/wiki/FAQ#help-my-shared-folders-have-the-wrong-owner
[rtd-git-guide]: ../git/index.html
[rtd-testing]: ../testing/testing.html
[rtd-using-dev-env]: using.html
[rtd-dev-remote]: remote.html
[rtd-git-guide]: ../git/index.md
[rtd-testing]: ../testing/testing.md
[rtd-using-dev-env]: using.md
[rtd-dev-remote]: remote.md
[git-bash]: https://git-for-windows.github.io/
[bash-admin-setup]: https://superuser.com/questions/1002262/run-applications-as-administrator-by-default-in-windows-10
[set-up-git]: ../git/setup.html
[ci]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[set-up-git]: ../git/setup.md
[ci]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork

View File

@ -51,5 +51,5 @@ restart if it crashes, and `upgrade-zulip` will take care of running
migrations and then cleanly restaring the server for you).
[django-runserver]: https://docs.djangoproject.com/en/1.8/ref/django-admin/#runserver-port-or-address-port
[new-feature-tutorial]: ../tutorials/new-feature-tutorial.html
[testing-docs]: ../testing/testing.html
[new-feature-tutorial]: ../tutorials/new-feature-tutorial.md
[testing-docs]: ../testing/testing.md

View File

@ -111,6 +111,6 @@ See also [fixing commits][fix-commit]
- status
- `git status`: show the working tree status, unstaged and staged files
[fix-commit]: fixing-commits.html
[git-config-clone]: cloning.html#step-1b-clone-to-your-machine
[git-overview]: overview.html
[fix-commit]: fixing-commits.md
[git-config-clone]: cloning.md#step-1b-clone-to-your-machine
[git-overview]: overview.md

View File

@ -152,6 +152,6 @@ Zulip.
[travis-ci]: https://travis-ci.org/
[circle-ci]:https://circleci.com/
[travis-ci-profile]: https://travis-ci.org/profile
[zulip-rtd-dev-first-time]: ../development/setup-vagrant.html
[zulip-rtd-dev-overview]: ../development/overview.html
[zulip-rtd-tools-setup]: ../git/zulip-tools.html#set-up-git-repo-script
[zulip-rtd-dev-first-time]: ../development/setup-vagrant.md
[zulip-rtd-dev-overview]: ../development/overview.md
[zulip-rtd-tools-setup]: ../git/zulip-tools.md#set-up-git-repo-script

View File

@ -54,4 +54,4 @@ tools/fetch-pull-request <PR-number>
```
[github-help-co-pr-locally]: https://help.github.com/en/articles/checking-out-pull-requests-locally
[tools-PR]: ../git/zulip-tools.html#fetch-a-pull-request-and-rebase
[tools-PR]: ../git/zulip-tools.md#fetch-a-pull-request-and-rebase

View File

@ -58,14 +58,14 @@ git workflow, or if you'd like a git refresher.
[github-rebase-pr]: https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request
[github-zulip]: https://github.com/zulip/
[github-zulip-zulip]: https://github.com/zulip/zulip/
[continuous-integration]: ../testing/continuous-integration.html
[zulip-git-guide-fork-ci]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[zulip-rtd-code-style]: ../contributing/code-style.html
[zulip-rtd-commit-discipline]: ../contributing/version-control.html#commit-discipline
[zulip-rtd-commit-messages]: ../contributing/version-control.html#commit-messages
[zulip-rtd-dev-overview]: ../development/overview.html
[zulip-rtd-lint-tools]: ../contributing/code-style.html#lint-tools
[zulip-rtd-mypy]: ../testing/mypy.html
[zulip-rtd-testing]: ../testing/testing.html
[zulip-rtd-zulip-tools]: ../git/zulip-tools.html
[zulip-rtd-zulipbot-usage]: ../contributing/zulipbot-usage.html
[continuous-integration]: ../testing/continuous-integration.md
[zulip-git-guide-fork-ci]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork
[zulip-rtd-code-style]: ../contributing/code-style.md
[zulip-rtd-commit-discipline]: ../contributing/version-control.md#commit-discipline
[zulip-rtd-commit-messages]: ../contributing/version-control.md#commit-messages
[zulip-rtd-dev-overview]: ../development/overview.md
[zulip-rtd-lint-tools]: ../contributing/code-style.md#lint-tools
[zulip-rtd-mypy]: ../testing/mypy.md
[zulip-rtd-testing]: ../testing/testing.md
[zulip-rtd-zulip-tools]: ../git/zulip-tools.md
[zulip-rtd-zulipbot-usage]: ../contributing/zulipbot-usage.md

View File

@ -146,7 +146,7 @@ for another review.
[github-help-about-pr]: https://help.github.com/en/articles/about-pull-requests
[github-help-create-pr-fork]: https://help.github.com/en/articles/creating-a-pull-request-from-a-fork
[images-create-pr]: ../images/zulip-open-pr.png
[keep-up-to-date]: ../git/using.html#keep-your-fork-up-to-date
[push-commits]: ../git/using.html#push-your-commits-to-github
[screenshots-gifs]: ../tutorials/screenshot-and-gif-software.html
[keep-up-to-date]: ../git/using.md#keep-your-fork-up-to-date
[push-commits]: ../git/using.md#push-your-commits-to-github
[screenshots-gifs]: ../tutorials/screenshot-and-gif-software.md
[wip-prs]: #work-in-progress-pull-requests

View File

@ -61,4 +61,4 @@ Display changes you've committed so far since creating a branch from upstream/ma
$ git diff upstream/master...HEAD
```
[zulip-rtd-review]: ../contributing/code-reviewing.html
[zulip-rtd-review]: ../contributing/code-reviewing.md

View File

@ -49,7 +49,7 @@ text-mode interface to Git.
And, if none of the above are to your liking, try [one of these][gitbook-guis].
[git-bash-admin]: ../development/setup-vagrant.html#running-git-bash-as-an-administrator
[git-bash-admin]: ../development/setup-vagrant.md#running-git-bash-as-an-administrator
[gitbook-aliases]: https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases
[gitbook-config]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
[gitbook-guis]: https://git-scm.com/downloads/guis

View File

@ -271,8 +271,8 @@ keep,** you'll need to use `git log FETCH_HEAD` to identify that hashes of the
commits you want to keep and then `git cherry-pick <commit>` those commits into
whichever branch you need to update.
[clone-to-your-machine]: ../git/cloning.html#step-1b-clone-to-your-machine
[connect-upstream]: ../git/cloning.html#step-1c-connect-your-fork-to-zulip-upstream
[clone-to-your-machine]: ../git/cloning.md#step-1b-clone-to-your-machine
[connect-upstream]: ../git/cloning.md#step-1c-connect-your-fork-to-zulip-upstream
[gitbook-advanced-merging]: https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_advanced_merging
[gitbook-basic-merge-conflicts]: https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging#Basic-Merge-Conflicts
[gitbook-git-cherry-pick]: https://git-scm.com/docs/git-cherry-pick

View File

@ -126,7 +126,7 @@ Now you're ready to work on the issue or feature.
## Run linters and tests locally
In addition to having Travis run tests and linters each time you push a new
commit, you can also run them locally. See [testing](../testing/testing.html) for details.
commit, you can also run them locally. See [testing](../testing/testing.md) for details.
## Stage changes
@ -446,7 +446,7 @@ complicated rebase.
[github-help-push]: https://help.github.com/en/articles/pushing-to-a-remote
[github-help-rebase]: https://help.github.com/en/articles/using-git-rebase
[github-help-sync-fork]: https://help.github.com/en/articles/syncing-a-fork
[how-git-is-different]: ./the-git-difference.html
[zulip-git-guide-up-to-date]: ../git/using.html#keep-your-fork-up-to-date
[zulip-rtd-commit-discipline]: ../contributing/version-control.html#commit-discipline
[zulip-rtd-commit-messages]: ../contributing/version-control.html#commit-messages
[how-git-is-different]: ./the-git-difference.md
[zulip-git-guide-up-to-date]: ../git/using.md#keep-your-fork-up-to-date
[zulip-rtd-commit-discipline]: ../contributing/version-control.md#commit-discipline
[zulip-rtd-commit-messages]: ../contributing/version-control.md#commit-messages

View File

@ -9,7 +9,7 @@ time when working with Git on the Zulip project.
[zulip/zulip][github-zulip-zulip] you'll find a bash script
`setup-git-repo`. This script installs a pre-commit hook, which will
run each time you `git commit` to automatically run
[Zulip's linter suite](../testing/linters.html) on just the files that
[Zulip's linter suite](../testing/linters.md) on just the files that
the commit modifies (which is really fast!). The hook passes no matter
the result of the linter, but you should still pay attention to any
notices or warnings it displays.
@ -175,5 +175,5 @@ git rebase --continue
```
[github-zulip-zulip]: https://github.com/zulip/zulip/
[zulip-git-guide-fetch-pr]: ../git/collaborate.html#checkout-a-pull-request-locally
[zulip-git-guide-ci]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[zulip-git-guide-fetch-pr]: ../git/collaborate.md#checkout-a-pull-request-locally
[zulip-git-guide-ci]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork

View File

@ -9,7 +9,7 @@ The core Zulip application is at
is a web application written in Python 3.x and using the Django framework. That
codebase includes server-side code and the web client, as well as Python API
bindings and most of our integrations with other services and applications (see
[the directory structure guide](../overview/directory-structure.html)).
[the directory structure guide](../overview/directory-structure.md)).
[Zulip Mobile](https://github.com/zulip/zulip-mobile) is the official
mobile Zulip client supporting both iOS and Android, written in
@ -56,12 +56,12 @@ choose whether to allow anyone to register an account and join, or
only allow people who have been invited, or restrict registrations to
members of particular groups (using email domain names or corporate
single-sign-on login for verification). For more on security
considerations, see [the security model section](../production/security-model.html).
considerations, see [the security model section](../production/security-model.md).
The Zulip "All messages" screen is like a chronologically ordered inbox;
it displays messages, starting at the oldest message that the user
hasn't viewed yet (for more on that logic, see [the guide to the
pointer and unread counts](../subsystems/pointer.html)). The "All messages" screen displays
pointer and unread counts](../subsystems/pointer.md)). The "All messages" screen displays
the most recent messages in all the streams a user has joined (except
for the streams they've muted), as well as private messages from other
users, in strict chronological order. A user can *narrow* to view only
@ -116,7 +116,7 @@ exception to this is that Zulip uses websockets through Tornado to
minimize latency on the code path for **sending** messages.
There is detailed documentation on the
[real-time push and event queue system](../subsystems/events-system.html); most of
[real-time push and event queue system](../subsystems/events-system.md); most of
the code is in `zerver/tornado`.
#### HTML templates, JavaScript, etc.
@ -129,10 +129,10 @@ live-rendering HTML from JavaScript for things like the main message
feed.
For more details on the frontend, see our documentation on
[translation](../translating/translating.html),
[templates](../subsystems/html-templates.html),
[directory structure](../overview/directory-structure.html), and
[the static asset pipeline](../subsystems/front-end-build-process.html).
[translation](../translating/translating.md),
[templates](../subsystems/html-templates.md),
[directory structure](../overview/directory-structure.md), and
[the static asset pipeline](../subsystems/front-end-build-process.md).
[Jinja2]: http://jinja.pocoo.org/
[Handlebars]: http://handlebarsjs.com/
@ -183,7 +183,7 @@ processes that process event queues. We use event queues for the kinds
of tasks that are best run in the background because they are
expensive (in terms of performance) and don't have to be synchronous
--- e.g., sending emails or updating analytics. Also see [the queuing
guide](../subsystems/queuing.html).
guide](../subsystems/queuing.md).
### memcached
@ -192,7 +192,7 @@ objects. `zerver/lib/cache.py` and `zerver/lib/cache_helpers.py`
manage putting things into memcached, and invalidating the cache when
values change. The memcached configuration is in
`puppet/zulip/files/memcached.conf`. See our
[caching guide](../subsystems/caching.html) to learn how this works in
[caching guide](../subsystems/caching.md) to learn how this works in
detail.
### Redis
@ -250,7 +250,7 @@ processes started by Supervisor are queue processors that continually
pull things out of a RabbitMQ queue and handle them; they are defined
in `zerver/worker/queue_processors.py`.
Also see [the queuing guide](../subsystems/queuing.html).
Also see [the queuing guide](../subsystems/queuing.md).
### PostgreSQL
@ -275,7 +275,7 @@ to create the actual database with its schema.
We use Thumbor, a popular open source thumbnailing server, to serve
images (both for inline URL previews and serving uploaded image
files). See [our thumbnailing docs](../subsystems/thumbnailing.html)
files). See [our thumbnailing docs](../subsystems/thumbnailing.md)
for more details on how this works.
### Nagios

View File

@ -59,7 +59,7 @@ is using the [Mobile Push Notification Service][mpns-statistics-docs],
and is enabled by default in that case. To disable it, set
`SUBMIT_USAGE_STATISTICS = False` in `/etc/zulip/settings.py`.
[mpns-statistics-docs]: ../production/mobile-push-notifications.html#submitting-statistics
[mpns-statistics-docs]: ../production/mobile-push-notifications.md#submitting-statistics
**Full feature changelog:**
- Added support for CentOS 7 in the development environment
@ -202,9 +202,9 @@ Zulip installations; it has minimal changes for existing servers.
disruption by running this migration first, before beginning the
user-facing downtime. However, if you'd like to watch the downtime
phase of the upgrade closely, we recommend
[running them first manually](../production/expensive-migrations.html)
[running them first manually](../production/expensive-migrations.md)
and as well as the usual trick of
[doing an apt upgrade first](../production/maintain-secure-upgrade.html#applying-system-updates).
[doing an apt upgrade first](../production/maintain-secure-upgrade.md#applying-system-updates).
**Full feature changelog:**
- Added an organization setting for message deletion time limits.
@ -214,7 +214,7 @@ Zulip installations; it has minimal changes for existing servers.
- Renamed the hotkey for starring a message to Ctrl+S.
- Added the new `SOCIAL_AUTH_SUBDOMAIN` setting, which all servers using
both GitHub authentication and hosting multiple Zulip organizations
should set (see [the docs for details](../production/multiple-organizations.html#social-authentication)).
should set (see [the docs for details](../production/multiple-organizations.md#social-authentication)).
- Added automatic thumbnailing of images, powered by thumbor. The new
THUMBOR_URL setting controls this feature; it is disabled by default
in this release, because the mobile apps don't support it yet.
@ -285,7 +285,7 @@ Zulip installations; it has minimal changes for existing servers.
### 1.8.1 -- 2018-05-07
- Added an automated tool (`manage.py register_server`) to sign up for
the [mobile push notifications service](../production/mobile-push-notifications.html).
the [mobile push notifications service](../production/mobile-push-notifications.md).
- Improved rendering of block quotes in mobile push notifications.
- Improved some installer error messages.
- Fixed several minor bugs with the new Slack import feature.
@ -580,9 +580,9 @@ Backend and scaling
minimizes disruption by running these first, before beginning the
user-facing downtime. However, if you'd like to watch the downtime
phase of the upgrade closely, we recommend
[running them first manually](../production/expensive-migrations.html) and as well
[running them first manually](../production/expensive-migrations.md) and as well
as the usual trick of
[doing an apt upgrade first](../production/maintain-secure-upgrade.html#applying-system-updates).
[doing an apt upgrade first](../production/maintain-secure-upgrade.md#applying-system-updates).
* We've removed support for an uncommon legacy deployment model where
a Zulip server served multiple organizations on the same domain.
@ -592,7 +592,7 @@ Backend and scaling
This change should have no effect for the vast majority of Zulip
servers that only have one organization. If you manage a server
that hosts multiple organizations, you'll want to read [our guide on
multiple organizations](../production/multiple-organizations.html).
multiple organizations](../production/multiple-organizations.md).
* We simplified the configuration for our password strength checker to
be much more intuitive. If you were using the
@ -740,7 +740,7 @@ Zulip apps.
Hungarian, Polish, Dutch, Russian, Bulgarian, Portuguese,
Serbian, Malayalam, Korean, and Italian).
[mobile-push]: ../production/mobile-push-notifications.html
[mobile-push]: ../production/mobile-push-notifications.md
[electron-app]: https://github.com/zulip/zulip-electron/releases
[ios-app]: https://itunes.apple.com/us/app/zulip/id1203036395

View File

@ -4,7 +4,7 @@ This page documents the Zulip directory structure, where to find
things, and how to decide where to put a file.
You may also find the [new application feature
tutorial](../tutorials/new-feature-tutorial.html) helpful for understanding the
tutorial](../tutorials/new-feature-tutorial.md) helpful for understanding the
flow through these files.
### Core Python files
@ -30,11 +30,11 @@ paths will be familiar to Django developers.
* `zerver/tornado/views.py` Tornado views.
* `zerver/worker/queue_processors.py` [Queue workers](../subsystems/queuing.html).
* `zerver/worker/queue_processors.py` [Queue workers](../subsystems/queuing.md).
* `zerver/lib/*.py` Most library code.
* `zerver/lib/bugdown/` [Backend Markdown processor](../subsystems/markdown.html).
* `zerver/lib/bugdown/` [Backend Markdown processor](../subsystems/markdown.md).
* `zproject/backends.py` [Authentication backends](https://docs.djangoproject.com/en/1.8/topics/auth/customizing/).
@ -42,7 +42,7 @@ paths will be familiar to Django developers.
### HTML Templates
See [our docs](../subsystems/html-templates.html) for details on Zulip's
See [our docs](../subsystems/html-templates.md) for details on Zulip's
templating systems.
* `templates/zerver/` For [Jinja2](http://jinja.pocoo.org/) templates
@ -87,7 +87,7 @@ These are distinguished from scripts, below, by needing to run a
Django context (i.e. with database access).
* `zerver/management/commands/`
[Management commands](../subsystems/management-commands.html) one might run at a
[Management commands](../subsystems/management-commands.md) one might run at a
production deployment site (e.g. scripts to change a value or
deactivate a user properly).

View File

@ -10,7 +10,7 @@ high-quality applications we receive. We have some of the highest
standards of any GSoC organization; successful applications generally
have dozens of commits integrated into Zulip or other open source
projects by the time we review their application. See
[our contributing guide](../overview/contributing.html) for details on
[our contributing guide](../overview/contributing.md) for details on
getting involved.
## About us
@ -51,12 +51,12 @@ project today).
### Expectations for GSoC students
[Our guide for having a great summer with Zulip](../contributing/summer-with-zulip.html)
[Our guide for having a great summer with Zulip](../contributing/summer-with-zulip.md)
is focused on what one should know once doing a summer project with
Zulip. But it has a lot of useful advice on how we expect students to
interact, above and beyond what is discussed in Google's materials.
[What makes a great Zulip contributor](../overview/contributing.html#what-makes-a-great-zulip-contributor)
[What makes a great Zulip contributor](../overview/contributing.md#what-makes-a-great-zulip-contributor)
also has some helpful information on what we look for during the application
process.
@ -73,11 +73,11 @@ student application deadline is April 9, 2019.
We have an easy-to-setup development environment, and a library of
tasks that are great for first-time contributors. Use
[our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution)
[our first-time Zulip developer guide](../overview/contributing.md#your-first-codebase-contribution)
to get your Zulip development environment set up and to find your first issue. If you have any
trouble, please speak up in
[#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) on
[the Zulip development community server](../contributing/chat-zulip-org.html)
[the Zulip development community server](../contributing/chat-zulip-org.md)
(use your name as the topic).
## Application tips, and how to be a strong candidate
@ -123,7 +123,7 @@ application deadline.
We are more interested in candidates if we see them submitting good
contributions to Zulip projects, helping other applicants on GitHub
and on
[chat.zulip.org](../contributing/chat-zulip-org.html),
[chat.zulip.org](../contributing/chat-zulip-org.md),
learning from our suggestions,
[trying to solve their own obstacles and then asking well-formed
questions](https://blogs.akamai.com/2013/10/you-must-try-and-then-you-must-ask.html),
@ -166,7 +166,7 @@ mentoring projects. We usually decide which contributors are
mentoring which projects based in part on who is a good fit for the
needs of each student as well as technical expertise. You can reach
us via [#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) on
[the Zulip development community server](../contributing/chat-zulip-org.html),
[the Zulip development community server](../contributing/chat-zulip-org.md),
(compose a new stream message with your name as the topic).
Zulip operates under group mentorship. That means you should
@ -216,7 +216,7 @@ skills needed, and try to emphasize where strong skills with
particular tools are likely to be important for a given project.
For all of our projects, an important skill to develop is a good
command of Git; read [our Git Guide](../git/overview.html) in full to
command of Git; read [our Git Guide](../git/overview.md) in full to
learn how to use it well. Of particular importance is mastering using
Git rebase so that you can construct commits that are clearly correct
and explain why they are correct.
@ -260,7 +260,7 @@ CSS](https://github.com/zulip/zulip/).
- Fill in the gaps in Zulip's
[REST API documentation](https://zulipchat.com/api). Zulip has a
[nice framework](../tutorials/documenting-api-endpoints.html) for
[nice framework](../tutorials/documenting-api-endpoints.md) for
writing API documentation built by a student last summer based on
the OpenAPI standard with built-in automated tests, but there are a
few dozen endpoints that are missing, several of which are quite
@ -282,7 +282,7 @@ CSS](https://github.com/zulip/zulip/).
e.g. having built a prototype with
[the Django Oauth toolkit](https://django-oauth-toolkit.readthedocs.io/en/latest/)
would be great to demonstrate as part of an application. The
[Zulip integration writing guide](../subsystems/integration-docs.html)
[Zulip integration writing guide](../subsystems/integration-docs.md)
and
[integration documentation](https://chat.zulip.org/integrations/)
are useful materials for learning about how things currently work,
@ -335,7 +335,7 @@ CSS](https://github.com/zulip/zulip/).
at `contrib_bots/` in the main Zulip repository that can be used for
testing; the design document for the deployment part of this vision
(likely part 1) is
[here](../subsystems/custom-apps.html).
[here](../subsystems/custom-apps.md).
**Skills recommended**: Python and JavaScript/CSS, plus devops
skills (Linux deployment, Docker, puppet etc.) are all useful here.
Experience writing tools using various popular APIs is helpful for
@ -382,7 +382,7 @@ CSS](https://github.com/zulip/zulip/).
semi-duplicate code for each feature. **Skills recommended**: A
good mix of Python/Django and HTML/CSS/JavaScript skill is ideal.
The system for adding new features is
[well documented](../tutorials/new-feature-tutorial.html).
[well documented](../tutorials/new-feature-tutorial.md).
Expert: Shubham Dhama.
- Rebuild the Zulip web UI using a modern reactive layer like vue.js.
@ -390,7 +390,7 @@ CSS](https://github.com/zulip/zulip/).
presence layer), then move on to more complex pieces (like the
subscriptions page), and finally attach the main UI. Definitely worth
reading the vue.js documentation and reading
[how Zulip's real-time sync works](../subsystems/events-system.html).
[how Zulip's real-time sync works](../subsystems/events-system.md).
**Skills recommended**: Strong JavaScript experience, good
communication skills and an eye for detail. We think this would be an
awesome project, but rewrite projects often introduce lots of bugs, so
@ -398,7 +398,7 @@ we're interested in particularly careful candidates who have the
discipline to redo a small component at a time and carefully test for
regressions. Good ways to demonstrate qualification for this are
finding and reporting bugs using
[Zulip's manual UI testing guide](../testing/manual-testing.html)
[Zulip's manual UI testing guide](../testing/manual-testing.md)
and doing
[refactoring projects](https://github.com/zulip/zulip/labels/area%3A%20refactoring).
Expert: Tommy Ip, Tim Abbott.
@ -436,7 +436,7 @@ Expert: Tommy Ip, Tim Abbott.
single area).
A possible specific larger project in this space is working on
adding [mypy](../testing/mypy.html) stubs
adding [mypy](../testing/mypy.md) stubs
for Django in mypy to make our type checking more powerful. Read
[our mypy blog post](https://blog.zulip.org/2016/10/13/static-types-in-python-oh-mypy/)
for details on how mypy works and is integrated into zulip. This

View File

@ -27,9 +27,9 @@ priority projects.
We welcome participation from the community in influencing the Zulip
roadmap. If a bug or missing feature is causing significant pain for your
organization, we appreciate your commenting to that effect, either in
[chat.zulip.org](../contributing/chat-zulip-org.html) or on the
[chat.zulip.org](../contributing/chat-zulip-org.md) or on the
relevant GitHub issue, with an explanation of how the issue impacts
your use case. See [Reporting issues](contributing.html#reporting-issues)
your use case. See [Reporting issues](contributing.md#reporting-issues)
for more information.
[label-blocker]:

View File

@ -118,7 +118,7 @@ email address, if it isn't the same as the "Zulip username").
**If you are using LDAP for authentication**: you will need to enable
the `zproject.backends.ZulipLDAPAuthBackend` auth backend, in
`AUTHENTICATION_BACKENDS` in `/etc/zulip/settings.py`. After doing
so (and as always [restarting the Zulip server](settings.html) to ensure
so (and as always [restarting the Zulip server](settings.md) to ensure
your settings changes take effect), you should be able to log into
Zulip by entering your email address and LDAP password on the Zulip
login form.
@ -388,9 +388,9 @@ For example, the
was about 30 lines of code, plus some documentation and an
[automatically generated migration][schema-migrations]. We also have
helpful developer documentation on
[testing auth backends](../subsystems/auth.html).
[testing auth backends](../subsystems/auth.md).
[schema-migrations]: ../subsystems/schema-migrations.html
[schema-migrations]: ../subsystems/schema-migrations.md
[python-social-auth]: https://python-social-auth.readthedocs.io/en/latest/
## Development only

View File

@ -18,14 +18,14 @@ git clone https://github.com/zulip/zulip.git zulip-server-git
```
and then
[continue the normal installation instructions](../production/install.html#step-2-install-zulip).
You can also [upgrade Zulip from Git](../production/maintain-secure-upgrade.html#upgrading-from-a-git-repository).
[continue the normal installation instructions](../production/install.md#step-2-install-zulip).
You can also [upgrade Zulip from Git](../production/maintain-secure-upgrade.md#upgrading-from-a-git-repository).
## Zulip in Docker
Zulip has an officially supported, experimental
[docker image](https://github.com/zulip/docker-zulip). Please note
that Zulip's [normal installer](../production/install.html) has been
that Zulip's [normal installer](../production/install.md) has been
extremely reliable for years, whereas the Docker image is new and has
rough edges, so we recommend the normal installer unless you have a
specific reason to prefer Docker.
@ -67,7 +67,7 @@ of managing chat.zulip.org and zulipchat.com.
Unfortunately, you cannot use most third-party database-as-a-service
provides like Amazon RDS as the database provider with Zulip without a
degraded experience. Zulip let you choose one of two
[full-text search postgres extensions](../subsystems/full-text-search.html).
[full-text search postgres extensions](../subsystems/full-text-search.md).
Neither is available in Amazon RDS. As a result, if you use one of
those providers, Zulip's full-text search will be unavailable.

View File

@ -19,7 +19,7 @@ email addresses and send notifications.
example: `email_password = abcd1234`.
Like any other change to the Zulip configuration, be sure to
[restart the server](settings.html) to make your changes take
[restart the server](settings.md) to make your changes take
effect.
4. Test that your configuration is working. See the test command in

View File

@ -29,7 +29,7 @@ impossible or unlikely, the extra complexity required for renumbering
makes them structurally more risky than the direct postgres backup
process.
[backups]: ../production/maintain-secure-upgrade.html#backups
[backups]: ../production/maintain-secure-upgrade.md#backups
## Preventing changes during the export
@ -83,7 +83,7 @@ formats are consistent. For exports from zulipchat.com, usually this
means you need to upgrade your Zulip server to the latest `master`
branch, using [upgrade-zulip-from-git][upgrade-zulip-from-git].
First [install a new Zulip server](../production/install.html),
First [install a new Zulip server](../production/install.md),
skipping "Step 3: Create a Zulip organization, and log in" (you'll
create your Zulip organization via the data import tool instead).
@ -110,7 +110,7 @@ cd /home/zulip/deployments/current
This could take several minutes to run, depending on how much data you're
importing.
[upgrade-zulip-from-git]: ../production/maintain-secure-upgrade.html#upgrading-from-a-git-repository
[upgrade-zulip-from-git]: ../production/maintain-secure-upgrade.md#upgrading-from-a-git-repository
**Import options**

View File

@ -82,5 +82,5 @@ We don't provide a convenient way to uninstall a Zulip server.
Most of the limitations are things we'd accept a pull request to fix;
we welcome contributions to shrink this list of gotchas. Chat with us
in the [chat.zulip.org community](../contributing/chat-zulip-org.html) if you're
in the [chat.zulip.org community](../contributing/chat-zulip-org.md) if you're
interested in helping!

View File

@ -2,13 +2,13 @@
Make sure you want to install a Zulip production server. If you'd
instead like to test or develop a new feature, we recommend the
[Zulip development server](../development/overview.html#requirements) instead.
[Zulip development server](../development/overview.md#requirements) instead.
If you just want to play around with Zulip and see what it looks like, you
can create a test organization at <https://zulipchat.com>.
You'll need an Ubuntu or Debian system that satisfies
[the installation requirements](../production/requirements.html), or
you can use Zulip's [experimental Docker image](../production/deployment.html#zulip-in-docker).
[the installation requirements](../production/requirements.md), or
you can use Zulip's [experimental Docker image](../production/deployment.md#zulip-in-docker).
## Step 1: Download the latest release
@ -25,7 +25,7 @@ tar -xf zulip-server-latest.tar.gz
* If you'd like to verify the download, we
[publish the sha256sums of our release tarballs](https://www.zulip.org/dist/releases/SHA256SUMS.txt).
* You can also
[install a pre-release version of Zulip](../production/deployment.html#installing-zulip-from-git)
[install a pre-release version of Zulip](../production/deployment.md#installing-zulip-from-git)
using code from our [repository on GitHub](https://github.com/zulip/zulip/).
## Step 2: Install Zulip
@ -76,9 +76,9 @@ If the script gives an error, consult [Troubleshooting](#troubleshooting) below.
If you'd prefer to acquire an SSL certificate yourself in any other
way, it's easy to [provide it to Zulip][doc-ssl-manual].
[doc-settings]: ../production/settings.html
[doc-certbot]: ../production/ssl-certificates.html#certbot-recommended
[doc-ssl-manual]: ../production/ssl-certificates.html#manual-install
[doc-settings]: ../production/settings.md
[doc-certbot]: ../production/ssl-certificates.md#certbot-recommended
[doc-ssl-manual]: ../production/ssl-certificates.md#manual-install
## Step 3: Create a Zulip organization, and log in
@ -89,7 +89,7 @@ and return to the the import instructions.
[hipchat-import]: https://zulipchat.com/help/import-from-hipchat
[slack-import]: https://zulipchat.com/help/import-from-slack
[zulip-backups]: ../production/maintain-secure-upgrade.html#backups
[zulip-backups]: ../production/maintain-secure-upgrade.md#backups
Otherwise, open the link in a browser. Follow the prompts to set up
your organization, and your own user account as an administrator.
@ -98,14 +98,14 @@ Then, log in!
The link is a secure one-time-use link. If you need another
later, you can generate a new one by running `manage.py
generate_realm_creation_link` on the server. See also our doc on
running [multiple organizations on the same server](multiple-organizations.html)
running [multiple organizations on the same server](multiple-organizations.md)
if that's what you're planning to do.
## Step 4: Configure and use
To really see Zulip in action, you'll need to get the people you work
together with using it with you.
* [Set up outgoing email](email.html) so Zulip can confirm new users'
* [Set up outgoing email](email.md) so Zulip can confirm new users'
email addresses and send notifications.
* Learn how to [get your organization started][realm-admin-docs] using
Zulip at its best.
@ -117,8 +117,8 @@ Learning more:
for server administrators. This extremely low-traffic list is for
important announcements, including new releases and security issues.
* Follow [Zulip on Twitter](https://twitter.com/zulip).
* Learn how to [configure your Zulip server settings](settings.html).
* Learn about [maintaining a production Zulip server](maintain-secure-upgrade.html).
* Learn how to [configure your Zulip server settings](settings.md).
* Learn about [maintaining a production Zulip server](maintain-secure-upgrade.md).
[realm-admin-docs]: https://zulipchat.com/help/getting-your-organization-started-with-zulip
@ -141,7 +141,7 @@ Postgres, RabbitMQ, Memcached and Redis.
* Initializes Zulip's database.
If you'd like to deploy Zulip with these services on different
machines, check out our [deployment options documentation](deployment.html).
machines, check out our [deployment options documentation](deployment.md).
## Troubleshooting
@ -167,13 +167,13 @@ and can just skip that step.
**After the install script.**
If you get an error after `scripts/setup/install` completes, check
the bottom of `/var/log/zulip/errors.log` for a traceback, and consult
the [troubleshooting section](troubleshooting.html) for advice on
the [troubleshooting section](troubleshooting.md) for advice on
how to debug.
**Community.**
If the tips above don't help, please visit
[#production help](https://chat.zulip.org/#narrow/stream/31-production-help)
in the [Zulip development community server](../contributing/chat-zulip-org.html) for
in the [Zulip development community server](../contributing/chat-zulip-org.md) for
realtime help or email zulip-help@googlegroups.com with the full
traceback, and we'll try to help you out! Please provide details like
the full traceback from the bottom of `/var/log/zulip/errors.log` in

View File

@ -12,7 +12,7 @@ secure Zulip installation, including:
You may also want to read this related content:
- [Security Model](../production/security-model.html)
- [Security Model](../production/security-model.md)
## Upgrading
@ -275,7 +275,7 @@ extracting the entire archive.
tar -Oaxf /path/to/archive/zulip-backup-rest.tar.gz zulip-backup/zulip-version
```
[install-server]: ../production/install.html
[install-server]: ../production/install.md
### What is included
@ -302,7 +302,7 @@ backup archives, and you may want to backup separately:
compared to the rest of the data for a Zulip server.
* Files uploaded with the Zulip
[S3 file upload backend](../production/upload-backends.html). We
[S3 file upload backend](../production/upload-backends.md). We
don't include these for two reasons. First, the uploaded file data
in S3 can easily be many times larger than the rest of the backup,
and downloading it all to a server doing a backup could easily
@ -358,7 +358,7 @@ more human-readable and easier to parse, and doesn't have the
requirement that the same set of Zulip organizations exist on the two
servers (which is critical for migrations to and from Zulip Cloud).
[export-import]: ../production/export-and-import.html
[export-import]: ../production/export-and-import.md
### Restore from manual backups
@ -473,16 +473,16 @@ running Zulip with larger teams (especially >1000 users).
* For an organization with 100+ users, it's important to have more
than 4GB of RAM on the system. Zulip will install on a system with
2GB of RAM, but with less than 3.5GB of RAM, it will run its
[queue processors](../subsystems/queuing.html) multithreaded to conserve memory;
[queue processors](../subsystems/queuing.md) multithreaded to conserve memory;
this creates a significant performance bottleneck.
* [chat.zulip.org](../contributing/chat-zulip-org.html), with thousands of user
* [chat.zulip.org](../contributing/chat-zulip-org.md), with thousands of user
accounts and thousands of messages sent every week, has 8GB of RAM,
4 cores, and 80GB of disk. The CPUs are essentially always idle,
but the 8GB of RAM is important.
* We recommend using a [remote postgres
database](postgres.html) for isolation, though it is
database](postgres.md) for isolation, though it is
not required. In the following, we discuss a relatively simple
configuration with two types of servers: application servers
(running Django, Tornado, RabbitMQ, Redis, Memcached, etc.) and
@ -541,7 +541,7 @@ welcome! This is an area we are hoping to improve.
## Securing your Zulip server
Zulip's security model is discussed in
[a separate document](../production/security-model.html).
[a separate document](../production/security-model.md).
## Management commands
@ -579,7 +579,7 @@ system-internal bots like `welcome-bot`; you are unlikely to need to
interact with that realm.)
Unless you are
[hosting multiple organizations on your Zulip server](../production/multiple-organizations.html),
[hosting multiple organizations on your Zulip server](../production/multiple-organizations.md),
your single Zulip organization on the root domain will have the empty
string (`''`) as its `string_id`. So you can run e.g.:
```
@ -653,4 +653,4 @@ There are a large number of useful management commands under
## Hosting multiple Zulip organizations
This is explained in detail on [its own page](../production/multiple-organizations.html).
This is explained in detail on [its own page](../production/multiple-organizations.md).

View File

@ -21,7 +21,7 @@ follows:
1. Uncomment the `PUSH_NOTIFICATION_BOUNCER_URL =
'https://push.zulipchat.com'` line in your `/etc/zulip/settings.py`
file (i.e. remove the `#` at the start of the line), and
[restart your Zulip server](../production/maintain-secure-upgrade.html#updating-settings).
[restart your Zulip server](../production/maintain-secure-upgrade.md#updating-settings).
If you installed your Zulip server with a version older than 1.6,
you'll need to add the line (it won't be there to uncomment).

View File

@ -11,7 +11,7 @@ single server.
Throughout this article, we'll assume you're working on a zulip server
with hostname `zulip.example.com`. You may also find the more
[technically focused article on realms](../subsystems/realms.html) to be useful
[technically focused article on realms](../subsystems/realms.md) to be useful
reading.
## Subdomains
@ -33,13 +33,13 @@ things:
file. That setting is the default in 1.7 and later.
* Make sure you have SSL certificates for all of the subdomains you're
going to use. If you're using
[our LetsEncrypt instructions](ssl-certificates.html), it's easy to
[our LetsEncrypt instructions](ssl-certificates.md), it's easy to
just specify multiple subdomains in your certificate request.
* If necessary, modify your `nginx` configuration to use your new
certificates.
* Use `./manage.py generate_realm_creation_link` again to create your
new organization. Review
[the install instructions](install.html) if you need a
[the install instructions](install.md) if you need a
refresher on how this works.
* If you're planning on using GitHub auth or another social
authentication method, review
@ -55,7 +55,7 @@ the homepage for the server is a copy of the Zulip homepage.
You'll need to install an SSL certificate valid for all the
(sub)domains you're using your Zulip server with. You can get an SSL
certificate covering several domains for free by using
[our Certbot wrapper tool](../production/ssl-certificates.html#after-zulip-is-already-installed),
[our Certbot wrapper tool](../production/ssl-certificates.md#after-zulip-is-already-installed),
though if you're going to host a large number of organizations, you
may want to get a wildcard certificate. You can also get a wildcard
certificate for

View File

@ -8,7 +8,7 @@ When a user tries to set a password, we use [zxcvbn][zxcvbn] to check
that it isn't a weak one.
See discussion in [our main docs for server
admins](../production/security-model.html#passwords). This doc explains in more
admins](../production/security-model.md#passwords). This doc explains in more
detail how we set the default threshold (`PASSWORD_MIN_GUESSES`) we use.
First, read the doc section there. (It's short.)

View File

@ -25,7 +25,7 @@ strongly recommend using either a fresh machine instance in a cloud
provider, a fresh VM, or a dedicated machine. If you decide to
disregard our advice and use a server that hosts other services, we
can't support you, but
[we do have some notes on issues you'll encounter](install-existing-server.html).
[we do have some notes on issues you'll encounter](install-existing-server.md).
#### Operating System
@ -61,7 +61,7 @@ https://help.ubuntu.com/community/Repositories/Ubuntu
for organizations with a hundreds of users (active or no).
See our
[documentation on scalability](../production/maintain-secure-upgrade.html#scalability)
[documentation on scalability](../production/maintain-secure-upgrade.md#scalability)
for advice on hardware requirements for larger organizations.
* Disk space: You'll need at least 10GB of free disk space for a
@ -72,7 +72,7 @@ https://help.ubuntu.com/community/Repositories/Ubuntu
messages sent. We recommend using an SSD and avoiding cloud storage
backends that limit the IOPS per second, since the disk is primarily
used for the database (assuming you're using the
[S3 file uploads backend](../production/upload-backends.html)).
[S3 file uploads backend](../production/upload-backends.md)).
#### Network and Security Specifications
@ -114,10 +114,10 @@ available: [the `--self-signed-cert` option][doc-self-signed] in the
installer.
If you'd rather acquire an SSL certificate another way, see our [SSL
certificate documentation](ssl-certificates.html).
certificate documentation](ssl-certificates.md).
[doc-certbot]: ssl-certificates.html#certbot-recommended
[doc-self-signed]: ssl-certificates.html#self-signed-certificate
[doc-certbot]: ssl-certificates.md#certbot-recommended
[doc-self-signed]: ssl-certificates.md#self-signed-certificate
#### Outgoing email
@ -126,9 +126,9 @@ certificate documentation](ssl-certificates.html).
during the signup process, missed message notifications, password
reset, etc.). If you don't have an existing outgoing SMTP solution,
read about
[free outgoing SMTP options and options for prototyping](email.html#free-outgoing-email-services).
[free outgoing SMTP options and options for prototyping](email.md#free-outgoing-email-services).
Once you have met these requirements, see [full instructions for installing
Zulip in production](../production/install.html).
Zulip in production](../production/install.md).
[trusty-eol]: https://wiki.ubuntu.com/Releases

View File

@ -4,7 +4,7 @@ This section attempts to document the Zulip security model.
It likely does not cover every issue; if
there are details you're curious about, please feel free to ask
questions in [#production help](https://chat.zulip.org/#narrow/stream/31-production-help)
on the [Zulip community server](../contributing/chat-zulip-org.html)
on the [Zulip community server](../contributing/chat-zulip-org.md)
(or if you think
you've found a security bug, please report it to
zulip-security@googlegroups.com so we can do a responsible security
@ -39,7 +39,7 @@ announcement).
* The preferred way to login to Zulip is using an SSO solution like
Google Auth, LDAP, or similar, but Zulip also supports password
authentication. See
[the authentication methods documentation](../production/authentication-methods.html)
[the authentication methods documentation](../production/authentication-methods.md)
for details on Zulip's available authentication methods.
### Passwords
@ -65,7 +65,7 @@ strength allowed is controlled by two settings in
By default, `PASSWORD_MIN_GUESSES` is 10000. This provides
significant protection against online attacks, while limiting the
burden imposed on users choosing a password. See
[password strength](../production/password-strength.html) for an extended
[password strength](../production/password-strength.md) for an extended
discussion on how we chose this value.
Estimating the guessability of a password is a complex problem and

View File

@ -46,7 +46,7 @@ If you want an additional or different authentication backend, you
will need to uncomment one or more and then do any additional
configuration required for that backend as documented in the
`settings.py` file. See the
[section on Authentication](../production/authentication-methods.html) for more
[section on Authentication](../production/authentication-methods.md) for more
detail on the available authentication backends and how to configure
them.
@ -63,7 +63,7 @@ their push notification protocols, the Zulip mobile apps for
[Android](https://play.google.com/store/apps/details?id=com.zulipmobile)
can only receive push notifications from a single Zulip server. We
have configured that server to be `push.zulipchat.com`, and offer a
[push notification forwarding service](mobile-push-notifications.html) that
[push notification forwarding service](mobile-push-notifications.md) that
forwards push notifications through our servers to mobile devices.
Read the linked documentation for instructions on how to register for
and configure this service.
@ -92,7 +92,7 @@ been added in more recent versions of Zulip.
Since Zulip's settings file is a Python script, there are a number of
other things that one can configure that are not documented; ask on
[chat.zulip.org](../contributing/chat-zulip-org.html)
[chat.zulip.org](../contributing/chat-zulip-org.md)
if there's something you'd like to do but can't figure out how to.
[settings-py-template]: https://github.com/zulip/zulip/blob/master/zproject/prod_settings_template.py
@ -120,4 +120,4 @@ Zulip documentation cover everything anyone might want to know about
running Zulip in production.
Next: [Maintaining and upgrading Zulip in
production](../production/maintain-secure-upgrade.html).
production](../production/maintain-secure-upgrade.md).

View File

@ -75,7 +75,7 @@ Internet.
If you need to configure a multiple domain certificate, you can generate
one as described in the section below after installing Zulip.
[doc-install-script]: ../production/install.html#step-2-install-zulip
[doc-install-script]: ../production/install.md#step-2-install-zulip
### After Zulip is already installed

View File

@ -6,8 +6,8 @@ supervisorctl](#using-supervisorctl), to learn how to use the
Supervisor client to monitor and manage services.
If you haven't already, now might be a good time to read Zulip's [architectural
overview](../overview/architecture-overview.html), particularly the
[Components](../overview/architecture-overview.html#components) section. This will help you
overview](../overview/architecture-overview.md), particularly the
[Components](../overview/architecture-overview.md#components) section. This will help you
understand the many services Zulip uses.
If you encounter issues while running Zulip, take a look at Zulip's logs, which

View File

@ -138,7 +138,7 @@ need a block like this:
```
The file-uploads bucket should not be world-readable. See the
[documentation on the Zulip security model](security-model.html) for
[documentation on the Zulip security model](security-model.md) for
details on the security model for uploaded files.
## Migrating from local uploads to Amazon S3 backend

View File

@ -6,7 +6,7 @@ environment.
## Testing OAuth in development
Among the many [authentication methods](../production/authentication-methods.html)
Among the many [authentication methods](../production/authentication-methods.md)
we support, a server can be configured to allow users to sign in with
their Google accounts or GitHub accounts, using the OAuth protocol.
@ -56,9 +56,9 @@ The steps to do this are a variation of the steps documented in
Some OAuth providers (such as Facebook) require HTTPS on the callback
URL they post back to, which isn't supported directly by the Zulip
development environment. If you run a
[remote Zulip development server](../development/remote.html), we have
[remote Zulip development server](../development/remote.md), we have
instructions for
[an nginx reverse proxy with SSL](../development/remote.html#using-an-nginx-reverse-proxy)
[an nginx reverse proxy with SSL](../development/remote.md#using-an-nginx-reverse-proxy)
that you can use for your development efforts.
## Testing LDAP in development
@ -77,7 +77,7 @@ actual flows for LDAP configuration.
- To enable fakeldap, set `FAKE_LDAP_MODE` in
`zproject/dev_settings.py` to one of the following options. For more
information on these modes, refer to
[our production docs](../production/authentication-methods.html#ldap-including-active-directory):
[our production docs](../production/authentication-methods.md#ldap-including-active-directory):
- `a`: If users' email addresses are in LDAP and used as username.
- `b`: If LDAP only has usernames but email addresses are of the form
username@example.com

View File

@ -247,7 +247,7 @@ avatars, similar details for streams, recent message history, etc.
These days are fetched in the `/register` endpoint (or `page_params`
for the webapp), and kept correct over time. The key to keeping these
state up to date is Zulip's
[real-time events system](../subsystems/events-system.html), which
[real-time events system](../subsystems/events-system.md), which
allows the server to notify clients whenever state that might be
cached by clients is changed. Clients are responsible for handling
the events, updating their state, and rerendering any UI components

View File

@ -14,7 +14,7 @@ of Zulip; it's primarily intended to assist debugging.
A `Client` is used to sort messages into client categories such as
`ZulipElectron` on the `/stats`
[page](https://chat.zulip.org/stats). For more information see,
[Analytics](analytics.html).
[Analytics](analytics.md).
## Integrations

View File

@ -33,7 +33,7 @@ document:
This document focuses almost entirely on the **export** piece. Issues
with getting Zulip itself running are out of scope here; see [the
production installation instructions](../index.html#zulip-in-production).
production installation instructions](../index.md#zulip-in-production).
As for the import side of things, we only touch on it implicitly. (My
reasoning was that we *had* to get the export piece right in a timely
fashion, even if it meant we would have to sort out some straggling

View File

@ -92,12 +92,12 @@ the backend, but does in JavaScript.
For the third-party services like Postgres, Redis, Nginx, and RabbitMQ
that are documented in the
[architecture overview](../overview/architecture-overview.html), we rely on the
[architecture overview](../overview/architecture-overview.md), we rely on the
versions of those packages provided alongside the Linux distribution
on which Zulip is deployed. Because Zulip
[only supports Ubuntu in production](../production/requirements.html), this
[only supports Ubuntu in production](../production/requirements.md), this
usually means `apt`, though we do support
[other platforms in development](../development/setup-advanced.html). Since
[other platforms in development](../development/setup-advanced.md). Since
we don't control the versions of these dependencies, we avoid relying
on specific versions of these packages wherever possible.
@ -120,7 +120,7 @@ backported versions of other dependencies (e.g. `camo`, to fix a buggy
possible by getting issues addressed in the upstream distributions.
We also rely on the `pgroonga` PPA for the `pgroonga` postgres
extension, used by our [full-text search](full-text-search.html).
extension, used by our [full-text search](full-text-search.md).
## Python packages
@ -230,7 +230,7 @@ super fast internet. You can use tmux or screen to make sure that the
[script keeps running even if you get disconnected][stack-overflow]
from the SSH session.
[mypy-docs]: ../testing/mypy.html
[mypy-docs]: ../testing/mypy.md
[requirements-readme]: https://github.com/zulip/zulip/blob/master/requirements/README.md
[stack-overflow]: https://askubuntu.com/questions/8653/how-to-keep-processes-running-after-ending-ssh-session
[caching]: https://help.github.com/en/articles/caching-your-github-password-in-git
@ -254,7 +254,7 @@ reasoning here.
dependencies in the `yarn.lock` file; `yarn install` updates the
`yarn.lock` files.
* `tools/update-prod-static`. This process is discussed in detail in
the [static asset pipeline](../subsystems/front-end-build-process.html) article,
the [static asset pipeline](../subsystems/front-end-build-process.md) article,
but we don't use the `node_modules` directories directly in
production. Instead, static assets are compiled using our static
asset pipeline and it is the compiled assets that are served
@ -298,7 +298,7 @@ Zulip uses the [iamcal emoji data package][iamcal] for its emoji data
and sprite sheets. We download this dependency using `npm`, and then
have a tool, `tools/setup/build_emoji`, which reformats the emoji data
into the files under `static/generated/emoji`. Those files are in
turn used by our [markdown processor](../subsystems/markdown.html) and
turn used by our [markdown processor](../subsystems/markdown.md) and
`tools/update-prod-static` to make Zulip's emoji work in the various
environments where they need to be displayed.
@ -309,11 +309,11 @@ directories, with `scripts/lib/clean_emoji_cache.py` responsible for
garbage-collection. This caching and garbage-collection is required
because a correct emoji implementation involves over 1000 small image
files and a few large ones. There is a more extended article on our
[emoji infrastructure](emoji.html).
[emoji infrastructure](emoji.md).
### Translations data
Zulip's [translations infrastructure](../translating/translating.html) generates
Zulip's [translations infrastructure](../translating/translating.md) generates
several files from the source data, which we manage similar to our
emoji, but without the caching (and thus without the
garbage-collection). New translations data is downloaded from

View File

@ -90,19 +90,19 @@ to do the things one does a lot in each type of documentation.
To learn more about Zulip's general user documentation,
[visit it on zulipchat.com](https://zulipchat.com/help/) or
[read our guide on writing user documentation](user-docs.html).
[read our guide on writing user documentation](user-docs.md).
### Integrations documentation
To learn more about Zulip's integrations documentation,
[visit it on zulipchat.com](https://zulipchat.com/integrations/) or
[read our guide on writing user documentation](integration-docs.html).
[read our guide on writing user documentation](integration-docs.md).
### API documentation
To learn more about Zulip's API documentation,
[visit it on zulipchat.com](https://zulipchat.com/api/) or
[read our tutorial on writing user documentation](../tutorials/documenting-api-endpoints.html).
[read our tutorial on writing user documentation](../tutorials/documenting-api-endpoints.md).
## Automated testing
@ -111,8 +111,8 @@ recommend running locally when making significant edits:
* `tools/lint` catches a number of common mistakes, and we highly
recommend
[using our linter pre-commit hook](../git/zulip-tools.html#set-up-git-repo-script).
See the [main linter doc](../testing/linters.html) for more details.
[using our linter pre-commit hook](../git/zulip-tools.md#set-up-git-repo-script).
See the [main linter doc](../testing/linters.md) for more details.
* The ReadTheDocs docs are built and the links tested by
`tools/test-documentation`, which runs `build-docs` and then checks

View File

@ -2,7 +2,7 @@
This page has developer documentation on the Zulip email system. If you're
trying to configure your server to send email, you might be looking for our
guide to [sending outgoing email](../production/email.html). If you're trying to
guide to [sending outgoing email](../production/email.md). If you're trying to
configure an email integration to receive incoming email (e.g. so that users
can reply to missed message emails via email), you might be interested in
our instructions for
@ -43,7 +43,7 @@ Email takes about a quarter second per email to process and send. Generally
speaking, if you're sending just one email, doing it in the current process
is fine. If you're sending emails in a loop, you probably want to send it
from a queue. Documentation on our queueing system is available
[here](../subsystems/queuing.html).
[here](../subsystems/queuing.md).
## Development and testing
@ -69,7 +69,7 @@ you have to first configure the following SMTP settings.
* The username `EMAIL_HOST_USER` in `zproject/dev_settings.py`.
* The password `email_password` in `zproject/dev-secrets.conf`.
See [this](../production/email.html#free-outgoing-email-services)
See [this](../production/email.md#free-outgoing-email-services)
section for instructions on obtaining SMTP details.
**Note: The base_image_uri of the images in forwarded emails would be replaced
@ -117,7 +117,7 @@ behavior, or other developers will get test failures until they
provision.
While this model is great for the markup side, it isn't ideal for
[translations](../translating/translating.html). The Django
[translations](../translating/translating.md). The Django
translation system works with exact strings, and having different new
markup can require translators to re-translate strings, which can
result in problems like needing 2 copies of each string (one for

View File

@ -61,7 +61,7 @@ The `build_emoji` tool generates the set of files under
`static/generated/emoji` is a symlink to that tree; we do this in
order to cache old versions to make provisioning and production
deployments super fast in the common case that we haven't changed the
emoji tooling). See [our dependencies document](../subsystems/dependencies.html)
emoji tooling). See [our dependencies document](../subsystems/dependencies.md)
for more details on this strategy.
The emoji tree generated by this process contains several import elements:
@ -76,7 +76,7 @@ The emoji tree generated by this process contains several import elements:
* `images/emoji/*.png`: A farm of symlinks from emoji names to the
`images/emoji/unicode/` tree. This is used to serve individual emoji
images, as well as for the
[backend markdown processor](../subsystems/markdown.html) to know which emoji
[backend markdown processor](../subsystems/markdown.md) to know which emoji
names exist and what unicode emoji / images they map to. In this
tree, we currently include all of the emoji in `emoji-map.json`;
this means that if you send `:angry_face:`, it won't autocomplete,

View File

@ -4,7 +4,7 @@ Zulip's "events system" is the server-to-client push system that
powers our real-time sync. This document explains how it works; to
read an example of how a complete feature using this system works,
check out the
[new application feature tutorial](../tutorials/new-feature-tutorial.html).
[new application feature tutorial](../tutorials/new-feature-tutorial.md).
Any single-page web application like Zulip needs a story for how
changes made by one client are synced to other clients, though having
@ -86,7 +86,7 @@ wide range of possible clients, and make it easy for developers.
Zulip's event delivery (real-time push) system is based on Tornado,
which is ideal for handling a large number of open requests. Details
on Tornado are available in the
[architecture overview](../overview/architecture-overview.html), but in short it
[architecture overview](../overview/architecture-overview.md), but in short it
is good at holding open a large number of connections for a long time.
The complete system is about 1500 lines of code in `zerver/tornado/`,
primarily `zerver/tornado/event_queue.py`.
@ -262,4 +262,4 @@ correctly, clients are responsible for discarding events related to
messages that the client has not yet fetched.
Additionally, see
[the master documentation on sending messages](../subsystems/sending-messages.html)
[the master documentation on sending messages](../subsystems/sending-messages.md)

View File

@ -3,9 +3,9 @@
This page documents additional information that may be useful when
developing new features for Zulip that require front-end changes,
especially those that involve adding new files. For a more general
overview, see the [new feature tutorial](../tutorials/new-feature-tutorial.html).
overview, see the [new feature tutorial](../tutorials/new-feature-tutorial.md).
Our [dependencies documentation](../subsystems/dependencies.html) has useful
Our [dependencies documentation](../subsystems/dependencies.md) has useful
relevant background as well.
## Primary build process

View File

@ -118,6 +118,6 @@ browser, Zulip also does a few bookkeeping things on page reload (like
cleaning up its event queue, and saving any text in an open compose
box as a draft).
[testing-with-casper]: ../testing/testing-with-casper.html
[testing-with-casper]: ../testing/testing-with-casper.md
[self-server-reloads]: #server-initiated-reloads
[events-system]: ../subsystems/events-system.html
[events-system]: ../subsystems/events-system.md

View File

@ -96,4 +96,4 @@ developers) should be tagged for [translation][].
[helpers]: http://handlebarsjs.com/block_helpers.html
[jconditionals]: http://jinja.pocoo.org/docs/2.9/templates/#list-of-control-structures
[hconditionals]: http://handlebarsjs.com/block_helpers.html
[translation]: ../translating/translating.html
[translation]: ../translating/translating.md

View File

@ -8,7 +8,7 @@ main third-party CSS library.
Zulip currently does not use any CSS preprocessors, and is organized
into several files. For most pages, the CSS is combined into a single
CSS file by the [static asset pipeline](../subsystems/front-end-build-process.html),
CSS file by the [static asset pipeline](../subsystems/front-end-build-process.md),
controlled by the `PIPELINE_CSS` code in `zproject/settings.py`.
The CSS files are:

View File

@ -167,7 +167,7 @@ and report to the server the following whenever a message is sent:
* Whether the message was locally echoed.
* If so, whether there was a disparity between the echoed content and
the server-rendered content, which can be used for statistics on how
effective our [local echo system](../subsystems/markdown.html) is.
effective our [local echo system](../subsystems/markdown.md) is.
The code is all in `zerver/lib/report.py` and `static/js/sent_messages.js`.

View File

@ -80,7 +80,7 @@ browser), Zulip will preserve the state -- what (if any) narrow the
user was in, the selected message, and even exact scroll position!
For more on the user experience philosophy guiding these decisions,
see [the architectural overview](../overview/architecture-overview.html).
see [the architectural overview](../overview/architecture-overview.md).
## Unread count logic

View File

@ -6,7 +6,7 @@ user documentation as an organization (the name "realm" comes from
[Kerberos](https://web.mit.edu/kerberos/)).
The
[production docs on multiple realms](../production/multiple-organizations.html)
[production docs on multiple realms](../production/multiple-organizations.md)
are likely also relevant reading.
## Creating Realms
@ -52,7 +52,7 @@ job.
We also recommend upgrading to at least Zulip 1.7, since older Zulip
releases had much less nice handling for subdomains. See our
[docs on using subdomains](../production/multiple-organizations.html) for
[docs on using subdomains](../production/multiple-organizations.md) for
user-facing documentation on this.
### Working With Subdomains In Development Environment

View File

@ -3,7 +3,7 @@
Zulip uses the [standard Django system for doing schema
migrations](https://docs.djangoproject.com/en/1.10/topics/migrations/).
There is some example usage in the [new feature
tutorial](../tutorials/new-feature-tutorial.html).
tutorial](../tutorials/new-feature-tutorial.md).
This page documents some important issues related to writing schema
migrations.
@ -30,7 +30,7 @@ migrations.
fix this, you can either run `./tools/renumber-migrations` which
renumbers your migration(s) and fixes up the "dependencies" entries in your
migration(s), and then rewrite your git history as needed, or you can do it
manually. There is a tutorial [here](migration-renumbering.html) that
manually. There is a tutorial [here](migration-renumbering.md) that
walks you though that process.
* **Atomicity**. By default, each Django migration is run atomically

View File

@ -7,9 +7,9 @@ experience.
This document aims to explain conceptually what happens when a message
is sent in Zulip, and why that is correct behavior. It assumes the
reader is familiar with our
[real-time sync system](../subsystems/events-system.html) for
[real-time sync system](../subsystems/events-system.md) for
server-to-client communication and
[new application feature tutorial](../tutorials/new-feature-tutorial.html),
[new application feature tutorial](../tutorials/new-feature-tutorial.md),
and we generally don't repeat the content discussed there.
## Message lists
@ -45,7 +45,7 @@ stream, etc.).
The backend flow for sending messages is similar in many ways to the
process described in our
[new application feature tutorial](../tutorials/new-feature-tutorial.html).
[new application feature tutorial](../tutorials/new-feature-tutorial.md).
This section details the ways in which it is different:
* There is significant custom code inside the `process_message_event`
@ -57,7 +57,7 @@ number of purposes:
computational work inside the Tornado codebase, this logic aims
to just do the check for whether a notification should be
generated, and then put an event into an appropriate
[queue](../subsystems/queuing.html) to actually send the
[queue](../subsystems/queuing.md) to actually send the
message. See `maybe_enqueue_notifications` and related code for
this part of the logic.
* Splicing user-dependent data (E.g. `flags` such as when the user
@ -73,7 +73,7 @@ number of purposes:
* Following our standard naming convention, input validation is done
inside the `check_message` function, which is responsible for
validating the user can send to the recipient (etc.),
[rendering the markdown](../subsystems/markdown.html), etc. --
[rendering the markdown](../subsystems/markdown.md), etc. --
basically everything that can fail due to bad user input.
* The core `do_send_messages` function (which handles actually sending
the message) is one of the most optimized and thus complex parts of
@ -89,7 +89,7 @@ number of purposes:
open organizations.
* Do all the database queries to fetch relevant data for and then
send a `message` event to the
[events system](../subsystems/events-system.html) containing the
[events system](../subsystems/events-system.md) containing the
data it will need for the calculations described above. This
step adds a lot of complexity, because the events system cannot
make queries to the database directly.
@ -114,7 +114,7 @@ library (on the frontend) and `sockjs-tornado` (on the backend). This
ends up calling a handler in our Tornado codebase
(`zerver/tornado/socket.py`), which immediately puts the request into
the `message_sender` queue.
* The `message_sender` [queue processor](../subsystems/queuing.html)
* The `message_sender` [queue processor](../subsystems/queuing.md)
reformats the request into a Django `HttpRequest` object with a fake
`SOCKET` HTTP method (which is why these requests appear as `SOCKET`
in our server logs), calls the Django `get_response` method on that
@ -141,7 +141,7 @@ browser, and then replace it with data from the server when it
changes.
Zulip aims for a near-perfect local echo experience, which requires is
why our [markdown system](../subsystems/markdown.html) requires both
why our [markdown system](../subsystems/markdown.md) requires both
an authoritative (backend) markdown implementation and a secondary
(frontend) markdown implementation, the latter used only for the local
echo feature. Read our markdown documentation for all the tricky
@ -177,7 +177,7 @@ messages.
unique value within that namespace identifying the message.
* The `do_send_messages` backend code path includes the `queue_id` and
`local_id` in the data it passes to the
[events system](../subsystems/events-system.html). The events
[events system](../subsystems/events-system.md). The events
system will extend the `message` event dictionary it delivers to
the client containing the `queue_id` with `local_message_id` field,
containing the `local_id` that the relevant client used when sending
@ -273,7 +273,7 @@ users.
message without including the URL embeds/previews, but it will add a
deferred work item into the `embed_links` queue.
* The [queue processor](../subsystems/queuing.html) for the
* The [queue processor](../subsystems/queuing.md) for the
`embed_links` queue will fetch the URLs, and then if they return
results, rerun the markdown processor and notify clients of the
updated message `rendered_content`.
@ -321,7 +321,7 @@ latency was unacceptable: The server backend was introducing a latency
of about 1 second per 2000 users subscribed to receive the message.
While these delays may not be immediately obvious to users (Zulip,
like many other chat applications,
[local echoes](../subsystems/markdown.html) messages that a user sends
[local echoes](../subsystems/markdown.md) messages that a user sends
as soon as the user hits “send”), latency beyond a second or two
significantly impacts the feeling of interactivity in a chat
experience (i.e. it feels like everyone takes a long time to reply to

View File

@ -143,4 +143,4 @@ replaced with realm settings:
server, and in the realm settings indicating which methods the realm
administrator wants to allow users to login with.
[doc-newfeat]: ../tutorials/new-feature-tutorial.html
[doc-newfeat]: ../tutorials/new-feature-tutorial.md

View File

@ -69,7 +69,7 @@ The raw Thumbor URLs are ugly, and regardless, have the property that
we might want to change them over time (a classic case is if one moves
the thumbor installation to be hosted by a different server). In
order to avoid encoding these into Zulip messages, we encode in the
[HTML rendered message content](../subsystems/markdown.html) URLs of
[HTML rendered message content](../subsystems/markdown.md) URLs of
the form
`/thumbnail/?url=https://example.com/image.png&size=thumbnail` as the
`src` in our image tags, and that URL serves a

View File

@ -69,7 +69,7 @@ how long they pause to think, and how frequently they get interrupted.
The server piece of typing notificiations is currently pretty
straightforward, since we take advantage of Zulip's
[events system](../subsystems/events-system.html).
[events system](../subsystems/events-system.md).
We deliberately designed the server piece to be stateless,
which minimizes the possibility of backend bugs and gives clients

View File

@ -45,7 +45,7 @@ CI. Make sure that you have uploaded your SSH keys to GitHub: CircleCI
uses those SSH keys for authentication.
[docker-hub]: https://hub.docker.com/
[circleci-setup]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[circleci-setup]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork
[circleci-ssh]: https://circleci.com/docs/2.0/ssh-access-jobs/
### Suites
@ -177,7 +177,7 @@ our configuration, you'll want to look at these closely.
that every remote branch you push will be tested, which can be
helpful when debugging something complicated.
[travis-fork]: ../git/cloning.html#step-3-configure-continuous-integration-for-your-fork
[travis-fork]: ../git/cloning.md#step-3-configure-continuous-integration-for-your-fork
### Performance optimizations

View File

@ -11,7 +11,7 @@ but for other files, we are quite thorough about checking semantic
correctness.
Obviously, a large reason for linting code is to enforce the [Zulip
coding standards](../contributing/code-style.html). But we also use the linters to
coding standards](../contributing/code-style.md). But we also use the linters to
prevent common coding errors.
We borrow some open source tools for much of our linting, and the links
@ -63,7 +63,7 @@ the other lint checks.
## General considerations
Once you have read the [Zulip coding guidelines](../contributing/code-style.html), you can
Once you have read the [Zulip coding guidelines](../contributing/code-style.md), you can
be pretty confident that 99% of the code that you write will pass through
the linters fine, as long as you are thorough about keeping your code clean.
And, of course, for minor oversights, `lint` is your friend, not your foe.
@ -75,7 +75,7 @@ extreme cases, but often it can be a simple matter of writing your code
in a slightly different style to appease the linter. If you have
problems getting something to lint, you can submit an unfinished PR
and ask the reviewer to help you work through the lint problem, or you
can find other people in the [Zulip Community](../contributing/chat-zulip-org.html)
can find other people in the [Zulip Community](../contributing/chat-zulip-org.md)
to help you.
Also, bear in mind that 100% of the lint code is open source, so if you
@ -83,7 +83,7 @@ find limitations in either the Zulip home-grown stuff or our third party
tools, feedback will be highly appreciated.
Finally, one way to clean up your code is to thoroughly exercise it
with tests. The [Zulip test documentation](../testing/testing.html)
with tests. The [Zulip test documentation](../testing/testing.md)
describes our test system in detail.
## Lint checks
@ -100,7 +100,7 @@ following checks:
- Check CSS for parsability and formatting.
- Check JavaScript code for addClass calls.
- Running `mypy` to check static types in Python code. Our
[documentation on using mypy](../testing/mypy.html) covers mypy in
[documentation on using mypy](../testing/mypy.md) covers mypy in
more detail.
The rest of this document pertains to the checks that occur in `./tools/lint`.

View File

@ -262,7 +262,7 @@ from Django as well as our own custom helpers. Here is an example:
self.assertTrue(rate_limit_mock.called)
Follow [this link](../subsystems/settings.html#testing-non-default-settings) for more
Follow [this link](../subsystems/settings.md#testing-non-default-settings) for more
information on the "settings" context manager.
A common use is to prevent a call to a third-party service from using
@ -337,7 +337,7 @@ We use mocks and stubs for all the typical reasons:
- to stub out calls to third-party services
- to make it so that you can [run the Zulip tests on the airplane without wifi][no-internet]
[no-internet]: testing.html#internet-access-inside-test-suites
[no-internet]: testing.md#internet-access-inside-test-suites
A detailed description of mocks, along with useful coded snippets, can be found in the section
[Testing with mocks](#testing-with-mocks).
@ -375,7 +375,7 @@ the same data structure as performing an action that generates said event.
This is a bit esoteric, but if you read the tests, you will see some of
the patterns. You can also learn more about our event system in the
[new feature tutorial](../tutorials/new-feature-tutorial.html#handle-database-interactions).
[new feature tutorial](../tutorials/new-feature-tutorial.md#handle-database-interactions).
### Negative tests

View File

@ -5,18 +5,18 @@
Zulip has a full test suite that includes many components. The most
important components are documented in depth in their own sections:
- [Django](../testing/testing-with-django.html): backend Python tests
- [Casper](../testing/testing-with-casper.html): end-to-end UI tests
- [Node](../testing/testing-with-node.html): unit tests for JS front end code
- [Linters](../testing/linters.html): Our parallel linter suite
- [CI details](continuous-integration.html): How all of these run in CI
- [Django](../testing/testing-with-django.md): backend Python tests
- [Casper](../testing/testing-with-casper.md): end-to-end UI tests
- [Node](../testing/testing-with-node.md): unit tests for JS front end code
- [Linters](../testing/linters.md): Our parallel linter suite
- [CI details](continuous-integration.md): How all of these run in CI
- [Other test suites](#other-test-suites): Our various smaller test suites.
This document covers more general testing issues, such as how to run the
entire test suite, how to troubleshoot database issues, how to manually
test the front end, etc.
We also document [how to manually test the app](manual-testing.html).
We also document [how to manually test the app](manual-testing.md).
## Running tests
@ -60,7 +60,7 @@ Zulip also has about a dozen smaller tests suites:
- `tools/test-migrations`: Checks whether the `zerver/migrations`
migration content the models defined in `zerver/models.py`. See our
[schema migration documentation](../subsystems/schema-migrations.html)
[schema migration documentation](../subsystems/schema-migrations.md)
for details on how to do database migrations correctly.
- `tools/test-documentation`: Checks for broken links in this
ReadTheDocs documentation site.
@ -72,7 +72,7 @@ Zulip also has about a dozen smaller tests suites:
- `test-locked-requirements`: Verifies that developers didn't forget
to run `tools/update-locked-requirements` after modifying
`requirements/*.in`. See
[our dependency documentation](../subsystems/dependencies.html) for
[our dependency documentation](../subsystems/dependencies.md) for
details on the system this is verifying.
- `tools/check-capitalization`: Checks whether translated strings (aka
user-facing strings) correctly follow Zulip's capitalization
@ -181,7 +181,7 @@ This is easy to do using test fixtures (a fancy word for fixed data
used in tests) and the `mock.patch` function to specify what HTTP
response should be used by the tests for every outgoing HTTP (or other
network) request. Consult
[our guide on mocking](../testing/testing-with-django.html#zulip-mocking-practices) to
[our guide on mocking](../testing/testing-with-django.md#zulip-mocking-practices) to
learn how to mock network requests easily; there are also a number of
examples throughout the codebase.
@ -246,7 +246,7 @@ it. On Ubuntu:
This section is about troubleshooting your local development environment.
There is a [separate manual testing doc](manual-testing.html) that
There is a [separate manual testing doc](manual-testing.md) that
enumerates things you can test as part of manual QA.
### Clearing the development database

View File

@ -8,7 +8,7 @@ translating Zulip would be greatly appreciated!
If you're interested in contributing translations to Zulip, please
join [#translation](https://chat.zulip.org/#narrow/stream/58-translation)
in the [Zulip development community server](../contributing/chat-zulip-org.html), and
in the [Zulip development community server](../contributing/chat-zulip-org.md), and
say hello. And please join the
[Zulip project on Transifex](https://www.transifex.com/zulip/zulip/)
and ask to join any languages you'd like to contribute to (or add new
@ -27,13 +27,13 @@ We are building a collection of translation style guides for Zulip,
giving guidance on how Zulip should be translated into specific
languages (e.g. what word to translate words like "home" to):
* [Chinese](chinese.html)
* [French](french.html)
* [German](german.html)
* [Hindi](hindi.html)
* [Polish](polish.html)
* [Russian](russian.html)
* [Spanish](spanish.html)
* [Chinese](chinese.md)
* [French](french.md)
* [German](german.md)
* [Hindi](hindi.md)
* [Polish](polish.md)
* [Russian](russian.md)
* [Spanish](spanish.md)
A great first step when getting started translating Zulip into a new
language is to write a style guide, since it greatly increases the
@ -133,7 +133,7 @@ Some useful tips for your translating journey:
- When in doubt, ask for context in
[#translation](https://chat.zulip.org/#narrow/stream/58-translation) in
the [Zulip development community server](../contributing/chat-zulip-org.html).
the [Zulip development community server](../contributing/chat-zulip-org.md).
- If there are multiple possible translations for a term, search for it in
the *Concordance* tool (the button with a magnet in the top right corner).
@ -150,7 +150,7 @@ Some useful tips for your translating journey:
## Testing translations
This section assumes you have a
[Zulip development environment](../development/overview.html) set up.
[Zulip development environment](../development/overview.md) set up.
First of all, download the updated resource files from Transifex using the
`tx pull -a --mode=developer` command (it will require some
@ -394,4 +394,4 @@ organizations from the command line.
[resource]: https://www.i18next.com/add-or-load-translations.html
[Transifex]: https://transifex.com
[transifexrc]: https://docs.transifex.com/client/client-configuration#transifexrc
[html-templates]: ../subsystems/html-templates.html
[html-templates]: ../subsystems/html-templates.md

View File

@ -10,7 +10,7 @@ file in `templates/zerver/help/include/rest-endpoints.md` , so that it appears
in the index in the left sidebar on the `/api` page.
The markdown framework is the same one used by the
[user docs](../subsystems/user-docs.html), which supports macros and
[user docs](../subsystems/user-docs.md), which supports macros and
various other features, though we don't use them heavily here.
If you look at the documentation for existing endpoints (see a live

View File

@ -39,7 +39,7 @@ location /static/ {
## Nginx routes other requests [between django and tornado][tornado-django]
[tornado-django]: ../overview/architecture-overview.html?highlight=tornado#django-and-tornado
[tornado-django]: ../overview/architecture-overview.md?highlight=tornado#django-and-tornado
All our connected clients hold open long-polling connections so that
they can receive events (messages, presence notifications, and so on) in
@ -58,7 +58,7 @@ There are various
[urls.py](https://docs.djangoproject.com/en/1.8/topics/http/urls/)
files throughout the server codebase, which are covered in more detail
in
[the directory structure doc](../overview/directory-structure.html).
[the directory structure doc](../overview/directory-structure.md).
The main Zulip Django app is `zerver`. The routes are found in
```
@ -188,7 +188,7 @@ find the correct view to show:
## The view will authorize the user, extract request variables, and validate them
This is covered in good detail in the [writing views doc](writing-views.html).
This is covered in good detail in the [writing views doc](writing-views.md).
## Results are given as JSON

View File

@ -8,22 +8,22 @@ data system in real-time to all browsers the user may have open.
As you read this, you may find you need to learn about Zulip's
real-time push system; the
[real-time push and events](../subsystems/events-system.html)
[real-time push and events](../subsystems/events-system.md)
documentation has a detailed explanation of how everything works. You
may also find it beneficial to read Zulip's
[architectural overview](../overview/architecture-overview.html).
[architectural overview](../overview/architecture-overview.md).
Zulip is a web application built using the
[Django framework](https://www.djangoproject.com/), and some of the
processes listed in this tutorial, such as database migrations and
tests, use Django's tooling.
Zulip's [directory structure](../overview/directory-structure.html)
Zulip's [directory structure](../overview/directory-structure.md)
will also be helpful to review when creating a new feature. Many
aspects of the structure will be familiar to Django developers. Visit
[Django's documentation](https://docs.djangoproject.com/en/1.11/#index-first-steps)
for more information about how Django projects are typically
organized. And finally, the
[message sending](../subsystems/sending-messages.html) documentation on
[message sending](../subsystems/sending-messages.md) documentation on
the additional complexity involved in sending messages.
## General Process
@ -74,13 +74,13 @@ following commands:
```
You can read our
[database migration documentation](../subsystems/schema-migrations.html)
[database migration documentation](../subsystems/schema-migrations.md)
to learn more about creating and applying database migrations.
**Test your changes:** Once you've run the migration, flush memcached
on your development server (`./scripts/setup/flush-memcached`) and then
[restart the development server](
../development/remote.html?highlight=tools%2Frun-dev.py#running-the-development-server)
../development/remote.md?highlight=tools%2Frun-dev.py#running-the-development-server)
to avoid interacting with cached objects.
### Backend changes
@ -130,7 +130,7 @@ precompiled as part of the build/deploy process.
Zulip is fully internationalized, so when writing both HTML templates
or JavaScript code that generates user-facing strings, be sure to
[tag those strings for translation](../translating/translating.html).
[tag those strings for translation](../translating/translating.md).
**Testing:** There are two types of frontend tests: node-based unit
tests and blackbox end-to-end tests. The blackbox tests are run in a
@ -138,14 +138,14 @@ headless browser using Casper.js and are located in
`frontend_tests/casper_tests/`. The unit tests use Node's `assert`
module are located in `frontend_tests/node_tests/`. For more
information on writing and running tests, see the
[testing documentation](../testing/testing.html).
[testing documentation](../testing/testing.md).
### Documentation changes
After implementing the new feature, you should
document it and update any existing documentation that might be
relevant to the new feature. For more information on the kinds of
documentation Zulip has, see [Documentation](../subsystems/documentation.html).
documentation Zulip has, see [Documentation](../subsystems/documentation.md).
## Example Feature
@ -247,7 +247,7 @@ Running migrations:
Once you've run the migration, restart memcached on your development
server (`/etc/init.d/memcached restart`) and then [restart the development server](
../development/remote.html?highlight=tools%2Frun-dev.py#running-the-development-server)
../development/remote.md?highlight=tools%2Frun-dev.py#running-the-development-server)
to avoid interacting with cached objects.
### Handle database interactions
@ -266,7 +266,7 @@ initial state. Subsequently, clients subscribe to "events," which can
For the backend piece, we will need our action to make a call to `send_event`
to send the event to clients that are active. We will also need to
modify `fetch_initial_state_data` so that the new field is passed to
clients. See [our event system docs](../subsystems/events-system.html) for all the
clients. See [our event system docs](../subsystems/events-system.md) for all the
gory details.
Anyway, getting back to implementation details...
@ -475,7 +475,7 @@ controls the feature it is supposed to control, however (e.g. for this
example feature, whether sending a message without a topic fails with
the setting enabled).
Visit Zulip's [Django testing](../testing/testing-with-django.html)
Visit Zulip's [Django testing](../testing/testing-with-django.md)
documentation to learn more about the backend testing framework.
### Update the front end
@ -636,8 +636,8 @@ Here are few important cases you should consider when testing your changes:
### Front End Tests
A great next step is to write front end tests. There are two types of
frontend tests: [node-based unit tests](../testing/testing-with-node.html) and
[Casper end-to-end tests](../testing/testing-with-casper.html).
frontend tests: [node-based unit tests](../testing/testing-with-node.md) and
[Casper end-to-end tests](../testing/testing-with-casper.md).
At the minimum, if you created a new function to update UI in
`settings_org.js`, you will need to mock that function in
@ -667,4 +667,4 @@ At the very least, this will involve adding (or modifying) a Markdown file
documenting the feature to `templates/zerver/help/` in the main Zulip
server repository, where the source for Zulip's user documentation is
stored. For information on writing user documentation, see
[Zulip's general user guide documentation](../subsystems/user-docs.html).
[Zulip's general user guide documentation](../subsystems/user-docs.md).

View File

@ -144,7 +144,7 @@ Some titles have been shortened for organizational purposes.
You may want to take a look first at our [Git and GitHub guide][].
[Git and GitHub guide]: ../git/index.html
[Git and GitHub guide]: ../git/index.md
## Computer Science/Algorithms

View File

@ -339,7 +339,7 @@ At first it seems like magic, but once you get the basic concepts you find it
extremely useful and even easy to use (at least the 99% of the time).
To learn more about how to use it, read
[our docs](../git/index.html) on Git and
[our docs](../git/index.md) on Git and
Github.
[This cheatsheet][git-cheat-detailed]
@ -347,4 +347,4 @@ will be useful in your journey, as well.
![Git - XKCD 1597](https://imgs.xkcd.com/comics/git.png)
[git-cheat-detailed]: ../git/cheat-sheet.html#detailed-cheat-sheet
[git-cheat-detailed]: ../git/cheat-sheet.md#detailed-cheat-sheet

View File

@ -3,15 +3,15 @@
## What this covers
This page documents how views work in Zulip. You may want to read the
[new feature tutorial](../tutorials/new-feature-tutorial.html)
[new feature tutorial](../tutorials/new-feature-tutorial.md)
and treat this as a reference.
If you have experience with Django, much of this will be familiar, but
you may want to read about how REST requests are dispatched, and how
request authentication works.
This document supplements the [new feature tutorial](../tutorials/new-feature-tutorial.html)
and the [testing](../testing/testing.html)
This document supplements the [new feature tutorial](../tutorials/new-feature-tutorial.md)
and the [testing](../testing/testing.md)
documentation.
## What is a view?
@ -37,7 +37,7 @@ integrations).
The format of the URL patterns in Django is [documented
here](https://docs.djangoproject.com/en/1.8/topics/http/urls/), and
the Zulip specific details for these are discussed in detail in the
[life of a request doc](life-of-a-request.html#options).
[life of a request doc](life-of-a-request.md#options).
We have two Zulip-specific conventions we use for internationalization and for
our REST API, respectively.
@ -366,4 +366,4 @@ def api_pagerduty_webhook(request, user_profile,
```
`request.client` will be the result of `get_client("ZulipPagerDutyWebhook")`
in this example and it will be passed to `check_send_stream_message`. For
more information, see [Clients in Zulip](../subsystems/client.html).
more information, see [Clients in Zulip](../subsystems/client.md).