diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 4382669ec3..a541423270 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,10 +1,10 @@ -**Testing Plan:** +**Testing plan:** -**GIFs or Screenshots:** diff --git a/.github/workflows/cancel-previous-runs.yml b/.github/workflows/cancel-previous-runs.yml index 6d05dfbff9..c374fb573a 100644 --- a/.github/workflows/cancel-previous-runs.yml +++ b/.github/workflows/cancel-previous-runs.yml @@ -1,4 +1,4 @@ -name: Cancel Previous Runs +name: Cancel previous runs on: [push, pull_request] defaults: @@ -7,7 +7,7 @@ defaults: jobs: cancel: - name: Cancel Previous Runs + name: Cancel previous runs runs-on: ubuntu-latest timeout-minutes: 3 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c650610997..9096d87853 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -1,4 +1,4 @@ -name: "Code Scanning" +name: "Code scanning" on: [push, pull_request] diff --git a/.github/workflows/production-suite.yml b/.github/workflows/production-suite.yml index 1cf14c8140..f97ded2aca 100644 --- a/.github/workflows/production-suite.yml +++ b/.github/workflows/production-suite.yml @@ -1,4 +1,4 @@ -name: Zulip Production Suite +name: Zulip production suite on: push: @@ -30,7 +30,7 @@ defaults: jobs: production_build: - name: Bionic Production Build + name: Bionic production build runs-on: ubuntu-latest # This docker image was created by a generated Dockerfile at: @@ -104,12 +104,12 @@ jobs: matrix: include: - docker_image: mepriyank/actions:bionic - name: Bionic Production Install + name: Bionic production install is_bionic: true os: bionic - docker_image: mepriyank/actions:focal - name: Focal Production Install + name: Focal production install is_focal: true os: focal diff --git a/.github/workflows/zulip-ci.yml b/.github/workflows/zulip-ci.yml index c3e1236e4b..1f63c69d25 100644 --- a/.github/workflows/zulip-ci.yml +++ b/.github/workflows/zulip-ci.yml @@ -37,7 +37,7 @@ jobs: # GitHub Actions sets HOME to /github/home which causes # problem later in provison and frontend test that runs # tools/setup/postgres-init-dev-db because of the .pgpass - # location. Postgresql (psql) expects .pgpass to be at + # location. PostgreSQL (psql) expects .pgpass to be at # /home/github/.pgpass and setting home to `/home/github/` # ensures it written there because we write it to ~/.pgpass. HOME: /home/github/ @@ -142,7 +142,7 @@ jobs: # see https://community.codecov.io/t/http-400-while-uploading-to-s3-with-python-codecov-from-travis/1428/7 pip install codecov && codecov || echo "Error in uploading coverage reports to codecov.io." - - name: Store puppeteer artifacts + - name: Store Puppeteer artifacts if: ${{ matrix.include_frontend_tests }} uses: actions/upload-artifact@v2 with: @@ -153,6 +153,6 @@ jobs: if: ${{ matrix.is_focal }} run: mispipe "tools/ci/setup-backend" ts # TODO: We need to port the notify_failure step from CircleCI - # config, however, it might be the case that GitHub Notifications - # make this unnesscary. More details on settings to configure it: + # config, however, it might be the case that GitHub notifications + # make this unnecessary. More details on settings to configure it: # https://help.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#github-actions-notification-options diff --git a/Dockerfile-postgresql b/Dockerfile-postgresql index 6cd6c7abd0..653166fac7 100644 --- a/Dockerfile-postgresql +++ b/Dockerfile-postgresql @@ -5,7 +5,7 @@ # the on-disk data in volumes. So the base image can not currently be upgraded # without users needing a manual pgdump and restore. -# Install hunspell, zulip stop words, and run zulip database +# Install hunspell, Zulip stop words, and run Zulip database # init. FROM groonga/pgroonga:latest-alpine-10-slim RUN apk add -U --no-cache hunspell-en diff --git a/README.md b/README.md index f2a040d68f..1f3703a403 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ over 500 contributors merging over 500 commits a month, Zulip is also the largest and fastest growing open source group chat project. [![CircleCI branch](https://img.shields.io/circleci/project/github/zulip/zulip/master.svg)](https://circleci.com/gh/zulip/zulip/tree/master) -[![Coverage Status](https://img.shields.io/codecov/c/github/zulip/zulip/master.svg)](https://codecov.io/gh/zulip/zulip/branch/master) +[![coverage status](https://img.shields.io/codecov/c/github/zulip/zulip/master.svg)](https://codecov.io/gh/zulip/zulip/branch/master) [![Mypy coverage](https://img.shields.io/badge/mypy-100%25-green.svg)][mypy-coverage] [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![GitHub release](https://img.shields.io/github/release/zulip/zulip.svg)](https://github.com/zulip/zulip/releases/latest) diff --git a/SECURITY.md b/SECURITY.md index cc83b959ac..4bda8220ae 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,9 +1,9 @@ -# Security Policy +# Security policy Security announcements are sent to zulip-announce@googlegroups.com, so you should subscribe if you are running Zulip in production. -## Reporting a Vulnerability +## Reporting a vulnerability We love responsible reports of (potential) security issues in Zulip, whether in the latest release or our development branch. @@ -18,7 +18,7 @@ Our [security model](https://zulip.readthedocs.io/en/latest/production/security-model.html) document may be a helpful resource. -## Supported Versions +## Supported versions Zulip provides security support for the latest major release, in the form of minor security/maintenance releases. diff --git a/analytics/lib/counts.py b/analytics/lib/counts.py index 7b85558ab1..c885e3b57e 100644 --- a/analytics/lib/counts.py +++ b/analytics/lib/counts.py @@ -598,7 +598,7 @@ def get_count_stats(realm: Optional[Realm]=None) -> Dict[str, CountStat]: ## CountStat declarations ## count_stats_ = [ - # Messages Sent stats + # Messages sent stats # Stats that count the number of messages sent in various ways. # These are also the set of stats that read from the Message table. @@ -617,7 +617,7 @@ def get_count_stats(realm: Optional[Realm]=None) -> Dict[str, CountStat]: sql_data_collector(StreamCount, count_message_by_stream_query(realm), (UserProfile, 'is_bot')), CountStat.DAY), - # Number of Users stats + # Number of users stats # Stats that count the number of active users in the UserProfile.is_active sense. # 'active_users_audit:is_bot:day' is the canonical record of which users were @@ -658,7 +658,7 @@ def get_count_stats(realm: Optional[Realm]=None) -> Dict[str, CountStat]: LoggingCountStat('messages_read::hour', UserCount, CountStat.HOUR), LoggingCountStat('messages_read_interactions::hour', UserCount, CountStat.HOUR), - # User Activity stats + # User activity stats # Stats that measure user activity in the UserActivityInterval sense. CountStat('1day_actives::day', diff --git a/analytics/tests/test_views.py b/analytics/tests/test_views.py index 8445a4a5b6..ca12eb8381 100644 --- a/analytics/tests/test_views.py +++ b/analytics/tests/test_views.py @@ -437,7 +437,7 @@ class TestSupportEndpoint(ZulipTestCase): zulip_realm = get_realm("zulip") self.assert_in_success_response([f'', - '', + '', '', 'input type="number" name="discount" value="None"', '', @@ -449,7 +449,7 @@ class TestSupportEndpoint(ZulipTestCase): lear_realm = get_realm("lear") self.assert_in_success_response([f'', - '', + '', '', 'input type="number" name="discount" value="None"', '', diff --git a/analytics/views.py b/analytics/views.py index 4f31e051c6..2174474549 100644 --- a/analytics/views.py +++ b/analytics/views.py @@ -172,14 +172,14 @@ def get_chart_data_for_remote_realm( @require_server_admin def stats_for_installation(request: HttpRequest) -> HttpResponse: - return render_stats(request, '/installation', 'Installation', True) + return render_stats(request, '/installation', 'installation', True) @require_server_admin def stats_for_remote_installation(request: HttpRequest, remote_server_id: int) -> HttpResponse: assert settings.ZILENCER_ENABLED server = RemoteZulipServer.objects.get(id=remote_server_id) return render_stats(request, f'/remote/{server.id}/installation', - f'remote Installation {server.hostname}', True, True) + f'remote installation {server.hostname}', True, True) @require_server_admin_api @has_request_variables @@ -787,9 +787,9 @@ def user_activity_intervals() -> Tuple[mark_safe, Dict[str, float]]: realm_minutes[string_id] = realm_duration.total_seconds() / 60 - output += f"\nTotal Duration: {total_duration}\n" - output += f"\nTotal Duration in minutes: {total_duration.total_seconds() / 60.}\n" - output += f"Total Duration amortized to a month: {total_duration.total_seconds() * 30. / 60.}" + output += f"\nTotal duration: {total_duration}\n" + output += f"\nTotal duration in minutes: {total_duration.total_seconds() / 60.}\n" + output += f"Total duration amortized to a month: {total_duration.total_seconds() * 30. / 60.}" content = mark_safe('
' + output + '
') return content, realm_minutes @@ -1328,7 +1328,7 @@ def raw_user_activity_table(records: List[QuerySet]) -> str: ] rows = list(map(row, records)) - title = 'Raw Data' + title = 'Raw data' return make_table(title, cols, rows) def get_user_activity_summary(records: List[QuerySet]) -> Dict[str, Dict[str, Any]]: @@ -1473,7 +1473,7 @@ def user_activity_summary_table(user_summary: Dict[str, Dict[str, Any]]) -> str: 'count', ] - title = 'User Activity' + title = 'User activity' return make_table(title, cols, rows) def realm_user_summary_table(all_records: List[QuerySet], diff --git a/docs/development/overview.md b/docs/development/overview.md index 3555219a1b..64716ea5a6 100644 --- a/docs/development/overview.md +++ b/docs/development/overview.md @@ -39,7 +39,7 @@ method][install-vagrant]. If you have a very slow network connection, however, you may want to avoid using Vagrant (which involves downloading an Ubuntu virtual -machine or Linux Container) and either +machine or Linux container) and either [install directly][install-direct] (recommended), or use [the manual install process][install-generic] instead. These options only support Linux. @@ -71,7 +71,7 @@ need to. Once you've installed the Zulip development environment, you'll want to read these documents to learn how to use it: -* [Using the Development Environment][using-dev-env] +* [Using the development environment][using-dev-env] * [Testing][testing] (and [Configuring CI][ci]) And if you've set up the Zulip development environment on a remote diff --git a/docs/development/remote.md b/docs/development/remote.md index 622d17d0fe..ee5acbba0e 100644 --- a/docs/development/remote.md +++ b/docs/development/remote.md @@ -254,7 +254,7 @@ Now your workspace should look similar this: Next, read the following to learn more about developing for Zulip: * [Git & GitHub Guide][rtd-git-guide] -* [Using the Development Environment][rtd-using-dev-env] +* [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 diff --git a/docs/development/request-remote.md b/docs/development/request-remote.md index 3f6750cdf4..1e3cf0e8b5 100644 --- a/docs/development/request-remote.md +++ b/docs/development/request-remote.md @@ -73,7 +73,7 @@ Once you've confirmed you can connect to your remote server, take a look at: Next, read the following to learn more about developing for Zulip: -* [Using the Development Environment](../development/using.md) +* [Using the development environment](../development/using.md) * [Testing](../testing/testing.md) [github-join]: https://github.com/join diff --git a/docs/development/setup-advanced.md b/docs/development/setup-advanced.md index 76239e48c6..2cb9eb1190 100644 --- a/docs/development/setup-advanced.md +++ b/docs/development/setup-advanced.md @@ -2,19 +2,19 @@ Contents: -* [Installing directly on Ubuntu, Debian, Centos, or Fedora](#installing-directly-on-ubuntu-debian-centos-or-fedora) +* [Installing directly on Ubuntu, Debian, CentOS, or Fedora](#installing-directly-on-ubuntu-debian-centos-or-fedora) * [Installing directly on Windows 10](#installing-directly-on-windows-10-experimental) * [Installing manually on other Linux/UNIX](#installing-manually-on-unix) * [Installing directly on cloud9](#installing-on-cloud9) -## Installing directly on Ubuntu, Debian, Centos, or Fedora +## Installing directly on Ubuntu, Debian, CentOS, or Fedora If you'd like to install a Zulip development environment on a computer that's running one of: * Ubuntu 20.04 Focal, 18.04 Bionic * Debian 10 Buster -* Centos 7 (beta) +* CentOS 7 (beta) * Fedora 29 (beta) * RHEL 7 (beta) @@ -279,14 +279,14 @@ proxy in the environment as follows: yarn config set https-proxy http://proxy_host:port ``` -## Installing on cloud9 +## Installing on Cloud9 AWS Cloud9 is a cloud-based integrated development environment (IDE) that lets you write, run, and debug your code with just a browser. It includes a code editor, debugger, and terminal. This section documents how to set up the Zulip development environment -in a cloud9 workspace. If you don't have an existing cloud9 account, +in a Cloud9 workspace. If you don't have an existing Cloud9 account, you can sign up [here](https://aws.amazon.com/cloud9/). * Create a Workspace, and select the blank template. @@ -295,10 +295,10 @@ you can sign up [here](https://aws.amazon.com/cloud9/). Free Tier). * Clone the zulip repo: `git clone --config pull.rebase https://github.com//zulip.git` -* Restart rabbitmq-server since its broken on cloud9: `sudo service +* Restart rabbitmq-server since its broken on Cloud9: `sudo service rabbitmq-server restart`. * And run provision `cd zulip && ./tools/provision`, once this is done. -* Activate the zulip virtual environment by `source +* Activate the Zulip virtual environment by `source /srv/zulip-py3-venv/bin/activate` or by opening a new terminal. #### Install zulip-cloud9 @@ -321,7 +321,7 @@ you need to start a new terminal. Your development server would be running at `https://-.c9users.io` on port 8080. You -dont need to add `:8080` to your url, since the cloud9 proxy should +dont need to add `:8080` to your URL, since the Cloud9 proxy should automatically forward the connection. You might want to visit [zulip-cloud9 repo](https://github.com/cPhost/zulip-cloud9) and it's [wiki](https://github.com/cPhost/zulip-cloud9/wiki) for more info on diff --git a/docs/development/setup-vagrant.md b/docs/development/setup-vagrant.md index a65ebaf053..483a701440 100644 --- a/docs/development/setup-vagrant.md +++ b/docs/development/setup-vagrant.md @@ -65,7 +65,7 @@ to GitHub working on your machine. Follow our [Git guide][set-up-git] in order to install Git, set up a GitHub account, create an SSH key to access code on GitHub -efficiently, etc. Be sure to create an ssh key and add it to your +efficiently, etc. Be sure to create an SSH key and add it to your GitHub account using [these instructions](https://help.github.com/en/articles/generating-an-ssh-key). @@ -83,8 +83,8 @@ Jump to: 1. Install [Vagrant][vagrant-dl] (latest). 2. Install [VirtualBox][vbox-dl] (latest). -(For a non-free option, but better performance, you can also use [VMWare -Fusion][vmware-fusion-dl] with the [VMWare Fusion Vagrant +(For a non-free option, but better performance, you can also use [VMware +Fusion][vmware-fusion-dl] with the [VMware Fusion Vagrant plugin][vagrant-vmware-fusion-dl] or [Parallels Desktop][parallels-desktop-dl] as a provider for Vagrant.) @@ -252,7 +252,7 @@ git remote add -f upstream https://github.com/zulip/zulip.git This will create a 'zulip' directory and download the Zulip code into it. -Don't forget to replace YOURUSERNAME with your git username. You will see +Don't forget to replace YOURUSERNAME with your Git username. You will see something like: ``` @@ -534,7 +534,7 @@ $ ./tools/run-dev.py Next, read the following to learn more about developing for Zulip: * [Git & GitHub Guide][rtd-git-guide] -* [Using the Development Environment][rtd-using-dev-env] +* [Using the development environment][rtd-using-dev-env] * [Testing][rtd-testing] (and [Configuring CI][ci] to run the full test suite against any branches you push to your fork, which can help you optimize your development workflow). @@ -803,7 +803,7 @@ that failed. Once you've resolved the problem, you can rerun `tools/provision` to proceed; the provisioning system is designed to recover well from failures. -The zulip provisioning system is generally highly reliable; the most common +The Zulip provisioning system is generally highly reliable; the most common cause of issues here is a poor network connection (or one where you need a proxy to access the Internet and haven't [configured the development environment to use it](#specifying-a-proxy). @@ -985,7 +985,7 @@ connect to your development server. ### Customizing CPU and RAM allocation When running Vagrant using a VM-based provider such as VirtualBox or -VMWare Fusion, CPU and RAM resources must be explicitly allocated to +VMware Fusion, CPU and RAM resources must be explicitly allocated to the guest system (with Docker and other container-based Vagrant providers, explicit allocation is unnecessary and the settings described here are ignored). diff --git a/docs/documentation/overview.md b/docs/documentation/overview.md index 2eab8d8bb9..828e1051a7 100644 --- a/docs/documentation/overview.md +++ b/docs/documentation/overview.md @@ -34,7 +34,7 @@ Zulip servers. These docs are written in [Commonmark Markdown](https://commonmark.org/) with a small bit of rST. We've chosen Markdown because it is [easy to write](https://commonmark.org/help/). The source for Zulip's -developer documentation is at `docs/` in the Zulip git repository, and +developer documentation is at `docs/` in the Zulip Git repository, and they are served in production at [zulip.readthedocs.io](https://zulip.readthedocs.io/en/latest/). @@ -129,7 +129,7 @@ payload verification. Note that this test does not check for broken links (those are checked by `test-help-documentation`). * `tools/test-help-documentation` checks `/help/`, `/api/`, - `/integrations/`, and the Core website ("portico") documentation for + `/integrations/`, and the core website ("portico") documentation for broken links. Note that the "portico" documentation check has a manually maintained whitelist of pages, so if you add a new page to this site, you will need to edit `PorticoDocumentationSpider` to add it. diff --git a/docs/documentation/user.md b/docs/documentation/user.md index 0ddc26a928..d9a7beefcd 100644 --- a/docs/documentation/user.md +++ b/docs/documentation/user.md @@ -11,7 +11,7 @@ The feature articles serve a few different purposes: * Feature discovery, for someone browsing the `/help` page, and looking at the set of titles. * Public documentation of our featureset, for someone googling "can zulip do .." -* Canned responses to support questions; if someone emails a zulip admin +* Canned responses to support questions; if someone emails a Zulip admin asking "how do I change my name", they can reply with a link to the doc. * Feature explanations for new Zulip users and admins, especially for organization settings. @@ -239,9 +239,9 @@ languages in API docs, etc. To create a tab switcher, write: {start_tabs} {tab|desktop-web} - # First Tab's content + # First tab's content {tab|ios} - # Second Tab's content + # Second tab's content {tab|android} # Third tab's content {end_tabs} diff --git a/docs/git/overview.md b/docs/git/overview.md index c06d255436..b7a935149f 100644 --- a/docs/git/overview.md +++ b/docs/git/overview.md @@ -51,8 +51,8 @@ Finally, install the [Zulip developer environment][zulip-rtd-dev-overview], and *** The following sections will help you be awesome with Zulip and Git/GitHub in a -rebased-based workflow. Read through it if you're new to git, to a rebase-based -git workflow, or if you'd like a git refresher. +rebased-based workflow. Read through it if you're new to Git, to a rebase-based +Git workflow, or if you'd like a Git refresher. [gitbook-rebase]: https://git-scm.com/book/en/v2/Git-Branching-Rebasing [github-rebase-pr]: https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request diff --git a/docs/git/setup.md b/docs/git/setup.md index 632e7c77f9..8fd57e572b 100644 --- a/docs/git/setup.md +++ b/docs/git/setup.md @@ -14,7 +14,7 @@ administrator][git-bash-admin] at all times.** You'll also need a GitHub account, which you can sign up for [here][github-join]. -We highly recommend you create an ssh key if you don't already have +We highly recommend you create an SSH key if you don't already have one and [add it to your GitHub account][github-help-add-ssh-key]. If you don't, you'll have to type your GitHub username and password every time you interact with GitHub, which is usually several times a day. @@ -44,7 +44,7 @@ If you don't already have one installed, here are some suggestions: - Windows: [SourceTree][gitgui-sourcetree] If you like working on the command line, but want better visualization and -navigation of your git repo, try [Tig][tig], a cross-platform ncurses-based +navigation of your Git repo, try [Tig][tig], a cross-platform ncurses-based text-mode interface to Git. And, if none of the above are to your liking, try [one of these][gitbook-guis]. diff --git a/docs/git/terminology.md b/docs/git/terminology.md index d2a468e692..a0090532f4 100644 --- a/docs/git/terminology.md +++ b/docs/git/terminology.md @@ -1,7 +1,7 @@ # Important Git terms When you install Git, it adds a manual entry for `gitglossary`. You can view -this glossary by running `man gitglossary`. Below we've included the git terms +this glossary by running `man gitglossary`. Below we've included the Git terms you'll encounter most often along with their definitions from *gitglossary*. ## branch diff --git a/docs/git/working-copies.md b/docs/git/working-copies.md index a8cf00cb53..7b4e4003f2 100644 --- a/docs/git/working-copies.md +++ b/docs/git/working-copies.md @@ -1,7 +1,7 @@ # Working copies When you work on Zulip code, there are three working copies -of the Zulip git repo that you are generally concerned with: +of the Zulip Git repo that you are generally concerned with: - local copy: This lives on your laptop or your remote dev instance. - forked copy: This lives on GitHub, and it's tied to your account. diff --git a/docs/overview/architecture-overview.md b/docs/overview/architecture-overview.md index ce22b6a907..8c8f2cb76e 100644 --- a/docs/overview/architecture-overview.md +++ b/docs/overview/architecture-overview.md @@ -135,7 +135,7 @@ from outside. and the production build process (`tools/build-release-tarball`) compiles, minifies, and installs the static assets into the `prod-static/` tree form. In development, files are served directly - from `/static/` in the git repository. + from `/static/` in the Git repository. - Requests to `/json/events` and `/api/v1/events`, i.e. the real-time push system, are sent to the Tornado server. - Requests to all other paths are sent to the Django app running via @@ -184,25 +184,25 @@ persistence: # Zulip-specific configuration: disable saving to disk. save "" -People often wonder if we could replace memcached with redis (or -replace RabbitMQ with redis, with some loss of functionality). +People often wonder if we could replace memcached with Redis (or +replace RabbitMQ with Redis, with some loss of functionality). The answer is likely yes, but it wouldn't improve Zulip. Operationally, our current setup is likely easier to develop and run -in production than a pure redis system would be. Meanwhile, the -perceived benefit for using redis is usually to reduce memory +in production than a pure Redis system would be. Meanwhile, the +perceived benefit for using Redis is usually to reduce memory consumption by running fewer services, and no such benefit would materialize: * Our cache uses significant memory, but that memory usage would be - essentially the same with redis as it is with memcached. + essentially the same with Redis as it is with memcached. * All of these services have low minimum memory requirements, and in - fact our applications for redis and RabbitMQ do not use significant + fact our applications for Redis and RabbitMQ do not use significant memory even at scale. -* We would likely need to run multiple redis services (with different +* We would likely need to run multiple Redis services (with different configurations) in order to ensure the pure LRU use case (memcached) doesn't push out data that we want to persist until expiry - (redis-based rate limiting) or until consumed (RabbitMQ-based + (Redis-based rate limiting) or until consumed (RabbitMQ-based queuing of deferred work). ### RabbitMQ @@ -237,12 +237,12 @@ with the operating system. In production, Postgres is installed with a default configuration. The directory that would contain configuration files (`puppet/zulip/files/postgresql`) has only a utility script and a custom -list of stopwords used by a Postgresql extension. +list of stopwords used by a PostgreSQL extension. -In a development environment, configuration of that postgresql +In a development environment, configuration of that PostgreSQL extension is handled by `tools/postgres-init-dev-db` (invoked by `tools/provision`). That file also manages setting up the -development postgresql user. +development PostgreSQL user. `tools/provision` also invokes `tools/rebuild-dev-database` to create the actual database with its schema. @@ -287,11 +287,11 @@ self-explanatory names. topic]", or "Link to this conversation". To avoid visual clutter, the chevron only appears in the web UI upon hover. -* **ellipsis**: A small vertical three dot icon(technically called +* **ellipsis**: A small vertical three dot icon (technically called as ellipsis-v), present in sidebars as a menu icon. - It offers contextual options for Global Filters(All messages - and Starred messages), Stream Filters and Topics in left - sidebar and User in right sidebar. To avoid visual clutter + It offers contextual options for global filters (All messages + and Starred messages), stream filters and topics in left + sidebar and users in right sidebar. To avoid visual clutter ellipsis only appears in the web UI upon hover. * **huddle**: What the codebase calls a "group private message". diff --git a/docs/overview/changelog.md b/docs/overview/changelog.md index 86ac1f411f..2ab9d0ddb5 100644 --- a/docs/overview/changelog.md +++ b/docs/overview/changelog.md @@ -31,7 +31,7 @@ in bursts. data will fascilitate future features showing a log of activity by a given user or changes to an organization's settings. - Added support for using Sentry for processing backend exceptions. -- Added documentation for using `wal-g` for continuous postgres backups. +- Added documentation for using `wal-g` for continuous Postgres backups. - Added loading spinners for message editing widgets. - Added live update of compose placeholder text when recipients change. - The Zoom integration is now stable (no longer beta). @@ -50,7 +50,7 @@ in bursts. - Fixed screenreader accessibility of many components, including the compose box, message editing, popovers, and many more. - Improved formatting of GitLab integration. -- Improved positioning logic for inline Youtube previews. +- Improved positioning logic for inline YouTube previews. - Upgraded our ancient forked version of bootstrap, on a path towards removing the last forked dependencies from the codebase. - Updated webapp codebase to use many modern ES6 patterns. @@ -124,7 +124,7 @@ in bursts. - The Zulip server now sets badge counts for the iOS mobile app. - Quote-and-reply now generates a handy link to the quoted message. - Upgraded Django from 1.11.x to the latest LTS series, 2.2.x. -- Added integrations for ErrBit, Grafana, Thinkst Canary, and AlertManager. +- Added integrations for ErrBit, Grafana, Thinkst Canary, and Alertmanager. - Extended API documentation to have detailed data on most responses, validated against the API's actual implementation and against all tests in our extensive automated test suite. @@ -132,7 +132,7 @@ in bursts. global/default policy and policies for specific streams. - Added a new incoming webhook API that accepts messages in the format used by Slack's incoming webhooks API. -- Introduced the Zulip API Feature Level, a concept that will greatly +- Introduced the Zulip API feature level, a concept that will greatly simplify the implementation of mobile, terminal, and desktop clients that need to talk to a wide range of supported Zulip server versions, as well as the [Zulip API @@ -162,22 +162,22 @@ in bursts. accounts affected by this bug, so we expect the vast majority of installations will have none. - This release switches Zulip to install Postgres 12 from the upstream - postgres repository by default, rather than using the default + Postgres repository by default, rather than using the default Postgres version included with the operating system. Existing Zulip installations will continue to work with Postgres 10; this detail is configured in `/etc/zulip/zulip.conf`. We have no concrete plans to start requiring Postgres 12, though we do expect it to improve performance. Installations that would like to upgrade can follow - [our new postgres upgrade guide][postgres-upgrade]. + [our new Postgres upgrade guide][postgres-upgrade]. - The format of the `JWT_AUTH_KEYS` setting has changed to include an [algorithms](https://pyjwt.readthedocs.io/en/latest/algorithms.html) list: `{"subdomain": "key"}` becomes `{"subdomain": {"key": "key", "algorithms": ["HS256"]}}`. -- Added a new Organization Owner permission above the previous - Organization Administrator. All existing organization +- Added a new organization owner permission above the previous + organization administrator. All existing organization administrators are automatically converted into organization owners. Certain sensitive administrative settings are now only - editable by Organization Owners. + editable by organization owners. - The changelog now has a section that makes it easy to find the Upgrade notes for all releases one is upgrading across. @@ -322,7 +322,7 @@ in bursts. ### 2.1.7 -- 2020-06-25 - CVE-2020-15070: Fix privilege escalation vulnerability with custom - profile fields and direct write access to Zulip's postgres database. + profile fields and direct write access to Zulip's Postgres database. - Changed default memcached authentication username to zulip@localhost, fixing authentication problems when servers change their hostname. @@ -366,7 +366,7 @@ details. - Fixed a regression in 2.1.3 that impacted creating the very first organization via our data import tools. -- Remove the old `tsearch_extras` postgres extension, which was causing +- Remove the old `tsearch_extras` Postgres extension, which was causing an exception restoring backups on fresh Zulip servers that had been generated on systems that had been upgraded from older Zulip releases. - Removed fetching GitHub contributor data from static asset build @@ -398,7 +398,7 @@ details. - Fixed copy-to-clipboard button for outgoing webhook bots. - Fixed logging spam from soft_deactivation cron job. - Fixed email integration handling of emails with nested MIME structure. -- Fixed unicode bugs in incoming email integration. +- Fixed Unicode bugs in incoming email integration. - Fixed error handling for Slack data import. - Fixed incoming webhook support for AWX 9.x.y. - Fixed a couple missing translation tags. @@ -413,8 +413,8 @@ details. - Corrected fix for CVE-2019-19775 (the original fix was affected by an unfixed security bug in Python's urllib, CVE-2015-2104). - Migrated data for handling replies to missed-message emails from - semi-persistent redis to the fully persistent database. -- Added authentication for redis and memcached even in configurations + semi-persistent Redis to the fully persistent database. +- Added authentication for Redis and memcached even in configurations where these are running on localhost, for add hardening against attacks from malicious processes running on the Zulip server. - Improved logging for misconfigurations of LDAP authentication. @@ -444,7 +444,7 @@ details. - Added support for Debian buster. Removed support for EOL Ubuntu Trusty. - Added support for SAML authentication. - Removed our dependency on `tsearch_extras`, making it possible to - run a production Zulip server against any postgres database + run a production Zulip server against any Postgres database (including those where one cannot install extensions, like Amazon RDS). - Significantly improved the email->Zulip gateway, and added [nice setup documentation](../production/email-gateway.md). It now @@ -488,7 +488,7 @@ configure this feature entirely in the UI. However, servers that had previously [enabled previews of linked websites](https://zulip.com/help/allow-image-link-previews) will lose the setting and need to re-enable it. -- We rewrote the Google Authentication backend to use the +- We rewrote the Google authentication backend to use the `python-social-auth` system we use for other third-party authentication systems. For this release, the old variable names still work, but users should update the following setting names in @@ -644,7 +644,7 @@ lose the setting and need to re-enable it. joined that stream. - Fixed several subtle real-time sync issues with "stream settings". - Fixed a few subtle Markdown processor bugs involving emoji. -- Fixed several issues where Linkifiers validation was overly restrictive. +- Fixed several issues where linkifiers validation was overly restrictive. - Fixed several rare/minor UI consistency issues in the left sidebar. - Fixed issues involving saving a message edit before file upload completes. - Fixed issues with pasting images into the compose box from Safari. @@ -700,7 +700,7 @@ lose the setting and need to re-enable it. - Fixed a table layout bug in "deactivated users" settings. - Fixed an exception when administrators edited bot users when custom profile fields were configured in the organization. -- Fixed a bug enabling the PGRoonga search backend with older postgres. +- Fixed a bug enabling the PGRoonga search backend with older Postgres. - Fixed getting personal API key when passwords are disabled. ### 2.0.3 -- 2019-04-23 @@ -714,11 +714,11 @@ lose the setting and need to re-enable it. such a version by default, but one can install it manually). - Fixed `manage.py query_ldap` test tool (broken in 2.0.2). - Fixed several bugs in new backup and restore tools. -- Fixed minor bugs with Youtube previews. +- Fixed minor bugs with YouTube previews. ### 2.0.2 -- 2019-03-15 -- Fixed a regression in the puppet configuration for S3 upload backend +- Fixed a regression in the Puppet configuration for S3 upload backend introduced in 2.0.1. - Fixed a too-fast fade for "Saved" in organization settings. - Fixed a white flash when loading a browser in night mode. @@ -821,7 +821,7 @@ and is enabled by default in that case. To disable it, set - Improved accessibility of emoji rendering in messages bodies. - Eliminated UI lag when using "Quote and reply". - Expanded production documentation for more unusual deployment options. -- Expanded set of characters allowed in custom Linkifiers. +- Expanded set of characters allowed in custom linkifiers. - Optimized development provisioning; now takes 2s in the no-op case. - Zulip's Help Center now has nicely generated open graph tags. - Fixed missing API authentication headers for mobile file access. @@ -842,11 +842,11 @@ and is enabled by default in that case. To disable it, set ### 1.9.2 -- 2019-01-29 This release migrates Zulip off a deprecated Google+ API (necessary -for Google Authentication to continue working past March 7), and +for Google authentication to continue working past March 7), and contains a few bug fixes for the installer and Slack import. It has minimal changes for existing servers not using Google authentication. -- Updated the Google Auth integration to stop using a deprecated and +- Updated the Google auth integration to stop using a deprecated and soon-to-be-removed Google+ authentication API. - Improved installer error messages for common configuration problems. - Fixed several bugs in Slack, Gitter, and HipChat import tools. @@ -976,7 +976,7 @@ Zulip installations; it has minimal changes for existing servers. - Improved Zulip's layout for windows with a width around 1024px. - Improved Zulip's generic error handling behavior for webhooks. - Improved keyboard navigation of settings and popovers. -- Renamed "Realm Filters" to "Linkifiers", at least in the UI. +- Renamed "realm filters" to "linkifiers", at least in the UI. - Converted several layered-checkbox settings to clearer dropdowns. - Cleaned up some legacy APIs still using email addresses. - Made arrow-key navigation work within right and left sidebar search. @@ -1079,7 +1079,7 @@ Zulip installations; it has minimal changes for existing servers. public streams, even though from before a user subscribed. - Added a menu item to mark all messages as read. - Fixed image upload file pickers offering non-image files. -- Fixed some subtle bugs with full-text search and unicode. +- Fixed some subtle bugs with full-text search and Unicode. - Fixed bugs in the "edit history" HTML rendering process. - Fixed popovers being closed when new messages come in. - Fixed unexpected code blocks when using the email mirror. @@ -1413,7 +1413,7 @@ running a version from before 1.7 should upgrade directly to 1.7.1. - Simplified the settings for configuring senders for our emails. - Emoji can now be typed with spaces, e.g. entering "robot face" in the typeahead as well as "robot_face". -- Improved title and alt text for unicode emoji. +- Improved title and alt text for Unicode emoji. - Added development tools to make iterating on emails and error pages easy. - Added backend support for multi-use invite links (no UI for creating yet). - Added a central debugging log for attempts to send outgoing emails. @@ -1486,7 +1486,7 @@ Zulip apps. * Added an icon to distinguish bot users as message senders. * Added a command-line Slack importer tool using the API. * Added new announcement notifications on stream creation. -* Added support for some newer unicode emoji code points. +* Added support for some newer Unicode emoji code points. * Added support for users deleting realm emoji they themselves uploaded. * Added support for organization administrators deleting messages. * Extended data available to mobile apps to cover the entire API. @@ -1523,7 +1523,7 @@ Zulip apps. * Fixed numerous bugs with the message editing widget. * Fixed missing logging / rate limiting on browser endpoints. * Fixed regressions in Zulip's browser state preservation on reload logic. -* Fixed support for unicode characters in the email mirror system. +* Fixed support for Unicode characters in the email mirror system. * Fixed load spikes when email mirror is receiving a lot of traffic. * Fixed the ugly grey flicker when scrolling fast on Macs. * Fixed previews of GitHub image URLs. @@ -1597,7 +1597,7 @@ Zulip apps. - Added a webhook integration for GitHub, replacing the deprecated github-services hook. - Normalized the message formatting for all the Zulip Git integrations. -- Added support for VMWare Fusion Vagrant provider for faster OSX +- Added support for VMware Fusion Vagrant provider for faster OSX development. - Added a shields.io style badge for joining a Zulip server. - Added admin setting for which email domains can join a realm. @@ -1630,7 +1630,7 @@ Zulip apps. - Added several new linters (eslint, pep8) and cleaned the codebase. - Optimized the speed of the Zulip upgrade process, especially with Git. - Have peer_add events send user_id, not email. -- Fixed problems with rabbitmq when installing Zulip. +- Fixed problems with RabbitMQ when installing Zulip. - Fixed JavaScript not being gzip-compressed properly. - Fixed a major performance bug in the Tornado service. - Fixed a frontend performance bug creating streams in very large realms. @@ -1702,8 +1702,8 @@ Zulip apps. - Added management command for creating realms through web UI. - Added management command to send password reset emails. - Added endpoint for mobile apps to query available auth backends. -- Added LetsEncrypt documentation for getting SSL certificates. -- Added nice rendering of unicode emoji. +- Added Let's Encrypt documentation for getting SSL certificates. +- Added nice rendering of Unicode emoji. - Added support for pinning streams to the top of the left sidebar. - Added search box for filtering user list when creating a new stream. - Added realm setting to disable message editing. @@ -1714,10 +1714,10 @@ Zulip apps. easy to add additional social authentication methods). - Added TERMS_OF_SERVICE setting using Markdown formatting to configure the terms of service for a Zulip server. -- Added numerous hooks to puppet modules to enable more configurations. -- Moved several useful puppet components into the main puppet - manifests (setting a redis password, etc.). -- Added automatic configuration of postgres/memcached settings based +- Added numerous hooks to Puppet modules to enable more configurations. +- Moved several useful Puppet components into the main Puppet + manifests (setting a Redis password, etc.). +- Added automatic configuration of Postgres/memcached settings based on the server's available RAM. - Added scripts/upgrade-zulip-from-git for upgrading Zulip from a Git repo. - Added preliminary support for Python 3. All of Zulip's test suites now @@ -1732,7 +1732,7 @@ Zulip apps. - Improved missed message emails to better support directly replying. - Increased backend test coverage of Python code to 85.5%. - Increased mypy static type coverage of Python code to 95%. Also - fixed many string annotations to properly handle unicode. + fixed many string annotations to properly handle Unicode. - Fixed major i18n-related frontend performance regression on /#subscriptions page. Saves several seconds of load time with 1k streams. @@ -1749,7 +1749,7 @@ Zulip apps. - Fixed EPMD restart being attempted on every puppet apply. - Fixed message cache filling; should improve perf after server restart. - Fixed caching race condition when changing user objects. -- Fixed buggy puppet configuration for supervisord restarts. +- Fixed buggy Puppet configuration for supervisord restarts. - Fixed some error handling race conditions when editing messages. - Fixed fastcgi_params to protect against the httpoxy attack. - Fixed bug preventing users with mit.edu emails from registering accounts. @@ -1757,7 +1757,7 @@ Zulip apps. - Fixed APNS push notification support (had been broken by Apple changing the APNS API). - Fixed some logic bugs in how attachments are tracked. -- Fixed unnecessarily resource-intensive rabbitmq cron checks. +- Fixed unnecessarily resource-intensive RabbitMQ cron checks. - Fixed old deployment directories leaking indefinitely. - Fixed need to manually add localhost in ALLOWED_HOSTS. - Fixed display positioning for the color picker on subscriptions page. @@ -1817,7 +1817,7 @@ Zulip apps. - Fixed erroneous WWW-Authenticate headers with expired sessions. - Changed "coworkers" to "users" in the Zulip UI. - Changed add_default_stream REST API to correctly use PUT rather than PATCH. -- Updated the Zulip emoji set (the Android Emoji) to a modern version. +- Updated the Zulip emoji set (the Android emoji) to a modern version. - Made numerous small improvements to the Zulip development experience. - Migrated backend templates to the faster Jinja2 templating system. - Migrated development environment setup scripts to tools/setup/. @@ -1844,7 +1844,7 @@ Zulip apps. - Added ability for realm administrators to manage custom emoji. - Added guide to writing new integrations. - Enabled camo image proxy to fix mixed-content warnings for http images. -- Refactored the Zulip puppet modules to be more modular. +- Refactored the Zulip Puppet modules to be more modular. - Refactored the Tornado event system, fixing old memory leaks. - Removed many old-style /json API endpoints - Implemented running queue processors multithreaded in development, @@ -1864,7 +1864,7 @@ Zulip apps. - Added new integration for Travis CI. - Added settings option to control maximum file upload size. - Added support for running Zulip development environment in Docker. -- Added easy configuration support for a remote postgres database. +- Added easy configuration support for a remote Postgres database. - Added extensive documentation on scalability, backups, and security. - Recent private message threads are now displayed expanded similar to the pre-existing recent topics feature. @@ -1886,7 +1886,7 @@ Zulip apps. - Fixed buggy #! lines in upgrade scripts. ### 1.3.8 - 2015-11-15 -- Added options to the Python api for working with untrusted server certificates. +- Added options to the Python API for working with untrusted server certificates. - Added a lot of documentation on the development environment and testing. - Added partial support for translating the Zulip UI. - Migrated installing Node dependencies to use npm. @@ -1913,7 +1913,7 @@ Zulip apps. This section links to the upgrade notes from past releases, so you can easily read them all when upgrading across multiple releases. -* [Draft Upgrade notes for 4.0](#upgrade-notes-for-4-0) +* [Draft upgrade notes for 4.0](#upgrade-notes-for-4-0) * [Upgrade notes for 3.0](#upgrade-notes-for-3-0) * [Upgrade notes for 2.1.5](#upgrade-notes-for-2-1-5) * [Upgrade notes for 2.1.0](#upgrade-notes-for-2-1-0) diff --git a/docs/overview/directory-structure.md b/docs/overview/directory-structure.md index 37753cec9b..b47e01d6e4 100644 --- a/docs/overview/directory-structure.md +++ b/docs/overview/directory-structure.md @@ -138,7 +138,7 @@ Django context (i.e. with database access). ------------------------------------------------------------------------- -### Production puppet configuration +### Production Puppet configuration This is used to deploy essentially all configuration in production. diff --git a/docs/overview/gsoc-ideas.md b/docs/overview/gsoc-ideas.md index cfac426d41..36828425d8 100644 --- a/docs/overview/gsoc-ideas.md +++ b/docs/overview/gsoc-ideas.md @@ -242,7 +242,7 @@ the areas mentioned above are not your main strength. As a data point, in Summer 2017, we had 4 students working on the React Native mobile app (1 focused primarily on visual design), 1 on -the Electron Desktop app, 2 on bots/integrations, 1 on webapp visual +the Electron desktop app, 2 on bots/integrations, 1 on webapp visual design, 2 on our development tooling and automated testing infrastructure, and the remaining 4 on various other parts of the backend and core webapp. @@ -348,7 +348,7 @@ CSS](https://github.com/zulip/zulip/). (likely part 1) is [here](../subsystems/custom-apps.md). **Skills recommended**: Python and JavaScript/CSS, plus devops - skills (Linux deployment, Docker, puppet etc.) are all useful here. + skills (Linux deployment, Docker, Puppet etc.) are all useful here. Experience writing tools using various popular APIs is helpful for being able to make good choices. Experts: Steve Howell. @@ -454,7 +454,7 @@ Expert: Tommy Ip, Tim Abbott. 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 + for details on how mypy works and is integrated into Zulip. This specific project is ideal for a strong contributor interested in type systems. diff --git a/docs/production/deployment.md b/docs/production/deployment.md index 685509a5bf..9d820704b7 100644 --- a/docs/production/deployment.md +++ b/docs/production/deployment.md @@ -56,8 +56,8 @@ file and you'll find inline documentation in comments for how to configure it. Since some of these services require some configuration on the node -itself (e.g. installing our `postgres` extensions), we have designed -the puppet configuration that Zulip uses for installing and upgrading +itself (e.g. installing our Postgres extensions), we have designed +the Puppet configuration that Zulip uses for installing and upgrading configuration to be completely modular. For example, you can install a Zulip rabbitmq server on a machine, you @@ -74,7 +74,7 @@ of includes in though it's also possible to subclass some of the lower-level manifests defined in that directory if you want to customize. A good example of doing this is in the -[zulip_ops puppet configuration][zulipchat-puppet] that we use as part +[zulip_ops Puppet configuration][zulipchat-puppet] that we use as part of managing chat.zulip.org and zulip.com. ### Using Zulip with Amazon RDS as the database @@ -117,7 +117,7 @@ This complication will be removed in a future version. #### Step 2: Create the Postgres database -Access an administrative `psql` shell on your postgres database, and +Access an administrative `psql` shell on your Postgres database, and run the commands in `scripts/setup/create-db.sql` to: * Create a database called `zulip`. @@ -126,7 +126,7 @@ run the commands in `scripts/setup/create-db.sql` to: `zulip` in the `zulip` database. You might have to grant `create` privileges first for the `zulip` user to do this. -Depending on how authentication works for your postgres installation, +Depending on how authentication works for your Postgres installation, you may also need to set a password for the Zulip user, generate a client certificate, or similar; consult the documentation for your database provider for the available options. @@ -134,11 +134,11 @@ database provider for the available options. #### Step 3: Configure Zulip to use the Postgres database In `/etc/zulip/settings.py` on your Zulip server, configure the -following settings with details for how to connect to your postgres +following settings with details for how to connect to your Postgres server. Your database provider should provide these details. -* `REMOTE_POSTGRES_HOST`: Name or IP address of the postgres server. -* `REMOTE_POSTGRES_PORT`: Port on the postgres server. +* `REMOTE_POSTGRES_HOST`: Name or IP address of the Postgres server. +* `REMOTE_POSTGRES_PORT`: Port on the Postgres server. * `REMOTE_POSTGRES_SSLMODE`: SSL Mode used to connect to the server. If you're using password authentication, you should specify the @@ -152,7 +152,7 @@ postgres_password = abcd1234 Now complete the installation by running the following commands. ``` -# Ask Zulip installer to initialize the postgres database. +# Ask Zulip installer to initialize the Postgres database. su zulip -c '/home/zulip/deployments/current/scripts/setup/initialize-database' # And then generate a realm creation link: @@ -233,7 +233,7 @@ For `nginx` configuration, there's two things you need to set up: `/etc/nginx/sites-available`) for the Zulip app. You can look at our [nginx reverse proxy configuration][nginx-loadbalancer] to see an example of how to do this properly (the various include files are - available via the `zulip::nginx` puppet module). Or modify this + available via the `zulip::nginx` Puppet module). Or modify this example: ``` diff --git a/docs/production/email-gateway.md b/docs/production/email-gateway.md index ba540fdb5e..73fb1820d9 100644 --- a/docs/production/email-gateway.md +++ b/docs/production/email-gateway.md @@ -31,7 +31,7 @@ records in DNS. ## Local delivery setup -Zulip's puppet configuration provides everything needed to run this +Zulip's Puppet configuration provides everything needed to run this integration; you just need to enable and configure it as follows. The main decision you need to make is what email domain you want to diff --git a/docs/production/expensive-migrations.md b/docs/production/expensive-migrations.md index 9d232eafe2..e893a523aa 100644 --- a/docs/production/expensive-migrations.md +++ b/docs/production/expensive-migrations.md @@ -17,7 +17,7 @@ can run them manually before starting the upgrade: /home/zulip/deployments/current` 2. Run `./manage.py dbshell`. This will open a shell connected to the Postgres database. -3. In the postgres shell, run the following commands: +3. In the Postgres shell, run the following commands: CREATE INDEX CONCURRENTLY zerver_usermessage_is_private_message_id diff --git a/docs/production/export-and-import.md b/docs/production/export-and-import.md index 7c785262f9..4e7ab4d7a4 100644 --- a/docs/production/export-and-import.md +++ b/docs/production/export-and-import.md @@ -12,7 +12,7 @@ service (or back): * Backups must be restored on a server running the same Zulip version (most precisely, one where `manage.py showmigrations` has the same output). - * Backups must be restored on a server running the same `postgres` + * Backups must be restored on a server running the same Postgres version. * Backups aren't useful for migrating organizations between self-hosting and Zulip Cloud (which may require renumbering all @@ -20,7 +20,7 @@ service (or back): We highly recommend this tool in situations where it is applicable, because it is highly optimized and highly stable, since the hard - work is done by the built-in backup feature of `postgres`. We also + work is done by the built-in backup feature of Postgres. We also document [backup details](#backup-details) for users managing backups manually. @@ -36,7 +36,7 @@ service (or back): Like the backup tool, logical data exports must be imported on a Zulip server running the same version. However, logical data exports can be imported on Zulip servers running a different - `postgres` version or hosting a different set of Zulip + Postgres version or hosting a different set of Zulip organizations. We recommend this tool in cases where the backup tool isn't applicable, including situations where an easily machine-parsable export format is desired. @@ -47,7 +47,7 @@ service (or back): inexpensively preserve public stream conversations when decommissioning a Zulip organization. -* It's possible to set up [postgres streaming +* It's possible to set up [Postgres streaming replication](#postgres-streaming-replication) and the [S3 file upload backend](../production/upload-backends.html#s3-backend-configuration) @@ -69,7 +69,7 @@ The backup tool provides the following options: to (default: write to a file in `/tmp`). On success, the console output will show the path to the output tarball. - `--skip-db`: Skip backup of the database. Useful if you're using a - remote postgres host with its own backup system and just need to + remote Postgres host with its own backup system and just need to backup non-database state. - `--skip-uploads`: If `LOCAL_UPLOADS_DIR` is set, user-uploaded files in that directory will be ignored. @@ -154,19 +154,19 @@ emails to send). You can check whether these queues are empty using #### Backup details This section is primarily for users managing backups themselves -(E.g. if they're using a remote postgres database with an existing +(E.g. if they're using a remote Postgres database with an existing backup strategy), and also serves as documentation for what is included in the backups generated by Zulip's standard tools. The data includes: -* The postgres database. You can back it up like any postgres +* The Postgres database. You can back it up like any Postgres database. We have some example tooling for doing that incrementally into S3 using [wal-g](https://github.com/wal-g/wal-g) in `puppet/zulip/manifests/postgres_backups.pp`. In short, this requires: - Zulip 1.4 or newer release. - An Amazon S3 bucket for storing the backups. - - `/etc/zulip/zulip-secrets.conf` on the postgres server like this: + - `/etc/zulip/zulip-secrets.conf` on the Postgres server like this: ``` [secrets] s3_backups_key = # aws public key diff --git a/docs/production/install-existing-server.md b/docs/production/install-existing-server.md index 39586c7729..0e7fc15fe0 100644 --- a/docs/production/install-existing-server.md +++ b/docs/production/install-existing-server.md @@ -33,7 +33,7 @@ sudo wget -O /etc/nginx/nginx.conf.zulip \ sudo meld /etc/nginx/nginx.conf /etc/nginx/nginx.conf.zulip # be sure to merge to the right ``` -After the zulip installation completes, then you can overwrite (or +After the Zulip installation completes, then you can overwrite (or merge) your new nginx.conf with the installed one: ```shell @@ -41,13 +41,13 @@ $ sudo meld /etc/nginx/nginx.conf.zulip /etc/nginx/nginx.conf # be sure to merg $ sudo service nginx restart ``` -Zulip's puppet configuration will change the ownership of +Zulip's Puppet configuration will change the ownership of `/var/log/nginx` so that the `zulip` user can access it. Depending on your configuration, this may or may not cause problems. ### Puppet -If you have a puppet server running on your server, you will get an +If you have a Puppet server running on your server, you will get an error message about not being able to connect to the client during the install process: @@ -55,7 +55,7 @@ install process: puppet-agent[29873]: Could not request certificate: Failed to open TCP connection to puppet:8140 ``` -So you'll need to shutdown any puppet servers. +So you'll need to shutdown any Puppet servers. ```shell $ sudo service puppet-agent stop @@ -75,7 +75,7 @@ If you have an existing PostgreSQL database, note that Zulip will use the default `main` as its database name; make sure you're not using that. -### Memcached, redis, and rabbitmq +### Memcached, Redis, and RabbitMQ Zulip will, by default, configure these services for its use. The configuration we use is pretty basic, but if you're using them for diff --git a/docs/production/multiple-organizations.md b/docs/production/multiple-organizations.md index c985bdb0b8..9bf58328e7 100644 --- a/docs/production/multiple-organizations.md +++ b/docs/production/multiple-organizations.md @@ -9,7 +9,7 @@ The vast majority of Zulip servers host just a single organization (or documents what's involved in hosting multiple Zulip organizations on a single server. -Throughout this article, we'll assume you're working on a zulip 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.md) to be useful reading. @@ -33,7 +33,7 @@ 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.md), it's easy to + [our Let's Encrypt 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. diff --git a/docs/production/postgres.md b/docs/production/postgres.md index 72139a8f19..d129a53a78 100644 --- a/docs/production/postgres.md +++ b/docs/production/postgres.md @@ -8,7 +8,7 @@ Previous versions of Zulip used whatever version of Postgres was included with the base operating system (E.g. Postgres 12 on Ubuntu Focal, 10 on Ubuntu Bionic, and 9.6 on Ubuntu Xenial). We recommend that installations currently using older Postgres releases [upgrade to -Postgres 12][upgrade-postgres], as may drop support for older postgres +Postgres 12][upgrade-postgres], as may drop support for older Postgres in a future release. [upgrade-postgres]: ../production/upgrade-or-modify.html#upgrading-postgresql @@ -16,7 +16,7 @@ in a future release. #### Remote Postgres database This is a bit annoying to set up, but you can configure Zulip to use a -dedicated postgres server by setting the `REMOTE_POSTGRES_HOST` +dedicated Postgres server by setting the `REMOTE_POSTGRES_HOST` variable in /etc/zulip/settings.py, and configuring Postgres certificate authentication (see http://www.postgresql.org/docs/9.1/static/ssl-tcp.html and @@ -25,11 +25,11 @@ documentation on how to set this up and deploy the certificates) to make the DATABASES configuration in `zproject/computed_settings.py` work (or override that configuration). -If you want to use a remote Postgresql database, you should configure +If you want to use a remote PostgreSQL database, you should configure the information about the connection with the server. You need a user called "zulip" in your database server. You can configure these options in `/etc/zulip/settings.py` (the below descriptions are from the -Postgresql documentation): +PostgreSQL documentation): * `REMOTE_POSTGRES_HOST`: Name or IP address of the remote host * `REMOTE_POSTGRES_SSLMODE`: SSL Mode used to connect to the server, @@ -64,15 +64,15 @@ sudo update-rc.d postgresql disable ``` In future versions of this feature, we'd like to implement and -document how to the remote postgres database server itself +document how to the remote Postgres database server itself automatically by using the Zulip install script with a different set -of puppet manifests than the all-in-one feature; if you're interested +of Puppet manifests than the all-in-one feature; if you're interested in working on this, post to the Zulip development mailing list and we can give you some tips. -#### Debugging postgres database issues +#### Debugging Postgres database issues -When debugging postgres issues, in addition to the standard `pg_top` +When debugging Postgres issues, in addition to the standard `pg_top` tool, often it can be useful to use this query: ``` @@ -92,9 +92,9 @@ sending a Postgres process SIGKILL. Doing so will cause the database to kill all current connections, roll back any pending transactions, and enter recovery mode. -#### Stopping the Zulip postgres database +#### Stopping the Zulip Postgres database -To start or stop postgres manually, use the pg_ctlcluster command: +To start or stop Postgres manually, use the pg_ctlcluster command: ``` pg_ctlcluster 9.1 [--force] main {start|stop|restart|reload} @@ -120,7 +120,7 @@ Many database parameters can be adjusted while the database is running. Just modify /etc/postgresql/9.1/main/postgresql.conf and issue a reload. The logs will note the change. -#### Debugging issues starting postgres +#### Debugging issues starting Postgres pg_ctlcluster often doesn't give you any information on why the database failed to start. It may tell you to check the logs, but you @@ -141,7 +141,7 @@ pg_ctlcluster does. #### Postgres vacuuming alerts -The `autovac_freeze` postgres alert from `check_postgres` is +The `autovac_freeze` Postgres alert from `check_postgres` is particularly important. This alert indicates that the age (in terms of number of transactions) of the oldest transaction id (XID) is getting close to the `autovacuum_freeze_max_age` setting. When the @@ -154,4 +154,4 @@ database as a database superuser (`postgres`). See http://www.postgresql.org/docs/9.1/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND -for more details on postgres vacuuming. +for more details on Postgres vacuuming. diff --git a/docs/production/requirements.md b/docs/production/requirements.md index 19d1d5cbe7..028276dcf2 100644 --- a/docs/production/requirements.md +++ b/docs/production/requirements.md @@ -18,8 +18,8 @@ For details on each of these requirements, see below. #### General The installer expects Zulip to be the **only thing** running on the -system; it will install system packages with `apt` (like nginx, -postgresql, and redis) and configure them for its own use. We +system; it will install system packages with `apt` (like Nginx, +PostgreSQL, and Redis) and configure them for its own use. We 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 @@ -50,7 +50,7 @@ https://help.ubuntu.com/community/Repositories/Ubuntu #### Hardware specifications -* CPU and Memory: For installations with 100+ users you'll need a +* CPU and memory: For installations with 100+ users you'll need a minimum of **2 CPUs** and **4GB RAM**. For installations with fewer users, 1 CPU and 2GB RAM is sufficient. We strongly recommend against installing with less than 2GB of RAM, as you will likely experience @@ -149,7 +149,7 @@ most use cases, there's little scalability benefit to doing so. See installing Zulip with a dedicated database server. * **Dedicated database**. For installations with hundreds of daily - active users, we recommend using a [remote postgres + active users, we recommend using a [remote Postgres database](postgres.md), but it's not required. * **RAM:** We recommended more RAM for larger installations: diff --git a/docs/production/security-model.md b/docs/production/security-model.md index 71a628930e..e031558939 100644 --- a/docs/production/security-model.md +++ b/docs/production/security-model.md @@ -36,7 +36,7 @@ announcement). prevent CSRF attacks. * The preferred way to log in to Zulip is using an SSO solution like - Google Auth, LDAP, or similar, but Zulip also supports password + Google auth, LDAP, or similar, but Zulip also supports password authentication. See [the authentication methods documentation](../production/authentication-methods.md) for details on Zulip's available authentication methods. @@ -134,11 +134,11 @@ strength allowed is controlled by two settings in ## Users and bots -* There are several types of users in a Zulip organization: Organization - Owners, Organization Administrators, Members (normal users), Guests, - and Bots. +* There are several types of users in a Zulip organization: organization + owners, organization administrators, members (normal users), guests, + and bots. -* Owners and Administrators have the ability to deactivate and +* Owners and administrators have the ability to deactivate and reactivate other human and bot users, delete streams, add/remove administrator privileges, as well as change configuration for the organization. diff --git a/docs/production/settings.md b/docs/production/settings.md index 6c5e54bbba..ddd0b9ec25 100644 --- a/docs/production/settings.md +++ b/docs/production/settings.md @@ -38,13 +38,13 @@ prefilled with that value. `AUTHENTICATION_BACKENDS`: Zulip supports a wide range of popular options for authenticating users to your server, including Google -Auth, GitHub Auth, LDAP, SAML, REMOTE_USER, and more. +auth, GitHub auth, LDAP, SAML, REMOTE_USER, and more. 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.md) for more +[section on authentication](../production/authentication-methods.md) for more detail on the available authentication backends and how to configure them. diff --git a/docs/production/troubleshooting.md b/docs/production/troubleshooting.md index a0e1cbd9c2..d5bcce54a7 100644 --- a/docs/production/troubleshooting.md +++ b/docs/production/troubleshooting.md @@ -36,7 +36,7 @@ and restart various services. ### Checking status with `supervisorctl status` -You can check if the zulip application is running using: +You can check if the Zulip application is running using: ``` supervisorctl status ``` @@ -93,10 +93,10 @@ The Zulip application uses several major open source services to store and cache data, queue messages, and otherwise support the Zulip application: -* postgresql -* rabbitmq-server -* nginx -* redis +* PostgreSQL +* RabbitMQ +* Nginx +* Redis * memcached If one of these services is not installed or functioning correctly, @@ -140,11 +140,11 @@ problems and how to resolve them: `_ and instead install apt upgrades manually. With unattended upgrades enabled, the moment a new Postgres release is published, your Zulip - server will have its postgres server upgraded (and thus restarted). + server will have its Postgres server upgraded (and thus restarted). ``` -Restarting one of the system services that Zulip uses (`postgres`, -`memcached`, `redis`, or `rabbitmq`) will drop the connections that +Restarting one of the system services that Zulip uses (Postgres, +memcached, Redis, or Rabbitmq) will drop the connections that Zulip processes have to the service, resulting in future operations on those connections throwing errors. @@ -165,8 +165,8 @@ workers are commonly idle for periods of hours or days at a time. You can prevent this trickle when doing a planned upgrade by restarting the Zulip server with `/home/zulip/deployments/current/scripts/restart-server` after -installing system package updates to `postgres`, `memcached`, -`rabbitmq`, or `redis`. +installing system package updates to Postgres, memcached, +RabbitMQ, or Redis. Few system administrators enjoy outages at random times (even if only brief) or the resulting distribution of error emails, which is why we @@ -189,8 +189,8 @@ standard stuff: especially for the database and where uploads are stored. * Service uptime and standard monitoring for the [services Zulip depends on](#troubleshooting-services). Most monitoring software - has standard plugins for `nginx`, `postgres`, `redis`, `rabbitmq`, - and `memcached`, and those will work well with Zulip. + has standard plugins for Nginx, Postgres, Redis, RabbitMQ, + and memcached, and those will work well with Zulip. * `supervisorctl status` showing all services `RUNNING`. * Checking for processes being OOM killed. @@ -230,8 +230,8 @@ Database monitoring: * `check_fts_update_log`: Checks whether full-text search updates are being processed properly or getting backlogged. * `check_postgres`: General checks for database health. -* `check_postgres_backup`: Checks status of postgres backups. -* `check_postgres_replication_lag`: Checks whether postgres streaming +* `check_postgres_backup`: Checks status of Postgres backups. +* `check_postgres_replication_lag`: Checks whether Postgres streaming replication is up to date. Standard server monitoring: diff --git a/docs/production/upgrade-or-modify.md b/docs/production/upgrade-or-modify.md index 81a87ff4da..bd26503f79 100644 --- a/docs/production/upgrade-or-modify.md +++ b/docs/production/upgrade-or-modify.md @@ -3,7 +3,7 @@ This page explains how to upgrade, patch, or modify Zulip, including: - [Upgrading to a release](#upgrading-to-a-release) -- [Upgrading from a git repository](#upgrading-from-a-git-repository) +- [Upgrading from a Git repository](#upgrading-from-a-git-repository) - [Troubleshooting and rollback](#troubleshooting-and-rollback) - [Preserving local changes to configuration files](#preserving-local-changes-to-configuration-files) - [Upgrading the operating system](#upgrading-the-operating-system) @@ -166,7 +166,7 @@ the version corresponding to the `restart-server` path you call. You can test whether this will happen assuming no upstream changes to the configuration using `scripts/zulip-puppet-apply` (without the -`-f` option), which will do a test puppet run and output and changes +`-f` option), which will do a test Puppet run and output and changes it would make. Using this list, you can save a copy of any files that you've modified, do the upgrade, and then restore your configuration. @@ -177,7 +177,7 @@ system to Zulip Cloud. Before making local changes to a configuration file, first check whether there's an option supported by `/etc/zulip/zulip.conf` for the customization you need. And if you need to make local modifications, please report the issue so that we -can make the Zulip puppet configuration flexible enough to handle your +can make the Zulip Puppet configuration flexible enough to handle your setup. ### nginx configuration changes @@ -195,7 +195,7 @@ some additional steps to update your Zulip installation, documented below. The steps are largely the same for the various OS upgrades aside from -the versions of postgres, so you should be able to adapt these +the versions of Postgres, so you should be able to adapt these instructions for other supported platforms. ### Upgrading from Ubuntu 18.04 Bionic to 20.04 Focal @@ -226,8 +226,8 @@ instructions for other supported platforms. release update of Ubuntu 20.04 LTS is released. When `do-release-upgrade` asks you how to upgrade configuration - files for services that Zulip manages like `redis`, `postgres`, - `nginx`, and `memcached`, the best choice is `N` to keep the + files for services that Zulip manages like Redis, Postgres, + Nginx, and memcached, the best choice is `N` to keep the currently installed version. But it's not important; the next step will re-install Zulip's configuration in any case. @@ -357,8 +357,8 @@ instructions for other supported platforms. [debian-upgrade-os]: https://www.debian.org/releases/buster/amd64/release-notes/ch-upgrading.html When prompted for you how to upgrade configuration - files for services that Zulip manages like `redis`, `postgres`, - `nginx`, and `memcached`, the best choice is `N` to keep the + files for services that Zulip manages like Redis, Postgres, + Nginx, and memcached, the best choice is `N` to keep the currently installed version. But it's not important; the next step will re-install Zulip's configuration in any case. diff --git a/docs/subsystems/analytics.md b/docs/subsystems/analytics.md index 42b05e6394..32676dbb28 100644 --- a/docs/subsystems/analytics.md +++ b/docs/subsystems/analytics.md @@ -10,7 +10,7 @@ designed around the following goals: - Efficient to query so that we can display data in-app (e.g. on the streams page) with minimum impact on the overall performance of those pages. - Storage size smaller than the size of the main Message/UserMessage - database tables, so that we can store the data in the main postgres + database tables, so that we can store the data in the main Postgres database rather than using a specialized database platform. There are a few important things you need to understand in order to @@ -64,7 +64,7 @@ summed to rows in InstallationCount with totals for pairs of (end_time, client). Note: In most cases, we do not store rows with value 0. See -[Performance Strategy](#performance-strategy) below. +[Performance strategy](#performance-strategy) below. ## CountStats diff --git a/docs/subsystems/api-release-checklist.md b/docs/subsystems/api-release-checklist.md index 5e3c8666a7..5dd5b8094c 100644 --- a/docs/subsystems/api-release-checklist.md +++ b/docs/subsystems/api-release-checklist.md @@ -16,7 +16,7 @@ presented [here](https://packaging.python.org/tutorials/installing-packages/). 2. Create a [source distribution][3]. -3. Create a [pure Python Wheel][4]. +3. Create a [pure Python wheel][4]. 4. [Upload][5] the distribution file(s) to [zulip-beta][6]. diff --git a/docs/subsystems/conversion.md b/docs/subsystems/conversion.md index 2bed74bda7..153ef15153 100644 --- a/docs/subsystems/conversion.md +++ b/docs/subsystems/conversion.md @@ -104,12 +104,12 @@ files from S3. Finally, `Attachment`'s `m2m` relationship ties to Here are the same classes of data, listed in roughly decreasing order of riskiness: -- Message Data (sheer volume/lack of time/security) -- File-Related Data (S3/security/lots of moving parts) -- Recipient Data (complexity/security/cross-realm considerations) -- Cross Realm Data (duplicate ids) -- Disjoint User Data -- Public Realm Data +- Message data (sheer volume/lack of time/security) +- File-related data (S3/security/lots of moving parts) +- Recipient data (complexity/security/cross-realm considerations) +- Cross realm data (duplicate ids) +- Disjoint user data +- Public realm data (Note the above list is essentially in reverse order of how we process the data, which isn't surprising for a top-down approach.) diff --git a/docs/subsystems/custom-apps.md b/docs/subsystems/custom-apps.md index b7e60f0f95..7d6e7772d3 100644 --- a/docs/subsystems/custom-apps.md +++ b/docs/subsystems/custom-apps.md @@ -53,17 +53,17 @@ can be the source of the stimulus, or the target of the response, or both. Along those lines, we divide custom apps into these three types: -- A **Zulip Reader** uses activity on Zulip to stimulate an external +- A **Zulip reader** uses activity on Zulip to stimulate an external response. An example here would be a follow-up bot that sees messages with the alert word "@todo" on a stream and then adds a task to a third party todo-list tool. -- A **Zulip Writer** reacts to external stimuli and generates +- A **Zulip writer** reacts to external stimuli and generates Zulip responses. An example here might be a build bot that gets triggered by an automated code build finishing and then writes "build finished" to a Zulip stream. -- A **Zulip Read/Writer** reacts to a stimulus from Zulip by +- A **Zulip reader/writer** reacts to a stimulus from Zulip by responding to Zulip. An example here would be a math bot that sees a message saying "compute 2+2" and responds with "2+2=4" on the same stream or back to the user in a PM. @@ -72,16 +72,16 @@ The above three classifications represent kind of a Zulip-centric view of the universe, but we should put ourselves in the shoes of somebody "out in the world." -- A **World Reader** is an app that gets some stimulus from +- A **world reader** is an app that gets some stimulus from the outside world and produces a response in Zulip. (So, a world reader is a Zulip writer.) -- A **World Writer** is an app that gets some stimulus from +- A **world writer** is an app that gets some stimulus from Zulip and produces a response in the outside world. (So, a world writer is a Zulip reader.) Some things are a little outside of the scope of this document. -We could plausibly extend Zulip some day to host **World Reader/Writer** +We could plausibly extend Zulip some day to host **world reader/Writer** apps that don't even write Zulip messages but simply use Zulip as a kind of middleware platform. @@ -93,14 +93,14 @@ the scope of this document, we won't spend a lot of time talking about how to build these types of apps, but we are aware that any solution needs to accommodate multiple sources and targets. -### World Reader/Zulip Reader +### World reader/Zulip reader Finally, we set the stage for how we talk about custom apps in terms of these two broad categories: -- A **World Reader** responds to stimuli from the outside world (and +- A **world reader** responds to stimuli from the outside world (and typically produces a response in Zulip). -- A **Zulip Reader** responds to stimuli from Zulip conversations (and +- A **Zulip reader** responds to stimuli from Zulip conversations (and typically produces a response in the outside world). Again, we recognize that there can be overlap between those two @@ -152,9 +152,9 @@ party corporate system based on Zulip events, I may want to deploy code to a public webserver or try to get my code to be part of the Zulip project itself. -## World Reader +## World reader -A **World Reader** custom app is an app that responds to stimuli +A **world reader** custom app is an app that responds to stimuli from the world outside of Zulip. It typically functions as a **Zulip Writer** and posts some kind of message to a Zulip stream or user to alert people of world events. Here are some example stimuli: @@ -175,11 +175,11 @@ you basically have to solve these problems: ### Zulip integrations Zulip actually supports a bunch of integrations out-of-the-box that -perform as **World Readers**. +perform as **world readers**. The [three different integration models](https://zulip.com/api/integrations-overview#sending-content-into-zulip) basically differ in where they perform the main functions of a -**World Reader**. +**world reader**. #### Incoming webhook integrations @@ -240,21 +240,21 @@ Ruby. There are probably still some scenarios, however, where a lot of the logic for translation could be moved to a Zulip-side integration, and then we supply very thin client code for the plugin. -## Zulip Reader +## Zulip reader -A **Zulip Reader** custom app gets stimuli from Zerver itself. Most -**Zulip Reader** apps are packaged/advertised more as what people commonly call +A **Zulip reader** custom app gets stimuli from Zerver itself. Most +**Zulip reader** apps are packaged/advertised more as what people commonly call "bots" than as "integrations." (But sometimes what is currently a "bot" should really be deployed more like an "integration" in an ideal Zulip universe.) -Example custom **Zulip Reader** apps can be serious or whimsical. +Example custom **Zulip reader** apps can be serious or whimsical. **Serious** - A user tags a message with an alert word like `@followup` or `@ticket`. - A user needs help computing something, like a simple math expression or a timezone conversion. -- A **World Reader** custom app posts something to a Zulip stream that we +- A **world reader** custom app posts something to a Zulip stream that we want to cross-post to another external system. - A user wants the custom app to query the outside world, like look up the weather or search Wikipedia. @@ -267,7 +267,7 @@ weather or search Wikipedia. - A user wants to tell the office telepresence robot to "turn left." Setting aside whether a custom app is performing a serious or whimsical -function, there are a few different types of **Zulip Readers**: +function, there are a few different types of **Zulip readers**: - Some readers will do simple local computations and post right back to Zulip. - Some readers will do more expensive/web-related computations like searching @@ -303,7 +303,7 @@ code to your friends and have them be able to deploy it. - If you've written a general-use bot, it may be difficult to persuade your admin to give you a superuser account. -We want to make it easier to deploy **Zulip Readers** on +We want to make it easier to deploy **Zulip readers** on Zulip hardware. The following document talks about how we want to enable this from a code structuring standpoint: @@ -326,7 +326,7 @@ apps, where an app author might use the following development process: To give a concrete example, let's say that I work for a company that is building an issue tracker, and we want to offer Zulip support. I would -start by writing a **Zulip Reader** that scans for the alert word `@ticket` +start by writing a **Zulip reader** that scans for the alert word `@ticket` on certain public Zulip streams, and part of that app would have logic to post to my company's issue-tracking API. @@ -360,7 +360,7 @@ the "world" as it sees fit. ### Zulip-side support for reader apps Even for app authors that have access to dedicated hardware, -there would be several advantages to running **Zulip Readers** under +there would be several advantages to running **Zulip readers** under the same umbrella as the core Zulip system. - Your app will automatically inherit the uptime of the Zulip server itself (in @@ -382,7 +382,7 @@ the problems below. (One assumption is that we don't run apps truly in-process.) - **Contributions**: We need a process for users to contribute code. -- **Configuration/Discovery**: We need Zulip to be able to find which +- **Configuration/discovery**: We need Zulip to be able to find which apps are allowed to run for a particular deployment. (The admin may choose to run only a subset of contributed apps.) diff --git a/docs/subsystems/dependencies.md b/docs/subsystems/dependencies.md index 09dfcfaf85..e904bf18d8 100644 --- a/docs/subsystems/dependencies.md +++ b/docs/subsystems/dependencies.md @@ -103,7 +103,7 @@ on specific versions of these packages wherever possible. The exact lists of `apt` packages needed by Zulip are maintained in a few places: -* For production, in our puppet configuration, `puppet/zulip/`, using +* For production, in our Puppet configuration, `puppet/zulip/`, using the `Package` and `SafePackage` directives. * For development, in `SYSTEM_DEPENDENCIES` in `tools/lib/provision.py`. * The packages needed to build a Zulip virtualenv, in @@ -113,7 +113,7 @@ few places: install other dependencies, and (2) because that list is shared between development and production. -We also rely on the `pgroonga` PPA for the `pgroonga` postgres +We also rely on the PGroonga PPA for the PGroonga Postgres extension, used by our [full-text search](full-text-search.md). ## Python packages diff --git a/docs/subsystems/emoji.md b/docs/subsystems/emoji.md index 45a644827d..d62b0a7585 100644 --- a/docs/subsystems/emoji.md +++ b/docs/subsystems/emoji.md @@ -14,7 +14,7 @@ Currently, Zulip supports these four display formats for emoji: ## Emoji codes The Unicode standard has various ranges of characters set aside for -emoji. So you can put emoji in your terminal using actual unicode +emoji. So you can put emoji in your terminal using actual Unicode characters like 😀 and 👍. If you paste those into Zulip, Zulip will render them as the corresponding emoji image. @@ -48,7 +48,7 @@ etc. However, we can't use the sprite sheets in some contexts, such as missed-message and digest emails, that need to have self-contained assets. For those, we use individual emoji files under `static/generated/emoji`. The structure of that repository contains -both files named after the unicode representation of emoji (as actual +both files named after the Unicode representation of emoji (as actual image files) as well as symlinks pointing to those emoji. We need to maintain those both for the names used in the iamcal emoji @@ -69,7 +69,7 @@ for more details on this strategy. The emoji tree generated by this process contains several import elements: * `emoji_codes.json`: A set of mappings used by the Zulip frontend to - understand what unicode emoji exist and what their shortnames are, + understand what Unicode emoji exist and what their shortnames are, used for autocomplete, emoji pickers, etc. This has been deduplicated using the logic in `tools/setup/emoji/emoji_setup_utils.py` to generally only have @@ -80,7 +80,7 @@ The emoji tree generated by this process contains several import elements: `images/emoji/unicode/` tree. This is used to serve individual emoji images, as well as for the [backend Markdown processor](../subsystems/markdown.md) to know which emoji - names exist and what unicode emoji / images they map to. In this + 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, but will still work (but not in previews). @@ -131,7 +131,7 @@ principles that were applied to the current set of names. We use (strong), be familiar to a large subset of users. This largely applies to certain faces. (medium) -* The set of names should be compatible with the iamcal, gemoji, and unicode +* The set of names should be compatible with the iamcal, gemoji, and Unicode names. Compatible here means that if there is an emoji name a user knows from one of those sets, and the user searches for the key word of that name, they will get an emoji in our set. It is okay if this emoji has a diff --git a/docs/subsystems/markdown.md b/docs/subsystems/markdown.md index 41aac159a7..371f3c3790 100644 --- a/docs/subsystems/markdown.md +++ b/docs/subsystems/markdown.md @@ -137,8 +137,8 @@ Important considerations for any changes are: Zulip's Markdown processor's rendering supports a number of features that depend on realm-specific or user-specific data. For example, the realm could have -[Linkifiers](https://zulip.com/help/add-a-custom-linkification-filter) -or [Custom emoji](https://zulip.com/help/add-custom-emoji) +[linkifiers](https://zulip.com/help/add-a-custom-linkification-filter) +or [custom emoji](https://zulip.com/help/add-custom-emoji) configured, and Zulip supports mentions for streams, users, and user groups (which depend on data like users' names, IDs, etc.). @@ -248,7 +248,7 @@ accurate. `http://google.com`, and not `https://zulip.com/google.com` which is the default behavior. -* Set `title=`(the url) on every link tag. +* Set `title=`(the URL) on every link tag. * Disable link-by-reference syntax, `[foo][bar]` ... `[bar]: https://google.com`. diff --git a/docs/subsystems/schema-migrations.md b/docs/subsystems/schema-migrations.md index bf3248ea8b..148e64e0a2 100644 --- a/docs/subsystems/schema-migrations.md +++ b/docs/subsystems/schema-migrations.md @@ -48,7 +48,7 @@ migrations. to the table, performing data backfills, or building indexes. We have a `zerver/lib/migrate.py` library to help with adding columns and backfilling data. For building indexes on these tables, we - should do this using SQL with postgres's CONCURRENTLY keyword. + should do this using SQL with Postgres's CONCURRENTLY keyword. * **Atomicity**. By default, each Django migration is run atomically inside a transaction. This can be problematic if one wants to do diff --git a/docs/subsystems/typing-indicators.md b/docs/subsystems/typing-indicators.md index d87f750876..800fbf88bd 100644 --- a/docs/subsystems/typing-indicators.md +++ b/docs/subsystems/typing-indicators.md @@ -12,7 +12,7 @@ system and possibly improve it. This document assumes that the client is our web app, but any client can play along with this protocol. -Right now typing indicators are only used in "Private Messages" +Right now typing indicators are only used in "Private messages" views. There are two major roles for users in this system: diff --git a/docs/subsystems/users.md b/docs/subsystems/users.md index 25168691a5..980548d66a 100644 --- a/docs/subsystems/users.md +++ b/docs/subsystems/users.md @@ -35,7 +35,7 @@ All users can... - show up in your message stream - be narrowed to by clicking on recipient bars, etc. - be narrowed to by searches (but not suggested) -- can show up in your "Private Messages" sidebar +- can show up in your "Private messages" sidebar We also have the mirroring world, where we have unknown users that we can send PMs to, and local-echo is allowed to create diff --git a/docs/testing/linters.md b/docs/testing/linters.md index 7f6f81fe66..8c8d8f3407 100644 --- a/docs/testing/linters.md +++ b/docs/testing/linters.md @@ -17,10 +17,10 @@ prevent common coding errors. We borrow some open source tools for much of our linting, and the links below will direct you to the official documentation for these projects. -- [eslint](https://eslint.org) +- [ESLint](https://eslint.org) - [mypy](http://mypy-lang.org/) - [Prettier](https://prettier.io/) -- [puppet](https://puppet.com/) (puppet provides its own mechanism for +- [Puppet](https://puppet.com/) (puppet provides its own mechanism for validating manifests) - [pyflakes](https://pypi.python.org/pypi/pyflakes) - [stylelint](https://github.com/stylelint/stylelint) @@ -100,11 +100,11 @@ Most of our lint checks get performed by `./tools/lint`. These include the following checks: - Check Python code with pyflakes. -- Check JavaScript and TypeScript code with eslint. +- Check JavaScript and TypeScript code with ESLint. - Check CSS, JavaScript, TypeScript, and YAML formatting with Prettier. - Check Python code for custom Zulip rules. - Check non-Python code for custom Zulip rules. -- Check puppet manifests with the puppet validator. +- Check Puppet manifests with the Puppet validator. - Check HTML templates for matching tags and indentations. - Check CSS for parsability and formatting. - Check JavaScript code for addClass calls. @@ -136,7 +136,7 @@ types of checks mostly lives [here](https://github.com/zulip/zulip/blob/master/t You can use the `-h` option for `lint` to see its usage. One particular flag to take note of is the `--modified` flag, which enables you to only run -lint checks against files that are modified in your git repo. Most of the +lint checks against files that are modified in your Git repo. Most of the "sub-linters" respect this flag, but some will continue to process all the files. Generally, a good workflow is to run with `--modified` when you are iterating on the code, and then run without that option right before committing new code. @@ -190,8 +190,8 @@ We check our JavaScript code in a few different ways: #### Puppet manifests We use Puppet as our tool to manage configuration files, using -puppet "manifests." To lint puppet manifests, we use the "parser validate" -option of puppet. +Puppet "manifests." To lint Puppet manifests, we use the "parser validate" +option of Puppet. #### HTML templates diff --git a/docs/testing/manual-testing.md b/docs/testing/manual-testing.md index 64aa20d0c8..9df91a5874 100644 --- a/docs/testing/manual-testing.md +++ b/docs/testing/manual-testing.md @@ -181,10 +181,10 @@ For each of the above types of messages, you will want to cycle through the following views for Cordelia (and have Hamlet send new messages after each narrow): -- Go to All Messages view. -- Go to Private Messages view. -- Go to Private Messages w/Hamlet. -- Go to Private Messages w/Hamlet and Othello. +- Go to All messages view. +- Go to Private messages view. +- Go to Private messages w/Hamlet. +- Go to Private messages w/Hamlet and Othello. - Go to Verona view. - Go to Verona/bar view. - Go to Verona/foo view. @@ -212,9 +212,9 @@ populated and where the focus is placed. - Buttons - Narrow to a stream and click on "New topic" - - Narrow "Private Messages" and click on "New topic" + - Narrow "Private messages" and click on "New topic" - Narrow to a stream and click on "New private message" - - Narrow "Private Messages" and click on "New private message" + - Narrow "Private messages" and click on "New private message" - Topics - Compose/send a message to a stream with no topic. @@ -468,7 +468,7 @@ Do these tasks as Cordelia. - Show user list on left sidebar in narrow windows (verify by making window thinner) - 24-hour time (and then test going back to AM/PM) - Notifications - - Stream Message + - Stream message - turn off notifications at user level - create a new stream - have Hamlet send a message @@ -477,7 +477,7 @@ Do these tasks as Cordelia. - have Hamlet send a message - then turn off notifications for that stream - have Hamlet send another message - - Private Messages and @-mentions + - Private messages and @-mentions - Test Desktop/Audible options - You can ignore other stuff for now - Bots/API key diff --git a/docs/testing/philosophy.md b/docs/testing/philosophy.md index 04f7b824af..5c8f048c9a 100644 --- a/docs/testing/philosophy.md +++ b/docs/testing/philosophy.md @@ -66,9 +66,9 @@ these goals, but a few techniques are worth highlighting: outgoing HTTP requests are required to test something, we mock the responses with libraries like `responses`. * We carefully avoid the potential for contamination of data inside - services like postgres, redis, and memcached from different tests. + services like Postgres, Redis, and memcached from different tests. * Every test case prepends a unique random prefix to all keys it - uses when accessing redis and memcached. + uses when accessing Redis and memcached. * Every test case runs inside a database transaction, which is aborted after the test completes. Each test process interacts only with a fresh copy of a special template database used for diff --git a/docs/testing/testing-with-node.md b/docs/testing/testing-with-node.md index b8df4d4570..31dfb75d61 100644 --- a/docs/testing/testing-with-node.md +++ b/docs/testing/testing-with-node.md @@ -203,7 +203,7 @@ These instructions assume you're using the Vagrant development environment. 1. In the `Configure Node.js Remote Interpreter`, window select `Vagrant` 1. Wait for WebStorm to connect to Vagrant. This will be displayed by the `Vagrant Host URL` section updating to contain the Vagrant - SSH url, e.g. `ssh://vagrant@127.0.0.1:2222`. + SSH URL, e.g. `ssh://vagrant@127.0.0.1:2222`. 1. **Set the `Node.js interpreter path` to `/usr/local/bin/node`** 1. Hit `OK` 2 times to get back to the `Run/Debug Configurations` window. 1. Under `Working Directory` select the root `zulip` directory. diff --git a/docs/testing/testing-with-puppeteer.md b/docs/testing/testing-with-puppeteer.md index db154032bc..db38567989 100644 --- a/docs/testing/testing-with-puppeteer.md +++ b/docs/testing/testing-with-puppeteer.md @@ -22,7 +22,7 @@ The test files live in `frontend_tests/puppeteer_tests` and make use of various useful helper functions defined in `frontend_tests/puppeteer_lib/common.js`. -## How puppeteer tests work +## How Puppeteer tests work The Puppeteer tests use a real Chromium browser (powered by [puppeteer](https://github.com/puppeteer/puppeteer)), connected to a @@ -93,7 +93,7 @@ These tools/features are often useful when debugging: debugging test failures. * TODO: Mention how to access Puppeteer screenshots in CI. * TODO: Add an option for using the `headless: false` debugging mode - of puppeteer so you can watch what's happening, and document how to + of Puppeteer so you can watch what's happening, and document how to make that work with Vagrant. * TODO: Document `--interactive`. * TODO: Document how to run 100x in CI to check for nondeterminstic @@ -108,7 +108,7 @@ These tools/features are often useful when debugging: includes the console output for the server; any Python exceptions are likely actual bugs in the changes being tested. -See also [puppeteer upstream's debugging +See also [Puppeteer upstream's debugging tips](https://github.com/puppeteer/puppeteer#debugging-tips); some tips may require temporary patches to functions like `run_test` or `ensure_browser` in `frontend_tests/puppeteer_lib/common.js`. @@ -153,4 +153,3 @@ notes above: `zilencer/management/commands/populate_db.py`. [learn-async-await]: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await - diff --git a/docs/testing/testing.md b/docs/testing/testing.md index d12aaca8e5..6e61d85ba8 100644 --- a/docs/testing/testing.md +++ b/docs/testing/testing.md @@ -136,7 +136,7 @@ code paths (`httplib2.Http().request`, `requests.request`, etc.) to throw an exception in the backend tests. While this is enforcement is not complete (there a lot of other ways to use the Internet from Python), it is easy to do and catches most common cases of new code -dependning on Internet access. +depending on Internet access. This enforcement code results in the following exception: diff --git a/docs/translating/german.md b/docs/translating/german.md index 1386dc7b9a..cdab6fc23b 100644 --- a/docs/translating/german.md +++ b/docs/translating/german.md @@ -137,7 +137,7 @@ Since we try to avoid concatenating words whenever possible, don't use "Privatnachricht" . PN is the officially used abbreviation for "Private Nachricht" and is used in many German chat forums. -*"Private Nachricht" (Youtube, Transifex)* +*"Private Nachricht" (YouTube, Transifex)* * Starred Message - **Markierte Nachricht** @@ -260,7 +260,7 @@ works as well, but is not that common in German. This translation is unambiguous. -*"Deabonnieren" (Youtube, Transifex)* +*"Deabonnieren" (YouTube, Transifex)* * Narrow to - **Begrenzen auf** @@ -293,7 +293,7 @@ preferable due to its brevity. * Search - **Suchen** -*"Suchen" (Youtube, Google, Facebook, Transifex)* +*"Suchen" (YouTube, Google, Facebook, Transifex)* * Pin/Unpin - **Anpinnen/Loslösen** diff --git a/docs/translating/translating.md b/docs/translating/translating.md index d0d0fbee70..3a9b023998 100644 --- a/docs/translating/translating.md +++ b/docs/translating/translating.md @@ -99,7 +99,7 @@ There are a few ways to see your translations in the Zulip UI: out the language the user requests in a browser using the following prioritization (mostly copied from the Django docs): - 1. It looks for the language code as a url prefix (e.g. `/de/login/`). + 1. It looks for the language code as a URL prefix (e.g. `/de/login/`). 2. It looks for the `LANGUAGE_SESSION_KEY` key in the current user's session (the Zulip language UI option ends up setting this). 3. It looks for the cookie named 'django_language'. You can set a diff --git a/docs/tutorials/life-of-a-request.md b/docs/tutorials/life-of-a-request.md index ab14764e88..eb4d57efac 100644 --- a/docs/tutorials/life-of-a-request.md +++ b/docs/tutorials/life-of-a-request.md @@ -16,7 +16,7 @@ application will serve the request (or deciding to serve the request itself for static content). In development, `tools/run-dev.py` fills the role of nginx. Static files -are in your git checkout under `static`, and are served unminified. +are in your Git checkout under `static`, and are served unminified. ## Static files are [served directly][served-directly] by Nginx @@ -167,7 +167,7 @@ its url patterns (see [zerver/lib/rest.py](https://github.com/zulip/zulip/blob/master/zerver/lib/rest.py)) so that the action called is `rest_dispatch`. This method will authenticate the user, either through a session token from a cookie, -or from an `email:api-key` string given via HTTP Basic Auth for API +or from an `email:api-key` string given via HTTP basic auth for API clients. It will then look up what HTTP verb was used (GET, POST, etc) to make diff --git a/docs/tutorials/new-feature-tutorial.md b/docs/tutorials/new-feature-tutorial.md index dfccefa355..ec05806b76 100644 --- a/docs/tutorials/new-feature-tutorial.md +++ b/docs/tutorials/new-feature-tutorial.md @@ -147,7 +147,7 @@ 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](../documentation/overview.md). -## Example Feature +## Example feature This example describes the process of adding a new setting to Zulip: a flag that allows an admin to require topics on stream messages (the default diff --git a/docs/tutorials/writing-views.md b/docs/tutorials/writing-views.md index 9405107c84..4e0278dc0c 100644 --- a/docs/tutorials/writing-views.md +++ b/docs/tutorials/writing-views.md @@ -112,7 +112,7 @@ which is documented in detail at [zerver/lib/rest.py](https://github.com/zulip/zulip/blob/master/zerver/lib/rest.py). This method will authenticate the user either through a session token from a cookie on the browser, or from a base64 encoded `email:api-key` -string given via HTTP Basic Auth for API clients. +string given via HTTP basic auth for API clients. ``` py >>> import requests diff --git a/frontend_tests/node_tests/buddy_data.js b/frontend_tests/node_tests/buddy_data.js index fa212a7c9f..d0ab500bb0 100644 --- a/frontend_tests/node_tests/buddy_data.js +++ b/frontend_tests/node_tests/buddy_data.js @@ -223,7 +223,7 @@ run_test("title_data", () => { }; assert.deepEqual(buddy_data.get_title_data(bot.user_id, is_group), expected_group_data); - // Individual Users. + // Individual users. user_status.set_status_text({ user_id: me.user_id, status_text: "out to lunch", diff --git a/frontend_tests/node_tests/general.js b/frontend_tests/node_tests/general.js index 82ecdbc98c..7d3f6ad367 100644 --- a/frontend_tests/node_tests/general.js +++ b/frontend_tests/node_tests/general.js @@ -369,7 +369,7 @@ run_test("update_user_event", (override) => { that happen during an event. This concept is called "mocking", and you can find libraries to help do mocking. Here we will just build our own lightweight mocking system, which is almost - trivially easy to do in a language like Javascript. + trivially easy to do in a language like JavaScript. */ diff --git a/frontend_tests/node_tests/markdown.js b/frontend_tests/node_tests/markdown.js index 0f4d2c60b5..5eb530293b 100644 --- a/frontend_tests/node_tests/markdown.js +++ b/frontend_tests/node_tests/markdown.js @@ -223,11 +223,11 @@ run_test("markdown_detection", () => { "https://zulip.com/image.jpg too", "Contains a zulip.com/foo.jpeg file", "Contains a https://zulip.com/image.png file", - "twitter url https://twitter.com/jacobian/status/407886996565016579", + "Twitter URL https://twitter.com/jacobian/status/407886996565016579", "https://twitter.com/jacobian/status/407886996565016579", "then https://twitter.com/jacobian/status/407886996565016579", - "twitter url http://twitter.com/jacobian/status/407886996565016579", - "youtube url https://www.youtube.com/watch?v=HHZ8iqswiCw&feature=youtu.be&a", + "Twitter URL http://twitter.com/jacobian/status/407886996565016579", + "YouTube URL https://www.youtube.com/watch?v=HHZ8iqswiCw&feature=youtu.be&a", ]; no_markup.forEach((content) => { @@ -475,7 +475,7 @@ run_test("marked", () => { '

:smile:

', translate_emoticons: true, }, - // Test HTML Escape in Custom Zulip Rules + // Test HTML escaping in custom Zulip rules { input: "@**

The Rogue One

**", expected: "

@**<h1>The Rogue One</h1>**

", diff --git a/frontend_tests/node_tests/typeahead.js b/frontend_tests/node_tests/typeahead.js index 0220603b2e..d1f1100573 100644 --- a/frontend_tests/node_tests/typeahead.js +++ b/frontend_tests/node_tests/typeahead.js @@ -48,33 +48,33 @@ run_test("get_emoji_matcher", () => { run_test("triage", () => { const alice = {name: "alice"}; - const Alicia = {name: "Alicia"}; + const alicia = {name: "Alicia"}; const steve = {name: "steve"}; - const Stephanie = {name: "Stephanie"}; + const stephanie = {name: "Stephanie"}; - const names = [alice, Alicia, steve, Stephanie]; + const names = [alice, alicia, steve, stephanie]; assert.deepEqual( typeahead.triage("a", names, (r) => r.name), { - matches: [alice, Alicia], - rest: [steve, Stephanie], + matches: [alice, alicia], + rest: [steve, stephanie], }, ); assert.deepEqual( typeahead.triage("A", names, (r) => r.name), { - matches: [Alicia, alice], - rest: [steve, Stephanie], + matches: [alicia, alice], + rest: [steve, stephanie], }, ); assert.deepEqual( typeahead.triage("S", names, (r) => r.name), { - matches: [Stephanie, steve], - rest: [alice, Alicia], + matches: [stephanie, steve], + rest: [alice, alicia], }, ); @@ -82,7 +82,7 @@ run_test("triage", () => { typeahead.triage("fred", names, (r) => r.name), { matches: [], - rest: [alice, Alicia, steve, Stephanie], + rest: [alice, alicia, steve, stephanie], }, ); }); diff --git a/frontend_tests/node_tests/typeahead_helper.js b/frontend_tests/node_tests/typeahead_helper.js index 1a8a5148dc..43b0dbf7cb 100644 --- a/frontend_tests/node_tests/typeahead_helper.js +++ b/frontend_tests/node_tests/typeahead_helper.js @@ -143,7 +143,7 @@ run_test("sort_languages", () => { const a_bot = { email: "a_bot@zulip.com", - full_name: "A zulip test bot", + full_name: "A Zulip test bot", is_admin: false, is_bot: true, user_id: 1, @@ -151,7 +151,7 @@ const a_bot = { const a_user = { email: "a_user@zulip.org", - full_name: "A zulip user", + full_name: "A Zulip user", is_admin: false, is_bot: false, user_id: 2, diff --git a/frontend_tests/puppeteer_tests/04-subscriptions.js b/frontend_tests/puppeteer_tests/04-subscriptions.js index bdf4ff27dd..ade26b39a9 100644 --- a/frontend_tests/puppeteer_tests/04-subscriptions.js +++ b/frontend_tests/puppeteer_tests/04-subscriptions.js @@ -123,7 +123,7 @@ async function create_stream(page) { await page.waitForXPath('//*[text()="Create stream"]', {visible: true}); await common.fill_form(page, "form#stream_creation_form", { stream_name: "Puppeteer", - stream_description: "Everything puppeteer", + stream_description: "Everything Puppeteer", }); await page.click(await stream_span(page, "Scotland")); // Subscribes all users from Scotland await page.click(await user_span(page, "cordelia")); // Add cordelia. @@ -142,7 +142,7 @@ async function create_stream(page) { ); const subscriber_count_selector = "[data-stream-name='Puppeteer'] .subscriber-count"; assert.strictEqual(stream_name, "Puppeteer"); - assert.strictEqual(stream_description, "Everything puppeteer"); + assert.strictEqual(stream_description, "Everything Puppeteer"); // Assert subscriber count becomes 5(scotland(+4), cordelia(+1), othello(-1), Desdemona(+1)). await page.waitForFunction( diff --git a/frontend_tests/puppeteer_tests/07-navigation.js b/frontend_tests/puppeteer_tests/07-navigation.js index 934ad22edb..339af97146 100644 --- a/frontend_tests/puppeteer_tests/07-navigation.js +++ b/frontend_tests/puppeteer_tests/07-navigation.js @@ -78,7 +78,7 @@ async function navigation_tests(page) { await navigate_to(page, verona_narrow, "message_feed_container"); // Hardcoded this instead of using `navigate_to` - // as puppeteer cannot click hidden elements. + // as Puppeteer cannot click hidden elements. await page.evaluate(() => $("a[href='#message_feed_container]'").click()); await wait_for_tab(page, "message_feed_container"); diff --git a/frontend_tests/zjsunit/mdiff.js b/frontend_tests/zjsunit/mdiff.js index 70fcfd34ec..464fe0ee6b 100644 --- a/frontend_tests/zjsunit/mdiff.js +++ b/frontend_tests/zjsunit/mdiff.js @@ -10,7 +10,7 @@ * Based on diffing library difflib, a js port of the python library. * * The sole exported function diff_strings(string_0, string_1) returns a pretty-printed - * unicode string containing their diff. + * Unicode string containing their diff. */ const difflib = require("difflib"); diff --git a/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_consumers b/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_consumers index b961b3cc3d..f6fb8ffee7 100755 --- a/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_consumers +++ b/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_consumers @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ -Nagios plugin to check that the rabbitmq has the correct number of consumers. +Nagios plugin to check that the RabbitMQ has the correct number of consumers. This script just checks the contents of /var/lib/nagios_state/check-rabbitmq-consumers, which is generated by scripts/nagios/check-rabbitmq-consumers. diff --git a/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_queues b/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_queues index 587ad906f1..bb77cb29a7 100755 --- a/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_queues +++ b/puppet/zulip/files/nagios_plugins/zulip_app_frontend/check_rabbitmq_queues @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ -Nagios plugin to check that the rabbitmq queues are not overflowing as a result +Nagios plugin to check that the RabbitMQ queues are not overflowing as a result of a stuck consumer. This script just checks the contents of /var/lib/nagios_state/check-rabbitmq-results, diff --git a/puppet/zulip/files/nagios_plugins/zulip_postgres_appdb/check_postgres_replication_lag b/puppet/zulip/files/nagios_plugins/zulip_postgres_appdb/check_postgres_replication_lag index 41ebdcaf2a..6669a96e39 100755 --- a/puppet/zulip/files/nagios_plugins/zulip_postgres_appdb/check_postgres_replication_lag +++ b/puppet/zulip/files/nagios_plugins/zulip_postgres_appdb/check_postgres_replication_lag @@ -2,7 +2,7 @@ """Nagios plugin to check the difference between the primary and replica Postgres servers' xlog location. Requires that the user this -connects to postgres as has been granted the `pg_monitor` role. +connects to Postgres as has been granted the `pg_monitor` role. """ import re diff --git a/puppet/zulip/files/postgresql/process_fts_updates b/puppet/zulip/files/postgresql/process_fts_updates index 3ede1606d3..dac753506c 100755 --- a/puppet/zulip/files/postgresql/process_fts_updates +++ b/puppet/zulip/files/postgresql/process_fts_updates @@ -1,10 +1,10 @@ #!/usr/bin/env python3 -# Processes updates to postgres Full Text Search for new/edited messages. +# Processes updates to Postgres full-text search for new/edited messages. # -# Zulip manages its postgres full-text search as follows. When the -# content of a message is modified, a postgres trigger logs the +# Zulip manages its Postgres full-text search as follows. When the +# content of a message is modified, a Postgres trigger logs the # message ID to the `fts_update_log` table. In the background, this -# program processes `fts_update_log`, updating the postgres full-text +# program processes `fts_update_log`, updating the Postgres full-text # search column search_tsvector in the main zerver_message. import sys @@ -88,12 +88,12 @@ try: USING_PGROONGA = settings.USING_PGROONGA except ImportError: # process_fts_updates also supports running locally on a remote - # postgres server; in that case, one can just connect to localhost + # Postgres server; in that case, one can just connect to localhost USING_PGROONGA = False # Since we don't want a hard dependency on being able to access the # Zulip settings (as we may not be running on a server that has that -# data), we determine whether we're using pgroonga using +# data), we determine whether we're using PGroonga using # /etc/zulip/zulip.conf. # # However, we still also check the `USING_PGROONGA` variable, since diff --git a/puppet/zulip/manifests/app_frontend_base.pp b/puppet/zulip/manifests/app_frontend_base.pp index cbe7f10679..5d75d2f306 100644 --- a/puppet/zulip/manifests/app_frontend_base.pp +++ b/puppet/zulip/manifests/app_frontend_base.pp @@ -9,7 +9,7 @@ class zulip::app_frontend_base { if $::osfamily == 'debian' { # Upgrade and other tooling wants to be able to get a database - # shell. This is not necessary on CentOS because the postgresql + # shell. This is not necessary on CentOS because the PostgreSQL # package already includes the client. This may get us a more # recent client than the database server is configured to be, # ($zulip::postgres_common::version), but they're compatible. diff --git a/puppet/zulip/manifests/base.pp b/puppet/zulip/manifests/base.pp index 5a78f93bf5..25a51891ca 100644 --- a/puppet/zulip/manifests/base.pp +++ b/puppet/zulip/manifests/base.pp @@ -34,7 +34,7 @@ class zulip::base { # Used in scripts including install-yarn.sh 'curl', 'wget', - # Used to read /etc/zulip/zulip.conf for `zulipconf` puppet function + # Used to read /etc/zulip/zulip.conf for `zulipconf` Puppet function 'crudini', # Used for tools like sponge 'moreutils', @@ -42,7 +42,7 @@ class zulip::base { $zulip::common::nagios_plugins, # Required for using HTTPS in apt repositories. 'apt-transport-https', - # Needed for the cron jobs installed by puppet + # Needed for the cron jobs installed by Puppet 'cron', ] } diff --git a/puppet/zulip/manifests/dockervoyager.pp b/puppet/zulip/manifests/dockervoyager.pp index 2511276a94..43f6c2afb0 100644 --- a/puppet/zulip/manifests/dockervoyager.pp +++ b/puppet/zulip/manifests/dockervoyager.pp @@ -1,6 +1,6 @@ # This class includes all the modules you need to install/run a Zulip installation -# in a single container (without the database, memcached, redis services). -# The database, memcached, redis services need to be run in separate containers. +# in a single container (without the database, memcached, Redis services). +# The database, memcached, Redis services need to be run in separate containers. # Through this split of services, it is easier to scale the services to the needs. class zulip::dockervoyager { include zulip::base diff --git a/puppet/zulip/manifests/postgres_appdb_base.pp b/puppet/zulip/manifests/postgres_appdb_base.pp index 3fdc85abbb..fd6d4e904f 100644 --- a/puppet/zulip/manifests/postgres_appdb_base.pp +++ b/puppet/zulip/manifests/postgres_appdb_base.pp @@ -1,4 +1,4 @@ -# Minimal shared configuration needed to run a Zulip postgres database. +# Minimal shared configuration needed to run a Zulip Postgres database. class zulip::postgres_appdb_base { include zulip::postgres_common include zulip::process_fts_updates @@ -33,7 +33,7 @@ class zulip::postgres_appdb_base { $pgroonga_setup_sql_path = "${postgres_sharedir}/pgroonga_setup.sql" $setup_system_deps = 'setup_yum_repo' $postgres_restart = "systemctl restart postgresql-${zulip::postgres_common::version}" - # TODO Since we can't find the postgres dicts directory on CentOS yet, we + # TODO Since we can't find the Postgres dicts directory on CentOS yet, we # link directly to the hunspell directory. $postgres_dict_dict = '/usr/share/myspell/en_US.dic' $postgres_dict_affix = '/usr/share/myspell/en_US.aff' diff --git a/puppet/zulip/manifests/rabbit.pp b/puppet/zulip/manifests/rabbit.pp index 8c4c6fe62a..46523e6fa5 100644 --- a/puppet/zulip/manifests/rabbit.pp +++ b/puppet/zulip/manifests/rabbit.pp @@ -3,7 +3,7 @@ class zulip::rabbit { 'debian' => 'erlang-base', 'redhat' => 'erlang', } - $rabbit_packages = [# Needed to run rabbitmq + $rabbit_packages = [# Needed to run RabbitMQ $erlang, 'rabbitmq-server', ] diff --git a/puppet/zulip/manifests/tornado_sharding.pp b/puppet/zulip/manifests/tornado_sharding.pp index ab390687f0..231a97a445 100644 --- a/puppet/zulip/manifests/tornado_sharding.pp +++ b/puppet/zulip/manifests/tornado_sharding.pp @@ -6,7 +6,7 @@ class zulip::tornado_sharding { # The file entries below serve only to initialize the sharding config files # with the correct default content for the "only one shard" setup. For this # reason they use "replace => false", because the files are managed by - # the sharding script afterwards and puppet shouldn't overwrite them. + # the sharding script afterwards and Puppet shouldn't overwrite them. file { '/etc/zulip/nginx_sharding.conf': ensure => file, owner => 'root', diff --git a/puppet/zulip/templates/postfix/main.cf.erb b/puppet/zulip/templates/postfix/main.cf.erb index d3ed869570..fed7e94b51 100644 --- a/puppet/zulip/templates/postfix/main.cf.erb +++ b/puppet/zulip/templates/postfix/main.cf.erb @@ -1,4 +1,4 @@ -# This file is managed by puppet; local changes will be overridden. +# This file is managed by Puppet; local changes will be overridden. smtpd_banner = $myhostname ESMTP $mail_name (Zulip) biff = no diff --git a/puppet/zulip_ops/files/munin-plugins/tornado_event_queues b/puppet/zulip_ops/files/munin-plugins/tornado_event_queues index 9e45b91b8e..f59be5a688 100755 --- a/puppet/zulip_ops/files/munin-plugins/tornado_event_queues +++ b/puppet/zulip_ops/files/munin-plugins/tornado_event_queues @@ -4,7 +4,7 @@ # # Usage: Link or copy into /etc/munin/node.d/ # -# No Parameters +# No parameters # # Magic markers (optional - only used by munin-config and some # installation scripts): diff --git a/puppet/zulip_ops/files/nagios3/conf.d/hostgroups.cfg b/puppet/zulip_ops/files/nagios3/conf.d/hostgroups.cfg index 00a846a2ad..881f2b101a 100644 --- a/puppet/zulip_ops/files/nagios3/conf.d/hostgroups.cfg +++ b/puppet/zulip_ops/files/nagios3/conf.d/hostgroups.cfg @@ -1,7 +1,7 @@ # A simple wildcard hostgroup define hostgroup { hostgroup_name all - alias All Servers + alias All servers members * } @@ -17,70 +17,70 @@ define hostgroup { define hostgroup { hostgroup_name web - alias Web Servers + alias Web servers } define hostgroup { hostgroup_name frontends - alias Frontend Web Servers + alias Frontend web servers } define hostgroup { hostgroup_name staging_frontends - alias Staging Frontend Web Servers + alias Staging frontend web servers } define hostgroup { hostgroup_name prod_frontends - alias Production Frontend Web Servers + alias Production frontend web servers } define hostgroup { hostgroup_name multitornado_frontends - alias Frontend Web Servers with multiple Tornado processes + alias Frontend web servers with multiple Tornado processes } define hostgroup { hostgroup_name singletornado_frontends - alias Frontend Web Servers with a single Tornado process + alias Frontend web servers with a single Tornado process } define hostgroup { hostgroup_name redis - alias Redis Servers + alias Redis servers hostgroup_members frontends } define hostgroup { hostgroup_name zmirror - alias Zephyr Mirror Servers + alias Zephyr mirror servers } define hostgroup { hostgroup_name zmirrorp - alias Zephyr Mirror Personals Servers + alias Zephyr mirror personals servers } define hostgroup { hostgroup_name zmirror_main - alias Zephyr Mirror Main Servers + alias Zephyr mirror main servers } define hostgroup { hostgroup_name postgres - alias PostgreSQL Servers + alias PostgreSQL servers hostgroup_members postgres_appdb } define hostgroup { hostgroup_name postgres_appdb - alias PostgreSQL App Servers + alias PostgreSQL app servers hostgroup_members postgres_appdb_primary } define hostgroup { hostgroup_name postgres_appdb_primary - alias Primary PostgreSQL App Servers + alias Primary PostgreSQL app servers } define hostgroup { diff --git a/puppet/zulip_ops/files/nagios3/conf.d/services.cfg b/puppet/zulip_ops/files/nagios3/conf.d/services.cfg index 744282a305..59ef289490 100644 --- a/puppet/zulip_ops/files/nagios3/conf.d/services.cfg +++ b/puppet/zulip_ops/files/nagios3/conf.d/services.cfg @@ -156,7 +156,7 @@ define service { define service { use generic-service - service_description Check postgres autovac_freeze + service_description Check Postgres autovac_freeze check_command check_postgres!zulip!nagios!autovac_freeze hostgroup postgres_appdb_primary contact_groups admins @@ -164,7 +164,7 @@ define service { define service { use generic-service - service_description Check postgres backends + service_description Check Postgres backends check_command check_postgres!zulip!nagios!backends hostgroup postgres_appdb contact_groups admins @@ -172,7 +172,7 @@ define service { define service { use generic-service - service_description Check postgres connection + service_description Check Postgres connection check_command check_postgres!zulip!nagios!connection hostgroup postgres_appdb contact_groups page_admins @@ -180,7 +180,7 @@ define service { define service { use generic-service - service_description Check postgres disabled triggers + service_description Check Postgres disabled triggers check_command check_postgres!zulip!nagios!disabled_triggers hostgroup postgres_appdb contact_groups admins @@ -188,7 +188,7 @@ define service { define service { use generic-service - service_description Check postgres hitratio + service_description Check Postgres hitratio check_command check_postgres!zulip!nagios!hitratio hostgroup postgres_appdb contact_groups admins @@ -196,7 +196,7 @@ define service { define service { use generic-service - service_description Check postgres locks + service_description Check Postgres locks check_command check_postgres_alert_args!zulip!nagios!locks!400!600 hostgroup postgres_appdb contact_groups admins @@ -204,7 +204,7 @@ define service { define service { use generic-service - service_description Check postgres query_time + service_description Check Postgres query_time check_command check_postgres_alert_args!zulip!nagios!query_time!20 seconds!40 seconds hostgroup postgres_appdb contact_groups admins @@ -212,7 +212,7 @@ define service { define service { use generic-service - service_description Check postgres sequence + service_description Check Postgres sequence check_command check_postgres!zulip!nagios!sequence hostgroup postgres_appdb contact_groups admins @@ -220,7 +220,7 @@ define service { define service { use generic-service - service_description Check postgres timesync + service_description Check Postgres timesync check_command check_postgres!zulip!nagios!timesync hostgroup postgres_appdb contact_groups admins @@ -228,7 +228,7 @@ define service { # define service { # use generic-service -# service_description Check postgres txn_idle +# service_description Check Postgres txn_idle # check_command check_postgres_alert_args!zulip!nagios!txn_idle!20 seconds!40 seconds # hostgroup postgres_appdb # contact_groups admins @@ -236,7 +236,7 @@ define service { define service { use generic-service - service_description Check postgres txn_time + service_description Check Postgres txn_time check_command check_postgres_alert_args!zulip!nagios!txn_time!20 seconds!40 seconds hostgroup postgres_appdb contact_groups admins @@ -252,7 +252,7 @@ define service { define service{ use generic-service - service_description Check postgres replication lag + service_description Check Postgres replication lag check_command check_postgres_replication_lag hostgroup postgres_appdb contact_groups admins @@ -288,7 +288,7 @@ define service { define service { use generic-service - service_description Check rabbitmq queue sizes + service_description Check RabbitMQ queue sizes check_command check_rabbitmq_queues!22 # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -307,7 +307,7 @@ define service { define service { use generic-service - service_description Check rabbitmq notify_tornado consumers + service_description Check RabbitMQ notify_tornado consumers check_command check_rabbitmq_consumers!notify_tornado # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -318,7 +318,7 @@ define service { define service { use generic-service - service_description Check rabbitmq user_activity_interval consumers + service_description Check RabbitMQ user_activity_interval consumers check_command check_rabbitmq_consumers!user_activity_interval # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -329,7 +329,7 @@ define service { define service { use generic-service - service_description Check rabbitmq user_presence consumers + service_description Check RabbitMQ user_presence consumers check_command check_rabbitmq_consumers!user_presence # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -340,7 +340,7 @@ define service { define service { use generic-service - service_description Check rabbitmq invites consumers + service_description Check RabbitMQ invites consumers check_command check_rabbitmq_consumers!invites # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -351,7 +351,7 @@ define service { define service { use generic-service - service_description Check rabbitmq signups consumers + service_description Check RabbitMQ signups consumers check_command check_rabbitmq_consumers!signups # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -362,7 +362,7 @@ define service { define service { use generic-service - service_description Check rabbitmq digest email consumers + service_description Check RabbitMQ digest email consumers check_command check_rabbitmq_consumers!digest_emails # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -373,7 +373,7 @@ define service { define service { use generic-service - service_description Check rabbitmq email mirror consumers + service_description Check RabbitMQ email mirror consumers check_command check_rabbitmq_consumers!email_mirror # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -384,7 +384,7 @@ define service { define service { use generic-service - service_description Check rabbitmq missedmessage mobile notifications consumers + service_description Check RabbitMQ missedmessage mobile notifications consumers check_command check_rabbitmq_consumers!missedmessage_mobile_notifications # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -395,7 +395,7 @@ define service { define service { use generic-service - service_description Check rabbitmq missedmessage email consumers + service_description Check RabbitMQ missedmessage email consumers check_command check_rabbitmq_consumers!missedmessage_email # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet @@ -406,7 +406,7 @@ define service { define service { use generic-service - service_description Check rabbitmq user activity consumers + service_description Check RabbitMQ user activity consumers check_command check_rabbitmq_consumers!user_activity # Workaround weird checks 40s after first error causing alerts # from a single failure because cron hasn't run again yet diff --git a/puppet/zulip_ops/manifests/base.pp b/puppet/zulip_ops/manifests/base.pp index f2e1a2c000..e5d523d9b1 100644 --- a/puppet/zulip_ops/manifests/base.pp +++ b/puppet/zulip_ops/manifests/base.pp @@ -190,8 +190,8 @@ class zulip_ops::base { ensure => running, # Because there is no running process for this service, the normal status - # checks fail. Because puppet then thinks the service has been manually - # stopped, it won't restart it. This fake status command will trick puppet + # checks fail. Because Puppet then thinks the service has been manually + # stopped, it won't restart it. This fake status command will trick Puppet # into thinking the service is *always* running (which in a way it is, as # iptables is part of the kernel.) hasstatus => true, diff --git a/requirements/common.in b/requirements/common.in index b845bdc585..5357da329a 100644 --- a/requirements/common.in +++ b/requirements/common.in @@ -23,7 +23,7 @@ jsx-lexer # Needed for manage.py ipython -# Needed for Image Processing +# Needed for image processing Pillow # Needed for building complex DB queries @@ -59,7 +59,7 @@ httplib2 # Forked to avoid pulling in scipy: https://github.com/mailgun/talon/issues/130 https://github.com/zulip/talon/archive/7d8bdc4dbcfcc5a73298747293b99fe53da55315.zip#egg=talon==1.2.10.zulip1 -# Needed for hipchat import +# Needed for HipChat import hypchat # Needed for inlining the CSS in emails @@ -71,7 +71,7 @@ PyJWT # Needed for including other Markdown files for user docs markdown-include -# Needed to access rabbitmq +# Needed to access RabbitMQ pika # Needed to access our database @@ -89,7 +89,7 @@ python-dateutil # Needed for timezone work pytz -# Needed for redis +# Needed for Redis redis # Needed to parse source maps for error reporting diff --git a/scripts/lib/clean-unused-caches b/scripts/lib/clean-unused-caches index 5c548918bc..3d3f4d0202 100755 --- a/scripts/lib/clean-unused-caches +++ b/scripts/lib/clean-unused-caches @@ -9,7 +9,7 @@ from scripts.lib.zulip_tools import parse_cache_script_args def main() -> None: - args = parse_cache_script_args("This script cleans unused zulip caches.") + args = parse_cache_script_args("This script cleans unused Zulip caches.") os.chdir(ZULIP_PATH) clean_venv_cache.main(args) clean_node_cache.main(args) diff --git a/scripts/lib/clean_emoji_cache.py b/scripts/lib/clean_emoji_cache.py index 6457949c54..ded3759667 100755 --- a/scripts/lib/clean_emoji_cache.py +++ b/scripts/lib/clean_emoji_cache.py @@ -43,5 +43,5 @@ def main(args: argparse.Namespace) -> None: EMOJI_CACHE_PATH, caches_in_use, "emoji cache", args) if __name__ == "__main__": - args = parse_cache_script_args("This script cleans unused zulip emoji caches.") + args = parse_cache_script_args("This script cleans unused Zulip emoji caches.") main(args) diff --git a/scripts/lib/clean_node_cache.py b/scripts/lib/clean_node_cache.py index b1fd1db0c3..c3a36c2ea5 100755 --- a/scripts/lib/clean_node_cache.py +++ b/scripts/lib/clean_node_cache.py @@ -46,5 +46,5 @@ def main(args: argparse.Namespace) -> None: NODE_MODULES_CACHE_PATH, caches_in_use, "node modules cache", args) if __name__ == "__main__": - args = parse_cache_script_args("This script cleans unused zulip npm caches.") + args = parse_cache_script_args("This script cleans unused Zulip npm caches.") main(args) diff --git a/scripts/lib/clean_venv_cache.py b/scripts/lib/clean_venv_cache.py index 513b4d532f..e8090cf10f 100755 --- a/scripts/lib/clean_venv_cache.py +++ b/scripts/lib/clean_venv_cache.py @@ -54,5 +54,5 @@ def main(args: argparse.Namespace) -> None: VENV_CACHE_DIR, caches_in_use, "venv cache", args) if __name__ == "__main__": - args = parse_cache_script_args("This script cleans unused zulip venv caches.") + args = parse_cache_script_args("This script cleans unused Zulip venv caches.") main(args) diff --git a/scripts/lib/email-mirror-postfix b/scripts/lib/email-mirror-postfix index 3eafc7d9a9..1709ff3164 100755 --- a/scripts/lib/email-mirror-postfix +++ b/scripts/lib/email-mirror-postfix @@ -6,13 +6,13 @@ forwarding emails into Zulip. https://zulip.readthedocs.io/en/latest/production/settings.html#email-gateway The email gateway supports two major modes of operation: An email -server (using postfix) where the email address configured in +server (using Postfix) where the email address configured in EMAIL_GATEWAY_PATTERN delivers emails directly to Zulip (this) or a cron job that connects to an IMAP inbox (which receives the emails) periodically. -Zulip's puppet configuration takes care of configuring postfix to -execute this script when emails are received by postfix, piping the +Zulip's Puppet configuration takes care of configuring Postfix to +execute this script when emails are received by Postfix, piping the email content via standard input (and the destination email address in the ORIGINAL_RECIPIENT environment variable). @@ -65,7 +65,7 @@ parser.add_argument('-d', '--dst-host', dest="host", default='https://127.0.0.1' "Address must contain a HTTP protocol.") parser.add_argument('-u', '--dst-url', dest="url", default='/email_mirror_message', - help="Destination relative url for uploading email from email mirror.") + help="Destination relative URL for uploading email from email mirror.") parser.add_argument('-n', '--not-verify-ssl', dest="verify_ssl", action='store_false', help="Disable ssl certificate verifying for self-signed certificates") diff --git a/scripts/lib/install b/scripts/lib/install index 4200efa814..5af3c5b2b8 100755 --- a/scripts/lib/install +++ b/scripts/lib/install @@ -121,7 +121,7 @@ fi read -r -a APT_OPTIONS <<<"${APT_OPTIONS:-}" # Install additional packages. read -r -a ADDITIONAL_PACKAGES <<<"${ADDITIONAL_PACKAGES:-}" -# Comma-separated list of puppet manifests to install. default is +# Comma-separated list of Puppet manifests to install. default is # zulip::voyager for an all-in-one system or zulip::dockervoyager for # Docker. Use e.g. zulip::app_frontend for a Zulip frontend server. PUPPET_CLASSES="${PUPPET_CLASSES:-zulip::voyager}" @@ -234,8 +234,8 @@ fi case ",$PUPPET_CLASSES," in *,zulip::voyager,* | *,zulip::postgres_appdb_tuned,*) if [ "$package_system" = apt ]; then - # We're going to install Postgres from the postgres apt - # repository; this may conflict with the existing postgres. + # We're going to install Postgres from the Postgres apt + # repository; this may conflict with the existing Postgres. OTHER_PG="$(dpkg --get-selections \ | grep -E '^postgresql-[0-9]+\s+install$' \ | grep -v "^postgresql-$POSTGRES_VERSION\b" \ @@ -405,7 +405,7 @@ EOF --classfile=/var/lib/puppet/classes.txt \ >/dev/null - # We only need the postgres version setting on database hosts; but + # We only need the Postgres version setting on database hosts; but # we don't know if this is a database host until we have the catalog summary. if ! has_class "zulip::postgres_common" || [ "$package_system" != apt ]; then crudini --del /etc/zulip/zulip.conf postgresql @@ -511,7 +511,7 @@ if has_class "zulip::app_frontend_base"; then chown -R zulip:zulip /home/zulip /var/log/zulip /etc/zulip/settings.py if ! [ -e "/home/zulip/prod-static/generated" ]; then - # If we're installing from a git checkout, we need to run + # If we're installing from a Git checkout, we need to run # `tools/update-prod-static` in order to build the static # assets. su zulip -c '/home/zulip/deployments/current/tools/update-prod-static' @@ -525,7 +525,7 @@ if [ -n "$NO_INIT_DB" ]; then Success! Stopping because --no-init-db was passed. - To complete the installation, configure postgres and then run: + To complete the installation, configure Postgres and then run: su zulip -c '/home/zulip/deployments/current/scripts/setup/initialize-database' su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link' diff --git a/scripts/lib/upgrade-zulip-stage-2 b/scripts/lib/upgrade-zulip-stage-2 index 69bc998f18..e0afd57a47 100755 --- a/scripts/lib/upgrade-zulip-stage-2 +++ b/scripts/lib/upgrade-zulip-stage-2 @@ -199,19 +199,19 @@ elif args.from_git: logging.info("Shutting down server to build static assets on a low-RAM system.") shutdown_server() - # Note: The fact that this is before we apply puppet changes means - # that we don't support adding new puppet dependencies of - # update-prod-static with the git upgrade process. But it'll fail + # Note: The fact that this is before we apply Puppet changes means + # that we don't support adding new Puppet dependencies of + # update-prod-static with the Git upgrade process. But it'll fail # safely; this seems like a worthwhile tradeoff to minimize downtime. logging.info("Building static assets...") subprocess.check_call(["./tools/update-prod-static", "--prev-deploy=" + os.path.join(DEPLOYMENTS_DIR, 'current')], preexec_fn=su_to_zulip) - logging.info("Caching zulip git version...") + logging.info("Caching Zulip Git version...") subprocess.check_call(["./tools/cache-zulip-git-version"], preexec_fn=su_to_zulip) else: # Since this doesn't do any actual work, it's likely safe to have - # this run before we apply puppet changes (saving a bit of downtime). + # this run before we apply Puppet changes (saving a bit of downtime). logging.info("Installing static assets...") subprocess.check_call(["cp", "-rT", os.path.join(deploy_path, 'prod-static/serve'), '/home/zulip/prod-static'], preexec_fn=su_to_zulip) @@ -252,12 +252,12 @@ if os.path.exists("/etc/supervisor/conf.d/zulip_db.conf"): if (not args.skip_puppet or migrations_needed) and IS_SERVER_UP: # By default, we shut down the service to apply migrations and - # puppet changes, to minimize risk of issues due to inconsistent + # Puppet changes, to minimize risk of issues due to inconsistent # state. shutdown_server() if not args.skip_puppet: - logging.info("Applying puppet changes...") + logging.info("Applying Puppet changes...") subprocess.check_call(["./scripts/zulip-puppet-apply", "--force"]) subprocess.check_call(["apt-get", "-y", "upgrade"]) @@ -283,5 +283,5 @@ else: logging.info("Skipping purging old deployments.") if args.skip_puppet: - logging.info("Showing un-applied puppet changes:") + logging.info("Showing un-applied Puppet changes:") subprocess.check_call(["./scripts/zulip-puppet-apply", "--noop", "--show_diff"]) diff --git a/scripts/setup/generate_secrets.py b/scripts/setup/generate_secrets.py index bd6a4179c1..6e1e757269 100755 --- a/scripts/setup/generate_secrets.py +++ b/scripts/setup/generate_secrets.py @@ -124,7 +124,7 @@ def generate_secrets(development: bool = False) -> None: if settings.MEMCACHED_LOCATION == "127.0.0.1:11211": add_secret("memcached_password", random_token()) - # Password for authentication to redis. + # Password for authentication to Redis. if need_secret("redis_password"): # We defer importing settings unless we need it, because # importing settings is expensive (mostly because of diff --git a/scripts/setup/postgres-init-db b/scripts/setup/postgres-init-db index 71a1303d34..5a06229c1a 100755 --- a/scripts/setup/postgres-init-db +++ b/scripts/setup/postgres-init-db @@ -10,7 +10,7 @@ set -x # What user should we use for connecting to the database POSTGRES_USER="${POSTGRES_USER:-postgres}" -# This psql command may fail because the zulip database doesn’t exist, +# This psql command may fail because the Zulip database doesn’t exist, # hence the &&. if records="$( cd / # Make sure the current working directory is readable by postgres diff --git a/scripts/setup/restore-backup b/scripts/setup/restore-backup index 10a076f573..11bf1bfad3 100755 --- a/scripts/setup/restore-backup +++ b/scripts/setup/restore-backup @@ -115,10 +115,10 @@ def restore_backup(tarball_file: IO[bytes]) -> None: "--production", ]) - # If there is a local rabbitmq, we need to reconfigure it - # to ensure the rabbitmq password matches the value in the + # If there is a local RabbitMQ, we need to reconfigure it + # to ensure the RabbitMQ password matches the value in the # restored zulip-secrets.conf. We need to be careful to - # only do this if rabbitmq is configured to run locally on + # only do this if RabbitMQ is configured to run locally on # the system. rabbitmq_host = subprocess.check_output( [os.path.join(settings.DEPLOY_ROOT, diff --git a/scripts/setup/upgrade-postgres b/scripts/setup/upgrade-postgres index c1925895ce..34a2e0dd29 100755 --- a/scripts/setup/upgrade-postgres +++ b/scripts/setup/upgrade-postgres @@ -24,8 +24,8 @@ if pg_lsclusters -h | grep -qE "^$UPGRADE_TO\s+main\b"; then fi ( - # Two-stage application of puppet; we apply the bare-bones - # postgresql configuration first, so that FTS will be configured + # Two-stage application of Puppet; we apply the bare-bones + # PostgreSQL configuration first, so that FTS will be configured # prior to the pg_upgradecluster. TEMP_CONF_DIR=$(mktemp -d) cp /etc/zulip/zulip.conf "$TEMP_CONF_DIR" diff --git a/scripts/zulip-puppet-apply b/scripts/zulip-puppet-apply index 2d6ce2c659..42bebb38fb 100755 --- a/scripts/zulip-puppet-apply +++ b/scripts/zulip-puppet-apply @@ -11,7 +11,7 @@ from lib.zulip_tools import assert_running_as_root, parse_os_release assert_running_as_root() BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -parser = argparse.ArgumentParser(description="Run puppet") +parser = argparse.ArgumentParser(description="Run Puppet") parser.add_argument('--force', '-f', action="store_true", help="Do not prompt with proposed changes") parser.add_argument('--noop', action="store_true", @@ -32,7 +32,7 @@ Exec { path => "/usr/sbin:/usr/bin:/sbin:/bin" } for pclass in re.split(r'\s*,\s*', config.get('machine', 'puppet_classes')): puppet_config += f"include {pclass}\n" -# We use the puppet configuration from the same Zulip checkout as this script +# We use the Puppet configuration from the same Zulip checkout as this script scripts_path = os.path.join(BASE_DIR, "scripts") puppet_module_path = os.path.join(BASE_DIR, "puppet") puppet_cmd = ["puppet", "apply", f"--modulepath={puppet_module_path}", "-e", puppet_config] @@ -40,12 +40,12 @@ if args.noop: puppet_cmd += ["--noop"] puppet_cmd += extra_args -# Set the scripts path to be a factor so it can be used by puppet code +# Set the scripts path to be a factor so it can be used by Puppet code puppet_env = os.environ.copy() puppet_env["FACTER_zulip_conf_path"] = args.config puppet_env["FACTER_zulip_scripts_path"] = scripts_path -# This is to suppress puppet warnings with ruby 2.7. +# This is to suppress Puppet warnings with ruby 2.7. if (distro_info['ID'], distro_info['VERSION_ID']) in [('ubuntu', '20.04')]: puppet_env["RUBYOPT"] = "-W0" diff --git a/static/assets/zulip-emoji/README b/static/assets/zulip-emoji/README index 2208fa6606..51ddf9f520 100644 --- a/static/assets/zulip-emoji/README +++ b/static/assets/zulip-emoji/README @@ -3,7 +3,7 @@ about Noto, please refer to: https://code.google.com/p/noto/ -These images were generated from the git repository at +These images were generated from the Git repository at as of 90372d894b5d9c9f2a111315d2eb3b8de1979ee4 diff --git a/static/js/bundles/app.js b/static/js/bundles/app.js index ad554d3156..80b16a1375 100644 --- a/static/js/bundles/app.js +++ b/static/js/bundles/app.js @@ -1,6 +1,6 @@ import "./common"; -// Import Third party libraries +// Import third party libraries import "../../third/bootstrap-notify/js/bootstrap-notify"; import "../../third/bootstrap-typeahead/typeahead"; import "../../third/bootstrap-tooltip/tooltip"; @@ -12,7 +12,7 @@ import "jquery-validation"; import "flatpickr"; import "flatpickr/dist/plugins/confirmDate/confirmDate"; -// Import App JS +// Import app JS import "../i18n"; import "../feature_flags"; import "../loading"; @@ -195,7 +195,7 @@ import "../search_pill_widget"; import "../stream_ui_updates"; import "../spoilers"; -// Import Styles +// Import styles import "../../third/bootstrap-notify/css/bootstrap-notify.css"; import "spectrum-colorpicker/spectrum.css"; diff --git a/static/js/compose_ui.js b/static/js/compose_ui.js index 2e6ce4bca8..4b85a59df9 100644 --- a/static/js/compose_ui.js +++ b/static/js/compose_ui.js @@ -104,7 +104,7 @@ exports.compute_placeholder_text = function (opts) { } } - // For Private Messages + // For private messages if (opts.private_message_recipient) { const recipient_list = opts.private_message_recipient.split(","); const recipient_names = recipient_list diff --git a/static/js/hash_util.js b/static/js/hash_util.js index 7db2bc8594..be907d0284 100644 --- a/static/js/hash_util.js +++ b/static/js/hash_util.js @@ -59,12 +59,12 @@ exports.encode_stream_name = function (operand) { exports.decodeHashComponent = function (str) { try { - // This fails for URLS containing + // This fails for URLs containing // foo.foo or foo%foo due to our fault in special handling // of such characters when encoding. This can also, // fail independent of our fault, so just tell the user - // that the url is invalid. - // TODO: Show possible valid urls to the user. + // that the URL is invalid. + // TODO: Show possible valid URLs to the user. return decodeURIComponent(str.replace(/\./g, "%")); } catch { ui_report.error(i18n.t("Invalid URL"), undefined, $("#home-error"), 2000); diff --git a/static/js/markdown.js b/static/js/markdown.js index d84d52cae6..495a95d30c 100644 --- a/static/js/markdown.js +++ b/static/js/markdown.js @@ -231,7 +231,7 @@ exports.add_topic_links = function (message) { } } - // Also make raw urls navigable + // Also make raw URLs navigable const url_re = /\b(https?:\/\/[^\s<]+[^\s"'),.:;<\]])/g; // Slightly modified from third/marked.js const match = topic.match(url_re); if (match) { @@ -268,11 +268,11 @@ function handleEmoji(emoji_name) { const alt_text = ":" + emoji_name + ":"; const title = emoji_name.split("_").join(" "); - // Zulip supports both standard/unicode emoji, served by a + // Zulip supports both standard/Unicode emoji, served by a // spritesheet and custom realm-specific emoji (served by URL). // We first check if this is a realm emoji, and if so, render it. // - // Otherwise we'll look at unicode emoji to render with an emoji + // Otherwise we'll look at Unicode emoji to render with an emoji // span using the spritesheet; and if it isn't one of those // either, we pass through the plain text syntax unmodified. const emoji_url = emoji.get_realm_emoji_url(emoji_name); @@ -381,7 +381,7 @@ function python_to_js_filter(pattern, url) { const name = match[1]; // Replace named group with regular matching group pattern = pattern.replace("(?P<" + name + ">", "("); - // Replace named reference in url to numbered reference + // Replace named reference in URL to numbered reference url = url.replace("%(" + name + ")s", "\\" + current_group); // Reset the RegExp state diff --git a/static/js/narrow.js b/static/js/narrow.js index 21116f68f6..0ac994adf8 100644 --- a/static/js/narrow.js +++ b/static/js/narrow.js @@ -859,10 +859,10 @@ exports.deactivate = function () { }; exports.restore_home_state = function () { - // If we click on the All Messages link while already at All Messages, unnarrow. - // If we click on the All Messages link from another nav pane, just go + // If we click on the All messages link while already at All messages, unnarrow. + // If we click on the All messages link from another nav pane, just go // back to the state you were in (possibly still narrowed) before - // you left the All Messages pane. + // you left the All messages pane. if (!overlays.is_active()) { exports.deactivate(); } diff --git a/static/js/people.js b/static/js/people.js index 5a0641af20..5a166c249c 100644 --- a/static/js/people.js +++ b/static/js/people.js @@ -648,7 +648,7 @@ export function small_avatar_url(message) { let person; if (message.sender_id) { // We should always have message.sender_id, except for in the - // tutorial, where it's ok to fall back to the url in the fake + // tutorial, where it's ok to fall back to the URL in the fake // messages. person = get_by_user_id(message.sender_id); } diff --git a/static/js/pm_list.js b/static/js/pm_list.js index 17d9b9cbe4..8cf61a3e1e 100644 --- a/static/js/pm_list.js +++ b/static/js/pm_list.js @@ -6,7 +6,7 @@ const pm_conversations = require("./pm_conversations"); let prior_dom; let private_messages_open = false; -// This module manages the "Private Messages" section in the upper +// This module manages the "Private messages" section in the upper // left corner of the app. This was split out from stream_list.js. function get_filter_li() { diff --git a/static/js/portico/help.js b/static/js/portico/help.js index 35cd6f761c..7951e9c781 100644 --- a/static/js/portico/help.js +++ b/static/js/portico/help.js @@ -37,8 +37,8 @@ function highlight_current_article() { let article = $('.help .sidebar a[href="' + path + hash + '"]'); if (!article.length) { // If there isn't an entry in the left sidebar that matches - // the full url+hash pair, instead highlight an entry in the - // left sidebar that just matches the url part. + // the full URL+hash pair, instead highlight an entry in the + // left sidebar that just matches the URL part. article = $('.help .sidebar a[href="' + path + '"]'); } // Highlight current article link and the heading of the same diff --git a/static/js/portico/integrations_dev_panel.js b/static/js/portico/integrations_dev_panel.js index fc0a078bb4..ef56a5d702 100644 --- a/static/js/portico/integrations_dev_panel.js +++ b/static/js/portico/integrations_dev_panel.js @@ -1,6 +1,6 @@ "use strict"; -// Main JavaScript file for the Integrations development panel at +// Main JavaScript file for the integrations development panel at // /devtools/integrations. // Data Segment: We lazy load the requested fixtures from the backend @@ -219,7 +219,7 @@ function get_fixtures(integration_name) { } // We don't have the fixtures for this integration; fetch them - // from the backend. Relative url pattern: + // from the backend. Relative URL pattern: // /devtools/integrations//fixtures channel.get({ url: "/devtools/integrations/" + integration_name + "/fixtures", diff --git a/static/js/portico/team.js b/static/js/portico/team.js index 8dad2b9859..c158a4dcd6 100644 --- a/static/js/portico/team.js +++ b/static/js/portico/team.js @@ -57,7 +57,7 @@ function get_display_name(contributor) { // TODO (for v2 of /team contributors): // - Make tab header responsive. -// - Display full name instead of github username. +// - Display full name instead of GitHub username. export default function render_tabs() { const template = _.template($("#contributors-template").html()); const total_tab_html = _.chain(contributors_list) diff --git a/static/js/recent_topics.js b/static/js/recent_topics.js index 4512aa3a6b..df5ddd1549 100644 --- a/static/js/recent_topics.js +++ b/static/js/recent_topics.js @@ -124,7 +124,7 @@ exports.process_message = function (msg) { topic_data.last_msg_id = msg.id; } // TODO: Add backend support for participated topics. - // Currently participated === Recently Participated + // Currently participated === recently participated // i.e. Only those topics are participated for which we have the user's // message fetched in the topic. Ideally we would want this to be attached // to topic info fetched from backend, which is currently not a thing. diff --git a/static/js/scroll_bar.js b/static/js/scroll_bar.js index e856a64be4..e40bd8c3c8 100644 --- a/static/js/scroll_bar.js +++ b/static/js/scroll_bar.js @@ -1,6 +1,6 @@ "use strict"; -// A few of our width properties in zulip depend on the width of the +// A few of our width properties in Zulip depend on the width of the // browser scrollbar that is generated at the far right side of the // page, which unfortunately varies depending on the browser and // cannot be detected directly using CSS. As a result, we adjust a diff --git a/static/js/stream_create.js b/static/js/stream_create.js index ef47d7ed1a..019a8e3888 100644 --- a/static/js/stream_create.js +++ b/static/js/stream_create.js @@ -350,7 +350,7 @@ exports.create_handlers_for_users = function (container) { e.preventDefault(); }); - // Search People or Streams + // Search people or streams container.on("input", ".add-user-list-filter", (e) => { const user_list = $(".add-user-list-filter"); if (user_list === 0) { diff --git a/static/js/subs.js b/static/js/subs.js index acbc673367..5c1f4443d0 100644 --- a/static/js/subs.js +++ b/static/js/subs.js @@ -543,7 +543,7 @@ exports.setup_page = function (callback) { // so it's too risky a change for now. // // The history behind setting up the page from scratch every - // time we go into "Manage Streams" is that we used to have + // time we go into "Manage streams" is that we used to have // some live-update issues, so being able to re-launch the // streams page is kind of a workaround for those bugs, since // we will re-populate the widget. diff --git a/static/shared/js/emoji.js b/static/shared/js/emoji.js index 45bd85e232..2ef7fbeaba 100644 --- a/static/shared/js/emoji.js +++ b/static/shared/js/emoji.js @@ -90,13 +90,13 @@ export function get_emoji_codepoint(emoji_name) { export function get_realm_emoji_url(emoji_name) { // If the emoji name is a realm emoji, returns the URL for it. - // Returns undefined for unicode emoji. + // Returns undefined for Unicode emoji. // get_realm_emoji_url('shrug') === '/user_avatars/2/emoji/images/31.png' const data = active_realm_emojis.get(emoji_name); if (!data) { - // Not all emojis have urls, plus the user + // Not all emojis have URLs, plus the user // may have hand-typed an invalid emoji. // The caller can check the result for falsiness // and then try alternate ways of parsing the diff --git a/static/styles/left_sidebar.css b/static/styles/left_sidebar.css index 9da03a24b8..291ac695a3 100644 --- a/static/styles/left_sidebar.css +++ b/static/styles/left_sidebar.css @@ -382,7 +382,7 @@ li.top_left_recent_topics { } /* - The All Messages and Stream ellipsis-v(vertical 3 dots) are + The All messages and stream ellipsis-v (vertical 3 dots) are pretty similar. */ .all-messages-sidebar-menu-icon, diff --git a/static/templates/admin_emoji_list.hbs b/static/templates/admin_emoji_list.hbs index bb5d6bb879..d19b74011a 100644 --- a/static/templates/admin_emoji_list.hbs +++ b/static/templates/admin_emoji_list.hbs @@ -14,7 +14,7 @@ {{#if author}} {{author.full_name}} {{else}} - Unknown Author + Unknown author {{/if}} diff --git a/static/templates/typing_notifications.hbs b/static/templates/typing_notifications.hbs index ec77e769cf..7b5958357e 100644 --- a/static/templates/typing_notifications.hbs +++ b/static/templates/typing_notifications.hbs @@ -1,4 +1,4 @@ -{{! Typing Notifications }} +{{! Typing notifications }}
    {{#each users}} {{> typing_notification}} diff --git a/static/templates/user_presence_rows.hbs b/static/templates/user_presence_rows.hbs index 9a13d564bb..211de70977 100644 --- a/static/templates/user_presence_rows.hbs +++ b/static/templates/user_presence_rows.hbs @@ -1,4 +1,4 @@ -{{! User Presence rows }} +{{! User presence rows }} {{#each users}} {{> user_presence_row}} {{/each}} diff --git a/static/templates/widgets/tictactoe_widget.hbs b/static/templates/widgets/tictactoe_widget.hbs index 2259926b87..0fad0955dc 100644 --- a/static/templates/widgets/tictactoe_widget.hbs +++ b/static/templates/widgets/tictactoe_widget.hbs @@ -1,4 +1,4 @@ -

    Tic Tac Toe

    +

    Tic-tac-toe

    {{ move_status }}

    diff --git a/static/third/marked/lib/marked.js b/static/third/marked/lib/marked.js index a8fd74bbba..609cfa6337 100644 --- a/static/third/marked/lib/marked.js +++ b/static/third/marked/lib/marked.js @@ -645,7 +645,7 @@ InlineLexer.prototype.output = function(src) { continue; } - // realm_filters (zulip) + // realm_filters (Zulip) var self = this; this.rules.realm_filters.forEach(function (realm_filter) { var ret = self.inlineReplacement(realm_filter, src, function(regex, groups, match) { @@ -740,28 +740,28 @@ InlineLexer.prototype.output = function(src) { continue; } - // usermention (zulip) + // usermention (Zulip) if (cap = this.rules.usermention.exec(src)) { src = src.substring(cap[0].length); out += this.usermention(unescape(cap[3] || cap[4]), cap[1], cap[2]); continue; } - // groupmention (zulip) + // groupmention (Zulip) if (cap = this.rules.groupmention.exec(src)) { src = src.substring(cap[0].length); out += this.groupmention(unescape(cap[1]), cap[0]); continue; } - // stream_topic (zulip) + // stream_topic (Zulip) if (cap = this.rules.stream_topic.exec(src)) { src = src.substring(cap[0].length); out += this.stream_topic(unescape(cap[1]), unescape(cap[2]), cap[0]); continue; } - // stream (zulip) + // stream (Zulip) if (cap = this.rules.stream.exec(src)) { src = src.substring(cap[0].length); out += this.stream(unescape(cap[1]), cap[0]); @@ -810,7 +810,7 @@ InlineLexer.prototype.output = function(src) { continue; } - // unicode emoji + // Unicode emoji if (cap = this.rules.unicodeemoji.exec(src)) { src = src.substring(cap[0].length); out += this.unicodeEmoji(cap[1]); diff --git a/stubs/taint/false_positives.pysa b/stubs/taint/false_positives.pysa index d4e1ef8cfd..ad5c356099 100644 --- a/stubs/taint/false_positives.pysa +++ b/stubs/taint/false_positives.pysa @@ -39,7 +39,7 @@ def zerver.lib.actions.create_user_messages( def zerver.lib.pysa.mark_sanitized(arg) -> Sanitize: ... ############################ -# Overbroad Approximations # +# Overbroad approximations # ############################ # Note that the below functions are overbroad approximations of Sanitizers and diff --git a/templates/analytics/activity.html b/templates/analytics/activity.html index d8ab78b27a..0beb074710 100644 --- a/templates/analytics/activity.html +++ b/templates/analytics/activity.html @@ -1,7 +1,7 @@ {% extends "zerver/base.html" %} {% set entrypoint = "activity" %} -{# User Activity. #} +{# User activity. #} {% block title %} {{ title }} diff --git a/templates/analytics/realm_details.html b/templates/analytics/realm_details.html index 1bbf1cba19..aa00338ef5 100644 --- a/templates/analytics/realm_details.html +++ b/templates/analytics/realm_details.html @@ -23,7 +23,7 @@ {{ csrf_input }} + diff --git a/templates/corporate/billing.html b/templates/corporate/billing.html index efb6116c9a..7709a0992c 100644 --- a/templates/corporate/billing.html +++ b/templates/corporate/billing.html @@ -22,7 +22,7 @@ {% if admin_access and has_active_plan %} diff --git a/templates/corporate/zephyr-mirror.html b/templates/corporate/zephyr-mirror.html index 697d027653..de2c445cd9 100644 --- a/templates/corporate/zephyr-mirror.html +++ b/templates/corporate/zephyr-mirror.html @@ -1,6 +1,6 @@ {% extends "zerver/portico.html" %} -{# Zephyr Mirroring information page #} +{# Zephyr mirroring information page #} {% block portico_content %}

    The Zephyr mirror script (not recommended)

    @@ -52,7 +52,7 @@ mirror script instead of using Webathena.

    -

    This will run the Zephyr Mirroring script inside a screen +

    This will run the Zephyr mirroring script inside a screen session, and use `/mit/kchen/bin/cont-renew-notify` to continually renew your Kerberos tickets for up to a week; each week, it will send you a Zephyr/Zulip letting you know that you need to renew diff --git a/templates/zerver/api/changelog.md b/templates/zerver/api/changelog.md index d8eff38c30..8c676362c7 100644 --- a/templates/zerver/api/changelog.md +++ b/templates/zerver/api/changelog.md @@ -42,7 +42,7 @@ Note that as of this feature level, stream administrators are a partially completed feature. In particular, it is impossible for a user to be a stream administrator at this feature level. -**Feature Level 30** +**Feature level 30** * [`GET users/me/subscriptions`](/api/get-subscriptions), [`GET /streams`](/api/get-streams): Added `date_created` to Stream @@ -259,7 +259,7 @@ No changes; feature level used for Zulip 3.0 release. * [`POST /messages/{message_id}/reactions`](/api/add-reaction): The `reaction_type` parameter is optional; the server will guess the `reaction_type` if it is not specified (checking custom emoji, then - unicode emoji for any with the provided name). + Unicode emoji for any with the provided name). * `reactions` objects returned by the API (both in `GET /messages` and in `GET /events`) now include the user who reacted in a top-level `user_id` field. The legacy `user` dictionary (which had @@ -283,7 +283,7 @@ No changes; feature level used for Zulip 3.0 release. * [`GET /messages`](/api/get-messages) and [`GET /events`](/api/get-events): Message objects now use `topic_links` rather than `subject_links` to indicate links either - present in the topic or generated by Linkifiers applied to the topic. + present in the topic or generated by linkifiers applied to the topic. * [`POST /users/me/subscriptions`](/api/subscribe): Replaced `is_announcement_only` boolean with `stream_post_policy` enum for specifying who can post to a stream. diff --git a/templates/zerver/api/configuring-python-bindings.md b/templates/zerver/api/configuring-python-bindings.md index 81a97a73d1..d5b51b43c1 100644 --- a/templates/zerver/api/configuring-python-bindings.md +++ b/templates/zerver/api/configuring-python-bindings.md @@ -17,7 +17,7 @@ A `.zuliprc` file is a plain text document that looks like this: ``` [api] -key= +key= email= site= ... diff --git a/templates/zerver/api/deploying-bots.md b/templates/zerver/api/deploying-bots.md index a6c3e6d4d4..bbe4a0ccda 100644 --- a/templates/zerver/api/deploying-bots.md +++ b/templates/zerver/api/deploying-bots.md @@ -25,8 +25,8 @@ The Zulip Botserver is for people who want to * run multiple bots at once. The Zulip Botserver is a Python (Flask) server that implements Zulip's -Outgoing Webhooks API. You can of course write your own servers using -the Outgoing Webhooks API, but the Botserver is designed to make it +outgoing webhooks API. You can of course write your own servers using +the outgoing webhooks API, but the Botserver is designed to make it easy for a novice Python programmer to write a new bot and deploy it in production. @@ -55,7 +55,7 @@ Botserver interaction are: } ``` - This url is configured in the Zulip web-app in your Bot User's settings. + This URL is configured in the Zulip web-app in your Bot User's settings. 1. The Botserver searches for a bot to handle the message. @@ -223,7 +223,7 @@ Botserver with SSL using an `nginx` or `Apache` reverse proxy and ### Troubleshooting -1. Make sure the API key you're using is for an [Outgoing webhook +1. Make sure the API key you're using is for an [outgoing webhook bot](/api/outgoing-webhooks) and you've correctly configured the URL for your Botserver. diff --git a/templates/zerver/api/incoming-webhooks-walkthrough.md b/templates/zerver/api/incoming-webhooks-walkthrough.md index b749dbf1a5..72cfc00ce3 100644 --- a/templates/zerver/api/incoming-webhooks-walkthrough.md +++ b/templates/zerver/api/incoming-webhooks-walkthrough.md @@ -132,7 +132,7 @@ letter upper-case). The `webhook_view` decorator indicates that the 3rd party service will send the authorization as an API key in the query parameters. If your service uses -HTTP Basic authentication, you would instead use the `authenticated_rest_api_view` +HTTP basic authentication, you would instead use the `authenticated_rest_api_view` decorator. You should name your webhook function as such @@ -174,10 +174,10 @@ validate the message and do the following: Finally, we return a 200 http status with a JSON format success message via `json_success()`. -## Step 3: Create an api endpoint for the webhook +## Step 3: Create an API endpoint for the webhook In order for an incoming webhook to be externally available, it must be mapped -to a url. This is done in `zerver/lib/integrations.py`. +to a URL. This is done in `zerver/lib/integrations.py`. Look for the lines beginning with: @@ -191,7 +191,7 @@ And you'll find the entry for Hello World: WebhookIntegration('helloworld', ['misc'], display_name='Hello World'), ``` -This tells the Zulip api to call the `api_helloworld_webhook` function in +This tells the Zulip API to call the `api_helloworld_webhook` function in `zerver/webhooks/helloworld/view.py` when it receives a request at `/api/v1/external/helloworld`. @@ -232,7 +232,7 @@ Common validators are available in `zerver/lib/validators.py`. For either one of the command line tools, first, you'll need to get an API key from the **Your bots** section of your Zulip user's Settings page. To test the webhook, you'll need to [create a bot](https://zulip.com/help/add-a-bot-or-integration) with -the **Incoming Webhook** type. Replace `` with your bot's API key in the examples +the **Incoming webhook** type. Replace `` with your bot's API key in the examples presented below! This is how Zulip knows that the request was made by an authorized user. ### Curl @@ -280,9 +280,9 @@ This is the GUI tool. 1. Run `./tools/run-dev.py` then go to http://localhost:9991/devtools/integrations/. -2. Set the following mandatory fields: -**Bot** - Any incoming webhook bot. -**Integration** - One of the integrations. +2. Set the following mandatory fields: +**Bot** - Any incoming webhook bot. +**Integration** - One of the integrations. **Fixture** - Though not mandatory, it's recommended that you select one and then tweak it if necessary. The remaining fields are optional, and the URL will automatically be generated. @@ -467,7 +467,7 @@ request: 2. Read through [Code styles and conventions]( https://zulip.readthedocs.io/en/latest/contributing/code-style.html) and take a look through your code to double-check that you've followed Zulip's guidelines. -3. Take a look at your git history to ensure your commits have been clear and +3. Take a look at your Git history to ensure your commits have been clear and logical (see [Version Control]( https://zulip.readthedocs.io/en/latest/contributing/version-control.html) for tips). If not, consider revising them with `git rebase --interactive`. For most incoming webhooks, diff --git a/templates/zerver/api/outgoing-webhooks.md b/templates/zerver/api/outgoing-webhooks.md index eb6e357dee..fca7809378 100644 --- a/templates/zerver/api/outgoing-webhooks.md +++ b/templates/zerver/api/outgoing-webhooks.md @@ -1,6 +1,6 @@ -# Outgoing Webhooks +# Outgoing webhooks -Outgoing Webhooks allow you to build or set up Zulip integrations +Outgoing webhooks allow you to build or set up Zulip integrations which are notified when certain types of messages are sent in Zulip. When one of those events is triggered, we'll send a HTTP POST payload to the webhook's configured URL. Webhooks can be used to diff --git a/templates/zerver/api/rest.md b/templates/zerver/api/rest.md index fa4fbc4628..8bc9f5ce8e 100644 --- a/templates/zerver/api/rest.md +++ b/templates/zerver/api/rest.md @@ -12,7 +12,7 @@ you can do in Zulip, you can do with Zulip's REST API. To use this API: [other languages](/api/client-libraries), or just make HTTP requests with your favorite programming language. If you're making your own HTTP requests, you'll want to send the - appropriate HTTP Basic Authentication headers; see each endpoint's + appropriate HTTP basic authentication headers; see each endpoint's `curl` option for details on the request format. * The Zulip API has a standard [system for reporting errors](/api/rest-error-handling). diff --git a/templates/zerver/apple-error.md b/templates/zerver/apple-error.md index afe77f5ab7..f425144728 100644 --- a/templates/zerver/apple-error.md +++ b/templates/zerver/apple-error.md @@ -3,7 +3,7 @@ properly configured. Please check the following: * You have registered `{{ root_domain_uri }}/complete/apple/` as the callback URL for your Services ID in Apple's developer console. You can - enable "Sign In with Apple" for an app at + enable "Sign in with Apple" for an app at [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources/). * You have set `SOCIAL_AUTH_APPLE_SERVICES_ID`, diff --git a/templates/zerver/documentation_main.html b/templates/zerver/documentation_main.html index 24fb3a2641..d6b5af6d1d 100644 --- a/templates/zerver/documentation_main.html +++ b/templates/zerver/documentation_main.html @@ -1,7 +1,7 @@ {% extends "zerver/portico-help.html" %} {% set entrypoint = "help" %} -{# Zulip User and API Documentation. #} +{# Zulip user and API documentation. #} {% block title %} {{ OPEN_GRAPH_TITLE }} {% endblock %} diff --git a/templates/zerver/for/research.md b/templates/zerver/for/research.md index 1e095ae12e..70829fef29 100644 --- a/templates/zerver/for/research.md +++ b/templates/zerver/for/research.md @@ -4,7 +4,7 @@ describes academic research better than any of our other use cases. Zulip has long been popular with individual research groups, but during the pandemic has started being used for large distributed -communities focused around research topics like Category Theory or the +communities focused around research topics like category theory or the Lean Theorem Prover. We enthusiastically provide free hosting for both use cases. @@ -82,7 +82,7 @@ discussion of Zulip for large open communities. Below, we’ve collected a list of [Zulip features](/features) that are particularly useful to academic research organizations (both formal organizations and online communities focused around research topics -like Category Theory). +like category theory). ### Free hosting at zulip.com. diff --git a/templates/zerver/hello.html b/templates/zerver/hello.html index 828743b998..b5a5a57bdc 100644 --- a/templates/zerver/hello.html +++ b/templates/zerver/hello.html @@ -396,8 +396,8 @@

    diff --git a/templates/zerver/help/change-a-users-role.md b/templates/zerver/help/change-a-users-role.md index 4b7f731c75..0387e6d1fd 100644 --- a/templates/zerver/help/change-a-users-role.md +++ b/templates/zerver/help/change-a-users-role.md @@ -11,7 +11,7 @@ organization administrator can change the role of most users, but cannot create or demote an organization owner. You can can revoke your own owner or administrative privileges if -there is at least one other owner in the organization (Consider +there is at least one other owner in the organization (consider promoting a new owner or [deactivating the organization](/help/deactivate-your-organization) instead). diff --git a/templates/zerver/help/import-from-gitter.md b/templates/zerver/help/import-from-gitter.md index 63deefc696..a8c8387690 100644 --- a/templates/zerver/help/import-from-gitter.md +++ b/templates/zerver/help/import-from-gitter.md @@ -21,9 +21,9 @@ First, export your data from Gitter. Zulip. !!! warn "" - **Note:** You'll need a gitter API token to export data. You can get this + **Note:** You'll need a Gitter API token to export data. You can get this token by following the instructions in the "**Getting Started**" section of the - [gitter documentation](https://developer.gitter.im/docs/). + [Gitter documentation](https://developer.gitter.im/docs/). {end_tabs} @@ -90,7 +90,7 @@ to mark the appropriate users as administrators. ## Caveats - The [Gitter data export tool](https://github.com/minrk/archive-gitter) - doesn't support exporting private gitter channels. + doesn't support exporting private Gitter channels. - Gitter's export tool doesn't export email addresses; just GitHub usernames. The import tool will thus use [GitHub's generated diff --git a/templates/zerver/help/import-from-hipchat.md b/templates/zerver/help/import-from-hipchat.md index b0a1259b58..bfef4f9992 100644 --- a/templates/zerver/help/import-from-hipchat.md +++ b/templates/zerver/help/import-from-hipchat.md @@ -37,7 +37,7 @@ admin console. 1. Upgrade to the latest version to ensure you have the latest updates to the HipChat export dashboard. -1. Log in at the domain name configured for your Hipchat Server. +1. Log in at the domain name configured for your HipChat Server. 1. Click on **Server Admin > Export**. @@ -51,7 +51,7 @@ Once the export has completed, you will receive an **email** with a link to download the file. !!! tip "" - If you are not on the latest version of Hipchat Server / Data Center, + If you are not on the latest version of HipChat Server / Data Center, you can do a command line export with `hipchat export --export`. See HipChat's [command line export docs][cli-export] for more information. diff --git a/templates/zerver/help/import-from-mattermost.md b/templates/zerver/help/import-from-mattermost.md index 7eba2834ea..67848d41f7 100644 --- a/templates/zerver/help/import-from-mattermost.md +++ b/templates/zerver/help/import-from-mattermost.md @@ -109,7 +109,7 @@ Replace `` and `` with the appropriate values below. exported_emoji/ export.json ``` -3. Exit your shell on the Gitlab Omnibus server. +3. Exit your shell on the GitLab Omnibus server. `exit` diff --git a/templates/zerver/help/import-from-slack.md b/templates/zerver/help/import-from-slack.md index c261959ea6..2e7a05b2a8 100644 --- a/templates/zerver/help/import-from-slack.md +++ b/templates/zerver/help/import-from-slack.md @@ -43,7 +43,7 @@ email addresses. 3. [Install the app](https://api.slack.com/authentication/basics#installing) to your workspace. You will get an API token that you can now use to fetch - data from your slack workspace. + data from your Slack workspace. {end_tabs} @@ -118,7 +118,7 @@ root domain. Replace the last line above with the following, after replacing - Import of [user roles](/help/roles-and-permissions): - Slack's `Workspace Primary Owner` and `Workspace Owner` users - are mapped to Zulip `Organization Owner` users. + are mapped to Zulip `Organization owner` users. - Slack's `Workspace Admin` users are mapped to Zulip's `Organization administrator` users. - Slack's `Member` users is mapped to Zulip `Member` users. diff --git a/templates/zerver/help/restrict-name-and-email-changes.md b/templates/zerver/help/restrict-name-and-email-changes.md index 042e5caa2b..1490f9bd1c 100644 --- a/templates/zerver/help/restrict-name-and-email-changes.md +++ b/templates/zerver/help/restrict-name-and-email-changes.md @@ -26,8 +26,8 @@ source, and synced into Zulip via the [Zulip API](/api) or another method. By default, any user can [change their email address](/help/change-your-email-address). However, you can instead prevent all email changes. This is especially useful for -organizations that are using LDAP or another a Single -Sign-On solution to manage user emails. +organizations that are using LDAP or a another single +sign-on solution to manage user emails. {start_tabs} diff --git a/templates/zerver/help/roles-and-permissions.md b/templates/zerver/help/roles-and-permissions.md index 5ec8dbb71c..c59c2ca70b 100644 --- a/templates/zerver/help/roles-and-permissions.md +++ b/templates/zerver/help/roles-and-permissions.md @@ -2,10 +2,10 @@ There are several possible roles in a Zulip organization. -* **Organization Owner**: Can manage users, public streams, +* **Organization owner**: Can manage users, public streams, organization settings, and billing. -* **Organization Administrator**: Can manage users, public streams, +* **Organization administrator**: Can manage users, public streams, and organization settings. Cannot create or demote organization owners. diff --git a/templates/zerver/help/saml-authentication.md b/templates/zerver/help/saml-authentication.md index e1bd303a56..3e40cb4485 100644 --- a/templates/zerver/help/saml-authentication.md +++ b/templates/zerver/help/saml-authentication.md @@ -1,6 +1,6 @@ # SAML authentication -Zulip supports using SAML authentication for Single Sign On, both when +Zulip supports using SAML authentication for single sign-on, both when self-hosting or on the Zulip Cloud Plus plan. This page documents details on how to setup SAML authentication with @@ -29,11 +29,11 @@ Zulip with various common SAML Identity Providers. * Optionally you can also send us an icon that should be shown on the button. 1. We will take care of the server-side setup and let you know as soon as it's ready. -## Configure SAML with Onelogin +## Configure SAML with OneLogin 1. Make sure you have created your organization. We'll assume its URL is `https://.zulipchat.com` in the instructions below. -1. Navigate to the Onelogin Applications page, and click "Add App". +1. Navigate to the OneLogin Applications page, and click "Add App". 1. Search for the "SAML Test Connector (IdP w/ attr w/ sign response)" app and select it. 1. Set a name and logo according to your preferences and click "Save". This doesn't affect anything in Zulip, but will be shown on your OneLogin Applications page. @@ -45,7 +45,7 @@ Zulip with various common SAML Identity Providers. 1. Go to the "Parameters" section. Ignore the pre-configured parameters that are already there and add custom ones to match the following screenshot: - ![Onelogin parameters](/static/images/help/onelogin_parameters.png) + ![OneLogin parameters](/static/images/help/onelogin_parameters.png) Make sure to set the "Include in SAML assertion" flag on them. diff --git a/templates/zerver/help/stream-sending-policy.md b/templates/zerver/help/stream-sending-policy.md index 0225f1c7c8..e9e4a85d03 100644 --- a/templates/zerver/help/stream-sending-policy.md +++ b/templates/zerver/help/stream-sending-policy.md @@ -18,6 +18,6 @@ certain users can send messages. 1. Under "Who can post to the stream?", select the option you prefer. -1. Click **Save Changes**. +1. Click **Save changes**. {end_tabs} diff --git a/templates/zerver/integrations/development/dev_panel.html b/templates/zerver/integrations/development/dev_panel.html index cc731f8b5c..005dcbb313 100644 --- a/templates/zerver/integrations/development/dev_panel.html +++ b/templates/zerver/integrations/development/dev_panel.html @@ -18,7 +18,7 @@ -
    Integrations Developer Panel
    +
    Integrations developer panel