# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: "Workflow label bot"
on:
  pull_request_target:
    types:
      - opened
      - converted_to_draft
      - ready_for_review
      - synchronize
  workflow_run:
    workflows: ["Label when reviewed"]
    types: ['completed']

permissions:
  contents: read
  pull-requests: write
  issues: write

jobs:
  pr-workflow-bot-job:
    name: "PR Workflow bot"
    runs-on: ubuntu-latest
    steps:
      - name: 'Download PR review payload'
        id: 'download'
        if: github.event_name == 'workflow_run'
        uses: actions/github-script@v8
        with:
          script: |
            const run_id = "${{ github.event.workflow_run.id }}";
            let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
              owner: context.repo.owner,
              repo: context.repo.repo,
              run_id: run_id,
            });
            let pr_review_artifact = artifacts.data.artifacts.filter((artifact) => {
              return artifact.name == "pr_review_payload"
            })[0];
            let pr_review_download = await github.rest.actions.downloadArtifact({
              owner: context.repo.owner,
              repo: context.repo.repo,
              artifact_id: pr_review_artifact.id,
              archive_format: 'zip',
            });
            var fs = require('fs');
            fs.writeFileSync('${{github.workspace}}/pr_review.zip', Buffer.from(pr_review_download.data));
      - name: Extract artifact
        id: extract
        if: github.event_name == 'workflow_run'
        run: |
          unzip pr_review.zip
          echo "pr_review_path=$(pwd)/event.json" >> $GITHUB_OUTPUT
      - name: Download committers file
        id: committers
        run: |
          url="https://raw.githubusercontent.com/apache/arrow-site/main/_data/committers.yml"
          curl -sL -o committers.yml $url
          echo "committers_path=$(pwd)/committers.yml" >> $GITHUB_OUTPUT
      - name: Checkout Arrow
        uses: actions/checkout@v6
        with:
          path: arrow
          repository: apache/arrow
          ref: main
          persist-credentials: false
          # fetch the tags for version number generation
          fetch-depth: 0
      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: 3.12
      - name: Install Archery and Crossbow dependencies
        run: pip install -e arrow/dev/archery[bot]
      - name: Handle PR workflow event
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          if [ "${GITHUB_EVENT_NAME}" = "workflow_run" ]; then
            # workflow_run is executed on PR review. Update to original event.
            archery trigger-bot \
              --event-name "pull_request_review" \
              --event-payload "${{ steps.extract.outputs.pr_review_path }}" \
              --committers-file "${{ steps.committers.outputs.committers_path }}"
          else
            archery trigger-bot \
              --event-name "${{ github.event_name }}" \
              --event-payload "${{ github.event_path }}" \
              --committers-file "${{ steps.committers.outputs.committers_path }}"
          fi
