Skip to content

feat: Introduce StatusV2 #476

feat: Introduce StatusV2

feat: Introduce StatusV2 #476

Workflow file for this run

name: Build & Test
on:
push:
branches: [ main ]
paths:
- "**.rs"
- "**.toml"
- ".github/workflows/**"
pull_request:
branches: [ main ]
paths:
- "**.rs"
- "**.toml"
- ".github/workflows/**"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: taiki-e/install-action@v2
with:
tool: cargo-hack
- name: Check
# TODO: We exclude the tokio demos for now to bypass a "none of the selected packages contains these features" error.
run: |
cargo hack check \
--workspace \
--exclude tokio-client --exclude tokio-server --exclude tokio-support \
--feature-powerset \
--group-features starttls,ext_condstore_qresync,ext_login_referrals,ext_mailbox_referrals \
--exclude-features ext,split
test:
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup | Install toolchain
run: |
rustup toolchain install stable --profile minimal
rustup toolchain install nightly --profile minimal
- name: Setup | Install cargo-fuzz
run: |
cargo install cargo-fuzz
- name: Setup | Cache dependencies
uses: Swatinem/[email protected]
id: cache
with:
cache-all-crates: true
- name: Test | Everything w/o fuzzing (macOS, Ubuntu)
if: matrix.os != 'windows-latest'
run: |
for build_mode in "" "--release";
do
for feature_mode in "" "--all-features";
do
echo "# Testing" ${build_mode} ${feature_mode}
cargo test --workspace ${build_mode} ${feature_mode} --doc
cargo test --workspace ${build_mode} ${feature_mode} --all-targets --exclude imap-codec-fuzz --exclude imap-types-fuzz
done
done
- name: Test | Everything w/o fuzzing (Windows)
if: matrix.os == 'windows-latest'
run: |
$build_modes = @('','--release')
$feature_modes = @('','--all-features')
foreach ($build_mode in $build_modes) {
foreach ($feature_mode in $feature_modes) {
echo "# Testing" ${build_mode} ${feature_mode}
cargo test --workspace ${build_mode} ${feature_mode} --doc
cargo test --workspace ${build_mode} ${feature_mode} --all-targets --exclude imap-codec-fuzz --exclude imap-types-fuzz
}
}
- name: Test | Limited fuzzing (Ubuntu)
if: matrix.os == 'ubuntu-latest'
run: |
cd imap-codec
for fuzz_target in $(cargo +nightly fuzz list);
do
echo "# Fuzzing ${fuzz_target}";
cargo +nightly fuzz run --features=ext ${fuzz_target} -- -dict=fuzz/terminals.dict -max_len=256 -only_ascii=1 -runs=25000
done
minimal-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup | Install toolchain
run: |
# 1.65 is the Minimum Supported Rust Version (MSRV) for imap-codec.
rustup toolchain install 1.65 --profile minimal
rustup toolchain install nightly --profile minimal
- name: Setup | Cache dependencies
uses: Swatinem/[email protected]
id: cache
with:
cache-all-crates: true
- name: Check
run: |
cargo +nightly update -Z minimal-versions
cargo +1.65 check --workspace --all-targets --all-features --exclude tokio-server
cargo +1.65 test --workspace --all-targets --all-features --exclude tokio-server --exclude imap-codec-fuzz --exclude imap-types-fuzz
env:
RUSTFLAGS: -Dwarnings
audit:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Audit dependencies
uses: EmbarkStudios/cargo-deny-action@7257a18a9c2fe3f92b85d41ae473520dff953c97
clippy:
runs-on: ubuntu-latest
steps:
- name: Install toolchain
uses: actions-rs/toolchain@88dc2356392166efad76775c878094f4e83ff746
with:
profile: minimal
toolchain: stable
override: true
components: clippy
- name: Checkout code
uses: actions/checkout@v3
- name: Check for common mistakes and missed improvements
uses: actions-rs/clippy-check@b5b5f21f4797c02da247df37026fcd0a5024aa4d
with:
token: ${{ secrets.GITHUB_TOKEN }}
args: --all-features
formatting:
runs-on: ubuntu-latest
steps:
- name: Install nightly toolchain
uses: actions-rs/toolchain@88dc2356392166efad76775c878094f4e83ff746
with:
profile: minimal
toolchain: nightly
override: true
components: rustfmt
- name: Checkout code
uses: actions/checkout@v3
- name: Check code formatting
run: cargo +nightly fmt --check