---
name: "Create PR to update `external_studies` test code"

on:
  workflow_dispatch:
  # Once a week on Sunday afternoon
  schedule:
    - cron:  "21 17 * * 0"

jobs:
  create_external_studies_pr:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: opensafely-core/setup-action@v1
        with:
          install-just: true
          python-version: "3.11"

      - name: Update vendored copies of external study code
        run: just update-external-studies

      # These are problematic (in particular the flake8 hook doesn't respect
      # the `.flake8` config file) and unnecessary as all the checks will get
      # run on the PR anyway
      - name: Disable pre-commit hooks
        run: git config core.hooksPath /dev/null

      - name: Generate app token
        uses: actions/create-github-app-token@v1
        id: generate-token
        with:
          app-id: 1031449  # opensafely-core Create PR app
          private-key: ${{ secrets.CREATE_PR_APP_PRIVATE_KEY }}

      - name: Create a Pull Request if there are any changes
        id: create_pr
        uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
        with:
          add-paths: tests/acceptance/external_studies/*
          branch: bot/update-external-studies
          base: main
          author: "opensafely-github-bot <opensafely-github-bot@users.noreply.github.com>"
          committer: "opensafely-github-bot <opensafely-github-bot@users.noreply.github.com>"
          commit-message: "chore: Update `external_studies` test code"
          title: "Update `external_studies` test code"
          token: ${{ steps.generate-token.outputs.token }}

      # The PR will still require manual approval, this just reduces it to a one-click process
      - name: Enable automerge
        if: steps.create_pr.outputs.pull-request-operation == 'created'
        run: gh pr merge --auto --squash ${{ steps.create_pr.outputs.pull-request-number }}
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
