name: Go

on:
  workflow_dispatch: {}
  pull_request:
    branches:
      - main
      - release-*

env:
  # Common versions
  GO_VERSION: '1.16'
  GO_REQUIRED_MIN_VERSION: ''
  GOPATH: '/home/runner/work/placement/placement/go'
defaults:
  run:
    working-directory: go/src/open-cluster-management.io/placement

jobs:
  verify:
    name: verify
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: verify
        run: make verify
  
  verify-deps:
    name: verify-deps
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: verify-deps
        run: make verify-deps

  build:
    name: build
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: build
        run: make build
  
  unit:
    name: unit
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: unit
        run: make test

  integration:
    name: integration
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: integration
        run: make test-integration
  
  e2e:
    name: e2e
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          path: go/src/open-cluster-management.io/placement
      - name: install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: install imagebuilder
        run: go install github.com/openshift/imagebuilder/cmd/imagebuilder@v1.2.1
      - name: images
        run: make images
      - name: setup kind
        uses: engineerd/setup-kind@v0.5.0
        with:
          version: v0.11.1
          name: cluster1
      - name: Load image on the nodes of the cluster
        run: |
          kind load docker-image --name=cluster1 quay.io/open-cluster-management/placement:latest
      - name: Run e2e test
        run: |
          make test-e2e
        env:
          KUBECONFIG: /home/runner/.kube/config
