Skip to content

update runtimelib and jupyter-protocol (#26) #271

update runtimelib and jupyter-protocol (#26)

update runtimelib and jupyter-protocol (#26) #271

Workflow file for this run

name: Test Suite
on:
push:
branches:
- main
- kyoto
pull_request:
branches:
- main
- kyoto
env:
PANDOC_VERSION: "3.8.3"
jobs:
test-suite:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
name: Run test suite
if: github.repository == 'quarto-dev/q2'
steps:
- name: Checkout Repo
uses: actions/checkout@v4
# Fix mtimes IMMEDIATELY after checkout, before anything else
- name: Restore file modification times
shell: bash
run: |
git ls-files | while read file; do
time=$(git log -1 --format='@%ct' -- "$file" 2>/dev/null || echo '@0')
[ "$time" != "@0" ] && touch -d "$time" "$file" 2>/dev/null || true
done
- name: Set up Homebrew
if: runner.os == 'macOS'
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@main
# Consistent Rust setup for both platforms
- name: Set up Rust nightly
uses: dtolnay/rust-toolchain@nightly
- name: Output rust version
shell: bash
run: rustup --version
# Cache Rust AFTER toolchain is set up
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: "rust-test-suite"
# Cache cargo-nextest and insta separately to avoid reinstalling
- name: Install nextest
uses: taiki-e/install-action@nextest
- name: Install cargo-insta
uses: taiki-e/install-action@v2
with:
tool: cargo-insta
# Pandoc setup (pinned to match Quarto 1.9)
- name: Set up Pandoc (Linux)
if: runner.os == 'Linux'
run: |
curl -LO "https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-amd64.deb"
sudo dpkg -i "pandoc-${PANDOC_VERSION}-1-amd64.deb"
shell: bash
- name: Set up Pandoc (macOS)
if: runner.os == 'macOS'
run: |
curl -LO "https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-arm64-macOS.pkg"
sudo installer -pkg "pandoc-${PANDOC_VERSION}-arm64-macOS.pkg" -target /
shell: bash
# tree-sitter setup
- name: Set up tree-sitter CLI (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libc6-dev gcc-multilib
curl -LO https://github.com/tree-sitter/tree-sitter/releases/download/v0.25.8/tree-sitter-linux-x86.gz
gunzip tree-sitter-linux-x86.gz
chmod +x tree-sitter-linux-x86
sudo mv tree-sitter-linux-x86 /usr/local/bin/tree-sitter
- name: Set up tree-sitter CLI (macOS)
if: runner.os == 'macOS'
run: brew install tree-sitter-cli
# Custom lint checks (before build to fail fast)
- name: Run custom lints
shell: bash
run: cargo xtask lint
# TypeScript workspace build
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
- name: Install npm dependencies
shell: bash
run: npm ci
# WASM build for hub-client (must happen before TypeScript build)
- name: Set up Clang (Linux)
if: runner.os == 'Linux'
uses: egor-tensin/setup-clang@v1
with:
version: latest
platform: x64
- name: Set up LLVM (macOS)
if: runner.os == 'macOS'
run: brew install llvm
shell: bash
- name: Install wasm-pack
shell: bash
run: cargo install wasm-pack
# - name: Build WASM module
# shell: bash
# run: |
# cd crates/wasm-quarto-hub-client
# if [ "$RUNNER_OS" = "macOS" ]; then
# export PATH="/opt/homebrew/opt/llvm/bin:/usr/local/opt/llvm/bin:$PATH"
# fi
# export CFLAGS_wasm32_unknown_unknown="-I$(pwd)/wasm-sysroot -Wbad-function-cast -Wcast-function-type -fno-builtin -DHAVE_ENDIAN_H"
# wasm-pack build --target web
# - name: Build TypeScript packages
# shell: bash
# run: npm run build
# Build and test
# Deny warnings in CI so they don't accumulate silently
- name: Build
shell: bash
run: cargo build
env:
RUSTFLAGS: "-D warnings"
- name: Test block tree-sitter grammar
shell: bash
run: |
cd crates/tree-sitter-qmd/tree-sitter-markdown
tree-sitter test
- name: Test Rust code
shell: bash
run: cargo nextest run
env:
RUSTFLAGS: "-D warnings"
# - name: Run hub-client tests
# shell: bash
# run: |
# cd hub-client
# npm run test:ci