#
# Copyright (C) 2019-2023 vdaas.org vald team <vald@vdaas.org>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# You may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
name: "Run e2e code bench: bench-agent"
on:
  push:
    branches:
      - main
    paths:
      - ".github/workflows/e2e-bench-agent.yml"
      - "internal/core/**"
      - "internal/client/**"
      - "internal/net/**"
      - "apis/grpc/**"
      - "pkg/agent/core/ngt/**"
      - "cmd/agent/core/ngt/**"
      - "hack/benchmark/**"
      - "versions/GO_VERSION"
      - "versions/NGT_VERSION"
  pull_request:
    paths:
      - ".github/workflows/e2e-bench-agent.yml"
      - "internal/core/**"
      - "internal/client/**"
      - "internal/net/**"
      - "apis/grpc/**"
      - "pkg/agent/core/ngt/**"
      - "cmd/agent/core/ngt/**"
      - "hack/benchmark/**"
      - "versions/GO_VERSION"
      - "versions/NGT_VERSION"

env:
  DATASET: fashion-mnist-784-euclidean.hdf5
  DATASET_ARGS: fashion-mnist

jobs:
  dump-contexts-to-log:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/dump-context

  grpc-sequential:
    name: grpc-sequential
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/vdaas/vald/vald-ci-container:nightly
    steps:
      - uses: actions/checkout@v3

      - name: Set Git config
        run: |
          git config --global --add safe.directory ${GITHUB_WORKSPACE}

      - uses: ./.github/actions/setup-go

      - name: Run grpc-sequential
        run: |
          make hack/benchmark/assets/dataset/${{ env.DATASET }}
          DATASET_ARGS=${{ env.DATASET_ARGS }} make bench/agent/sequential/grpc

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: agent-sequential-grpc
          path: |
            ./pprof/agent/sequential/grpc.bin
            ./pprof/agent/sequential/grpc.cpu.out
            ./pprof/agent/sequential/grpc.mem.out
            ./pprof/agent/sequential/grpc.trace.out
            ./pprof/agent/sequential/grpc.cpu.svg
            ./pprof/agent/sequential/grpc.mem.svg

  grpc-stream:
    name: grpc-stream
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/vdaas/vald/vald-ci-container:nightly
    steps:
      - uses: actions/checkout@v3

      - name: Set Git config
        run: |
          git config --global --add safe.directory ${GITHUB_WORKSPACE}

      - uses: ./.github/actions/setup-go

      - name: Run grpc-stream
        run: |
          make hack/benchmark/assets/dataset/${{ env.DATASET }}
          DATASET_ARGS=${{ env.DATASET_ARGS }} make bench/agent/stream

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: agent-stream
          path: |
            ./pprof/agent/stream.bin
            ./pprof/agent/stream.cpu.out
            ./pprof/agent/stream.mem.out
            ./pprof/agent/stream.trace.out
            ./pprof/agent/stream.cpu.svg
            ./pprof/agent/stream.mem.svg