Build and Test #21714
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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: cargo-make@0.37.13 | |
# Job-specific dependencies | |
- name: Install cargo-all-features | |
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11 | |
with: | |
tool: cargo-all-features@1.10.0 | |
# No toolchain boilerplate as this runs on MSRV | |
# Actual job | |
- name: Check | |
run: cargo make ci-job-msrv-${{ 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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-tutorials | |
test-tutorials: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
behavior: [local] # reenable cratesio for 2.0 | |
fail-fast: 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: cargo-make@0.37.13 | |
# 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-tutorials-${{ matrix.behavior }}` | |
run: cargo make ci-job-test-tutorials-${{ matrix.behavior }} | |
# 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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-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: cargo-make@0.37.13 | |
# 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-js` | |
run: cargo make ci-job-test-js | |
# ci-job-test-dart | |
test-dart: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
# Software setup/installation for the container | |
- name: Install Rust toolchains | |
run: | | |
rustup toolchain install stable | |
# Cargo-make boilerplate | |
- name: Install cargo-make | |
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11 | |
with: | |
tool: cargo-make@0.37.13 | |
# 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: | |
sdk: 3.4.0-204.0.dev | |
# Actual job | |
- name: Run `cargo make ci-job-test-dart` | |
run: 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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-gn | |
gn: | |
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: cargo-make@0.37.13 | |
# 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: Attempt to load cached GN Third-Party Tools | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
id: gn-third-party-tools-cache | |
with: | |
path: | | |
tutorials/gn/third_party_tools | |
key: gn-third-party-${{ runner.os }}-${{ hashFiles('tools/make/gn.toml', 'tutorials/gn/Cargo.lock') }} | |
- name: Install GN Third-Party Tools | |
if: steps.gn-third-party-tools-cache.outputs.cache-hit != 'true' | |
run: cargo make gn-install | |
- name: Install cargo-rdme | |
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11 | |
with: | |
tool: cargo-rdme@1.4.2 | |
# Actual job | |
- name: Run `cargo make ci-job-gn` | |
run: cargo make ci-job-gn | |
# 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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 cargo-rdme | |
uses: taiki-e/install-action@64e4e2f995104968c78bd697b253d55bf557af66 # v2.41.11 | |
with: | |
tool: cargo-rdme@1.4.2 | |
# 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: cargo-make@0.37.13 | |
# 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: cargo-make@0.37.13 | |
# 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 | |
# Notify on slack | |
notify-slack: | |
needs: [msrv, test, testdata, test-docs, full-datagen, test-c, test-js, test-dart, nostd, diplomat, gn, 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 | |
# Only notify main slack of failure for beta runs and for failed main CI | |
if: (github.event_name == 'schedule' && github.event.schedule == '1 14 * * *') || github.event_name == 'push' | |
with: | |
notify_when: failure | |
status: failure # We do the filtering earlier | |
notification_title: '' | |
message_format: ${{ format('{{emoji}} {0} CI failed!' , ((github.event_name == 'schedule') && 'Beta' || (github.event_name == 'push') && 'Main' || 'Manually dispatched')) }} | |
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: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
- name: Notify nightly 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 == 'schedule') && (github.event.schedule == '1 14 * * *' && 'Beta' || 'Nightly') || (github.event_name == 'push') && 'Main' || 'Manually dispatched on `${{ inputs.channel }}`')) }} | |
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: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NIGHTLY_WEBHOOK_URL }} |