# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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
#
#     http://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: Reusable Test

on:
  workflow_call:
    inputs:
      options:
        required: false
        type: string
      timeout-minutes:
        required: false
        type: number
        default: 30

jobs:
  test:
    name: Test
    runs-on: ubuntu-20.04
    timeout-minutes: ${{ inputs.timeout-minutes }}
    strategy:
      matrix:
        tz: ["UTC", "Asia/Shanghai", "America/Los_Angeles"]
    steps:
      - name: Set timezone
        run: sudo timedatectl set-timezone ${{ matrix.tz }}
      - name: Check out code into the Go module directory
        uses: actions/checkout@v3
      - name: Cache Go Modules
        uses: actions/cache@v3
        id: cache-go
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Cache tools
        uses: actions/cache@v3
        id: cache-tool
        with:
          path: bin
          key: ${{ runner.os }}-test-tool-${{ hashFiles('**version.mk') }}
          restore-keys: |
            ${{ runner.os }}-test-tool-
      - uses: actions/setup-node@v3
        with:
          node-version: 16.15
          cache: 'npm'
          cache-dependency-path: ui/package-lock.json
      - name: Install Go
        uses: actions/setup-go@v3
        with:
          go-version-file: 'go.mod'
      - name: Update dependencies 
        if: steps.cache-go.outputs.cache-hit != 'true'
        run: GOPROXY=https://proxy.golang.org go mod download
      - name: Generate mocks
        run: make generate
      - name: Test integration and banyand
        run: TEST_CI_OPTS="--cover --covermode atomic --coverprofile=coverage.out ${{ inputs.options }}" make test-ci
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
