name: codeowners
on:
  push:
    branches: [main]
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+*"
  pull_request_target:
    types:
      - opened
      - synchronize
      - edited
      - reopened
env:
  # Make sure to exit early if cache segment download times out after 2 minutes.
  # We limit cache download as a whole to 5 minutes.
  SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2

# Do not cancel this workflow on main. See https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/16616
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  setup-environment:
    timeout-minutes: 30
    runs-on: ubuntu-24.04
    if: ${{ github.actor != 'dependabot[bot]' }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: "1.22.8"
          cache: false
      - name: Cache Go
        id: go-cache
        timeout-minutes: 5
        uses: actions/cache@v4
        with:
          path: |
            ~/go/bin
            ~/go/pkg/mod
            ./.tools
          key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
  check-codeowners:
    runs-on: ubuntu-24.04
    needs: [setup-environment]
    steps:
      - uses: actions/checkout@v4
      - name: Gen githubgen tool
        if: github.repository == 'open-telemetry/opentelemetry-collector-contrib'
        run: |
          make githubgen-install
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
      - uses: actions/checkout@v4
        with:
          ref: ${{github.event.pull_request.head.ref}}
          repository: ${{github.event.pull_request.head.repo.full_name}}
          path: pr
      - name: Gen CODEOWNERS
        run: |
          cd pr
          GITHUB_TOKEN=${{ secrets.READ_ORG_AND_USER_TOKEN }} githubgen
          git diff -s --exit-code || (echo 'Generated code is out of date, please apply this diff and commit the changes in this PR.' && git diff && exit 1)