feat: add cli support to build assets from executable #7724
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 # todo(jon): cargo-cache wipes incremental artifacts, but we eventually want to cache them | |
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/[email protected] | |
- 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 | |
- 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/[email protected] | |
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 --exclude dioxus-mobile | |
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/[email protected] | |
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 --exclude dioxus-mobile --profile release-unoptimized | |
fmt: | |
if: github.event.pull_request.draft == false | |
name: Rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/[email protected] | |
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-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" | |
- 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: | |
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/[email protected] | |
- 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-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/[email protected] | |
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-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 | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/[email protected] | |
with: # speed things up a bit | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- 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" | |
- name: Prebuild CLI | |
run: | | |
cargo build --package dioxus-cli --release | |
- 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: 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" | |
- 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 | |
- name: Create Dev Drive using ReFS | |
run: ${{ github.workspace }}/.github/workflows/setup-dev-drive.ps1 | |
# actions/checkout does not let us clone into anywhere outside ${{ github.workspace }}, so we have to copy the clone... | |
- name: Copy Git Repo to Dev Drive | |
run: | | |
Copy-Item -Path "${{ github.workspace }}" -Destination "${{ env.UV_WORKSPACE }}" -Recurse | |
- uses: dtolnay/[email protected] | |
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-latest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - uses: dtolnay/[email protected] | |
# - 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" |