Skip to content

Address Robert's changelog comments (#7133) #27150

Address Robert's changelog comments (#7133)

Address Robert's changelog comments (#7133) #27150

Workflow file for this run

# This file is part of ICU4X. For terms of use, please see the file
# called LICENSE at the top level of the ICU4X source tree
# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
name: Build and Test
# Each of these jobs job maps to a `ci-job-foo` entry in Makefile.toml.
# If adding further CI jobs, please add them as makefile targets as well,
# and list them under `ci-all`.
on:
push:
branches:
- 'main'
- 'release/**'
pull_request:
workflow_dispatch:
inputs:
channel:
description: "Channel"
default: 'nightly'
type: choice
options:
- pinned-stable
- stable
- beta
- nightly
schedule:
# Run nightly cronjob CI every day at 14 UTC / 6AM PST / 3PM CET
- cron: '0 14 * * *'
# Run beta slightly later
- cron: '1 14 * * *'
permissions:
contents: read
concurrency:
# Allow one run at a time for PRs, but multiple for other invocations
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
# ci-job-check & ci-job-features
# Running at MSRV
msrv:
runs-on: ubuntu-latest
# Defined as a matrix so that features can start immediately, but
# be killed if check fails.
strategy:
matrix:
behavior: [check, features-1, features-2, features-3]
fail-fast: true
# Set CARGO_HTTP_MULTIPLEXING=false to work around crates.io curl bug:
# <https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation>
env:
CARGO_HTTP_MULTIPLEXING: false
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Job-specific dependencies
- name: Install cargo-all-features
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
- name: Set MSRV toolchain
run: rustup override set 1.83
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Check
run: cargo make ci-job-${{ matrix.behavior }}
# ci-job-test
test:
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Run `cargo make ci-job-test`
run: cargo make ci-job-test
# ci-job-test-docs
test-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Run `cargo make ci-job-test-docs`
run: cargo make ci-job-test-docs
# ci-job-test-gigo
test-gigo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Run `cargo make ci-job-test-gigo`
run: cargo make ci-job-test-gigo
# ci-job-test-cargo
test-cargo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- name: Install harfbuzz
run: sudo apt install libharfbuzz-dev
# Actual job
- name: Run `cargo make ci-job-test-cargo`
run: cargo make ci-job-test-cargo
# ci-job-testdata
testdata:
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- name: Install rustfmt
run: rustup component add rustfmt
# Actual job
- name: Run `cargo make ci-job-testdata`
run: cargo make ci-job-testdata
# ci-job-full-datagen
full-datagen:
# Generated Rust is not stable across Rust versions
if: ${{ github.event_name != 'schedule' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- name: Install rustfmt
run: rustup component add rustfmt
# Actual job
- name: Run `cargo make ci-job-full-datagen`
run: cargo make ci-job-full-datagen
# ci-job-test-c
test-c:
runs-on: ubuntu-24.04 # Includes LLVM 16,17,18
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
# TODO: Remove on 2025-05-05, when clang-19 is in ubuntu-latest (https://github.com/actions/runner-images/issues/11895)
- name: Install LLD and Clang
run: sudo apt-get install lld-19 clang-19
# Actual job
- name: Run `cargo make ci-job-test-c`
run: cargo make ci-job-test-c
env:
CXX: "g++-13"
- name: Test C++ with clang
run: cargo make test-cpp
env:
CXX: "clang++"
# ci-job-test-js
test-js:
runs-on: ubuntu-24.04 # Includes LLVM 16,17,18
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
# TODO: Remove on 2025-05-05, when clang-19 is in ubuntu-latest (https://github.com/actions/runner-images/issues/11895)
- name: Install LLD
run: sudo apt-get install lld-19
# Actual job
- name: Run `cargo make ci-job-test-js`
run: cargo make ci-job-test-js
# ci-job-test-dart
test-dart:
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 # v1.6.5
with:
# Keep in sync with artifacts-build.yml
sdk: ${{ github.event_name == 'schedule' && github.event.schedule == '0 14 * * *' && 'dev' || '3.10.0-186.0.dev' }}
- name: Install yq if Windows
if: ${{ matrix.os == 'windows-latest' }}
run: choco install yq
# Actual job
- name: Run `cargo make ci-job-test-dart`
run: cargo make ci-job-test-dart
- name: Run `cargo make ci-job-test-dart` in local mode
run: |
cp ffi/dart/.dart_tool/lib/* dylib
git clean -xf ffi examples
yq -i ".hooks.user_defines.icu4x.buildMode = \"local\"" ffi/dart/pubspec.yaml
yq -i ".hooks.user_defines.icu4x.localPath = \"file://$(realpath dylib)\"" ffi/dart/pubspec.yaml
yq -i ".hooks.user_defines.icu4x.buildMode = \"local\"" examples/dart/pubspec.yaml
yq -i ".hooks.user_defines.icu4x.localPath = \"file://$(realpath dylib)\"" examples/dart/pubspec.yaml
cargo make ci-job-test-dart
rm dylib
- name: Run `cargo make ci-job-test-dart` in fetch mode
# reenable after next release
if: false
run: |
git clean -xf ffi examples
yq -i ".hooks.user_defines.icu4x.buildMode = \"fetch\"" ffi/dart/pubspec.yaml
yq -i ".hooks.user_defines.icu4x.buildMode = \"fetch\"" examples/dart/pubspec.yaml
cargo make ci-job-test-dart
# ci-job-nostd
nostd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Run `cargo make ci-job-nostd`
run: cargo make ci-job-nostd
# ci-job-diplomat
diplomat:
runs-on: [ ubuntu-latest ]
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Run `cargo make ci-job-diplomat`
run: cargo make ci-job-diplomat
# ci-job-fmt
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- name: Install rustfmt
run: rustup component add rustfmt
# Actual job
- name: Check Format
run: cargo make ci-job-fmt
# ci-job-tidy
tidy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Tidy
run: cargo make ci-job-tidy
# ci-job-clippy
clippy:
# We don't expect to be clippy-clean on nightly cronjob.
if: ${{ github.event_name != 'schedule' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Job-specific dependencies
- name: Install clippy
run: rustup component add clippy
# Actual job
- name: Run `ci-job-clippy`
run: cargo make ci-job-clippy
# ci-job-doc
doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# Cargo-make boilerplate
- name: Install cargo-make
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11
with:
tool: [email protected]
# Toolchain boilerplate
- name: Potentially override rust version with nightly
run: cargo make set-ci-toolchain
- name: Show the selected Rust toolchain
run: rustup show
# Actual job
- name: Cargo doc
run: cargo make ci-job-doc
semver:
runs-on: ubuntu-latest
steps:
# Checkout HEAD revision
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Fetch base_ref if needed
if: ${{ github.event_name == 'pull_request' }}
run: git fetch origin ${{ github.base_ref }}
# Actual job
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@5b298c9520f7096a4683c0bd981a7ac5a7e249ae
# On pull requests, run against the base_ref so only violations added in that PR
# will trigger
if: ${{ github.event_name == 'pull_request' }}
with:
baseline-rev: origin/${{ github.base_ref }}
- name: Show semver violations since last release
uses: obi1kenobi/cargo-semver-checks-action@5b298c9520f7096a4683c0bd981a7ac5a7e249ae
# On main, run against the last release, but warn only
if: ${{ github.event_name != 'pull_request' }}
continue-on-error: true
# Notify on slack
notify-slack:
needs: [msrv, test, testdata, test-docs, full-datagen, test-c, test-js, test-dart, nostd, diplomat, fmt, tidy, clippy, doc]
if: ${{ always() && contains(needs.*.result, 'failure') && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_name == 'main')) }}
runs-on: ubuntu-latest
steps:
- name: Notify slack of failure
uses: ravsamhq/notify-slack-action@4ed28566c2bdcdaee6dca2b46b9666d01b4ed8a4 # v1
with:
notify_when: failure
status: failure # We do the filtering earlier
notification_title: ''
message_format: ${{ format('{{emoji}} {0} CI failed!' , (github.event_name == 'push' && 'Main' || (github.event.schedule == '1 14 * * *' && 'Beta' || 'Nightly'))) }}
footer: '<{run_url}|View failure> | <https://github.com/unicode-org/icu4x/actions?query=event%3A${{ github.event_name }}|CI history for `${{ github.event_name }}`>'
env:
# Notify main slack of failure for beta runs and and main CI, nightly slack otherwise
SLACK_WEBHOOK_URL: ${{ ((github.event_name == 'schedule' && github.event.schedule == '1 14 * * *') || github.event_name == 'push') && secrets.SLACK_WEBHOOK_URL || secrets.SLACK_NIGHTLY_WEBHOOK_URL }}