{{ message }}
Repository navigation
Fix: Load ICU 2026e tz data so Canadian schedules stay on time - #18507
Merged
Merged
Conversation
Node 22.15.1 ships tz 2025a, so BullMQ workflow schedules in Vancouver, Edmonton, Inuvik and Winnipeg fire an hour late from 1 Nov 2026. Load ICU 2026e zone files via ICU_TIMEZONE_FILES_DIR and fail the build if stale tz data is still active. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
The AMI installs Node via nvm and runs the server under systemd, so it never saw the Dockerfile override. Copy the vendored zone files during the AMI build, set ICU_TIMEZONE_FILES_DIR in nest.service, and fail the build on stale tz data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 tasks done
akshaysasidrn
approved these changes
Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

📝 What this does
Our images bundle Node 22.15.1, which carries tz 2025a, so workflow schedules in Vancouver, Edmonton, Inuvik and Winnipeg fire an hour late from 1 Nov 2026, when BC, Alberta, Manitoba and the NWT stop falling back.
This loads ICU 2026e time-zone data on top of Node's bundled data in every runtime image and the EC2 AMI, without a risky Node bump. Same change for
main: #18508.🔀 Changes
ICU_TIMEZONE_FILES_DIRin all 10 runtime Dockerfiles and the EC2 AMI's systemd unit🛡️ Merge impact: 🟢 reversible
ee-try-tooljet*through their base image, and the EC2 AMI. Only time-zone offsets change, and only for zones with rule changes after 2025a.🏗️ Architecture
🧪 How to test
getNextMillis('0 9 * * *')for the four zones on Node 22.15.1, with and without the overridelinux/amd64node:22.15.1-bookwormimage with the override blocknode -p process.versions.tzin it (2026e)systemctl show nest -p EnvironmentincludesICU_TIMEZONE_FILES_DIR0 9 * * *workflow inAmerica/Winnipegon that image, and confirm the first run after 1 Nov is 14:00Z (clock faked; not yet seen firing on 1 Nov)🧾 Evidence
Before: BullMQ 5.77.6, Node 22.15.1, first run after 2026-12-14T00:00Z: Vancouver 17:00Z, Edmonton 16:00Z, Inuvik 16:00Z, Winnipeg 15:00Z (all one hour late)
After: same call with the override in a
linux/amd64container: Vancouver 16:00Z, Edmonton 15:00Z, Inuvik 15:00Z, Winnipeg 14:00Z. October results unchanged.CI image: manual Docker build run 39557631270 built
ee-production.Dockerfileatf01a402649; the tz check step ran and passed. The follow-up commit only changes the comment in this file.Real schedule on that image: a
0 9 * * *schedule inAmerica/Winnipegcreated through the API is stored in Redis with pattern0 9 * * *and tzAmerica/Winnipeg, next run2026-10-21T14:00Z(09:00 CDT). In the container, Node reportstz=2026eandICU_TIMEZONE_FILES_DIR=/usr/local/share/icu-tz.After 1 Nov, clock faked: the same
upsertJobScheduler({ pattern, tz })call, using the image's own BullMQ and Redis on a throwaway queue:Build check without override:
Error: stale tz data: 2025a, exit 1File sha256 (unicode-org/icu-data tzdata/icunew/2026e/44/le):
5b484c7f02c99d5164208ce84e18fba67c6314d77cf60503e2b19f708b66c6dametaZones.res5e77ce5afb7374a36cbe3be197d0a6deaa919e6f672c2a372f7a9d91b7f8534ftimezoneTypes.resb8c3a7adb94fd659f8203ee4af4dc72a4e6b14566baac1855c493096f337184bwindowsZones.res5a168fb78cccfc872f9a50e91facf0bf8b7204a6c4f92fe5c64a8165e9e62448zoneinfo64.res