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

env:
  ATS_VERSION: 8.1.x
  RHEL_VERSION: 8
  TARGET_ARCH: x86_64

on:
  workflow_dispatch:
  push:
    paths:
      - .github/workflows/cache-config-tests.yml
      - go.mod
      - go.sum
      - GO_VERSION
      - lib/go-atscfg/**.go
      - traffic_ops/*client/**.go
      - traffic_ops/toclientlib/**.go
      - lib/atscfg-go/**.go
      - traffic_ops/traffic_ops_golang/**.go
      - cache-config/**.go
      - cache-config/testing/**
      - vendor/**.go
      - vendor/modules.txt
      - .github/actions/build-ats-test-rpm/**
      - .github/actions/repo-info/**
      - .github/actions/cache-config-integration-tests/**
  create:
  pull_request:
    paths:
      - .github/workflows/cache-config-tests.yml
      - go.mod
      - go.sum
      - GO_VERSION
      - lib/go-atscfg/**.go
      - traffic_ops/*client/**.go
      - traffic_ops/toclientlib/**.go
      - lib/atscfg-go/**.go
      - traffic_ops/traffic_ops_golang/**.go
      - cache-config/**.go
      - cache-config/testing/**
      - vendor/**.go
      - vendor/modules.txt
      - .github/actions/build-ats-test-rpm/**
      - .github/actions/repo-info/**
      - .github/actions/cache-config-integration-tests/**
    types: [opened, reopened, ready_for_review, synchronize]

jobs:

  traffic_ops:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 5
      - name: Build RPM
        uses: ./.github/actions/build-rpms
        env:
          ATC_COMPONENT: ${{ github.job }}
      - name: Upload RPM
        uses: actions/upload-artifact@v2
        with:
          name: ${{ github.job }}
          path: ${{ github.workspace }}/dist/${{ github.job }}-*.x86_64.rpm

  cache-config:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 5
      - name: Build RPM
        uses: ./.github/actions/build-rpms
        env:
          ATC_COMPONENT: ${{ github.job }}
      - name: Upload RPM
        uses: actions/upload-artifact@v2
        with:
          name: ${{ github.job }}
          path: ${{ github.workspace }}/dist/trafficcontrol-${{ github.job }}-*.x86_64.rpm

  trafficserver:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Get expected RPM name
        uses: ./.github/actions/repo-info
        with:
          owner: apache
          repo: trafficserver
          branch: ${{ env.ATS_VERSION }}
        id: repo-info
      - name: Check Cache
        id: ats-rpm-cache
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/dist
          key: ${{ steps.repo-info.outputs.expected-rpm-name }}-${{ hashFiles('cache-config/testing/docker/trafficserver/**') }}
      - name: Build ATS RPM
        if: steps.ats-rpm-cache.outputs.cache-hit != 'true'
        uses: ./.github/actions/build-ats-test-rpm
        env:
          ATC_COMPONENT: ${{ github.job }}
      - name: Check ATS RPM name
        run: |
          set -o errexit -o nounset -o xtrace
          actual_rpm_name="$(ls dist | grep -E '^trafficserver-[0-9.]+-[0-9]+\.[0-9a-f]+.el${{ env.RHEL_VERSION }}.${{ env.TARGET_ARCH }}.rpm$')"
          [[ "${{ steps.repo-info.outputs.expected-rpm-name }}" == "$actual_rpm_name" ]]
      - name: Upload RPM
        uses: actions/upload-artifact@v2
        with:
          name: ${{ github.job }}
          path: ${{ github.workspace }}/dist/${{ github.job }}-*.x86_64.rpm

  cache-config_tests:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    needs:
      - traffic_ops
      - cache-config
      - trafficserver

    steps:
    - name: Checkout
      uses: actions/checkout@master
    - name: Download TO RPM
      uses: actions/download-artifact@v2
      with:
        name: traffic_ops
        path: ${{ github.workspace }}/cache-config/testing/docker/traffic_ops
    - name: Download Cache Config RPM
      uses: actions/download-artifact@v2
      with:
        name: cache-config
        path: ${{ github.workspace }}/cache-config/testing/docker/ort_test
    - name: Download ATS RPM
      uses: actions/download-artifact@v2
      with:
        name: trafficserver
        path: ${{ github.workspace }}/cache-config/testing/docker/yumserver/test-rpms
    - name: Build cache config test containers
      run: docker-compose -f ${{ github.workspace }}/cache-config/testing/docker/docker-compose.yml build --parallel
    - name: Run cache config integration tests
      uses: ./.github/actions/cache-config-integration-tests
