clean up prelude (#4416) #9433
This file contains hidden or 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
# Whenever an open PR is updated, the workflow will be triggered | |
# | |
# This can get expensive, so we do a lot of caching and checks to prevent unnecessary runs | |
name: Rust CI | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- packages/** | |
- examples/** | |
- docs/guide/** | |
- src/** | |
- .github/** | |
- lib.rs | |
- Cargo.toml | |
- Makefile.toml | |
pull_request: | |
types: [opened, synchronize, reopened, ready_for_review] | |
branches: | |
- main | |
paths: | |
- packages/** | |
- examples/** | |
- src/** | |
- .github/** | |
- lib.rs | |
- Cargo.toml | |
# workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
CARGO_TERM_COLOR: always | |
CARGO_INCREMENTAL: 0 # todo(jon): cargo-cache wipes incremental artifacts, but we eventually want to cache them | |
RUST_BACKTRACE: 1 | |
rust_nightly: nightly-2025-04-07 | |
jobs: | |
check-msrv: | |
if: github.event.pull_request.draft == false | |
name: Check MSRV | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
# https://github.com/foresterre/cargo-msrv/blob/4345edfe3f4fc91cc8ae6c7d6804c0748fae92ae/.github/workflows/msrv.yml | |
- name: install_cargo_msrv | |
run: cargo install cargo-msrv --all-features --version 0.16.3 --locked | |
- name: version_of_cargo_msrv | |
run: cargo msrv --version | |
- name: run_cargo_msrv | |
run: cargo msrv --output-format json verify -- cargo check | |
- name: run_cargo_msrv_on_verify_failure | |
if: ${{ failure() }} | |
run: cargo msrv --output-format json -- cargo check | |
test: | |
if: github.event.pull_request.draft == false | |
name: Test Suite | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Free Disk Space | |
uses: ./.github/actions/free-disk-space | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: 1.0 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
with: | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- uses: browser-actions/setup-firefox@latest | |
- run: cargo test --lib --bins --tests --examples --workspace --exclude dioxus-desktop | |
release-test: | |
if: github.event.pull_request.draft == false | |
name: Test Suite with Optimizations | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Free Disk Space | |
uses: ./.github/actions/free-disk-space | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: 1.0 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
with: | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- uses: browser-actions/setup-firefox@latest | |
- run: cargo test --lib --bins --tests --examples --workspace --exclude dioxus-desktop --profile release-unoptimized | |
fmt: | |
if: github.event.pull_request.draft == false | |
name: Rustfmt | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
with: | |
components: rustfmt | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- run: cargo fmt --all -- --check | |
docs: | |
if: github.event.pull_request.draft == false | |
name: Docs | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: 1.0 | |
- name: Install Rust ${{ env.rust_nightly }} | |
uses: dtolnay/rust-toolchain@nightly | |
with: | |
toolchain: ${{ env.rust_nightly }} | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- name: "doc --lib --all-features" | |
run: | | |
cargo doc --workspace --no-deps --all-features --document-private-items | |
env: | |
RUSTDOCFLAGS: -Dwarnings --document-private-items | |
check: | |
if: github.event.pull_request.draft == false | |
name: Check | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: 1.0 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- run: cargo check --workspace --all-features --all-targets | |
clippy: | |
if: github.event.pull_request.draft == false | |
name: Clippy | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: 1.0 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
with: | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
- run: cargo clippy --workspace --examples --tests --all-features --all-targets -- -D warnings | |
nix: | |
if: github.event.pull_request.draft == false | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-24.04, macos-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: nixbuild/nix-quick-install-action@master | |
- uses: nix-community/cache-nix-action@main | |
with: | |
primary-key: nix-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} | |
restore-prefixes-first-match: nix-${{ runner.os }}-${{ runner.arch }} | |
- name: Install omnix | |
run: nix --accept-flake-config profile install "github:juspay/omnix" | |
- name: Build all flake outputs | |
run: om ci | |
- name: Ensure devShell has all build deps | |
run: nix develop -c cargo build -p dioxus-cli --features no-downloads | |
playwright: | |
if: github.event.pull_request.draft == false | |
name: Playwright Tests | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
platform: | |
- { toolchain: 1.86.0 } | |
- { toolchain: beta } | |
steps: | |
# Do our best to cache the toolchain and node install steps | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 24 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.platform.toolchain }} | |
targets: x86_64-unknown-linux-gnu,wasm32-unknown-unknown | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: "playwright-${{ matrix.platform.toolchain }}-${{ runner.os }}" | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- name: Wipe dx cache | |
run: | | |
rm -rf ./target/dx | |
- name: Playwright | |
working-directory: ./packages/playwright-tests | |
env: | |
# The hot patch test requires incremental compilation | |
CARGO_INCREMENTAL: 1 | |
run: | | |
npm ci | |
npm install -D @playwright/test | |
npx playwright install --with-deps | |
npx playwright test | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: playwright-report-${{ matrix.platform.toolchain }}-${{ runner.os }} | |
path: ./packages/playwright-tests/playwright-report/ | |
retention-days: 30 | |
matrix_test: | |
runs-on: ${{ matrix.platform.os }} | |
if: github.event.pull_request.draft == false | |
env: | |
RUST_CARGO_COMMAND: ${{ matrix.platform.cross == true && 'cross' || 'cargo' }} | |
strategy: | |
matrix: | |
platform: | |
- { | |
target: aarch64-apple-darwin, | |
os: macos-latest, | |
toolchain: "1.86.0", | |
cross: false, | |
command: "test", | |
args: "--all --tests", | |
platform: "desktop", | |
} | |
- { | |
target: x86_64-apple-darwin, | |
os: macos-13, | |
toolchain: "1.86.0", | |
cross: false, | |
command: "test", | |
args: "--all --tests", | |
platform: "desktop", | |
} | |
- { | |
target: aarch64-apple-ios, | |
os: macos-latest, | |
toolchain: "1.86.0", | |
cross: false, | |
command: "build", | |
args: "--package dioxus-desktop", | |
platform: "ios", | |
} | |
- { | |
target: x86_64-unknown-linux-gnu, | |
os: ubuntu-24.04, | |
toolchain: "1.86.0", | |
cross: false, | |
command: "build", | |
args: "--all --tests", | |
platform: "desktop", | |
} | |
- { | |
target: aarch64-unknown-linux-gnu, | |
os: ubuntu-24.04-arm, | |
toolchain: "1.86.0", | |
cross: false, | |
command: "build", | |
args: "--all --tests", | |
platform: "desktop", | |
} | |
- { | |
target: aarch64-linux-android, | |
os: ubuntu-24.04, | |
toolchain: "1.86.0", | |
cross: true, | |
command: "build", | |
args: "--package dioxus-desktop", | |
platform: "android", | |
} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.platform.toolchain }} | |
targets: ${{ matrix.platform.target }} | |
components: rustfmt | |
- name: Install nasm for windows (tls) | |
if: ${{ matrix.platform.target == 'x86_64-pc-windows-msvc' }} | |
uses: ilammy/setup-nasm@v1 | |
- name: Free Disk Space | |
if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }} | |
uses: ./.github/actions/free-disk-space | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }} | |
with: | |
packages: libwebkit2gtk-4.1-dev libgtk-3-dev libasound2-dev libudev-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev | |
version: ${{ matrix.platform.target }}-${{ matrix.platform.os }} # disambiguate since we're in a matrix and this caching action doesn't factor in these variables | |
- name: Install cross | |
if: ${{ matrix.platform.cross == true }} | |
uses: taiki-e/install-action@cross | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: "matrix-${{ matrix.platform.target }}" | |
cache-all-crates: "true" | |
- name: test | |
run: | | |
${{ env.RUST_CARGO_COMMAND }} ${{ matrix.platform.command }} ${{ matrix.platform.args }} --target ${{ matrix.platform.target }} | |
# borrowed from uv | |
# https://raw.githubusercontent.com/astral-sh/uv/refs/heads/main/.github/workflows/ci.yml | |
cargo-test-windows: | |
if: github.event.pull_request.draft == false | |
runs-on: | |
labels: "windows-latest" | |
name: "cargo test | windows" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@1.86.0 | |
with: | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: ${{ env.UV_WORKSPACE }} | |
cache-all-crates: "true" | |
- name: "Install Rust toolchain" | |
working-directory: ${{ env.UV_WORKSPACE }} | |
run: rustup show | |
- name: "Cargo test" | |
working-directory: ${{ env.UV_WORKSPACE }} | |
run: | | |
cargo test --workspace --tests | |
# Only run semver checks if the PR is not a draft and does not have the breaking label | |
# Breaking PRs don't need to follow semver since they are breaking changes | |
# However, this means we won't attempt to backport them, so you should be careful about using this label, as it will | |
# likely make future backporting difficult | |
# | |
# todo: fix this so even if breaking changes have been merged, the fix can be backported | |
# | |
# This will stop working once the first breaking change has been merged, so we should really try to just backport the fix | |
# and *then* run the semver checks. Basically "would backporting this PR cause a breaking change on stable?" | |
# | |
# semver: | |
# if: github.event.pull_request.draft == false && !contains(github.event.pull_request.labels.*.name, 'breaking') | |
# name: Semver Check | |
# runs-on: ubuntu-24.04 | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - uses: dtolnay/rust-toolchain@1.86.0 | |
# - uses: Swatinem/rust-cache@v2 | |
# with: | |
# cache-all-crates: "true" | |
# cache-on-failure: "true" | |
# - name: Check semver | |
# uses: obi1kenobi/cargo-semver-checks-action@v2 | |
# with: | |
# manifest-path: ./Cargo.toml | |
# exclude: "dioxus-cli, dioxus-ext" | |
# Releases for the CLI on a per-branch basis | |
# nightly-cli: | |
# if: github.event.pull_request.draft == false | |
# runs-on: ${{ matrix.platform.os }} | |
# strategy: | |
# matrix: | |
# platform: | |
# - { | |
# target: x86_64-pc-windows-msvc, | |
# os: windows-latest | |
# } | |
# - { | |
# target: aarch64-pc-windows-msvc, | |
# os: windows-latest | |
# } | |
# - { | |
# target: x86_64-apple-darwin, | |
# os: macos-13 | |
# } | |
# - { | |
# target: aarch64-apple-darwin, | |
# os: macos-latest | |
# } | |
# - { | |
# target: x86_64-unknown-linux-gnu, | |
# os: ubuntu-24.04 | |
# } | |
# - { | |
# target: aarch64-unknown-linux-gnu, | |
# os: ubuntu-24.04-arm | |
# } | |
# - { | |
# target: x86_64-unknown-linux-musl, | |
# os: ubuntu-24.04 | |
# } | |
# - { | |
# target: aarch64-unknown-linux-musl, | |
# os: ubuntu-24.04-arm | |
# } | |
# steps: | |
# - name: Checkout | |
# uses: actions/checkout@v4 | |
# - name: Install openssl on macos | |
# if: matrix.platform.os == 'macos-latest' | |
# run: brew install openssl | |
# - name: Install nasm for windows (tls) | |
# if: ${{ matrix.platform.target == 'x86_64-pc-windows-msvc' }} | |
# uses: ilammy/setup-nasm@v1 | |
# - name: Free Disk Space | |
# if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }} | |
# uses: ./.github/actions/free-disk-space | |
# - uses: awalsh128/cache-apt-pkgs-action@latest | |
# if: ${{ matrix.platform.os == 'ubuntu-24.04' || matrix.platform.os == 'ubuntu-24.04-arm' }} | |
# with: | |
# packages: libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev libglib2.0-dev musl-tools | |
# version: 1.0 | |
# - name: Install stable | |
# uses: dtolnay/rust-toolchain@master | |
# with: | |
# toolchain: "1.86.0" | |
# targets: ${{ matrix.platform.target }} | |
# - uses: Swatinem/rust-cache@v2 | |
# with: | |
# cache-all-crates: "true" | |
# save-if: ${{ github.ref == 'refs/heads/main' }} | |
# - name: Free Disk Space | |
# uses: jlumbroso/free-disk-space@v1.3.1 | |
# with: # speed things up a bit | |
# large-packages: false | |
# docker-images: false | |
# swap-storage: false | |
# # Todo: we want `cargo install dx` to actually just use a prebuilt binary instead of building it | |
# - name: Build CLI | |
# run: | | |
# cargo build --release --package dioxus-cli --target ${{ matrix.platform.target }} | |
# - name: Upload CLI binaries | |
# uses: actions/upload-artifact@v4 | |
# if: always() | |
# with: | |
# name: dx-${{ matrix.platform.target }}-${{ github.event.number || github.ref_name }} | |
# path: ./target/${{ matrix.platform.target }}/release/dx | |
# retention-days: ${{ github.ref == 'refs/heads/main' && 90 || 30 }} | |
# overwrite: true | |
# - name: Output artifact ID | |
# run: echo 'Artifact ID is ${{ steps.artifact-upload-step.outputs.artifact-id }}' |