name: e2e-tests

on:
  push:
    branches:
      - main
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+*'
  pull_request:

jobs:
  docker-build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - uses: actions/setup-go@v4
        with:
          go-version: 1.19
          cache: false
      - name: Cache Go
        id: go-cache
        uses: actions/cache@v3
        with:
          path: |
            ~/go/bin
            ~/go/pkg/mod
          key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
      - name: Install dependencies
        if: steps.go-cache.outputs.cache-hit != 'true'
        run: make -j2 gomoddownload
      - name: Build Docker Image
        run: |
          make docker-otelcontribcol
      - name: export image to tar
        run: |
          docker save otelcontribcol:latest > /tmp/otelcontribcol.tar
      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: otelcontribcol
          path: /tmp/otelcontribcol.tar
  kubernetes-test:
    env:
      KUBECONFIG: /tmp/kube-config-otelcol-e2e-testing
    strategy:
      matrix:
        k8s-version: ["v1.26.0", "v1.25.3", "v1.24.7", "v1.23.13"]
    runs-on: ubuntu-latest
    needs: docker-build
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-go@v4
        with:
          go-version: 1.19
          cache: false
      - name: Cache Go
        id: go-cache
        uses: actions/cache@v3
        with:
          path: |
            ~/go/bin
            ~/go/pkg/mod
          key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} 
      - name: Install dependencies
        if: steps.go-cache.outputs.cache-hit != 'true'
        run: make -j2 gomoddownload
      - name: Create kind cluster
        uses: helm/kind-action@v1.7.0
        with:
          node_image: kindest/node:${{ matrix.k8s-version }}
          kubectl_version: ${{ matrix.k8s-version }}
          cluster_name: kind
      - name: Download artifact
        uses: actions/download-artifact@v3
        with:
          name: otelcontribcol
          path: /tmp
      - name: Load Docker image
        run: |
          docker load --input /tmp/otelcontribcol.tar
      - name: Kind load image
        run: |
          kind load docker-image otelcontribcol:latest --name kind
      - name: run k8sclusterreceiver e2e tests
        run: |
          cd receiver/k8sclusterreceiver
          go test -v --tags=e2e
      - name: run k8sattributesprocessor e2e tests
        run: |    
          cd processor/k8sattributesprocessor
          go test -v --tags=e2e