Simplify cli-config, hotreload -> devtools (drop to 0 deps, fast compile times) #6989
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: "0" | |
RUST_BACKTRACE: 1 | |
rust_nightly: nightly-2024-07-01 | |
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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
# 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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- 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 | |
- 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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- uses: davidB/rust-cargo-make@v1 | |
- uses: browser-actions/setup-firefox@latest | |
- uses: jetli/[email protected] | |
- 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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- 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 | |
- name: Install Rust ${{ env.rust_nightly }} | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.rust_nightly }} | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
cache-all-crates: "true" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- 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 | |
# RUSTDOCFLAGS: --cfg docsrs -Dwarnings | |
# 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@v1 | |
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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- 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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- run: cargo clippy --workspace --examples --tests --all-features --all-targets -- -D warnings | |
# 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" | |
# save-if: ${{ github.ref == 'refs/heads/main' }} | |
# - name: Check semver | |
# uses: obi1kenobi/cargo-semver-checks-action@v2 | |
# with: | |
# manifest-path: ./Cargo.toml | |
# exclude: "dioxus-cli, dioxus-ext" | |
playwright: | |
if: github.event.pull_request.draft == false | |
name: Playwright Tests | |
runs-on: ubuntu-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: Free Disk Space (Ubuntu) | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- 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" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: Install dependencies | |
run: npm ci | |
working-directory: ./packages/playwright-tests | |
- name: Install Playwright | |
run: npm install -D @playwright/test | |
working-directory: ./packages/playwright-tests | |
- name: Install Playwright Browsers | |
run: npx playwright install --with-deps | |
working-directory: ./packages/playwright-tests | |
- name: Run Playwright tests | |
run: npx playwright test | |
working-directory: ./packages/playwright-tests | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: playwright-report | |
path: 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.platform.target }}" | |
cache-all-crates: "true" | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: test | |
run: | | |
${{ env.RUST_CARGO_COMMAND }} ${{ matrix.platform.command }} ${{ matrix.platform.args }} --target ${{ matrix.platform.target }} |