#
# 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: issue-robot

on:
  issues:
    types: [opened]

jobs:
  issueRobot:
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout ${{ github.ref }}"
        uses: actions/checkout@v2
        with:
          persist-credentials: false
          submodules: true

      - name: "Translation into English in issue"
        uses: ./.github/actions/translate-on-issue
        with:
          translate-title: true
          translate-body: true

      - name: "Comment in issue"
        uses: ./.github/actions/comment-on-issue
        with:
          message: |
            Thank you for your feedback, we have received your issue, Please wait patiently for a reply.
            * In order for us to understand your request as soon as possible, please provide detailed information、version or pictures.
            * If you haven't received a reply for a long time, you can [join our slack](https://s.apache.org/dolphinscheduler-slack) and send your question to channel `#troubleshooting`
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
