rakers 0.1.5

Lightweight headless JS renderer — executes JavaScript and returns the rendered HTML
Documentation
name: CI

on:
  push:
    branches: [main]
    tags: ["v*"]
  pull_request:

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy -- -D warnings
      - run: cargo clippy --no-default-features --features boa -- -D warnings

  test:
    name: Test (${{ matrix.engine }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - engine: rquickjs
            flags: ""
          - engine: boa
            flags: --no-default-features --features boa
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.engine }}
      - name: Build
        run: cargo build ${{ matrix.flags }}
      - name: Unit tests
        run: cargo test --lib ${{ matrix.flags }}
      - name: CLI tests
        run: cargo test --test cli ${{ matrix.flags }}
      - name: Integration tests
        run: cargo test --test integration ${{ matrix.flags }}

  todomvc-compat:
    name: TodoMVC compatibility
    runs-on: ubuntu-latest
    continue-on-error: true
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          key: todomvc
      - name: Build
        run: cargo build -q
      - name: Run compatibility sweep
        run: bash scripts/todomvc_compat.sh ./target/debug/rakers

  release:
    name: Release (${{ matrix.target }})
    if: startsWith(github.ref, 'refs/tags/v')
    needs: [fmt, clippy, test]
    runs-on: ${{ matrix.os }}
    permissions:
      contents: write
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
            asset: rakers-linux-x86_64
            extra_packages: musl-tools
          - os: macos-latest
            target: aarch64-apple-darwin
            asset: rakers-macos-aarch64
    steps:
      - uses: actions/checkout@v4
      - name: Install extra packages
        if: matrix.extra_packages != ''
        run: sudo apt-get install -y ${{ matrix.extra_packages }}
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
        with:
          key: release-${{ matrix.target }}
      - name: Build release binary
        run: cargo build --release --no-default-features --features rquickjs --target ${{ matrix.target }}
      - name: Stage binary
        run: cp target/${{ matrix.target }}/release/rakers ${{ matrix.asset }}
      - name: Upload to GitHub release
        uses: softprops/action-gh-release@v2
        with:
          files: ${{ matrix.asset }}

  smoke:
    name: Smoke test release binary
    if: startsWith(github.ref, 'refs/tags/v')
    needs: [release]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run smoke test
        run: bash scripts/smoke_test_release.sh

  publish:
    name: Publish to crates.io
    if: startsWith(github.ref, 'refs/tags/v')
    needs: [smoke]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          key: publish
      - name: Publish
        run: cargo publish --no-verify
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}