# This action requires the following secrets to be set on the repository:
#   GH_USER_NAME: GitHub user whose Jenkins and GitHub token are defined below
#   GH_USER_TOKEN: GitHub user token, to be used by ncu and to push changes
#   JENKINS_TOKEN: Jenkins token, to be used to check CI status

name: Commit Queue

on:
  # `schedule` event is used instead of `pull_request` because when a
  # `pull_request` event is triggered on a PR from a fork, GITHUB_TOKEN will
  # be read-only, and the Action won't have access to any other repository
  # secrets, which it needs to access Jenkins API.
  schedule:
    - cron: '*/5 * * * *'

concurrency: ${{ github.workflow }}

env:
  NODE_VERSION: lts/*

permissions:
  contents: read

jobs:
  get_mergeable_prs:
    permissions:
      pull-requests: read
    if: github.repository == 'nodejs/node'
    runs-on: ubuntu-latest
    outputs:
      numbers: ${{ steps.get_mergeable_prs.outputs.numbers }}
    steps:
      - name: Get Pull Requests
        id: get_mergeable_prs
        run: >
          gh pr list \
                  --repo ${{ github.repository }} \
                  --base ${{ github.ref_name }} \
                  --label 'commit-queue' \
                  --json 'number' \
                  -t '::set-output name=numbers::{{ range . }}{{ .number }} {{ end }}' \
                  --limit 100
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  commitQueue:
    needs: get_mergeable_prs
    if: needs.get_mergeable_prs.outputs.numbers != ''
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          # Needs the whole git history for ncu to work
          # See https://github.com/nodejs/node-core-utils/pull/486
          fetch-depth: 0
          # A personal token is required because pushing with GITHUB_TOKEN will
          # prevent commits from running CI after they land. It needs
          # to be set here because `checkout` configures GitHub authentication
          # for push as well.
          token: ${{ secrets.GH_USER_TOKEN }}

      # Install dependencies
      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Install node-core-utils
        run: npm install -g node-core-utils@latest

      - name: Set variables
        run: |
          echo "REPOSITORY=$(echo ${{ github.repository }} | cut -d/ -f2)" >> $GITHUB_ENV
          echo "OWNER=${{ github.repository_owner }}" >> $GITHUB_ENV

      - name: Configure node-core-utils
        run: |
          ncu-config set branch ${GITHUB_REF_NAME}
          ncu-config set upstream origin
          ncu-config set username "${{ secrets.GH_USER_NAME }}"
          ncu-config set token "${{ secrets.GH_USER_TOKEN }}"
          ncu-config set jenkins_token "${{ secrets.JENKINS_TOKEN }}"
          ncu-config set repo "${REPOSITORY}"
          ncu-config set owner "${OWNER}"

      - name: Start the Commit Queue
        run: ./tools/actions/commit-queue.sh ${{ env.OWNER }} ${{ env.REPOSITORY }} ${{ needs.get_mergeable_prs.outputs.numbers }}
        env:
          GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
