| name: Generate artifacts for intl4x |
| |
| permissions: |
| contents: write |
| |
| on: |
| pull_request: |
| branches: [ main ] |
| paths: |
| - pkgs/intl4x/hook/hashes.dart |
| push: |
| tags: |
| - 'intl4x-icu*' |
| schedule: |
| - cron: '0 0 * * 0' # weekly |
| workflow_dispatch: |
| |
| jobs: |
| dart-libs: |
| name: Build Dart binaries |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ ubuntu-latest, macos-latest, windows-latest ] |
| compiletype: [ dynamic, static ] |
| runs-on: ${{ matrix.os }} |
| env: |
| DATA: ${{ matrix.compiletype == 'dynamic' && ',compiled_data' || '' }} |
| |
| steps: |
| - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 |
| with: |
| submodules: true |
| |
| - name: Install Rust toolchains |
| run: | |
| rustup toolchain install stable |
| |
| - name: Show the selected Rust toolchain |
| run: rustup show |
| |
| - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 |
| with: |
| sdk: dev |
| |
| - name: Setup additional linkers |
| if: matrix.os == 'ubuntu-latest' |
| run: | |
| sudo apt-get install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-riscv64-linux-gnu gcc-i686-linux-gnu |
| mkdir .cargo |
| echo "[target]" >> .cargo/config.toml |
| echo "aarch64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang\"" >> .cargo/config.toml |
| echo "armv7-linux-androideabi.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi30-clang\"" >> .cargo/config.toml |
| echo "i686-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android30-clang\"" >> .cargo/config.toml |
| echo "x86_64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android30-clang\"" >> .cargo/config.toml |
| echo "riscv64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/riscv64-linux-android35-clang\"" >> .cargo/config.toml |
| echo "aarch64-unknown-linux-gnu.linker=\"aarch64-linux-gnu-gcc\"" >> .cargo/config.toml |
| echo "armv7-unknown-linux-gnueabihf.linker=\"arm-linux-gnueabihf-gcc\"" >> .cargo/config.toml |
| echo "riscv64gc-unknown-linux-gnu.linker=\"riscv64-linux-gnu-gcc\"" >> .cargo/config.toml |
| |
| - name: Build Linux |
| if: matrix.os == 'ubuntu-latest' |
| run: | |
| cd submodules/icu4x |
| |
| mkdir bin |
| |
| cd ffi/dart |
| dart pub get |
| cd ../.. |
| dart run ffi/dart/tool/build_libs.dart bin/android_arm_${{ matrix.compiletype }} android_arm ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/android_arm64_${{ matrix.compiletype }} android_arm64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/android_ia32_${{ matrix.compiletype }} android_ia32 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/android_x64_${{ matrix.compiletype }} android_x64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/linux_arm_${{ matrix.compiletype }} linux_arm ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/linux_arm64_${{ matrix.compiletype }} linux_arm64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| 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 }} |
| 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 }} |
| |
| - name: Build Linux data |
| if: matrix.os == 'ubuntu-latest' && matrix.compiletype == 'static' |
| run: | |
| cargo run -p icu_datagen -- --locales full --keys all --format blob --out bin/full.postcard |
| |
| cd provider/datagen # avoid global feature resolution |
| rustup target add aarch64-unknown-linux-gnu |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-unknown-linux-gnu |
| rustup target add riscv64gc-unknown-linux-gnu |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target riscv64gc-unknown-linux-gnu |
| rustup target add x86_64-unknown-linux-gnu |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-unknown-linux-gnu |
| cd ../.. |
| |
| cp target/aarch64-unknown-linux-gnu/release/icu4x-datagen bin/linux_arm64-datagen |
| cp target/riscv64gc-unknown-linux-gnu/release/icu4x-datagen bin/linux_riscv64-datagen |
| cp target/x86_64-unknown-linux-gnu/release/icu4x-datagen bin/linux_x64-datagen |
| |
| - name: Build Mac |
| if: matrix.os == 'macos-latest' |
| run: | |
| cd submodules/icu4x |
| |
| mkdir bin |
| |
| cd ffi/dart |
| dart pub get |
| cd ../.. |
| dart run ffi/dart/tool/build_libs.dart bin/ios_arm_${{ matrix.compiletype }} ios_arm ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/ios_arm64_${{ matrix.compiletype }} ios_arm64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| dart run ffi/dart/tool/build_libs.dart bin/ios_x64_${{ matrix.compiletype }} ios_x64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| 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 }} |
| 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 }} |
| |
| - name: Build Mac data |
| if: matrix.os == 'macos-latest' && matrix.compiletype == 'static' |
| run: | |
| cd provider/datagen # avoid global feature resolution |
| rustup target add aarch64-apple-darwin |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-apple-darwin |
| rustup target add x86_64-apple-darwin |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-apple-darwin |
| cd ../.. |
| |
| cp target/aarch64-apple-darwin/release/icu4x-datagen bin/macos_arm64-datagen |
| cp target/x86_64-apple-darwin/release/icu4x-datagen bin/macos_x64-datagen |
| |
| - name: Build Windows |
| if: matrix.os == 'windows-latest' |
| run: | |
| cd submodules/icu4x |
| |
| mkdir bin |
| |
| cd ffi/dart |
| dart pub get |
| cd ../.. |
| dart run ffi/dart/tool/build_libs.dart bin/windows_arm64_${{ matrix.compiletype }} windows_arm64 ${{ matrix.compiletype }} icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} |
| 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 }} |
| 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 }} |
| |
| - name: Build Windows data |
| if: matrix.os == 'windows-latest' && matrix.compiletype == 'static' |
| run: | |
| cd provider/datagen # avoid global feature resolution |
| rustup target add aarch64-pc-windows-msvc |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-pc-windows-msvc |
| rustup target add x86_64-pc-windows-msvc |
| cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-pc-windows-msvc |
| cd ../.. |
| |
| cp target/aarch64-pc-windows-msvc/release/icu4x-datagen.exe bin/windows_arm64-datagen.exe |
| cp target/x86_64-pc-windows-msvc/release/icu4x-datagen.exe bin/windows_x64-datagen.exe |
| |
| - name: Upload artifacts |
| uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 |
| with: |
| name: dart-${{matrix.os}}-${{ matrix.compiletype }}-libs |
| path: submodules/icu4x/bin |
| |
| check_hashes: |
| needs: dart-libs |
| runs-on: ubuntu-latest |
| |
| env: |
| ICU4X_BUILD_MODE: local |
| |
| steps: |
| - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 |
| with: |
| submodules: true |
| |
| - name: Download binaries |
| uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 |
| with: |
| merge-multiple: true |
| |
| - name: Display structure of downloaded files |
| run: ls -R |
| |
| - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 |
| with: |
| sdk: dev |
| |
| - name: Check hashes of released artifacts |
| run: | |
| cd pkgs/intl4x |
| dart pub get |
| dart --enable-experiment=native-assets tool/regenerate_hashes.dart |
| git diff --exit-code |
| |
| release: |
| needs: dart-libs |
| runs-on: ubuntu-latest |
| if: github.event_name == 'push' |
| steps: |
| - name: Download binaries |
| uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 |
| |
| - name: Display structure of downloaded files |
| run: ls -R |
| |
| - name: Release |
| uses: softprops/action-gh-release@e7a8f85e1c67a31e6ed99a94b41bd0b71bbee6b8 |
| with: |
| files: '**' |
| fail_on_unmatched_files: true |
| body: "Build artifacts for `package:intl4x`, based on ICU4X at ref ${{ github.ref_name }}" |