#
# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved.
#
# Licensed 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.
# This file is a part of the vllm-ascend project.
#

name: PR Create

on:
  # The PR updated when PR opened and push new commits
  pull_request_target:
    types: [opened]
    branches:
      - 'main'

permissions:
  pull-requests: write

jobs:
  pr-create:
    permissions:
      contents: read
      pull-requests: write
    name: PR create action
    runs-on: ubuntu-latest
    steps:
      - name: Get vLLM version
        run: |
          VLLM_COMMIT=d68209402ddab3f54a09bc1f4de9a9495a283b60
          echo "VLLM_COMMIT=https://github.com/vllm-project/vllm/commit/$VLLM_COMMIT" >> $GITHUB_ENV

      - name: Checkout repository
        uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v4.2.2

      - name: Set up Python
        uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0

      - name: Get vLLM release version
        run: |
          VLLM_VERSION=$(python3 docs/source/conf.py | jq .ci_vllm_version | tr -d '"')
          echo "VLLM_VERSION=$VLLM_VERSION" >> $GITHUB_ENV

      - name: Update PR description
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          PR_NUMBER=${{ github.event.number }}
          VLLM_VERSION=${{ env.VLLM_VERSION }}
          VLLM_COMMIT=${{ env.VLLM_COMMIT }}
          OLD=/tmp/orig_pr_body.txt
          NEW=/tmp/new_pr_body.txt
          FINAL=/tmp/final_pr_body.txt

          gh pr view --json body --template "{{.body}}" "${PR_NUMBER}" > "${OLD}"
          cp "${OLD}" "${NEW}"

          # Remove notes in pr description and add vLLM version and commit
          sed -i '/<!--/,/-->/d' "${NEW}"
          sed -i '/- vLLM .*$/d' "${NEW}"
          {
              echo ""
              echo "- vLLM version: $VLLM_VERSION"
              echo "- vLLM main: $VLLM_COMMIT"
          } >> "${NEW}"

          # Remove redundant empty lines
          uniq "${NEW}" > "${FINAL}"

          # Run this only if ${NEW} is different than ${OLD}
          if ! cmp -s "${OLD}" "${FINAL}"; then
              echo
              echo "Updating PR body:"
              echo
              cat "${NEW}"
              gh pr edit --body-file "${FINAL}" "${PR_NUMBER}"
          else
              echo "No changes needed"
          fi

      - name: Label the PR
        uses: actions/labeler@v6
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          configuration-path: .github/labeler.yml
          sync-labels: true

      - name: Remind to run full CI on PR
        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: '👋 Hi! Thank you for contributing to the vLLM Ascend project. The following points will speed up your PR merge:‌‌\n\n' +
                '- A PR should do only one thing, smaller PRs enable faster reviews.\n' +
                '- Every PR should include unit tests and end-to-end tests ‌to ensure it works and is not broken by other future PRs.\n' +
                '- Write the commit message by fulfilling the PR description to help reviewer and future developers understand.\n\n' +
                'If CI fails, you can run linting and testing checks locally according [Contributing](https://docs.vllm.ai/projects/ascend/zh-cn/latest/developer_guide/contribution/index.html) and [Testing](https://docs.vllm.ai/projects/ascend/zh-cn/latest/developer_guide/contribution/testing.html).'
            })
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
