Remove Debian 10 support.

As a consequence:

• Bump minimum supported Python version to 3.8.
• Move Vagrant environment to Ubuntu 20.04, which has Python 3.8.
• Move CI frontend tests to Ubuntu 20.04.
• Move production build test to Ubuntu 20.04.
• Move 3.4 upgrade test to Ubuntu 20.04.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2022-04-18 18:18:48 -07:00 committed by Alex Vandiver
parent a7e6cb7705
commit a543dcc8e3
24 changed files with 93 additions and 196 deletions

View File

@ -30,13 +30,13 @@ jobs:
production_build:
# This job builds a release tarball from the current commit, which
# will be used for all of the following install/upgrade tests.
name: Debian 10 production build
name: Ubuntu 20.04 production build
runs-on: ubuntu-latest
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
# the top explain how to build and upload these images.
# Debian 10 ships with Python 3.7.3.
container: zulip/ci:buster
# Ubuntu 20.04 ships with Python 3.8.10.
container: zulip/ci:focal
steps:
- name: Add required permissions
run: |
@ -66,22 +66,22 @@ jobs:
uses: actions/cache@v2
with:
path: /srv/zulip-npm-cache
key: v1-yarn-deps-buster-${{ hashFiles('package.json') }}-${{ hashFiles('yarn.lock') }}
restore-keys: v1-yarn-deps-buster
key: v1-yarn-deps-focal-${{ hashFiles('package.json') }}-${{ hashFiles('yarn.lock') }}
restore-keys: v1-yarn-deps-focal
- name: Restore python cache
uses: actions/cache@v2
with:
path: /srv/zulip-venv-cache
key: v1-venv-buster-${{ hashFiles('requirements/dev.txt') }}
restore-keys: v1-venv-buster
key: v1-venv-focal-${{ hashFiles('requirements/dev.txt') }}
restore-keys: v1-venv-focal
- name: Restore emoji cache
uses: actions/cache@v2
with:
path: /srv/zulip-emoji-cache
key: v1-emoji-buster-${{ hashFiles('tools/setup/emoji/emoji_map.json') }}-${{ hashFiles('tools/setup/emoji/build_emoji') }}-${{ hashFiles('tools/setup/emoji/emoji_setup_utils.py') }}-${{ hashFiles('tools/setup/emoji/emoji_names.py') }}-${{ hashFiles('package.json') }}
restore-keys: v1-emoji-buster
key: v1-emoji-focal-${{ hashFiles('tools/setup/emoji/emoji_map.json') }}-${{ hashFiles('tools/setup/emoji/build_emoji') }}-${{ hashFiles('tools/setup/emoji/emoji_setup_utils.py') }}-${{ hashFiles('tools/setup/emoji/emoji_names.py') }}-${{ hashFiles('package.json') }}
restore-keys: v1-emoji-focal
- name: Build production tarball
run: ./tools/ci/production-build
@ -114,15 +114,10 @@ jobs:
os: focal
extra_args: ""
- docker_image: zulip/ci:buster
name: Debian 10 production install with custom db name and user
os: buster
extra_args: --test-custom-db
- docker_image: zulip/ci:bullseye
name: Debian 11 production install
name: Debian 11 production install with custom db name and user
os: bullseye
extra_args: ""
extra_args: --test-custom-db
name: ${{ matrix.name }}
container:
@ -209,10 +204,9 @@ jobs:
include:
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
# the top explain how to build and upload these images.
- docker_image: zulip/ci:buster-3.4
- docker_image: zulip/ci:focal-3.4
name: 3.4 Version Upgrade
os: buster
os: focal
- docker_image: zulip/ci:bullseye-4.11
name: 4.11 Version Upgrade
os: bullseye

View File

