Rewrite all the dioxus_elements
logic for more modular hotreload
support
#7656
Workflow file for this run
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
# 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: "1" | |
RUST_BACKTRACE: 1 | |
rust_nightly: nightly-2024-10-20 | |
jobs: | |
check-msrv: | |
if: github.event.pull_request.draft == false | |
name: Check MSRV | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
# https://github.com/foresterre/cargo-msrv/blob/4345edfe3f4fc91cc8ae6c7d6804c0748fae92ae/.github/workflows/msrv.yml | |
- name: install_cargo_msrv | |
run: cargo install cargo-msrv --all-features | |
- 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-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- run: sudo apt-get update | |
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- uses: davidB/rust-cargo-make@v1 | |
- uses: browser-actions/setup-firefox@latest | |
- uses: jetli/[email protected] | |
- run: cargo make tests | |
release-test: | |
if: github.event.pull_request.draft == false | |
name: Test Suite with Optimizations | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: sudo apt-get update | |
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- uses: davidB/rust-cargo-make@v1 | |
- uses: browser-actions/setup-firefox@latest | |
- uses: jetli/[email protected] | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- run: cargo test --profile release-unoptimized --lib --bins --tests --examples --workspace --exclude dioxus-desktop --exclude dioxus-mobile | |
fmt: | |
if: github.event.pull_request.draft == false | |
name: Rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- run: cargo fmt --all -- --check | |
typos: | |
if: github.event.pull_request.draft == false | |
name: Check for typos | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check for typos | |
uses: crate-ci/typos@master | |
docs: | |
if: github.event.pull_request.draft == false | |
name: Docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: sudo apt-get update | |
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev | |
- 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" | |
cache-on-failure: "true" | |
- name: "doc --lib --all-features" | |
run: | | |
cargo doc --workspace --no-deps --all-features --document-private-items | |
# env: | |
# RUSTFLAGS: --cfg docsrs | |
# RUSTDOCFLAGS: --cfg docsrs | |
# todo: re-enable warnings, private items | |
# RUSTDOCFLAGS: --cfg docsrs -Dwarnings | |
# --document-private-items | |
# Check for invalid links in the repository | |
link-check: | |
if: github.event.pull_request.draft == false | |
name: Check For Invalid Links | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Restore lychee cache | |
uses: actions/cache@v4 | |
with: | |
path: .lycheecache | |
key: cache-lychee-${{ github.sha }} | |
restore-keys: cache-lychee- | |
- name: Run lychee | |
uses: lycheeverse/lychee-action@v2 | |
with: | |
args: --base . --config ./lychee.toml './**/*.md' | |
fail: true | |
check: | |
if: github.event.pull_request.draft == false | |
name: Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: sudo apt-get update | |
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- run: cargo check --workspace --all-features --all-targets | |
clippy: | |
if: github.event.pull_request.draft == false | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: sudo apt-get update | |
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "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-latest, macos-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: DeterminateSystems/nix-installer-action@main | |
- uses: DeterminateSystems/magic-nix-cache-action@main | |
- 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 | |
playwright: | |
if: github.event.pull_request.draft == false | |
name: Playwright Tests | |
runs-on: macos-latest | |
steps: | |
# Do our best to cache the toolchain and node install steps | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 16 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
targets: x86_64-unknown-linux-gnu,wasm32-unknown-unknown | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
cache-on-failure: "true" | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- name: Playwright | |
working-directory: ./packages/playwright-tests | |
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 | |
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: x86_64-pc-windows-msvc, | |
os: windows-latest, | |
toolchain: "1.79.0", | |
cross: false, | |
command: "test", | |
args: "--all --tests", | |
} | |
- { | |
target: aarch64-apple-darwin, | |
os: macos-latest, | |
toolchain: "1.79.0", | |
cross: false, | |
command: "test", | |
args: "--all --tests", | |
} | |
- { | |
target: x86_64-apple-darwin, | |
os: macos-13, | |
toolchain: "1.79.0", | |
cross: false, | |
command: "test", | |
args: "--all --tests", | |
} | |
- { | |
target: aarch64-apple-ios, | |
os: macos-latest, | |
toolchain: "1.79.0", | |
cross: false, | |
command: "build", | |
args: "--package dioxus-mobile", | |
} | |
- { | |
target: aarch64-linux-android, | |
os: ubuntu-latest, | |
toolchain: "1.79.0", | |
cross: true, | |
command: "build", | |
args: "--package dioxus-mobile", | |
} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Free Disk Space (Ubuntu) | |
if: ${{ matrix.platform.os == 'ubuntu-latest' }} | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- 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: 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" | |
cache-on-failure: "true" | |
- name: test | |
run: | | |
${{ env.RUST_CARGO_COMMAND }} ${{ matrix.platform.command }} ${{ matrix.platform.args }} --target ${{ matrix.platform.target }} | |
# 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-latest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - uses: dtolnay/rust-toolchain@stable | |
# - 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" |