Skip to content

Commit 4796ea1

Browse files
authored
Fix linking to fetch the libraries from Github (#877)
* Fix linking to fetch the libraries from Github * Merge branch 'main' into fetchDyLibsOnly * Set version * Only generate datagen and data files for static * Regenerate hashes * Add changelog * Add todo
1 parent b23879b commit 4796ea1

File tree

7 files changed

+102
-64
lines changed

7 files changed

+102
-64
lines changed

.github/workflows/intl4x_artifacts.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ jobs:
7777
dart run ffi/dart/tool/build_libs.dart bin/linux_riscv64_${{ matrix.compiletype }} linux_riscv64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
7878
dart run ffi/dart/tool/build_libs.dart bin/linux_x64_${{ matrix.compiletype }} linux_x64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
7979
80+
- name: Build Linux data
81+
if: matrix.os == 'ubuntu-latest' && matrix.compiletype == 'static'
82+
run: |
8083
cargo run -p icu_datagen -- --locales full --keys all --format blob --out bin/full.postcard
8184
8285
cd provider/datagen # avoid global feature resolution
@@ -108,6 +111,9 @@ jobs:
108111
dart run ffi/dart/tool/build_libs.dart bin/macos_arm64_${{ matrix.compiletype }} macos_arm64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
109112
dart run ffi/dart/tool/build_libs.dart bin/macos_x64_${{ matrix.compiletype }} macos_x64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
110113
114+
- name: Build Mac data
115+
if: matrix.os == 'macos-latest' && matrix.compiletype == 'static'
116+
run: |
111117
cd provider/datagen # avoid global feature resolution
112118
rustup target add aarch64-apple-darwin
113119
cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-apple-darwin
@@ -132,6 +138,9 @@ jobs:
132138
dart run ffi/dart/tool/build_libs.dart bin/windows_ia32_${{ matrix.compiletype }} windows_ia32 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
133139
dart run ffi/dart/tool/build_libs.dart bin/windows_x64_${{ matrix.compiletype }} windows_x64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }}
134140
141+
- name: Build Windows data
142+
if: matrix.os == 'windows-latest' && matrix.compiletype == 'static'
143+
run: |
135144
cd provider/datagen # avoid global feature resolution
136145
rustup target add aarch64-pc-windows-msvc
137146
cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-pc-windows-msvc

pkgs/intl4x/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.10.1
2+
3+
- Upgrade to new artifacts.
4+
15
## 0.10.0
26

37
- Upgrade minimum SDK to `3.6.0-0`.

