From fe1b9e09a845e24556f417553b4b434636fdd5ee Mon Sep 17 00:00:00 2001 From: Andrew Paprocki Date: Mon, 11 Nov 2019 20:08:20 -0500 Subject: [PATCH] doc: document ICU time zone data update process Updates the "Maintaining ICU" document and describes the process to update an existing ICU `.dat` file with updated binary time zone data files corresponding to new IANA `tzdata` releases. Requested in nodejs/node#30211 by @srl295 PR-URL: https://github.com/nodejs/node/pull/30364 Reviewed-By: James M Snell Reviewed-By: David Carlier Reviewed-By: Steven R Loomis --- doc/guides/maintaining-icu.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/doc/guides/maintaining-icu.md b/doc/guides/maintaining-icu.md index 593b7944f0782f..6dd8ebcef0048b 100644 --- a/doc/guides/maintaining-icu.md +++ b/doc/guides/maintaining-icu.md @@ -33,6 +33,41 @@ $ node -p process.versions } ``` +### Time Zone Data + +Time zone data files are updated independently of ICU CLDR data. ICU and its +main data files do not need to be upgraded in order to apply time zone data file +fixes. + +The [IANA tzdata](https://www.iana.org/time-zones) project releases new versions +and announces them on the [`tz-announce`](http://mm.icann.org/pipermail/tz-announce/) +mailing list. + +The Unicode project takes new releases and publishes +[updated time zone data files](https://github.com/unicode-org/icu-data/tree/master/tzdata/icunew) +in the icu/icu-data repository. + +All modern versions of Node.js use the version 44 ABI of the time zone data +files. + +#### Example: Updating the ICU `.dat` File + +* Decompress `deps/icu/source/data/in/icudt##l.dat.bz2`, where `##` is + the ICU major version number. +* Clone the icu/icu-data repository and copy the latest `tzdata` release `le` + files into the `source/data/in` directory. +* Follow the upstream [ICU instructions](http://userguide.icu-project.org/datetime/timezone) + to patch the ICU `.dat` file: + > `for i in zoneinfo64.res windowsZones.res timezoneTypes.res metaZones.res; + > do icupkg -a $i icudt*l.dat` +* Optionally, verify that there is only one of the above files listed when using + `icupkg -l`. +* Optionally, extract each file using `icupkg -x` and verify the `shasum` + matches the desired value. +* Compress the `.dat` file with the same filename as in the first step. +* Build, test, verifying `process.versions.tz` matches the desired version. +* Create a new minor version release. + ## Release Schedule ICU typically has >1 release a year, particularly coinciding with a major