Skip to content

Move from a build script to xtasks #35

Move from a build script to xtasks

Move from a build script to xtasks #35

Workflow file for this run

name: Continuous integration
on: [push, pull_request]
jobs:
assets:
name: Build assets
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9
run_install: false
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install JS dependencies
run: pnpm install
- name: Build UI assets
run: pnpm build
- name: Format UI assets
run: pnpm fmt:check
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: "stable"
- name: Convert assets to Rust
run: cargo xtask assets
- name: Upload assets
uses: actions/upload-artifact@v4
with:
name: assets
path: src/html/assets.rs
check:
name: Build and test
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- 1.77 # MSRV
- stable
- nightly
needs: assets
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download assets
uses: actions/download-artifact@v4
with:
name: assets
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
# https://doc.rust-lang.org/1.77.2/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci
- name: Cargo cache (platform-independent)
uses: actions/cache@v4
with:
path: |-
/home/runner/.cargo/.crates.toml
/home/runner/.cargo/.crates2.json
/home/runner/.cargo/registry/index/
/home/runner/.cargo/registry/cache/
/home/runner/.cargo/git/db/
key: cargo-home-${{ matrix.rust }}
- name: Cargo cache (build)
uses: actions/cache@v4
with:
path: |-
target
key: cargo-build-${{ runner.os }}-${{ matrix.rust }}
- name: Cargo cache (build conformance)
uses: actions/cache@v4
with:
path: |-
conformance/target
key: cargo-build-conformance-${{ runner.os }}-${{ matrix.rust }}
if: ${{ matrix.rust == 'stable' }}
- name: Build code
run: cargo build
- name: Format code
run: cargo fmt --all -- --check
if: ${{ matrix.rust == 'stable' }}
- name: Lint code
run: cargo clippy -- -D warnings
if: ${{ matrix.rust == 'stable' }}
- name: Test conformance
run: cd conformance && cargo run
if: ${{ matrix.rust == 'stable' }}
- name: Install Ruby
uses: ruby/setup-ruby@v1
with:
working-directory: integration-tests
bundler-cache: true
if: ${{ matrix.rust == 'stable' }}
- name: Test UI
run: cd integration-tests && bundle exec rspec
if: ${{ matrix.rust == 'stable' }}
- name: Lint UI Tests
run: cd integration-tests && bundle exec rubocop
if: ${{ matrix.rust == 'stable' }}