zulip/tools
Anders Kaseorg 0409e4823f settings: Compute time zone UTC offsets on the client.
Commit b0844109ca “settings: Show UTC
offsets in timezone dropdown” (#33609) baked a fixed UTC offset for
each time zone into the generated timezones.json at installation time.
UTC offsets are not constants: they change with daylight saving
time (and tzdata updates), so the baked values were wrong for much of
the year.  The Python formatting was also incorrect for zones with
negative fractional-hour offsets (divmod rounds toward negative
infinity, so America/St_Johns at UTC-03:30 rendered as UTC-4:30).

Revert the generated file to a plain list of names, and compute each
offset in the web app when the picker is rendered, reusing the
UTC±HH:MM formatting that message timestamp tooltips use.  Computing
all 446 offsets takes ~50ms the first time and ~1ms once @date-fns/tz
has cached its formatters.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2026-07-05 11:24:32 -07:00
..
ci ci: Pin Docker base images to linux/amd64. 2026-05-21 23:50:45 +08:00
documentation_crawler dependencies: Upgrade JavaScript dependencies. 2026-05-13 14:20:32 -07:00
droplets droplets: Replace dict[str, Any] with list[str] in create.py. 2026-03-03 10:29:15 -08:00
i18n sync-translations: Handle the case of no *.mo files. 2026-02-03 10:22:55 -08:00
lib provision: Install Java ≥ 17. 2026-05-13 14:20:32 -07:00
linter_lib narrow: Rewrite message-fetch query using Django ORM. 2026-06-08 13:53:24 +05:30
node_lib web: Set "type": "module" and convert various CJS files to ESM. 2024-11-13 09:18:56 -08:00
oneclickapps ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
screenshots upload: Resolve avatar upload content type in the callers. 2026-06-18 14:26:23 +05:30
setup settings: Compute time zone UTC offsets on the client. 2026-07-05 11:24:32 -07:00
test-install Remove support for Ubuntu 20.04 and Debian 11. 2024-04-01 13:27:39 -07:00
tests tools: Enforce '_html' suffix for unescaped hbs vars. 2025-08-28 17:33:20 -07:00
zulip-export message: Remove unused recipient_id. 2025-09-09 09:20:40 -07:00
__init__.py
backport-all-prs backport-all-prs: Derive backport branch from unmerged tags. 2026-04-05 20:55:51 -07:00
backport-pull-request backport: Give a sensible error when trying to backport an unmerged PR. 2026-05-18 22:33:17 -04:00
build-demo-organization-wordlist demo-orgs: Get word list for demo subdomains from jitsi js-utils repo. 2025-12-11 10:22:49 -08:00
build-docs
build-help-center help: Serve help center build without relative links for zulip.com. 2025-09-03 09:28:15 -07:00
build-release-tarball provision: Use uv sync --no-managed-python. 2026-03-25 04:05:47 -07:00
cache-zulip-git-version
check-capitalization python: Mark regexes as raw strings. 2024-04-26 12:30:31 -07:00
check-feature-level-updated github_actions: Check if feature levels are updated in API docs. 2025-07-09 09:33:55 -07:00
check-frontend-i18n docs: Explain web app translations before server, and use those terms. 2025-01-31 14:32:47 -08:00
check-issue-labels ruff: Fix PLC1802 len(…) used as condition without comparison. 2025-03-14 17:31:50 -07:00
check-openapi.ts dependencies: Upgrade JavaScript dependencies. 2026-04-17 15:39:27 -07:00
check-provision
check-schemas event_types: Rename EventX classes to XEvent. 2026-05-26 16:35:37 -07:00
check-templates shared: Move icons to web/images/icons. 2025-11-14 10:19:12 -08:00
check-thirdparty
clean-branches
closed-by-commits closed-by-commit: Broaden validation of Github secret tokens. 2025-11-20 23:13:46 -05:00
commit-message-lint
commit-msg
conf.ini-template
coveragerc async_utils: Skip NoAutoCreateEventLoopPolicy on Python ≥ 3.14. 2026-04-22 22:00:04 -07:00
create-api-changelog tools: Update docs for create-api-changelog tool. 2025-05-21 12:04:45 -07:00
deploy-branch
diagnose Vagrantfile: Share the checkout at the host’s path. 2026-04-23 09:18:20 -07:00
documentation.vnufilter dependencies: Upgrade JavaScript dependencies. 2026-01-12 18:31:52 -08:00
duplicate_commits.json
fetch-contributor-data install: Remove --cacert and CUSTOM_CA_CERTIFICATES. 2025-02-24 22:29:24 -08:00
fetch-pull-request
fetch-rebase-pull-request
find-unused-css
github-changes-contain-file tools: Fix a linter issue caught by semgrep. 2025-10-23 14:33:58 -07:00
lint shared: Remove @zulip/shared packaging files. 2025-11-12 15:28:14 -08:00
merge-api-changelogs tools: Add support for viewing updated changelog for testing. 2025-07-02 11:34:34 -07:00
notify-if-api-docs-changed tools: Check if feature level is changed before sending message. 2025-11-07 10:11:16 -08:00
pre-commit Vagrantfile: Share the checkout at the host’s path. 2026-04-23 09:18:20 -07:00
provision requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
push-to-pull-request push-to-pull-request: Accept intermixed options and arguments again. 2024-02-01 17:08:44 -08:00
python-warnings.bash python-warnings: Update glom SyntaxWarning pattern for Python 3.14. 2026-04-22 22:00:04 -07:00
README.md docs: Update links in README files for moved directory-structure. 2026-05-13 18:01:30 +05:30
rebuild-dev-database
rebuild-test-database populate_db: Add attachments in messages. 2026-05-29 09:06:22 +05:30
release release: Parse version.py using the language it was written in. 2024-07-25 13:17:49 -07:00
release-tarball-exclude.txt help: Include dist in release tarball and exclude source code. 2025-10-01 13:10:13 -07:00
renumber-migrations renumber-migrations: Print current HEAD before amending prior commits. 2026-05-30 23:15:16 +08:00
reset-to-pull-request
review ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
run-codespell demo-orgs: Get word list for demo subdomains from jitsi js-utils repo. 2025-12-11 10:22:49 -08:00
run-dev Revert "run-dev: Abbreviate error message when receiving an https request." 2026-04-23 14:37:30 -07:00
run-mypy ruff: Fix SIM905 Consider using a list literal instead of str.split. 2025-03-14 17:31:50 -07:00
run-tsc tooling: Enable strict shell mode in selected scripts. 2026-01-21 09:53:52 -08:00
semgrep-py.yml queries: Always pass no_key kwarg explicitly to select_for_update. 2026-03-02 15:15:40 -08:00
setup-git-repo tooling: Enable strict shell mode in selected scripts. 2026-01-21 09:53:52 -08:00
show-profile-results
stop-run-dev
tail-ses ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test-all workflows: Remove ignores for check-capitalization, check-frontend-i18n. 2026-04-27 15:24:22 -07:00
test-api test-api: Reset uploaded realm emoji for realm export tests. 2026-04-24 10:57:05 -07:00
test-backend message_summary: Replace litellm with the OpenAI Python SDK. 2026-05-07 16:18:53 -07:00
test-documentation ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
test-help-documentation documentation_crawler: Remove wrongly inverted skip_check_fragment flag. 2025-09-03 16:21:23 -07:00
test-js-with-node test-js-with-node: Remove user_groups.ts from EXEMPT_FILES. 2026-06-04 11:43:36 +05:30
test-js-with-puppeteer install-node: Upgrade Node.js from 22.17.1 to 22.18.0. 2025-08-14 21:37:50 -07:00
test-migrations
test-queue-worker-reload ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
test-run-dev ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
test-tools requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
total-contributions total-contributions: Use a more complete set of repositories. 2025-10-02 12:11:43 -07:00
update-prod-static ui_init: Show unsupported browser warning on load. 2026-01-12 16:34:54 -08:00
update-zuliprc-api-field
upload-release python: Simplify with str.removeprefix, str.removesuffix. 2024-09-03 12:30:16 -07:00
webpack webpack: Pass --allowed-hosts as separate flags. 2026-05-08 19:06:46 -07:00
zanitizer
zanitizer_config.pm.sample

This directory contains scripts that are used in building, managing, testing, and other forms of work in a Zulip development environment. Note that tools that are also useful in production belong in scripts/ or should be Django management commands.

For more details, see https://zulip.readthedocs.io/en/latest/subsystems/directory-structure.html.