name: Benchmark

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]
    branches:
      - master

jobs:
  uWebSockets:
    name: uWebSockets
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Run
        run: |
          NODE_ENV=production node benchmark/servers/uWebSockets.mjs &
          SERVER=uWebSockets ./k6 run benchmark/k6.mjs
  ws7:
    name: ws7
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Run
        run: |
          NODE_ENV=production node benchmark/servers/ws7.mjs &
          SERVER=ws7 ./k6 run benchmark/k6.mjs
  ws8:
    name: ws8
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Run
        run: |
          NODE_ENV=production node benchmark/servers/ws8.mjs &
          SERVER=ws8 ./k6 run benchmark/k6.mjs
  fastify-websocket:
    name: '@fastify/websocket'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Run
        run: |
          NODE_ENV=production node benchmark/servers/fastify-websocket.mjs &
          SERVER="@fastify/websocket" ./k6 run benchmark/k6.mjs
  legacy_ws7:
    name: legacy_ws7
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Run
        run: |
          NODE_ENV=production node benchmark/servers/legacy_ws7.mjs &
          LEGACY=1 SERVER=legacy_ws7 ./k6 run benchmark/k6.mjs
  bun:
    name: bun
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Set up bun
        uses: oven-sh/setup-bun@v1
        with:
          bun-version: latest
      - name: Run
        run: |
          bun benchmark/servers/bun.ts &
          SERVER=bun ./k6 run benchmark/k6.mjs
  deno:
    name: deno
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Download k6
        run: |
          curl https://github.com/grafana/k6/releases/download/v0.39.0/k6-v0.39.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1
      - name: Build
        run: yarn run build:esm
      - name: Set up deno
        uses: denoland/setup-deno@v1
        with:
          deno-version: 1.x
      - name: Cache
        run: deno cache benchmark/servers/deno.ts
      - name: Run
        run: |
          deno run -A benchmark/servers/deno.ts &
          SERVER=deno ./k6 run benchmark/k6.mjs
