Skip to content

Commit

Permalink
tools: add timezone update workflow
Browse files Browse the repository at this point in the history
Fixes: #43134
PR-URL: #43988
Reviewed-By: Steven R Loomis <srloomis@us.ibm.com>
  • Loading branch information
98lenvi authored and juanarbol committed Oct 11, 2022
1 parent f13e06a commit d190e71
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/timezone-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Timezone update
on:
schedule:
# Run once a week at 00:05 AM UTC on Sunday.
- cron: 5 0 * * 0

workflow_dispatch:

jobs:
timezone_update:
if: github.repository == 'nodejs/node'
runs-on: ubuntu-latest

steps:
- name: Checkout nodejs/node
uses: actions/checkout@v3
with:
persist-credentials: false

- name: Checkout unicode-org/icu-data
uses: actions/checkout@v3
with:
path: icu-data
persist-credentials: false
repository: unicode-org/icu-data

- run: ./tools/update-timezone.mjs

- name: Open Pull Request
uses: gr2m/create-or-update-pull-request-action@6720400cad8e74d7adc64640e4e6ea6748b83d8f # Create a PR or update the Action's existing PR
env:
GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
with:
author: Node.js GitHub Bot <github-bot@iojs.org>
body: |
This PR was generated by tools/timezone-update.yml.
Updates the ICU files as per the instructions present in https://github.com/nodejs/node/blob/main/doc/contributing/maintaining-icu.md#time-zone-data
To test, build node off this branch & log the version of tz using
```js
console.log(process.versions.tz)
```
branch: actions/timezone-update
commit-message: 'deps: update timezone'
labels: dependencies
title: 'deps: update timezone'
reviewers: \@nodejs/i18n-api
39 changes: 39 additions & 0 deletions tools/update-timezone.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env node
// Usage: tools/update-timezone.mjs
import { execSync, spawnSync } from 'node:child_process';
import { renameSync, readdirSync, rmSync } from 'node:fs';
import { exit } from 'node:process';

const fileNames = [
'zoneinfo64.res',
'windowsZones.res',
'timezoneTypes.res',
'metaZones.res',
];

const availableVersions = readdirSync('icu-data/tzdata/icunew', { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => dirent.name);

const currentVersion = process.versions.tz;
const latestVersion = availableVersions.sort().at(-1);

if (latestVersion === currentVersion) {
console.log(`Terminating early, tz version is latest @ ${currentVersion}`);
exit();
}

execSync('bzip2 -d deps/icu-small/source/data/in/icudt*.dat.bz2');
fileNames.forEach((file) => {
renameSync(`icu-data/tzdata/icunew/${latestVersion}/44/le/${file}`, `deps/icu-small/source/data/in/${file}`);
spawnSync(
'icupkg', [
'-a',
file,
'icudt*.dat',
], { cwd: 'deps/icu-small/source/data/in/' }
);
rmSync(`deps/icu-small/source/data/in/${file}`);
});
execSync('bzip2 -z deps/icu-small/source/data/in/icudt*.dat');
rmSync('icu-data', { recursive: true });

0 comments on commit d190e71

Please sign in to comment.