#
# 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.
#

on: ["pull_request"]
env:
  DOCKER_DIR: ./docker
  LOG_DIR: /tmp/dolphinscheduler

name: Test

concurrency:
  group: e2e-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  test:
    name: E2E
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - name: Sanity Check
        uses: ./.github/actions/sanity-check
      - uses: actions/cache@v1
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven
      - name: Build Image
        run: |
          sh ./docker/build/hooks/build
      - name: Docker Run
        run: |
          export VERSION=$(cat $(pwd)/pom.xml | grep '<revision>' -m 1 | awk '{print $1}' | sed 's/<revision>//' | sed 's/<\/revision>//')
          sed -i "s/apache\/dolphinscheduler:latest/apache\/dolphinscheduler:${VERSION}/g" $(pwd)/docker/docker-swarm/docker-compose.yml
          docker-compose -f $(pwd)/docker/docker-swarm/docker-compose.yml up -d
      - name: Check Server Status
        run: sh $(pwd)/docker/docker-swarm/check
      - name: Prepare e2e env
        run: |
          sudo apt-get install -y libxss1 libappindicator1 libindicator7 xvfb unzip libgbm1
          wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
          sudo dpkg -i google-chrome*.deb
          sudo apt-get install -f -y
          google-chrome -version
          googleVersion=$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
          wget -N https://chromedriver.storage.googleapis.com/${googleVersion}/chromedriver_linux64.zip
          unzip chromedriver_linux64.zip
          sudo mv -f chromedriver /usr/local/share/chromedriver
          sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
#     - name: Run e2e Test
#       run: cd ./e2e && mvn -B clean test
      - name: Collect logs
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: dslogs
          path: ${{ github.workspace }}/docker/docker-swarm/dolphinscheduler-logs


