Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/actions/setup-rust/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Setup pinned Rust
description: Install the Rust toolchain pinned by rust-toolchain.toml.

inputs:
components:
description: Comma-separated Rust components to install.
required: false
default: ""
targets:
description: Comma-separated Rust targets to install.
required: false
default: ""

outputs:
toolchain:
description: Rust toolchain channel installed by this action.
value: ${{ steps.toolchain.outputs.toolchain }}

runs:
using: composite
steps:
- name: Read pinned toolchain
id: toolchain
shell: bash
run: |
set -euo pipefail
toolchain="$(sed -n 's/^channel = "\(.*\)"/\1/p' "${GITHUB_WORKSPACE}/rust-toolchain.toml")"
if [ -z "${toolchain}" ]; then
echo "rust-toolchain.toml does not define a toolchain channel." >&2
exit 1
fi
echo "toolchain=${toolchain}" >> "${GITHUB_OUTPUT}"

- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.toolchain.outputs.toolchain }}
components: ${{ inputs.components }}
targets: ${{ inputs.targets }}
26 changes: 26 additions & 0 deletions .github/actions/setup-sccache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Setup sccache
description: Configure sccache for Rust and optional CMake builds.

inputs:
cmake-launcher:
description: Also let crates that drive CMake use sccache as the C/C++ compiler launcher.
required: false
default: "false"

runs:
using: composite
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10

- name: Configure sccache
shell: bash
run: |
set -euo pipefail
echo "SCCACHE_GHA_ENABLED=true" >> "${GITHUB_ENV}"
echo "SCCACHE_BASEDIRS=${GITHUB_WORKSPACE}" >> "${GITHUB_ENV}"
echo "RUSTC_WRAPPER=sccache" >> "${GITHUB_ENV}"
echo "CARGO_INCREMENTAL=0" >> "${GITHUB_ENV}"
if [ "${{ inputs.cmake-launcher }}" = "true" ]; then
echo "VIDE_USE_SCCACHE_CMAKE=1" >> "${GITHUB_ENV}"
fi
87 changes: 58 additions & 29 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,23 @@ name: CI
on:
push:
branches: [master]
paths-ignore:
- "docs/**"
- "playground/**"
- "crates/vide-lsp-wasm/**"
- ".github/actions/setup-emscripten/**"
- ".github/workflows/docs-preview.yml"
- ".github/workflows/deploy-docs.yml"
pull_request:
types: [opened, synchronize, reopened]
branches: ["**"]
paths-ignore:
- "docs/**"
- "playground/**"
- "crates/vide-lsp-wasm/**"
- ".github/actions/setup-emscripten/**"
- ".github/workflows/docs-preview.yml"
- ".github/workflows/deploy-docs.yml"
workflow_dispatch:

concurrency:
Expand All @@ -18,16 +32,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
uses: ./.github/actions/setup-rust
with:
components: clippy, rustfmt
- name: Setup sccache
uses: ./.github/actions/setup-sccache
with:
cmake-launcher: "true"
- name: Rust Cache
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
shared-key: rust-${{ runner.os }}
key: workspace-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'xtask/**') }}
cache-workspace-crates: true
cache-on-failure: true
- name: Format Check
Expand All @@ -43,20 +61,24 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
uses: ./.github/actions/setup-rust
with:
components: rustfmt
- name: Setup sccache
uses: ./.github/actions/setup-sccache
with:
cmake-launcher: "true"
- name: Rust Cache
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
shared-key: rust-${{ runner.os }}
key: workspace-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'xtask/**') }}
cache-workspace-crates: true
cache-on-failure: true
- name: Test
run: rustup run nightly cargo test --workspace
run: cargo test --workspace

