resopt-cli 0.6.1

Find, review and safely apply resource optimizations for Apple and Android projects.
Documentation
name: CI
on:
  push:
    branches: ['**']
  pull_request:
  workflow_call:
permissions:
  contents: read
jobs:
  check:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - uses: Swatinem/rust-cache@v2
      - run: node --test tests/report-ui.cjs
      - run: cargo fmt --all --check
      - run: cargo clippy --locked --workspace --all-targets -- -D warnings
      - run: cargo test --locked --workspace --all-targets
      - run: cargo test --locked --workspace --doc
      - uses: oven-sh/setup-bun@v2
        if: runner.os == 'macOS'
        with:
          bun-version: '1.3.14'
      - run: bun install --frozen-lockfile
        if: runner.os == 'macOS'
        working-directory: web
      - run: cargo build --locked --bin resopt
        if: runner.os == 'macOS'
      - run: bun test tests/native-integration.test.ts
        if: runner.os == 'macOS'
        working-directory: web
        env:
          RESOPT_TEST_BIN: ${{ github.workspace }}/target/debug/resopt

  browser:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
          components: llvm-tools-preview
      - uses: Swatinem/rust-cache@v2
        with:
          key: browser-wasm
      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: '1.3.14'
      - run: cargo install wasm-bindgen-cli --version 0.2.128 --locked
      - run: bun install --frozen-lockfile
        working-directory: web
      - run: bun run build
        working-directory: web
      - run: bun run typecheck
        working-directory: web
      - run: bun test
        working-directory: web
      - run: cargo test --locked --no-default-features --lib
      - uses: actions/upload-artifact@v4
        with:
          name: browser-site
          path: web/dist/
          if-no-files-found: error

  ui-e2e:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - uses: Swatinem/rust-cache@v2
        with:
          key: ui-e2e
      - run: cargo build --locked --release --bin resopt
      - name: Drive the embedded UI in headless Chrome
        run: |
          mkdir "$RUNNER_TEMP/project"
          node tests/browser/fixture.mjs "$RUNNER_TEMP/project"
          node tests/browser/e2e.mjs target/release/resopt "$RUNNER_TEMP/project" "$RUNNER_TEMP/shots"
        env:
          CHROME_BIN: /usr/bin/google-chrome
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: ui-e2e-screenshots
          path: ${{ runner.temp }}/shots/
          if-no-files-found: ignore