mpl-lang 0.4.0

Axioms Metrics Processing Language
Documentation
name: CI

on:
  push:
    branches: ["main"]
  pull_request:
    branches:
      - main

jobs:
  format-rust:
    name: cargo fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          components: rustfmt
      - uses: actions-rust-lang/rustfmt@v1
  lint-rust:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          components: clippy
      - run: cargo clippy --locked --tests
  test-rust:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          components: llvm-tools-preview
      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - name: Install nexttest
        uses: taiki-e/install-action@nextest
      - name: Generate code coverage
        env:
          RUSTFLAGS: -D warnings
        run: |
          cargo llvm-cov --locked --no-report nextest --profile ci
          cargo llvm-cov report --locked --lcov --output-path lcov.txt
      - name: Upload coverage to Codecov
        if: github.event.pull_request.user.login != 'dependabot[bot]'
        uses: Wandalen/wretry.action@v3
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          action: codecov/codecov-action@v4
          attempt_limit: 6
          attempt_delay: 10000
          with: |
            files: ./lcov.txt
            flags: unittests
            fail_ci_if_error: ${{ github.event_name == 'pull_request' }}
            verbose: true
      - name: Generate code coverage (wasm)
        env:
          RUSTFLAGS: -D warnings
        run: |
          cargo llvm-cov --locked --no-report nextest --profile ci --no-default-features --features wasm
          cargo llvm-cov report --locked --lcov --output-path lcov-wasm.txt
      - name: Upload coverage to Codecov
        if: github.event.pull_request.user.login != 'dependabot[bot]'
        uses: Wandalen/wretry.action@v3
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          action: codecov/codecov-action@v4
          attempt_limit: 6
          attempt_delay: 10000
          with: |
            files: ./lcov-wasm.txt
            flags: wasm
            fail_ci_if_error: ${{ github.event_name == 'pull_request' }}
            verbose: true
  test-typescript:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
      - run: npm ci
        working-directory: packages/mpl-codemirror
      - run: npm test
        working-directory: packages/mpl-codemirror
  build-wasm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          target: wasm32-unknown-unknown
      - run: cargo install --locked wasm-pack
      - uses: actions/setup-node@v6
      - name: Build wasm
        # --no-opt: wasm-pack's bundled wasm-opt crashes, and even system wasm-opt
        # increases gzipped size (our wasm-release profile already optimizes well).
        run: wasm-pack build --scope axiomhq --target web --profile wasm-release --no-opt --no-default-features --features wasm
      - run: npm install typescript
        working-directory: pkg
      - name: Check TypeScript types
        run: npx tsc --noEmit -t esnext mpl_lang.d.ts
        working-directory: pkg
      - name: Test wasm build against sample queries
        run: node tests/wasm/test-wasm.mjs
  build-playground:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          target: wasm32-unknown-unknown
      - run: cargo install --locked wasm-pack
      - uses: actions/setup-node@v6
      - name: Build wasm (playground)
        # --no-opt: wasm-pack's bundled wasm-opt crashes, and even system wasm-opt
        # increases gzipped size (our wasm-release profile already optimizes well).
        run: wasm-pack build extra/mpl-playground --scope axiomhq --target web --profile wasm-release --no-opt
      - run: npm install typescript
        working-directory: extra/mpl-playground/pkg
      - name: Check TypeScript types (playground)
        run: npx tsc --noEmit -t esnext mpl_playground.d.ts
        working-directory: extra/mpl-playground/pkg
      - name: Test playground build against sample queries
        run: node tests/wasm/test-playground.mjs