Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweak CI with new caching #1800

Merged
merged 11 commits into from
Jan 9, 2024
143 changes: 117 additions & 26 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,64 +33,81 @@ concurrency:

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
CARGO_INCREMENTAL: "0"
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
# RUSTC_WRAPPER: "sccache"
SCCACHE_IDLE_TIMEOUT: "0"
SCCACHE_GHA_VERSION: "sccache"
SCCACHE_BYPASS_CHECK: "on"

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
- run: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libxdo-dev
- uses: dtolnay/rust-toolchain@stable
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: Swatinem/rust-cache@v2
with:
cache-all-crates: "true"
save-if: ${{ github.ref == 'refs/heads/master' }}
- uses: ilammy/setup-nasm@v1
- uses: actions/checkout@v4
- run: cargo check --all --examples --tests

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: mozilla-actions/sccache-action@v0.0.3
- uses: Swatinem/rust-cache@v2
with:
cache-all-crates: "true"
save-if: ${{ github.ref == 'refs/heads/master' }}
- uses: ilammy/setup-nasm@v1
- uses: davidB/rust-cargo-make@v1
- uses: browser-actions/setup-firefox@latest
- uses: jetli/wasm-pack-action@v0.4.0
- uses: actions/checkout@v4
- run: cargo make tests

fmt:
if: github.event.pull_request.draft == false
name: Rustfmt
runs-on: ubuntu-latest
steps:
- uses: dtolnay/rust-toolchain@stable
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: ilammy/setup-nasm@v1
- run: rustup component add rustfmt
- uses: actions/checkout@v4
- uses: ilammy/setup-nasm@v1
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- uses: Swatinem/rust-cache@v2
with:
cache-all-crates: "true"
save-if: ${{ github.ref == 'refs/heads/master' }}
- 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
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: ilammy/setup-nasm@v1
- run: rustup component add clippy
- uses: actions/checkout@v4
- 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/master' }}
- run: cargo clippy --workspace --examples --tests -- -D warnings

miri:
Expand All @@ -115,7 +132,10 @@ jobs:
with:
toolchain: ${{ env.rust_nightly }}
components: miri
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: Swatinem/rust-cache@v2
with:
cache-all-crates: "true"
save-if: ${{ github.ref == 'refs/heads/master' }}
- name: miri
# Many of tests in tokio/tests and doctests use #[tokio::test] or
# #[tokio::main] that calls epoll_create1 that Miri does not support.
Expand All @@ -131,9 +151,6 @@ jobs:
if: github.event.pull_request.draft == false
name: Playwright Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./playwright-tests
steps:
# Do our best to cache the toolchain and node install steps
- uses: actions/checkout@v4
Expand All @@ -146,21 +163,34 @@ jobs:
with:
toolchain: stable
targets: x86_64-unknown-linux-gnu,wasm32-unknown-unknown
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: Swatinem/rust-cache@v2
with:
cache-all-crates: "true"
save-if: ${{ github.ref == 'refs/heads/master' }}

- name: Install dependencies
run: npm ci
working-directory: ./playwright-tests

- name: Install Playwright
run: npm install -D @playwright/test
working-directory: ./playwright-tests

- name: Install Playwright Browsers
run: npx playwright install --with-deps
working-directory: ./playwright-tests

# Cache the CLI by using cargo run internally
# - name: Install Dioxus CLI
# uses: actions-rs/cargo@v1
# with:
# command: install
# args: --path packages/cli

- name: Run Playwright tests
run: npx playwright test
working-directory: ./playwright-tests

- uses: actions/upload-artifact@v4
if: always()
with:
Expand All @@ -171,6 +201,7 @@ jobs:

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:
Expand Down Expand Up @@ -217,21 +248,81 @@ jobs:
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

- uses: mozilla-actions/sccache-action@v0.0.3
- uses: Swatinem/rust-cache@v2
with:
workspaces: core -> ../target
save-if: ${{ matrix.features.key == 'all' }}
# The prefix cache key, this can be changed to start a new cache manually.
# default: "v0-rust"
# prefix-key: ""

- name: Install rustfmt
run: rustup component add rustfmt
# A cache key that is used instead of the automatic `job`-based key,
# and is stable over multiple jobs.
# default: empty
# shared-key: ""

- uses: actions/checkout@v4
# An additional cache key that is added alongside the automatic `job`-based
# cache key and can be used to further differentiate jobs.
# default: empty
key: "${{ matrix.platform.target }}"

# A whitespace separated list of env-var *prefixes* who's value contributes
# to the environment cache key.
# The env-vars are matched by *prefix*, so the default `RUST` var will
# match all of `RUSTC`, `RUSTUP_*`, `RUSTFLAGS`, `RUSTDOC_*`, etc.
# default: "CARGO CC CFLAGS CXX CMAKE RUST"
# env-vars: ""

# The cargo workspaces and target directory configuration.
# These entries are separated by newlines and have the form
# `$workspace -> $target`. The `$target` part is treated as a directory
# relative to the `$workspace` and defaults to "target" if not explicitly given.
# default: ". -> target"
# workspaces: ""

# Additional non workspace directories to be cached, separated by newlines.
# cache-directories: ""

# Determines whether workspace `target` directories are cached.
# If `false`, only the cargo registry will be cached.
# default: "true"
# cache-targets: ""

# Determines if the cache should be saved even when the workflow has failed.
# default: "false"
# cache-on-failure: "true"

# Determines which crates are cached.
# If `true` all crates will be cached, otherwise only dependent crates will be cached.
# Useful if additional crates are used for CI tooling.
# default: "false"
cache-all-crates: "true"
# save-if: ${{ github.ref == 'refs/heads/master' }}

# Determiners whether the cache should be saved.
# If `false`, the cache is only restored.
# Useful for jobs where the matrix is additive e.g. additional Cargo features,
# or when only runs from `master` should be saved to the cache.
# default: "true"
# save-if: ""
# To only cache runs from `master`:
save-if: ${{ github.ref == 'refs/heads/master' }}

# Specifies what to use as the backend providing cache
# Can be set to either "github" or "buildjet"
# default: "github"
# cache-provider: ""


# - uses: mozilla-actions/sccache-action@v0.0.3
# with:
# workspaces: core -> ../target
# save-if: ${{ matrix.features.key == 'all' }}
- name: test
run: |
${{ env.RUST_CARGO_COMMAND }} ${{ matrix.platform.command }} ${{ matrix.platform.args }} --target ${{ matrix.platform.target }}
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
/playwright-tests/web/dist
/playwright-tests/fullstack/dist
/dist
Cargo.lock
.DS_Store
/examples/assets/test_video.mp4

# new recommendation to keep the lockfile in for CI and reproducible builds
# Cargo.lock

.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
Expand Down