Hotreload the contents of for loops, if chains, component bodies, props, attributes, and any literals discovered in rsx! Add a TUI renderer to the CLI. Improve the CLI build system to be async and parallel. Refactor RSX to allow partial expansion of expressions. Merge autofmt implementations for consistency. Merge the representation of elements and components under the hood. Add a diagnostics system for rsx for improved error messages. Drop interprocess and move to websockets for communication between the CLI and the server. Assign IDs to nodes and attributes in a stable way to be used in non compiler contexts. Add hotreloading to any body of component/for loop/if chain/etc. --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com> Co-authored-by: Liam Mitchell <liamkarlmitchell@gmail.com>
294 lines
9.3 KiB
YAML
294 lines
9.3 KiB
YAML
# 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"
|
|
|
|
jobs:
|
|
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 --all --examples --tests --all-features --all-targets
|
|
|
|
test:
|
|
if: github.event.pull_request.draft == false
|
|
name: Test Suite
|
|
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' }}
|
|
- uses: davidB/rust-cargo-make@v1
|
|
- uses: browser-actions/setup-firefox@latest
|
|
- uses: jetli/wasm-pack-action@v0.4.0
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@v1.3.1
|
|
with: # speed things up a bit
|
|
large-packages: false
|
|
docker-images: false
|
|
swap-storage: false
|
|
- 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"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- uses: davidB/rust-cargo-make@v1
|
|
- uses: browser-actions/setup-firefox@latest
|
|
- uses: jetli/wasm-pack-action@v0.4.0
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@v1.3.1
|
|
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"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- run: cargo fmt --all -- --check
|
|
|
|
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/free-disk-space@v1.3.1
|
|
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: install stable
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ matrix.platform.toolchain }}
|
|
targets: ${{ matrix.platform.target }}
|
|
components: rustfmt
|
|
|
|
- name: Install cross
|
|
if: ${{ matrix.platform.cross == true }}
|
|
|
|
uses: taiki-e/install-action@cross
|
|
|
|
- name: Free Disk Space (Ubuntu)
|
|
if: ${{ matrix.platform.os == 'ubuntu-latest' }}
|
|
uses: jlumbroso/free-disk-space@v1.3.1
|
|
with: # speed things up a bit
|
|
large-packages: false
|
|
docker-images: false
|
|
swap-storage: false
|
|
|
|
- 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 }}
|