# 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: TP Integration Tests

env:
  # alpine:3.13
  ALPINE_VERSION: sha256:08d6ca16c60fe7490c03d10dc339d9fd8ea67c6466dea8d558526b1330a85930

on:
  push:
    paths:
      - .github/actions/todb-init/**
      - .github/actions/tvdb-init/**
      - .github/actions/tp-integration-tests/**
      - .github/workflows/tp.integration.tests.yml
      - GO_VERSION
      - infrastructure/cdn-in-a-box/optional/traffic_vault/**
      - traffic_ops/traffic_ops_golang/**.go
      - traffic_portal/**
  create:
  pull_request:
    paths:
      - .github/actions/todb-init/**
      - .github/actions/tvdb-init/**
      - .github/actions/tp-integration-tests/**
      - .github/workflows/tp.integration.tests.yml
      - GO_VERSION
      - infrastructure/cdn-in-a-box/optional/traffic_vault/**
      - traffic_ops/traffic_ops_golang/**.go
      - traffic_portal/**
    types: [ opened, reopened, ready_for_review, synchronize ]

jobs:
  TP_Integration_tests:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    services:
      hub:
        image: selenium/hub
        ports:
          - 4442:4442
          - 4443:4443
          - 4444:4444
        options: --health-cmd=/opt/bin/check-grid.sh --health-interval=5s --health-timeout=15s --health-retries=5
      chromium:
        image: ossalternatives/selenium-node-chromium
        env:
          SE_EVENT_BUS_HOST: hub
          SE_EVENT_BUS_PUBLISH_PORT: 4442
          SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
        volumes:
          - /dev/shm:/dev/shm
      postgres:
        image: postgres:11
        env:
          POSTGRES_USER: traffic_ops
          POSTGRES_PASSWORD: twelve
          POSTGRES_DB: traffic_ops
        ports:
          - 5432:5432
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
      smtp:
        image: maildev/maildev:2.0.0-beta3
        ports:
          - 25:25
        options: >-
          --entrypoint=bin/maildev
          --user=root
          --health-cmd="sh -c \"[[ \$(wget -qO- http://smtp/healthz) == true ]]\""
          --
          maildev/maildev:2.0.0-beta3
          --smtp=25
          --hide-extensions=STARTTLS
          --web=80

    steps:
      - name: Checkout
        uses: actions/checkout@master
      - name: Cache Alpine Docker image
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/docker-images
          key: docker-images/alpine@${{ env.ALPINE_VERSION }}.tar.gz
      - name: Import cached Alpine Docker image
        run: .github/actions/save-alpine-tar/entrypoint.sh load ${{ env.ALPINE_VERSION }}
      - name: Cache node modules
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-modules-${{ hashFiles('traffic_portal/package-lock.json traffic_portal/test/integration/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-modules-
      - name: Initialize Traffic Ops Database
        id: todb
        uses: ./.github/actions/todb-init
      - name: Initialize Traffic Vault Database
        id: tvdb
        uses: ./.github/actions/tvdb-init
      - name: Check Go Version
        run: echo "::set-output name=value::$(cat GO_VERSION)"
        id: go-version
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ steps.go-version.outputs.value }}
      - name: Run TP
        uses: ./.github/actions/tp-integration-tests
        with:
          smtp_address: 172.17.0.1
      - name: Upload Report
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: ${{ github.job }}
          path: ${{ github.workspace }}/traffic_portal/test/integration/Reports/
      - name: Save Alpine Docker image
        run: .github/actions/save-alpine-tar/entrypoint.sh save ${{ env.ALPINE_VERSION }}
