name: Build

on:
  push:
    branches: main
  pull_request:
    branches: "*"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version: "1.20"
      - name: Unit tests
        run: |
          go test -v -race ./... -covermode=atomic -coverprofile=coverage.out # Run all the tests with the race detector enabled
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v3
      - name: Static analysis
        run: |
          go vet ./... # go vet is the official Go static analyzer
      - name: Cyclomatic complexity
        run: |
          go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
          /home/runner/go/bin/gocyclo -over 19 main.go pkg # forbid code with huge/complex functions
      - name: Dry Run GoReleaser
        uses: goreleaser/goreleaser-action@v2
        with:
          version: latest
          args: release --snapshot --rm-dist
      - name: Test if the Binary is Runnable
        run: "dist/helm-dashboard_linux_amd64_v1/helm-dashboard --help"
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v3.3.1
        with:
          # version: latest
          # skip-go-installation: true
          skip-pkg-cache: true
          skip-build-cache: true
          # args: --timeout=15m

  image:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          outputs: local
          build-args: VER=0.0.0-dev

  helm_check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Helm Template Check For Sanity
        uses: igabaydulin/helm-check-action@0.1.4
        env:
          CHART_LOCATION: ./charts/helm-dashboard
          CHART_VALUES: ./charts/helm-dashboard/values.yaml
      - name: Test if the Helm plugin install script is runnable
        run: |
          scripts/install_plugin.sh
