name: checks
on:
  pull_request:
  push:
    branches:
      - 'release-*'
      - 'master'
      - 'main'
    tags:
      - 'v*'
# To cancel running workflow when new commits pushed in a pull request
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true
jobs:
  generate:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - macos-latest
          - ubuntu-latest
    name: Generate and format
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> "$GITHUB_ENV"
    - uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - run: make --always-make format generate && git diff --exit-code
      env:
        GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

  comment-generate-failure:
    if: ${{ failure() }}
    permissions:
      pull-requests: write
    needs: generate
    name: Comment troubleshooting message for format and generate failure
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Comment PR
        uses: thollander/actions-comment-pull-request@v3
        with:
         message: 'Auto-generated files are likely not up-to-date. Please make sure to run `make --always-make format generate`, commit the modifications and push the updated branch.'

  check-docs:
    runs-on: ubuntu-latest
    name: Check Documentation formatting and links
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> "$GITHUB_ENV"
    - uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - run: make check-docs
      env:
        GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

  comment-docs-failure:
    if: ${{ failure() }}
    permissions:
      pull-requests: write
    needs: check-docs
    name: Comment troubleshooting message for check-docs failure
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Comment PR
        uses: thollander/actions-comment-pull-request@v3
        with:
          message: 'Formatting and local/remote links likely not correct. Please make sure to run `make check-docs`, commit the modifications and push the updated branch.'

  check-golang:
    runs-on: ubuntu-latest
    name: Golang linter
    steps:
      - uses: actions/checkout@v4
      - name: Import environment variables from file
        run: cat ".github/env" >> "$GITHUB_ENV"
      - uses: actions/setup-go@v5
        with:
          go-version: '${{ env.golang-version }}'
          check-latest: true
      - name: go.mod
        run: make tidy && git diff --exit-code
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v6.5.1
        with:
          version: v1.64.7
          args: --timeout 10m0s --go '${{ env.golang-version }}'

  check-metrics:
    runs-on: ubuntu-latest
    name: Check prometheus metrics
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> "$GITHUB_ENV"
    - uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - run: make check-metrics

  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - macos-latest
          - ubuntu-latest
    name: Build operator binary
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> "$GITHUB_ENV"
    - uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - run: make operator

  po-rule-migration:
    runs-on: ubuntu-latest
    name: Build Prometheus Operator rule config map to rule file CRDs CLI tool
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> "$GITHUB_ENV"
    - uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - run: cd cmd/po-rule-migration && go install
