-
Notifications
You must be signed in to change notification settings - Fork 1.2k
ci: use windows 2025 runners #7048
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
ci: use windows 2025 runners #7048
Conversation
acc22ee to
22393f5
Compare
|
So, the Windows globalisation implementation doesn't work on latest windows AND the ICU alternative fails too, weirdly the test runner seems to be crashing out after one of the fails rather than finishing and saying how many tests failed.... that is awkward. A couple of test fails look like things that are may be fairly easily fixable e.g. ICU version mismatches to amend tests for or inconsistent conditions in the test suite that expect windows to not be ICU etc. Hopefully it's not overall too big a job but I have no setup I can work on this on. |
|
I'll look into this in the next view weeks |
22393f5 to
659a32f
Compare
|
The windows-2019 test runners are now disabled.... So all CI runs now fail. |
`windows-2019` → `windows-2022`
efab8ed to
4135302
Compare
| <BuildChakraICUData Condition="'$(BuildChakraICUData)'=='' AND ('$(ChakraICU)'=='static' OR '$(ChakraICU)'=='shared')">true</BuildChakraICUData> | ||
|
|
||
| <IcuLibraryDependencies Condition="'$(ChakraICU)'=='windows'">icuuc.lib;icuin.lib</IcuLibraryDependencies> | ||
| <IcuLibraryDependencies Condition="'$(ChakraICU)'=='windows'">icu.lib</IcuLibraryDependencies> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be possible to do version detection and build with the older libs if someone is building on older windows? I know we can't test it but may be helpful to someone.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you decide to support this config I could add another build-flag or detect the config based on the current windows version.
| "constructor": "function <large string>", | ||
| "resolvedOptions": "function <large string>", | ||
| "compare": "function <large string>" | ||
| "compare": "Error <large string>" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure why these results changed...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are we running this on linux/macOS as well?
I.e. is the windows change bringing windows in line with the other platforms?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this test was WinGlob-only but now is running on all platforms.
This baseline is generated by the debugger so there might be an issue with that?
4135302 to
18eaa7e
Compare
a240230 to
a931ead
Compare
|
@ppenzin What do you think? This fixes INTL on windows newer than the May 2019 Update but breaks it on older versions - though the key change is just build config we could perhaps document how to build the older version? |
rhuanjl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the work on this. Hoping we'll merge it within a week though I have a few questions - see comments.
| "constructor": "function <large string>", | ||
| "resolvedOptions": "function <large string>", | ||
| "compare": "function <large string>" | ||
| "compare": "Error <large string>" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are we running this on linux/macOS as well?
I.e. is the windows change bringing windows in line with the other platforms?
| equal("de-DE-u-co-kn", "de-DE-u-co-yes-kn-true", gcl("de-de-u-kn-co")[0]); | ||
| equal("de-DE-u-co-phonebk-kn", "de-DE-u-co-phonebk-kn-true", gcl("de-de-u-kn-co-phonebk")[0]); | ||
| equal("de-DE-u-co-phonebk-kn-yes", "de-DE-u-co-phonebk-kn-true", gcl("de-DE-u-kn-yes-co-phonebk")[0]); | ||
| if (WScript.Platform.ICU_VERSION < 62) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are we only testing this on old versions of ICU? Is this behaviour wrong or broken on new ICU?
Same point below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was actually broken in old icu version and behaving as expected using WinGlob.
See #4490
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this being used as an always false condition to avoid testing broken behaviour?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The correct behavior is tested in the else branch.
Before these tests used a custom equals function that tested the correct behavior for WinGlob and the wrong behavior for libicu. I guess this is why the exclude_icu62AndAboveTestFailures was added.
I still kept the old tests as CC technically still supports this version of libicu.
I deduce the condition from the flag name (exclude_icu62AndAboveTestFailures); so it maybe should be <= 62?
| "functionCallsReturn": { | ||
| "[get format returned]": "function <large string>", | ||
| "[Intl.DateTimeFormat.prototype.format returned]": "string 2/1/2000" | ||
| "[Intl.DateTimeFormat.prototype.format returned]": "string 2/1/2000" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What has changed here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The output contained bi-di markers which normally aren't used in locales like en-US.
This also seemed to be a WinGlob quirk:
ChakraCore/test/Intl/rlexe.xml
Lines 84 to 88 in 792ee76
| <default> | |
| <compile-flags> -Intl -debugLaunch -dbgbaseline:IntlReturnedValueTests.js.dbg.baseline</compile-flags> | |
| <files>IntlReturnedValueTests.js</files> | |
| <tags>Intl,require_winglob</tags> <!-- require_winglob because the baseline contains embedded bi-di markers --> | |
| </default> |
| if (NO_ICU) | ||
| set(TEST_ICU --not-tag exclude_noicu) | ||
| elseif (NOT EMBED_ICU) | ||
| set(TEST_ICU --not-tag exclude_icu62AndAboveTestFailures) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Have you removed all uses of this flag?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. This flag was only used for NumberFormat.js and GetCanonicalLocales.js (two of the tests that were failing initially)
| <BuildChakraICUData Condition="'$(BuildChakraICUData)'=='' AND ('$(ChakraICU)'=='static' OR '$(ChakraICU)'=='shared')">true</BuildChakraICUData> | ||
|
|
||
| <IcuLibraryDependencies Condition="'$(ChakraICU)'=='windows'">icuuc.lib;icuin.lib</IcuLibraryDependencies> | ||
| <IcuLibraryDependencies Condition="'$(ChakraICU)'=='windows'">icu.lib</IcuLibraryDependencies> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be possible to do version detection and build with the older libs if someone is building on older windows? I know we can't test it but may be helpful to someone.
| } | ||
|
|
||
| #if defined(ICU_VERSION) && ICU_VERSION >= 61 | ||
| #if !defined(ICU_VERSION) || ICU_VERSION >= 61 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this condition ever going to be false now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code guards the usage of apis that were not available before icu < 61.
Windows icu does not expose a compile-time ICU_VERSION as the exact version is dependent on the windows version at runtime. Instead available apis are determined based on the windows version CC is compiled against.
ChakraCore/lib/Runtime/PlatformAgnostic/ChakraICU.h
Lines 9 to 18 in 792ee76
| #ifdef HAS_ICU | |
| #ifdef WINDOWS10_ICU | |
| // if WINDOWS10_ICU is defined, pretend like we are building for recent Redstone, | |
| // even if that isn't necessarily true | |
| #pragma push_macro("NTDDI_VERSION") | |
| #undef NTDDI_VERSION | |
| #define NTDDI_VERSION NTDDI_WIN10_RS5 | |
| #include <icu.h> | |
| #pragma pop_macro("NTDDI_VERSION") | |
| #else // ifdef WINDOWS10_ICU |
The idea is: Run the new code on
icu >= 61 if we know the version at built-time else assume the newer apis are available (on windows).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So if we build on windows ICU_VERSION will be undefined? And therefore this condition will be true?
Please could you add a comment to explain that as it's a little counter intuitive. (Same for the equivalent condition below)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So if we build on windows ICU_VERSION will be undefined? And therefore this condition will be true?
Exactely
Please could you add a comment to explain that as it's a little counter intuitive. (Same for the equivalent condition below)
Sure: 1684f20
windows-2019actions are unsupported as of 30.06.2025.This PR updates the ci-config to run on the supported versions of the windows runner:
windows-2022→windows-2025windows-2019→windows-2022💥 Breaking changes
This config is broken on recent versions of Windows 11 as CC does not initialize WinRT using RoInitialize to allow for some optimizations.
This removes compat of the default config with all windows versions < Version 1903 (May 2019 Update)
Should be fine as Windows 10 is out-of-support anyway...
🧪 Tests
win32 => WinGlob; that is obviously wrong now.The "new" behavior is consistent with recent node.js and bun.js
See actions/runner-images#12045
Fixes #7045
Fixes #4490