# 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/tp-integration-tests/**
      - .github/workflows/tp.integration.tests.yml
      - GO_VERSION
      - infrastructure/cdn-in-a-box/traffic_vault/**
      - traffic_ops/*client/**.go
      - traffic_ops/testing/api/**.go
      - traffic_ops/traffic_ops_golang/**.go
      - traffic_portal/**
  create:
  pull_request:
    paths:
      - .github/actions/todb-init/**
      - .github/actions/tp-integration-tests/**
      - .github/workflows/tp.integration.tests.yml
      - GO_VERSION
      - infrastructure/cdn-in-a-box/traffic_vault/**
      - traffic_ops/*client/**.go
      - traffic_ops/testing/api/**.go
      - 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:
          - "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:
          HUB_HOST: hub
          HUB_PORT: 4444
        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: 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 }}
