Skip to content

CI

CI #2814

Workflow file for this run

name: CI
permissions:
contents: read
on:
pull_request:
push:
branches:
- main
- dev
schedule:
- cron: '0 2 * * *'
workflow_dispatch:
env:
CARGO_INCREMENTAL: 0
CARGO_NET_GIT_FETCH_WITH_CLI: true
CARGO_NET_RETRY: 10
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
RUSTFLAGS: -D warnings
RUSTUP_MAX_RETRIES: 10
CARGO_LLVM_COV_DENY_WARNINGS: 1
defaults:
run:
shell: bash --noprofile --norc -CeEuxo pipefail {0}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
jobs:
deny:
uses: taiki-e/github-actions/.github/workflows/deny.yml@main
miri:
uses: taiki-e/github-actions/.github/workflows/miri.yml@main
msrv:
uses: taiki-e/github-actions/.github/workflows/msrv.yml@main
with:
event_name: ${{ github.event_name }}
release-dry-run:
uses: taiki-e/github-actions/.github/workflows/release-dry-run.yml@main
tidy:
uses: taiki-e/github-actions/.github/workflows/tidy.yml@main
permissions:
contents: read
pull-requests: write # for gh pr edit --add-assignee
repository-projects: read # for gh pr edit --add-assignee
secrets: inherit
test:
strategy:
fail-fast: false
matrix:
include:
# TODO: nightly-2023-04-27 (https://github.com/rust-lang/rust/pull/97368)
# and nightly-2023-05-03 (https://github.com/rust-lang/rust/pull/111042)
# fixed bugs in report generation, so the latest report is not the
# same as the old report.
# - rust: '1.60'
- rust: stable
- rust: beta
- rust: nightly
- rust: nightly
os: macos-latest
- rust: nightly
os: windows-latest
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/github-actions/install-rust@main
with:
toolchain: ${{ matrix.rust }}
- uses: taiki-e/install-action@cargo-hack
- uses: taiki-e/install-action@cargo-minimal-versions
- uses: taiki-e/install-action@nextest
- run: cargo test --workspace --all-features
# TODO: move this test to tests/test.rs
- run: cargo install --path . --debug
- name: Test cargo llvm-cov nextest
run: |
cargo llvm-cov nextest --text --fail-under-lines 50
cargo llvm-cov nextest --text --fail-under-lines 50 --profile default --cargo-profile dev
cargo llvm-cov nextest --text --fail-under-lines 50 --profile ci
cargo llvm-cov nextest --text --fail-under-lines 50 --profile ci --cargo-profile dev
cd -- ../real1
cargo llvm-cov nextest-archive --archive-file a.tar.zst
cargo llvm-cov nextest --archive-file a.tar.zst --text --fail-under-lines 70
cargo llvm-cov report --nextest-archive-file a.tar.zst --fail-under-lines 70
rm -- a.tar.zst
cargo clean
cargo llvm-cov nextest-archive --archive-file a.tar.zst --release
cargo llvm-cov nextest --archive-file a.tar.zst --text --fail-under-lines 70
cargo llvm-cov report --nextest-archive-file a.tar.zst --fail-under-lines 70
rm -- a.tar.zst
cargo clean
cargo llvm-cov nextest-archive --archive-file a.tar.zst --cargo-profile custom
cargo llvm-cov nextest --archive-file a.tar.zst --text --fail-under-lines 70
cargo llvm-cov report --nextest-archive-file a.tar.zst --fail-under-lines 70
rm -- a.tar.zst
cargo clean
host=$(rustc -vV | grep -E '^host:' | cut -d' ' -f2)
cargo llvm-cov nextest-archive --archive-file a.tar.zst --target "${host}"
cargo llvm-cov nextest --archive-file a.tar.zst --text --fail-under-lines 70
cargo llvm-cov report --nextest-archive-file a.tar.zst --fail-under-lines 70
working-directory: tests/fixtures/crates/bin_crate
- name: Test nightly-specific options, old Cargo compatibility, trybuild compatibility
run: |
retry() {
for i in {1..10}; do
if "$@"; then
return 0
else
sleep "${i}"
fi
done
"$@"
}
unset RUSTFLAGS
# Test nightly-specific options
retry git clone https://github.com/taiki-e/easytime.git
pushd -- easytime >/dev/null
git checkout 7ecb6e6
cargo llvm-cov test --doctests --text --fail-under-lines 30
popd >/dev/null
pushd -- tests/fixtures/crates/cargo_config >/dev/null
# TODO: --fail-under-branches?
cargo llvm-cov test --branch --text --fail-under-lines 80
cargo llvm-cov test --mcdc --text --fail-under-lines 80
popd >/dev/null
pushd -- easytime >/dev/null
cargo llvm-cov test --branch --doctests --text --fail-under-lines 30
cargo llvm-cov test --mcdc --doctests --text --fail-under-lines 30
popd >/dev/null
# Test minimum runnable Cargo version.
retry rustup toolchain add 1.60 --no-self-update
pushd -- easytime >/dev/null
cargo +1.60 llvm-cov test --text --fail-under-lines 30
popd >/dev/null
# Test trybuild compatibility.
retry git clone --depth 1 https://github.com/taiki-e/easy-ext.git
pushd -- easy-ext >/dev/null
cargo llvm-cov --text --test compiletest --fail-under-lines 70
popd >/dev/null
if: startsWith(matrix.rust, 'nightly')
- run: cargo hack build --workspace --no-private --feature-powerset --no-dev-deps
- run: cargo minimal-versions build --workspace --no-private --detach-path-deps=skip-exact --all-features
test-llvm:
strategy:
fail-fast: false
matrix:
# LLVM version table:
# - LLVM 14: 1.60-1.64
# - LLVM 15: 1.65-1.69
# - LLVM 16: 1.70-1.72
# - LLVM 17: 1.73-1.77
# - LLVM 18: 1.78-1.81
# - LLVM 19: 1.82-
# Minimum external LLVM version table:
# - LLVM 12 1.58-1.64
# - LLVM 13 1.65-1.68
# - LLVM 14 1.69-1.72
# - LLVM 15 1.73-1.75
# - LLVM 16 1.76-1.78
# - LLVM 17 1.79-1.82
# - LLVM 18 1.83-
llvm:
# - '12'
# - '13'
- '14'
- '15'
- '16'
- '17'
- '18'
- '19'
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/github-actions/install-rust@stable
- name: Install LLVM
run: |
retry() {
for i in {1..10}; do
if "$@"; then
return 0
else
sleep "${i}"
fi
done
"$@"
}
if type -P clang-"${{ matrix.llvm }}" &>/dev/null; then
exit 0
fi
codename=$(grep -E '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2)
sudo mkdir -pm755 -- /etc/apt/keyrings
retry curl --proto '=https' --tlsv1.2 -fsSL --retry 10 --retry-connrefused https://apt.llvm.org/llvm-snapshot.gpg.key \
| gpg --dearmor \
| sudo tee -- /etc/apt/keyrings/llvm-snapshot.gpg >/dev/null
sudo tee -- "/etc/apt/sources.list.d/llvm-toolchain-${codename}-${{ matrix.llvm }}.list" >/dev/null \
<<<"deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-${{ matrix.llvm }} main"
retry sudo apt-get -o Acquire::Retries=10 -qq update
apt_packages=(
clang-"${{ matrix.llvm }}"
libc++-"${{ matrix.llvm }}"-dev
libc++abi-"${{ matrix.llvm }}"-dev
libclang-"${{ matrix.llvm }}"-dev
lld-"${{ matrix.llvm }}"
llvm-"${{ matrix.llvm }}"
llvm-"${{ matrix.llvm }}"-dev
)
if ! sudo apt-get -o Acquire::Retries=10 -o Dpkg::Use-Pty=0 install -y --no-install-recommends "${apt_packages[@]}"; then
retry sudo apt-get -o Acquire::Retries=10 -o Dpkg::Use-Pty=0 upgrade -y
retry sudo apt-get -o Acquire::Retries=10 -o Dpkg::Use-Pty=0 install -y --no-install-recommends "${apt_packages[@]}"
fi
- run: cargo install --path . --debug
- name: Test
run: |
retry() {
for i in {1..10}; do
if "$@"; then
return 0
else
sleep "${i}"
fi
done
"$@"
}
export CC="clang-${{ matrix.llvm }}"
export CXX="clang++-${{ matrix.llvm }}"
export LLVM_COV="llvm-cov-${{ matrix.llvm }}"
export LLVM_PROFDATA="llvm-profdata-${{ matrix.llvm }}"
case "${{ matrix.llvm }}" in
1[0-7])
retry rustup toolchain add 1.60 1.65 1.70 1.73 1.77 --no-self-update
cargo clean
cargo +1.60 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +1.65 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +1.70 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +1.73 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +1.77 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
;;
18)
retry rustup toolchain add 1.78 1.81 --no-self-update
cargo clean
cargo +1.78 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +1.81 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
;;
*)
retry rustup toolchain add 1.82 beta nightly --no-self-update
cargo clean
cargo +1.82 llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +beta llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
cargo clean
cargo +nightly llvm-cov test --text --include-ffi --fail-under-lines 70 -vv
;;
esac
working-directory: tests/fixtures/crates/ffi