name: Store pytest durations

on:
  workflow_dispatch:
  schedule:
    # Run job at 6:30 UTC every Monday (10.30pm PST/11.30pm PDT Sunday night)
    - cron: "30 6 * * 1"

env:
  PYTEST_RUN_PATH: "src/backend/tests"

jobs:
  build:
    name: Run pytest and store durations
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    env:
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
      ASTRA_DB_API_ENDPOINT: ${{ secrets.ASTRA_DB_API_ENDPOINT }}
      ASTRA_DB_APPLICATION_TOKEN: ${{ secrets.ASTRA_DB_APPLICATION_TOKEN }}
    steps:
      - uses: actions/checkout@v6
      - name: "Setup Environment"
        uses: astral-sh/setup-uv@v6
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"
          python-version: "3.13"
          prune-cache: false
      - name: Install the project
        run: uv sync
      - name: Run unit tests
        id: run_tests
        continue-on-error: true
        run: uv run pytest src/backend/tests/unit --timeout=150 --durations-path src/backend/tests/.test_durations --splitting-algorithm least_duration --store-durations


      - name: Close existing PRs
        uses: actions/github-script@v8
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const { data: pulls } = await github.rest.pulls.list({
              owner: context.repo.owner,
              repo: context.repo.repo,
              state: 'open'
            });

            for (const pull of pulls) {
              if (pull.title === "chore: update test durations") {
                await github.rest.pulls.update({
                  owner: context.repo.owner,
                  repo: context.repo.repo,
                  pull_number: pull.number,
                  state: 'closed'
                });
              }
            }

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v8
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          branch-token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: "chore: update test durations"
          title: "chore: update test durations"
          body: |
            Automated PR to update test durations file.

            This PR was automatically created by the store_pytest_durations workflow.
          branch: update-test-durations
          branch-suffix: timestamp
          delete-branch: true
          maintainer-can-modify: true