@ -18,19 +18,14 @@ jobs:
include:
# Base images are built using `tools/ci/Dockerfile.prod.template`.
# The comments at the top explain how to build and upload these images.
# Debian 10 ships with Python 3.7.3.
- docker_image: zulip/ci:buster
name: Debian 10 Buster (Python 3.7, backend + frontend)
os: buster
include_frontend_tests: true
# Ubuntu 20.04 ships with Python 3.8.2.
# Ubuntu 20.04 ships with Python 3.8.10.
- docker_image: zulip/ci:focal
name: Ubuntu 20.04 Focal (Python 3.8, backend)
name: Ubuntu 20.04 (Python 3.8, backend + frontend)
os: focal
include_frontend_tests: false
include_frontend_tests: true
# Debian 11 ships with Python 3.9.2.
- docker_image: zulip/ci:bullseye
name: Debian 11 Bullseye (Python 3.9, backend)
name: Debian 11 (Python 3.9, backend)
os: bullseye
include_frontend_tests: false
@ -124,8 +119,9 @@ jobs:
run: |
source tools/ci/activate-venv
# Currently our compiled requirements files will differ for different python versions
# so we will run test-locked-requirements only for Debian 10.
# Currently our compiled requirements files will differ for different
# Python versions, so we will run test-locked-requirements only on the
# platform with the oldest one.
# ./tools/test-locked-requirements
# ./tools/test-run-dev # https://github.com/zulip/zulip/pull/14233
#
@ -192,7 +188,7 @@ jobs:
fi
- name: Test locked requirements
if: ${{ matrix.os == 'buster' }}
if: ${{ matrix.os == 'focal' }}
run: |
. /srv/zulip-py3-venv/bin/activate && \
./tools/test-locked-requirements
@ -216,7 +212,6 @@ jobs:
retention-days: 60
- name: Check development database build
if: ${{ matrix.os == 'focal' || matrix.os == 'bullseye' || matrix.os == 'jammy' }}
run: ./tools/ci/setup-backend
- name: Report status

18
Vagrantfile vendored
View File

@ -12,9 +12,11 @@ Vagrant.configure("2") do |config|
vm_num_cpus = "2"
vm_memory = "2048"
debian_mirror = ""
ubuntu_mirror = ""
vboxadd_version = nil
config.vm.box = "bento/ubuntu-20.04"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder ".", "/srv/zulip"
@ -32,7 +34,7 @@ Vagrant.configure("2") do |config|
when "HOST_IP_ADDR"; host_ip_addr = value
when "GUEST_CPUS"; vm_num_cpus = value
when "GUEST_MEMORY_MB"; vm_memory = value
when "DEBIAN_MIRROR"; debian_mirror = value
when "UBUNTU_MIRROR"; ubuntu_mirror = value
when "VBOXADD_VERSION"; vboxadd_version = value
end
end
@ -61,23 +63,23 @@ Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 9994, host: host_port + 3, host_ip: host_ip_addr
# Specify Docker provider before VirtualBox provider so it's preferred.
config.vm.provider "docker" do |d, override|
override.vm.box = nil
d.build_dir = File.join(__dir__, "tools", "setup", "dev-vagrant-docker")
d.build_args = ["--build-arg", "VAGRANT_UID=#{Process.uid}"]
if !debian_mirror.empty?
d.build_args += ["--build-arg", "DEBIAN_MIRROR=#{debian_mirror}"]
if !ubuntu_mirror.empty?
d.build_args += ["--build-arg", "UBUNTU_MIRROR=#{ubuntu_mirror}"]
end
d.has_ssh = true
d.create_args = ["--ulimit", "nofile=1024:65536"]
end
config.vm.provider "virtualbox" do |vb, override|
override.vm.box = "bento/debian-10"
# It's possible we can get away with just 1.5GB; more testing needed
vb.memory = vm_memory
vb.cpus = vm_num_cpus
if !vboxadd_version.nil?
override.vbguest.installer = Class.new(VagrantVbguest::Installers::Debian) do
override.vbguest.installer = Class.new(VagrantVbguest::Installers::Ubuntu) do
define_method(:host_version) do |reload = false|
VagrantVbguest::Version(vboxadd_version)
end
@ -88,14 +90,12 @@ Vagrant.configure("2") do |config|
end
config.vm.provider "hyperv" do |h, override|
override.vm.box = "bento/debian-10"
h.memory = vm_memory
h.maxmemory = vm_memory
h.cpus = vm_num_cpus
end
config.vm.provider "parallels" do |prl, override|
override.vm.box = "bento/debian-10"
prl.memory = vm_memory
prl.cpus = vm_num_cpus
end
@ -104,5 +104,5 @@ Vagrant.configure("2") do |config|
# We want provision to be run with the permissions of the vagrant user.
privileged: false,
path: "tools/setup/vagrant-provision",
env: { "DEBIAN_MIRROR" => debian_mirror }
env: { "UBUNTU_MIRROR" => ubuntu_mirror }
end

View File

