build #1115
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
name: build | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
schedule: | |
- cron: '30 17 * * 5' # Every Friday at 17:30 UTC | |
env: | |
CARGO_TERM_COLOR: always | |
NPM_CONFIG_COLOR: always | |
FORCE_COLOR: 3 | |
RUSTFLAGS: -D warnings | |
jobs: | |
# Here we check that we can run `cargo test` on modern versions of | |
# Rust. Below we check that we can build the library on an old | |
# version as well. | |
ubuntu: | |
name: Ubuntu | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
rust: | |
- stable | |
- nightly | |
features: | |
- no default features | |
- all features | |
- default features | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install ${{ matrix.rust }} Rust | |
run: rustup default ${{ matrix.rust }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Test with ${{ matrix.features }} | |
run: | | |
FLAG="${{ matrix.features }}" | |
if [[ "$FLAG" = "default features" ]]; then | |
FLAG='' # Needs no flag | |
else | |
FLAG="--${FLAG// /-}" # Turn 'foo bar' into '--foo-bar' | |
fi | |
cargo test $FLAG | |
windows: | |
name: Windows (stable, default features) | |
runs-on: windows-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
- name: Test with default features | |
run: cargo test | |
msrv: | |
name: Minimum supported Rust version | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
features: | |
- no default features | |
- all features | |
- default features | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Find Minimum Support Rust Version | |
run: | | |
echo "msrv=$(egrep 'rust-version\s*=\s*"([0-9.]+)"' Cargo.toml | cut -d '"' -f 2)" >> "$GITHUB_ENV" | |
- name: Install Rust ${{ env.msrv }} (MSRV) | |
run: rustup default $msrv | |
- uses: Swatinem/rust-cache@v2 | |
- name: Build with ${{ matrix.features }} | |
run: | | |
FLAG="${{ matrix.features }}" | |
if [[ "$FLAG" = "default features" ]]; then | |
FLAG='' # Needs no flag | |
else | |
FLAG="--${FLAG// /-}" # Turn 'foo bar' into '--foo-bar' | |
fi | |
cargo build $FLAG | |
# This builds benchmarks, which are not covered above. | |
build-benchmarks: | |
name: Build benchmarks | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: benchmarks -> target | |
- name: Build all benchmarks | |
run: cargo bench --no-run | |
working-directory: benchmarks | |
build-documentation: | |
name: Build documentation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
- name: Build documentation and check intra-doc links | |
env: | |
RUSTDOCFLAGS: --deny rustdoc::broken_intra_doc_links | |
run: cargo doc --all-features --no-deps | |
fuzz: | |
name: Fuzz test | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
fuzz-target: | |
- fill_first_fit | |
- fill_optimal_fit | |
- fill_fast_path | |
- wrap_first_fit | |
- wrap_optimal_fit | |
- wrap_optimal_fit_usize | |
- wrap_fast_path | |
- unfill | |
- refill | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install nightly Rust | |
run: rustup default nightly | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: fuzz -> target | |
- name: Install cargo-fuzz | |
run: cargo install cargo-fuzz | |
- name: Cache fuzz corpus | |
uses: actions/cache@v4 | |
with: | |
path: fuzz/corpus/${{ matrix.fuzz-target }} | |
key: fuzz-corpus-${{ matrix.fuzz-target }}-${{ github.run_id }} | |
restore-keys: | | |
fuzz-corpus-${{ matrix.fuzz-target }} | |
- name: Run fuzz test | |
run: cargo fuzz run ${{ matrix.fuzz-target }} -- -max_total_time=30 | |
- name: Minimize fuzz corpus | |
run: cargo fuzz cmin ${{ matrix.fuzz-target }} | |
binary-sizes: | |
name: Compute binary sizes | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: examples/binary-sizes -> target | |
- name: Make binary size table | |
run: cargo run --example make-table | |
working-directory: examples/binary-sizes | |
wasm-build: | |
name: Build Wasm demo | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install wasm-pack | |
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: examples/wasm -> target | |
- name: Build textwrap-wasm-demo | |
run: wasm-pack build | |
working-directory: examples/wasm | |
- name: Install textwrap-wasm-demo-app dependencies | |
run: npm install | |
working-directory: examples/wasm/www | |
- name: Bundle textwrap-wasm-demo-app | |
run: npm run build | |
working-directory: examples/wasm/www | |
- name: Upload bundled textwrap-wasm-demo-app | |
uses: actions/upload-artifact@v4 | |
with: | |
name: textwrap-wasm-demo-app | |
path: examples/wasm/www/dist | |
wasm-deploy: | |
name: Deploy Wasm demo | |
needs: wasm-build | |
if: github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
- name: Cleanup previous deployment | |
run: rm * | |
- name: Download bundled textwrap-wasm-demo-app | |
uses: actions/download-artifact@v4 | |
with: | |
name: textwrap-wasm-demo-app | |
- name: Add and remove changed files | |
id: git-add | |
run: | | |
git restore build-info.json | |
git add --verbose --all | |
if git diff --staged --quiet --exit-code; then | |
echo "No changes found in textwrap-wasm-demo-app" | |
echo 'has-changes=false' >> $GITHUB_OUTPUT | |
else | |
echo 'has-changes=true' >> $GITHUB_OUTPUT | |
fi | |
- name: Record build info | |
if: steps.git-add.outputs.has-changes == 'true' | |
run: | | |
cat > build-info.json <<EOM | |
{"date": "$(date --utc --iso-8601)", "commit": "$GITHUB_SHA"} | |
EOM | |
git add --verbose --all | |
- name: Configure Git user | |
if: steps.git-add.outputs.has-changes == 'true' | |
run: | | |
git config user.name "Martin Geisler" | |
git config user.email "[email protected]" | |
- name: Commit textwrap-wasm-demo-app changes | |
if: steps.git-add.outputs.has-changes == 'true' | |
run: git commit -m "Update Wasm demo to ${GITHUB_SHA::7}" | |
- name: Deploy textwrap-wasm-demo-app | |
if: steps.git-add.outputs.has-changes == 'true' | |
run: git push origin |