pkgs/intl4x/hook/build.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,30 @@ final class FetchMode extends BuildMode {
7272

7373
@override
7474
Future<Uri> build() async {
75-
final target = '${config.targetOS}_${config.targetArchitecture}';
75+
final libraryType = 'dynamic'; //TODO: Add `static` when using link hooks.
76+
final target = [
77+
config.targetOS,
78+
config.targetArchitecture,
79+
libraryType,
80+
].join('_');
7681
final uri = Uri.parse(
7782
'https://github.com/dart-lang/i18n/releases/download/$version/$target');
7883
final request = await HttpClient().getUrl(uri);
7984
final response = await request.close();
8085
if (response.statusCode != 200) {
8186
throw ArgumentError('The request to $uri failed');
8287
}
83-
final dynamicLibrary = File.fromUri(
88+
final library = File.fromUri(
8489
config.outputDirectory.resolve(config.targetOS.dylibFileName('icu4x')));
85-
await dynamicLibrary.create();
86-
await response.pipe(dynamicLibrary.openWrite());
90+
await library.create();
91+
await response.pipe(library.openWrite());
8792

88-
final bytes = await dynamicLibrary.readAsBytes();
93+
final bytes = await library.readAsBytes();
8994
final fileHash = sha256.convert(bytes).toString();
90-
final expectedFileHash = fileHashes[(
91-
config.targetOS,
92-
config.targetArchitecture,
93-
)];
95+
final expectedFileHash =
96+
fileHashes[(config.targetOS, config.targetArchitecture, libraryType)];
9497
if (fileHash == expectedFileHash) {
95-
return dynamicLibrary.uri;
98+
return library.uri;
9699
} else {
97100
throw Exception(
98101
'The pre-built binary for the target $target at $uri has a hash of '

pkgs/intl4x/lib/src/hook_helpers/hashes.dart

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,69 @@
99

1010
import 'package:native_assets_cli/native_assets_cli.dart';
1111

12-
const fileHashes = <(OS, Architecture), String>{
13-
(OS.android, Architecture.arm):
12+
const fileHashes = <(OS, Architecture, String), String>{
13+
(OS.linux, Architecture.arm, 'dynamic'):
14+
'6ec82cb099ef709d1e8c66232d39f58c814a53774f48f8b64a764aae8f334b5d',
15+
(OS.linux, Architecture.arm, 'static'):
16+
'477bdc9b9fdf17a03a02e0c447c628589c5a4e60eeb4792d0906ad410965d7b9',
17+
(OS.linux, Architecture.arm64, 'dynamic'):
18+
'9a4949f77209adcf7791bf257684f953f89fb36bdb00c52ee54e14590436ba47',
19+
(OS.linux, Architecture.arm64, 'static'):
20+
'a66d606106a48abf85e226fde4ce3a91732bbbf5ac812b556acc84ded07f1f7d',
21+
(OS.linux, Architecture.riscv64, 'dynamic'):
22+
'9b85cf853f444efa5b3ef91a5768b57760033a2d4925abca6035db48a83809d1',
23+
(OS.linux, Architecture.riscv64, 'static'):
24+
'c24d54228c8def4df39130c8b29cc14efb80cf1b6aa53944d332371a910a495f',
25+
(OS.linux, Architecture.x64, 'dynamic'):
26+
'fd487400dcacb3b0c8feffcfec33badc0b9b5840d22d6a0005780dc85a48faa8',
27+
(OS.linux, Architecture.x64, 'static'):
28+
'e31df98b342f2d6704e3e5044d7fd98859d1503b20f70a71a1cb16ae0e7bf1fc',
29+
(OS.windows, Architecture.arm64, 'dynamic'):
30+
'57de333da821ab322d14292b60eef6d3718f526595e23256663381e9b4079ba3',
31+
(OS.windows, Architecture.arm64, 'static'):
32+
'3f4ab1d049a47be7cc5ae0ef5c0b31b8cd8fef48d9e5c2d786dc369bee8ae36a',
33+
(OS.windows, Architecture.ia32, 'dynamic'):
34+
'ac89af848d8fadc587f2b53622256b9a27424c4c8b8eeb984ce7653f8651f6b9',
35+
(OS.windows, Architecture.ia32, 'static'):
36+
'6a0faf438a90e0d815cd0ce0d7d9d5cd0149a966481641bceb3b6a1d64e02a52',
37+
(OS.windows, Architecture.x64, 'dynamic'):
38+
'fa8d4cf36dc0be244ddcae01822cda3561f87c7933c51667b9d7c95cee6ade0e',
39+
(OS.windows, Architecture.x64, 'static'):
40+
'220654958a23eab3e3d6307ed7bd834f49137dee7a21ae9b05ee6dc666277cfd',
41+
(OS.android, Architecture.arm, 'dynamic'):
1442
'a14fd80a9f3bf2a208a125d75a1b6a7315911f258df56ab1992c8b45c9d2d0e8',
15-
(OS.android, Architecture.arm64):
43+
(OS.android, Architecture.arm, 'static'):
44+
'3f3ba266a1f598e2caa794cb631c140251a6ad871580f67fe1498bce6352c234',
45+
(OS.android, Architecture.arm64, 'dynamic'):
1646
'6af7c598c2c271bf98742006a5fdc43d0298f2047e4db694c46d8cc433dbbdd0',
17-
(OS.android, Architecture.ia32):
47+
(OS.android, Architecture.arm64, 'static'):
48+
'48bd4c2b5358f7e66ecca8236bddf01e51fc31eb522fb1599a30e80180800495',
49+
(OS.android, Architecture.ia32, 'dynamic'):
1850
'e65d69207035123fb1d3fb2bb50427720da7407cd15e26f163fc8297da017df1',
19-
(OS.android, Architecture.x64):
51+
(OS.android, Architecture.ia32, 'static'):
52+
'65f6c8298f14db341e59c8c277294240271fcb05af7c150eed22a17dcf77715b',
53+
(OS.android, Architecture.x64, 'dynamic'):
2054
'f36899c73b114255321d65aaf92e159be2e78682b2a6d5181c77c74e8bdf9714',
21-
(OS.iOS, Architecture.arm):
55+
(OS.android, Architecture.x64, 'static'):
56+
'146530b72ea8ac8c3a0aed58156cc169fdf6261bcd6daa8bb8a5958d021eeba8',
57+
(OS.macOS, Architecture.arm64, 'dynamic'):
58+
'c20e9c55a926496928952cbb16638fb0eec1e609cc25f3c7d04a170946152b4b',
59+
(OS.macOS, Architecture.arm64, 'static'):
60+
'fc2a9ec58c260fb05969a8c5dae93f6b856edf2d6a1d33dcc03889984dbbbf45',
61+
(OS.macOS, Architecture.x64, 'dynamic'):
62+
'603f46a97ac2ad1d5a6a5c06b013283a5a76a8e8fd4e337561bfe71e536ee95d',
63+
(OS.macOS, Architecture.x64, 'static'):
64+
'08e8d0d5716f3826721d85dbfbec3bcabd211dc5c9394b2ba72f9b68796da001',
65+
(OS.iOS, Architecture.arm, 'dynamic'):
2266
'2b830c4a0f2d9ba924d66b5a634695c0f7c582fc2ee4b1c2f56dda1d6de75168',
23-
(OS.iOS, Architecture.arm64):
67+
(OS.iOS, Architecture.arm, 'static'):
68+
'271e4b528b1918b7eec9459804191b7ccd9c83b9fef234f9105e49cc45cc0b5c',
69+
(OS.iOS, Architecture.arm64, 'dynamic'):
2470
'bba88339a5bff91f558c7e01402fa2d7146e36cb5e448874bd77382c5f8164a3',
25-
(OS.iOS, Architecture.x64):
71+
(OS.iOS, Architecture.arm64, 'static'):
72+
'c396c3acf90c462abc7f858687ad0edd1625bdc1bc150993c84b6d76df942c33',
73+
(OS.iOS, Architecture.x64, 'dynamic'):
2674
'4b23970d8c08401152705b52b7e830bf79434c7a5ee180b5413820e9df961218',
27-
(OS.linux, Architecture.arm):
28-
'6ec82cb099ef709d1e8c66232d39f58c814a53774f48f8b64a764aae8f334b5d',
29-
(OS.linux, Architecture.arm64):
30-
'9a4949f77209adcf7791bf257684f953f89fb36bdb00c52ee54e14590436ba47',
31-
(OS.linux, Architecture.riscv64):
32-
'9b85cf853f444efa5b3ef91a5768b57760033a2d4925abca6035db48a83809d1',
33-
(OS.linux, Architecture.x64):
34-
'fd487400dcacb3b0c8feffcfec33badc0b9b5840d22d6a0005780dc85a48faa8',
35-
(OS.macOS, Architecture.arm64):
36-
'c20e9c55a926496928952cbb16638fb0eec1e609cc25f3c7d04a170946152b4b',
37-
(OS.macOS, Architecture.x64):
38-
'603f46a97ac2ad1d5a6a5c06b013283a5a76a8e8fd4e337561bfe71e536ee95d',
39-
(OS.windows, Architecture.arm64):
40-
'c0962d443478693c364b4e67cebc01bee04edc63da6f5c0cec85eb14b36bfc93',
41-
(OS.windows, Architecture.ia32):
42-
'dccc67f886aa79cf265967cf3ff597fb8bf367c4bd47ead4d282c1080a659a92',
43-
(OS.windows, Architecture.x64):
44-
'a67e444cc8788416f51c003d4e79e8805eab9de3ec6b44067aa74a1d7a41a107'
75+
(OS.iOS, Architecture.x64, 'static'):
76+
'6e4e4072126b3017c6a532575a165d1a80b2bccb59a24108682483935c98ff19'
4577
};

pkgs/intl4x/lib/src/hook_helpers/version.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
const version = 'intl4x-icu-v.0.9.2+1-artifacts';
5+
const version = 'intl4x-icu-v.0.9.2+3-artifacts';

pkgs/intl4x/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: intl4x
22
description: >-
33
A lightweight modular library for internationalization (i18n) functionality.
4-
version: 0.10.0
4+
version: 0.10.1
55
repository: https://github.com/dart-lang/i18n/tree/main/pkgs/intl4x
66
platforms:
77
web:

pkgs/intl4x/tool/regenerate_hashes.dart

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,23 @@ final httpClient = HttpClient();
88

99
Future<void> main(List<String> args) async {
1010
print('Checking hashes for $version');
11-
final fileHashes = <(OS, Architecture), String>{};
11+
final fileHashes = <(String, Architecture, String), String>{};
1212
final dynamicLibrary = File.fromUri(Directory.systemTemp.uri.resolve('lib'));
1313
await dynamicLibrary.create();
14-
for (final os in OS.values) {
14+
for (final os in ['linux', 'windows', 'fuchsia', 'android', 'macOS', 'iOS']) {
1515
for (final architecture in Architecture.values) {
16-
final target = '${os}_$architecture';
17-
print('Checking hash for $target');
18-
final success = await _fetchLibrary(target, httpClient, dynamicLibrary);
19-
if (success) {
20-
final bytes = await dynamicLibrary.readAsBytes();
21-
final fileHash = sha256.convert(bytes).toString();
22-
fileHashes[(os, architecture)] = fileHash;
23-
print('Hash is $fileHash');
24-
} else {
25-
print('Could not fetch library');
16+
for (final libraryType in ['dynamic', 'static']) {
17+
final target = [os, architecture, libraryType].join('_');
18+
print('Checking hash for $target');
19+
final success = await _fetchLibrary(target, httpClient, dynamicLibrary);
20+
if (success) {
21+
final bytes = await dynamicLibrary.readAsBytes();
22+
final fileHash = sha256.convert(bytes).toString();
23+
fileHashes[(os, architecture, libraryType)] = fileHash;
24+
print('Hash is $fileHash');
25+
} else {
26+
print('Could not fetch library');
27+
}
2628
}
2729
}
2830
}
@@ -40,9 +42,9 @@ Future<void> main(List<String> args) async {
4042
4143
import 'package:native_assets_cli/native_assets_cli.dart';
4244
43-
const fileHashes = <(OS, Architecture), String>{
45+
const fileHashes = <(OS, Architecture, String), String>{
4446
${fileHashes.map((key, value) => MapEntry(
45-
('OS.${key.$1.varName}', 'Architecture.${key.$2}'),
47+
('OS.${key.$1}', 'Architecture.${key.$2}', "'${key.$3}'"),
4648
"'$value'",
4749
)).entries.map(
4850
(e) => ' ${e.key}:\n ${e.value}',
@@ -65,15 +67,3 @@ Future<bool> _fetchLibrary(
6567
await response.pipe(dynamicLibrary.openWrite());
6668
return true;
6769
}
68-
69-
extension OSExt on OS {
70-
String get varName => switch (this) {
71-
OS.linux => 'linux',
72-
OS.windows => 'windows',
73-
OS.fuchsia => 'fuchsia',
74-
OS.android => 'android',
75-
OS.macOS => 'macOS',
76-
OS.iOS => 'iOS',
77-
OS() => throw UnimplementedError(),
78-
};
79-
}

0 commit comments

Comments
 (0)