@ -135,7 +135,7 @@ The following review steps apply to the majority of PRs.
the job to fail by clicking on the failed job. This will open
up a page in the CI that has more details on why the job failed.
For example [this](https://github.com/zulip/zulip/runs/2092955762)
is the page of the "Debian 10 Buster (Python 3.7, backend + frontend)" job.
is the page of the "Ubuntu 20.04 (Python 3.8, backend + frontend)" job.
See our docs on [continuous integration](../testing/continuous-integration.md)
to learn more.

View File

@ -12,8 +12,8 @@ Contents:
If you'd like to install a Zulip development environment on a computer
that's running one of:
- Ubuntu 20.04 Focal
- Debian 10 Buster, 11 Bullseye
- Ubuntu 20.04
- Debian 11
- CentOS 7 (beta)
- Fedora 33 and 34 (beta)
- RHEL 7 (beta)

View File

@ -18,7 +18,7 @@ Contents:
- [Step 3: Start the development environment](#step-3-start-the-development-environment)
- [Step 4: Developing](#step-4-developing)
- [Troubleshooting and common errors](#troubleshooting-and-common-errors)
- [Specifying a Debian mirror](#specifying-a-debian-mirror)
- [Specifying an Ubuntu mirror](#specifying-an-ubuntu-mirror)
- [Specifying a proxy](#specifying-a-proxy)
- [Customizing CPU and RAM allocation](#customizing-cpu-and-ram-allocation)
@ -50,7 +50,7 @@ a proxy to access the internet.)
- **All**: 2GB available RAM, Active broadband internet connection, [GitHub account][set-up-git].
- **macOS**: macOS (10.11 El Capitan or newer recommended)
- **Ubuntu LTS**: 20.04
- or **Debian**: 10 "buster" or 11 "bullseye"
- **Debian**: 11
- **Windows**: Windows 64-bit (Win 10 recommended), hardware
virtualization enabled (VT-x or AMD-V), administrator access.
@ -143,10 +143,7 @@ Now you are ready for [Step 2: Get Zulip code](#step-2-get-zulip-code).
#### Debian
The setup for Debian is very similar to that [for Ubuntu
above](#ubuntu), except that the `docker.io` package is only available
in Debian 10 and later; for Debian 9, see [Docker CE for
Debian](https://docs.docker.com/install/linux/docker-ce/debian/).
The setup for Debian is the same as that [for Ubuntu above](#ubuntu).
#### Windows 10
@ -285,7 +282,7 @@ vagrant up --provider=docker
The first time you run this command it will take some time because vagrant
does the following:
- downloads the base Debian 10 virtual machine image (for macOS and Windows)
- downloads the base Ubuntu 20.04 virtual machine image (for macOS and Windows)
or container (for Linux)
- configures this virtual machine/container for use with Zulip,
- creates a shared directory mapping your clone of the Zulip code inside the
@ -324,7 +321,7 @@ $ vagrant ssh
You should see output that starts like this:
```console
Linux debian-10 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-107-generic x86_64)
```
Congrats, you're now inside the Zulip development environment!
@ -337,7 +334,7 @@ provisioning failed and you should look at the
Next, start the Zulip server:
```console
(zulip-py3-venv) vagrant@debian-10:/srv/zulip
(zulip-py3-venv) vagrant@vagrant:/srv/zulip
$ ./tools/run-dev.py
```
@ -485,7 +482,7 @@ From the window where run-dev.py is running:
2016-05-04 18:33:13,330 INFO 127.0.0.1 GET 200 92ms /register/ (unauth@zulip via ?)
^C
KeyboardInterrupt
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$ exit
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$ exit
logout
Connection to 127.0.0.1 closed.
christie@win10 ~/zulip
@ -523,7 +520,7 @@ christie@win10 ~/zulip
$ vagrant up
$ vagrant ssh
(zulip-py3-venv) vagrant@debian-10:/srv/zulip
(zulip-py3-venv) vagrant@vagrant:/srv/zulip
$ ./tools/run-dev.py
```
@ -788,8 +785,8 @@ by rebooting the guest via `vagrant halt; vagrant up`.
The `vagrant up` command basically does the following:
- Downloads a Debian image and starts it using a Vagrant provider.
- Uses `vagrant ssh` to connect to that Debian guest, and then runs
- Downloads an Ubuntu image and starts it using a Vagrant provider.
- Uses `vagrant ssh` to connect to that Ubuntu guest, and then runs
`tools/provision`, which has a lot of subcommands that are
executed via Python's `subprocess` module. These errors mean that
one of those subcommands failed.
@ -903,11 +900,11 @@ vagrant ssh -- 'sudo modinfo -F version vboxsf'
The bug has not been fixed upstream as of this writing, but you may be
able to work around it by downgrading VirtualBox Guest Additions to
6.0.4. To do this, create a `~/.zulip-vagrant-config` file and add
5.2.44. To do this, create a `~/.zulip-vagrant-config` file and add
this line:
```text
VBOXADD_VERSION 6.0.4
VBOXADD_VERSION 5.2.44
```
Then run these commands (yes, reload is needed twice):
@ -918,18 +915,18 @@ vagrant reload
vagrant reload --provision
```
### Specifying a Debian mirror
### Specifying an Ubuntu mirror
Bringing up a development environment for the first time involves
downloading many packages from the Debian archive. The Debian cloud
images use the global mirror `http://deb.debian.org/debian` by
downloading many packages from the Ubuntu archive. The Ubuntu cloud
images use the global mirror `http://archive.ubuntu.com/ubuntu/` by
default, but you may find that you can speed up the download by using
a local mirror closer to your location. To do this, create
`~/.zulip-vagrant-config` and add a line like this, replacing the URL
as appropriate:
```text
DEBIAN_MIRROR http://ftp.us.debian.org/debian
UBUNTU_MIRROR http://us.archive.ubuntu.com/ubuntu/
```
### Specifying a proxy

View File

@ -4,9 +4,8 @@ To run a Zulip server, you will need:
- A dedicated machine or VM
- A supported OS:
- Ubuntu 20.04 Focal
- Debian 11 Bullseye
- Debian 10 Buster
- Ubuntu 20.04
- Debian 11
- At least 2 GB RAM, and 10 GB disk space
- If you expect 100+ users: 4 GB RAM, and 2 CPUs
- If you intend to [upgrade from Git][upgrade-from-git]: 3 GB RAM, or
@ -33,8 +32,8 @@ on issues you'll encounter](install-existing-server.md).
#### Operating system
Ubuntu 20.04 Focal, Debian 11 Bullseye, and Debian 10
Buster are supported for running Zulip in production. You can also
Ubuntu 20.04 and Debian 11
are supported for running Zulip in production. You can also
run Zulip on other platforms that support Docker using
[docker-zulip][docker-zulip-homepage].

View File

@ -413,7 +413,9 @@ instructions for other supported platforms.
### Upgrading from Debian 10 to 11
1. Upgrade your server to the latest Zulip `4.x` release.
1. Upgrade your server to the latest `5.x` release. You can only
upgrade to Zulip Server 6.0 and newer after completing this
process, since newer releases don't support Debian 10.
2. As the Zulip user, stop the Zulip server and run the following
to back up the system:
@ -464,7 +466,7 @@ instructions for other supported platforms.
/home/zulip/deployments/current/scripts/setup/reindex-textual-data --force
```
7. As an additional step, you can also [upgrade the postgresql version](#upgrading-postgresql).
7. As an additional step, you can also [upgrade the PostgreSQL version](#upgrading-postgresql).
### Upgrading from Debian 9 to 10
@ -519,7 +521,7 @@ instructions for other supported platforms.
be able to navigate to its URL and confirm everything is working
correctly.
6. [Upgrade to the latest Zulip release](#upgrading-to-a-release), now
6. [Upgrade to the latest `5.x` release](#upgrading-to-a-release), now
that your server is running a supported operating system.
7. Debian 10 has a different version of the low-level glibc
@ -537,6 +539,9 @@ instructions for other supported platforms.
/home/zulip/deployments/current/manage.py audit_fts_indexes
```
9. [Upgrading from Debian 10 to 11](#upgrading-from-debian-10-to-11),
so that you are running a supported operating system.
## Upgrading PostgreSQL
Starting with Zulip 3.0, we use the latest available version of

View File

@ -120,8 +120,8 @@ extension, used by our [full-text search](full-text-search.md).
## Python packages
Zulip uses the version of Python itself provided by the host OS for
the Zulip server. We currently support Python 3.7 and newer, with
Debian 10 being the platform requiring 3.7 support. The comments
the Zulip server. We currently support Python 3.8 and newer, with
Ubuntu 20.04 being the platform requiring 3.8 support. The comments
in `.github/workflows/zulip-ci.yml` document the Python versions used
by each supported platform.

View File

@ -613,16 +613,8 @@ importlib-metadata==4.11.3 ; python_version < "3.10" \
# via
# -r requirements/common.in
# -r requirements/mypy.in
# click
# cssutils
# jsonpickle
# jsonschema
# markdown
# moto
# pep517
# redis
# sphinx
# sqlalchemy
# zulip-bots
importlib-resources==5.4.0 ; python_version < "3.9" \
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
@ -1966,34 +1958,6 @@ twisted==22.2.0 \
# via
# -r requirements/dev.in
# scrapy
typed-ast==1.5.2 \
--hash=sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e \
--hash=sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344 \
--hash=sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266 \
--hash=sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a \
--hash=sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd \
--hash=sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d \
--hash=sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837 \
--hash=sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098 \
--hash=sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e \
--hash=sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27 \
--hash=sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b \
--hash=sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596 \
--hash=sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76 \
--hash=sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30 \
--hash=sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4 \
--hash=sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78 \
--hash=sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca \
--hash=sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985 \
--hash=sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb \
--hash=sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88 \
--hash=sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7 \
--hash=sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5 \
--hash=sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e \
--hash=sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7
# via
# black
# mypy
typeguard==2.13.3 \
--hash=sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4 \
--hash=sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1
@ -2105,16 +2069,10 @@ typing-extensions==4.1.1 \
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
# via
# -r requirements/common.in
# argon2-cffi
# arrow
# asgiref
# async-timeout
# black
# boto3-stubs
# botocore-stubs
# importlib-metadata
# libcst
# markdown-it-py
# mypy
# mypy-boto3-s3
# myst-parser
@ -2277,7 +2235,6 @@ zipp==3.7.0 \
# via
# importlib-metadata
# importlib-resources
# pep517
zope.interface==5.4.0 \
--hash=sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192 \
--hash=sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702 \

View File

@ -208,10 +208,7 @@ sphinxcontrib-serializinghtml==1.1.5 \
typing-extensions==4.1.1 \
--hash=sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42 \
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
# via
# importlib-metadata
# markdown-it-py
# myst-parser
# via myst-parser
urllib3==1.26.9 \
--hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
--hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e

View File

@ -78,9 +78,7 @@ greenlet==1.1.2 \
importlib-metadata==4.11.3 ; python_version < "3.10" \
--hash=sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6 \
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
# via
# -r requirements/mypy.in
# sqlalchemy
# via -r requirements/mypy.in
lxml-stubs==0.4.0 \
--hash=sha256:184877b42127256abc2b932ba8bd0ab5ea80bd0b0fee618d16daa40e0b71abee \
--hash=sha256:3b381e9e82397c64ea3cc4d6f79d1255d015f7b114806d4826218805c10ec003
@ -165,32 +163,6 @@ tomli==2.0.1 \
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
# via mypy
typed-ast==1.5.2 \
--hash=sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e \
--hash=sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344 \
--hash=sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266 \
--hash=sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a \
--hash=sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd \
--hash=sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d \
--hash=sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837 \
--hash=sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098 \
--hash=sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e \
--hash=sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27 \
--hash=sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b \
--hash=sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596 \
--hash=sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76 \
--hash=sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30 \
--hash=sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4 \
--hash=sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78 \
--hash=sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca \
--hash=sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985 \
--hash=sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb \
--hash=sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88 \
--hash=sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7 \
--hash=sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5 \
--hash=sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e \
--hash=sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7
# via mypy
types-beautifulsoup4==4.10.16 \
--hash=sha256:903d20430df659e98ea5063c013b9219d91861ecef145a0ac63061f0aad63d7b \
--hash=sha256:b48fa153ddfeb4c338f83ac8510de0085cf6e1a221b4adf9e52d9d6349205fda
@ -299,7 +271,6 @@ typing-extensions==4.1.1 \
# via
# boto3-stubs
# botocore-stubs
# importlib-metadata
# mypy
# mypy-boto3-s3
# sqlalchemy2-stubs

View File

@ -422,12 +422,7 @@ importlib-metadata==4.11.3 ; python_version < "3.10" \
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
# via
# -r requirements/common.in
# click
# cssutils
# jsonschema
# markdown
# redis
# sqlalchemy
# zulip-bots
importlib-resources==5.4.0 ; python_version < "3.9" \
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
@ -1308,10 +1303,6 @@ typing-extensions==4.1.1 \
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
# via
# -r requirements/common.in
# argon2-cffi
# asgiref
# async-timeout
# importlib-metadata
# mypy-boto3-s3
# redis
# zulip

View File

@ -212,7 +212,7 @@ if [ -f /etc/os-release ]; then
fi
case "$os_id $os_version_id" in
'debian 10' | 'debian 11' | 'ubuntu 20.04') ;;
'debian 11' | 'ubuntu 20.04') ;;
*)
set +x
cat <<EOF
@ -220,9 +220,8 @@ case "$os_id $os_version_id" in
Unsupported OS release: $os_id $os_version_id
Zulip in production is supported only on:
- Debian 10 "buster"
- Debian 11 "bullseye"
- Ubuntu 20.04 LTS "focal"
- Debian 11
- Ubuntu 20.04 LTS
For more information, see:
https://zulip.readthedocs.io/en/latest/production/requirements.html

View File

@ -64,6 +64,7 @@ UNSUPPORTED_DISTROS = [
("ubuntu", "16.04"),
("ubuntu", "18.04"),
("debian", "9"),
("debian", "10"),
]
distro_info = parse_os_release()
vendor = distro_info["ID"]
@ -165,7 +166,6 @@ if os.path.exists("/etc/init.d/postgresql"):
postgresql_version = get_config(config_file, "postgresql", "version")
if not postgresql_version:
default_postgresql_version = {
("debian", "10"): "11",
("debian", "11"): "13",
("ubuntu", "20.04"): "12",
("ubuntu", "22.04"): "14",

View File

@ -1,5 +0,0 @@
deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main
deb-src http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main
deb http://apt-archive.postgresql.org/pub/repos/apt/ buster-pgdg-archive main
deb-src http://apt-archive.postgresql.org/pub/repos/apt/ buster-pgdg-archive main

View File

@ -258,7 +258,7 @@ After running the above command, you should see something similar to:
Using `manage.py` from within the Zulip development environment:
```console
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
./manage.py send_webhook_fixture_message \
--fixture=zerver/webhooks/helloworld/fixtures/hello.json \
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
@ -384,7 +384,7 @@ Once you have written some tests, you can run just these new tests from within
the Zulip development environment with this command:
```console
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
./tools/test-backend zerver/webhooks/helloworld
```
@ -433,7 +433,7 @@ stream name:
To trigger a notification using this webhook, use
`send_webhook_fixture_message` from the Zulip command line:
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
./manage.py send_webhook_fixture_message \
--fixture=zerver/tests/fixtures/helloworld/hello.json \
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=&lt;api_key&gt;'

View File

@ -1,7 +1,7 @@
# To build these production upgrade test images, say a Debian 10 Buster system
# To build these production upgrade test images, say an Ubuntu 20.04 Focal system
# preinstalled with Zulip 3.4:
# docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:buster --build-arg=VERSION=3.4 --tag=zulip/ci:buster-3.4
# docker push zulip/ci:buster-3.4
# docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:focal --build-arg=VERSION=3.4 --tag=zulip/ci:focal-3.4
# docker push zulip/ci:focal-3.4
ARG BASE_IMAGE
FROM $BASE_IMAGE

View File

@ -3,8 +3,7 @@ set -eux
cd "$(dirname "${BASH_SOURCE[0]}")"
docker build . --build-arg=BASE_IMAGE=ubuntu:20.04 --pull --tag=zulip/ci:focal
docker build . --build-arg=BASE_IMAGE=ubuntu:22.04 --pull --tag=zulip/ci:jammy
docker build . --build-arg=BASE_IMAGE=debian:10 --pull --tag=zulip/ci:buster
docker build . --build-arg=BASE_IMAGE=debian:11 --pull --tag=zulip/ci:bullseye
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:buster --build-arg=VERSION=3.4 --tag=zulip/ci:buster-3.4
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:focal --build-arg=VERSION=3.4 --tag=zulip/ci:focal-3.4
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=4.11 --tag=zulip/ci:bullseye-4.11
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=5.1 --tag=zulip/ci:bullseye-5.1

View File

@ -79,9 +79,7 @@ except OSError:
distro_info = parse_os_release()
vendor = distro_info["ID"]
os_version = distro_info["VERSION_ID"]
if vendor == "debian" and os_version == "10": # buster
POSTGRESQL_VERSION = "11"
elif vendor == "debian" and os_version == "11": # bullseye
if vendor == "debian" and os_version == "11": # bullseye
POSTGRESQL_VERSION = "13"
elif vendor == "ubuntu" and os_version == "20.04": # focal
POSTGRESQL_VERSION = "12"

View File

@ -19,7 +19,7 @@ fi
os="$(. /etc/os-release && echo "$ID $VERSION_ID")"
case "$os" in
'ubuntu 14.04' | 'ubuntu 16.04' | 'ubuntu 18.04')
'ubuntu 14.04' | 'ubuntu 16.04' | 'ubuntu 18.04' | 'debian 10')
echo "Error: $os is no longer a supported platform for Zulip." >&2
if [ -e /home/vagrant ]; then
# shellcheck disable=SC2016
@ -32,8 +32,8 @@ esac
python_version="$(python3 --version)"
case "$python_version" in
Python\ 3.[0-6].*)
echo 'Error: Zulip requires an OS with Python 3.7 or later.' >&2
Python\ 3.[0-7].*)
echo 'Error: Zulip requires an OS with Python 3.8 or later.' >&2
exit 1
;;
esac

View File

@ -1,12 +1,18 @@
FROM debian:10
FROM ubuntu:20.04
ARG DEBIAN_MIRROR
ARG UBUNTU_MIRROR
# Basic packages and dependencies of docker-systemctl-replacement
RUN echo locales locales/default_environment_locale select C.UTF-8 | debconf-set-selections \
&& echo locales locales/locales_to_be_generated select "C.UTF-8 UTF-8" | debconf-set-selections \
&& { [ ! "$DEBIAN_MIRROR" ] || sed -i "s|http://\(\w*\.\)*\.debian\.org/debian |$DEBIAN_MIRROR |" /etc/apt/sources.list; } \
&& apt-get update \
&& { [ ! "$UBUNTU_MIRROR" ] || sed -i "s|http://\(\w*\.\)*archive\.ubuntu\.com/ubuntu/\? |$UBUNTU_MIRROR |" /etc/apt/sources.list; } \
# This restores man pages and other documentation that have been
# stripped from the default Ubuntu cloud image and installs
# ubuntu-minimal and ubuntu-standard.
#
# This makes sense to do because we're using this image as a
# development environment, not a minimal production system.
&& printf 'y\n\n' | unminimize \
&& apt-get install --no-install-recommends -y \
ca-certificates \
curl \
@ -32,13 +38,7 @@ RUN \
&& mkdir -p /run/sshd \
# docker-systemctl-replacement doesnt work with template units yet:
# https://github.com/gdraheim/docker-systemctl-replacement/issues/62
&& ln -ns /lib/systemd/system/postgresql@.service /etc/systemd/system/multi-user.target.wants/postgresql@11-main.service \
# redis fails to start with the default configuration if IPv6 is disabled:
# https://github.com/antirez/redis/pull/5598
&& dpkg-divert --add --rename /etc/default/redis-server \
&& printf 'ULIMIT=65536\nDAEMON_ARGS="/etc/redis/redis.conf --bind 127.0.0.1"\n' > /etc/default/redis-server \
&& mkdir /etc/systemd/system/redis-server.service.d \
&& printf '[Service]\nExecStart=\nExecStart=/usr/bin/redis-server /etc/redis/redis.conf --bind 127.0.0.1\n' > /etc/systemd/system/redis-server.service.d/override.conf \
&& ln -ns /lib/systemd/system/postgresql@.service /etc/systemd/system/multi-user.target.wants/postgresql@12-main.service \
# Set up the vagrant user and its SSH key (globally public)
&& useradd -ms /bin/bash -u "$VAGRANT_UID" vagrant \
&& mkdir -m 700 ~vagrant/.ssh \

View File

@ -48,4 +48,4 @@ API_FEATURE_LEVEL = 128
# historical commits sharing the same major version, in which case a
# minor version bump suffices.
PROVISION_VERSION = "185.0"
PROVISION_VERSION = "185.1"

View File

@ -17,7 +17,7 @@ integration](/api/incoming-webhooks-walkthrough).
`send_webhook_fixture_message` from a [Zulip development
environment](https://zulip.readthedocs.io/en/latest/development/overview.html):
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
./manage.py send_webhook_fixture_message \
> --fixture=zerver/tests/fixtures/helloworld/hello.json \
> '--url=http://localhost:9991/api/v1/external/helloworld?api_key=&lt;api_key&gt;'