name: Benchmark - SSR

on:
  pull_request:
    branches: [master]
    paths:
      - .github/workflows/benchmark-ssr.yml
      - "packages/yew/**"
      - "packages/yew-macro/**"
      - "packages/yew-router/**"
      - "packages/yew-router-macro/**"
      - "examples/function_router/**"
      - "tools/benchmark-ssr/**"

jobs:
  benchmark-ssr:
    name: Benchmark - SSR
    runs-on: ubuntu-latest

    steps:
      - name: Checkout master
        uses: actions/checkout@v4
        with:
          repository: "yewstack/yew"
          ref: master
          path: yew-master

      - name: Checkout pull request
        uses: actions/checkout@v4
        with:
          path: current-pr

      - name: Setup toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          targets: wasm32-unknown-unknown

      - name: Restore Rust cache for yew packages
        uses: Swatinem/rust-cache@v2
        with:
          shared-key: yew-packages
          workspaces: |
            yew-master
            current-pr

      - name: Run pull request benchmark
        working-directory: current-pr/tools/benchmark-ssr
        run: cargo run --profile=bench -- --output-path ../output.json

      - name: Run master benchmark
        working-directory: yew-master/tools/benchmark-ssr
        run: cargo run --profile=bench -- --output-path ../output.json

      - name: Write Pull Request ID
        run: |
          echo "${{ github.event.number }}" > .PR_NUMBER

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: benchmark-ssr
          include-hidden-files: true
          path: |
            .PR_NUMBER
            yew-master/tools/output.json
            current-pr/tools/output.json
          retention-days: 1