vscode-extension:
name: VS Code Checks
Expand All @@ -66,18 +88,6 @@ jobs:
working-directory: editors/vscode
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: Rust Cache
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
cache-workspace-crates: true
cache-on-failure: true
- name: Setup Node
uses: actions/setup-node@v4
with:
Expand Down Expand Up @@ -111,16 +121,20 @@ jobs:
working-directory: editors/vscode
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
uses: ./.github/actions/setup-rust
with:
components: rustfmt
- name: Setup sccache
uses: ./.github/actions/setup-sccache
with:
cmake-launcher: "true"
- name: Rust Cache
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
shared-key: rust-${{ runner.os }}
key: package-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'editors/vscode/scripts/**') }}
cache-workspace-crates: true
cache-on-failure: true
- name: Setup Node
Expand Down Expand Up @@ -160,8 +174,10 @@ jobs:
include:
- target: alpine-x64
image: ghcr.io/blackdex/rust-musl:x86_64-musl-nightly
rust-target: x86_64-unknown-linux-musl
- target: alpine-arm64
image: ghcr.io/blackdex/rust-musl:aarch64-musl-nightly
rust-target: aarch64-unknown-linux-musl
defaults:
run:
working-directory: editors/vscode
Expand All @@ -172,19 +188,32 @@ jobs:
apt-get update
apt-get install -y --no-install-recommends ca-certificates cmake git python3

- name: Install Rust components
working-directory: .
run: rustup component add --toolchain nightly-x86_64-unknown-linux-gnu rustfmt

- uses: actions/checkout@v4
with:
submodules: recursive

- name: Trust checkout directories
working-directory: .
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git config --global --add safe.directory "$GITHUB_WORKSPACE/crates/slang"

- name: Install Rust
uses: ./.github/actions/setup-rust
with:
components: rustfmt
targets: ${{ matrix.rust-target }}

- name: Setup sccache
uses: ./.github/actions/setup-sccache
with:
cmake-launcher: "true"

- name: Rust Cache
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
shared-key: rust-${{ runner.os }}-${{ matrix.target }}
key: package-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'editors/vscode/scripts/**') }}
cache-workspace-crates: true
cache-on-failure: true

- name: Setup Node
uses: actions/setup-node@v4
Expand Down
35 changes: 33 additions & 2 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -252,23 +252,45 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Restore playground WASM cache
id: playground-wasm-cache
uses: actions/cache/restore@v4
with:
submodules: recursive
path: playground/public/wasm
key: playground-wasm-${{ runner.os }}-${{ env.EMSDK_VERSION }}-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'playground/scripts/build-vide-wasm.mjs', 'playground/scripts/script-utils.mjs', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }}

- name: Verify cached playground WASM
if: steps.playground-wasm-cache.outputs.cache-hit == 'true'
run: |
test -s playground/public/wasm/vide-lsp.js
test -s playground/public/wasm/vide-core.js
test -s playground/public/wasm/vide-core.wasm

- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-rust
with:
components: rustfmt

- name: Setup sccache
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-sccache
with:
cmake-launcher: "true"

- name: Rust Cache
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
uses: Swatinem/rust-cache@v2
continue-on-error: true
with:
shared-key: docs-wasm-${{ runner.os }}-${{ env.EMSDK_VERSION }}
key: wasm-src-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', 'src/**', 'crates/**', 'playground/scripts/build-vide-wasm.mjs', 'playground/scripts/script-utils.mjs', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }}
cache-workspace-crates: true
cache-on-failure: true

- name: Install Emscripten SDK
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-emscripten
with:
version: ${{ env.EMSDK_VERSION }}
Expand All @@ -287,11 +309,20 @@ jobs:
working-directory: playground

- name: Build playground WASM
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
run: |
source "${EMSDK}/emsdk_env.sh"
npm run build:wasm
working-directory: playground

- name: Save playground WASM cache
if: steps.playground-wasm-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
continue-on-error: true
with:
path: playground/public/wasm
key: ${{ steps.playground-wasm-cache.outputs.cache-primary-key }}

- name: Install dependencies
run: npm ci
working-directory: docs
Expand Down
Loading
Loading