# Configuration for Label Commenter - https://github.com/peaceiris/actions-label-commenter
labels:
  - name: A-needs-triaging
    labeled:
      issue:
        body: |
          @{{ issue.user.login }}, thank you for creating this issue. We will troubleshoot it as soon as we can.

          Selenium Triage Team: remember to follow the [Triage Guide](https://github.com/SeleniumHQ/selenium/wiki/How-to-Triage-Issues)
  - name: G-w3c
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          This issue has been determined to require a change to the
          [WebDriver W3C Specification](https://w3c.github.io/webdriver/) for Selenium to be able to support it.

          Please [create an issue](https://github.com/w3c/webdriver/issues/new) with the WebDriver project.

          Feel free to comment the issues that you raise back in this issue. Thank you.
        action: close
  - name: G-chromedriver
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          This issue has been determined to require fixes in [ChromeDriver](https://chromedriver.chromium.org/home).

          You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests).

          If it is something new, please [create an issue](https://bugs.chromium.org/p/chromedriver/issues/list) with the ChromeDriver team.
          Feel free to comment the issues that you raise back in this issue. Thank you.

        action: close
  - name: G-geckodriver
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          This issue has been determined to require fixes in [GeckoDriver](https://firefox-source-docs.mozilla.org/testing/geckodriver/).

          You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests).

          If it is something new, please [create an Issue](https://github.com/mozilla/geckodriver/issues/new) with the GeckoDriver team.

          Feel free to comment the issues that you raise back in this issue. Thank you.
        action: close
  - name: G-msedgedriver
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          This issue has been determined to require fixes in [MSEdgeDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
          or in the IE Mode in Edge.

          You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests).

          If it is something new, please [create an Issue](https://github.com/MicrosoftEdge/EdgeWebDriver/issues/new) with the MSEdgeDriver team.

          Feel free to comment the issues that you raise back in this issue. Thank you.
        action: close
  - name: G-safaridriver
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          This issue has been determined to require fixes in [SafariDriver](https://developer.apple.com/documentation/webkit/about_webdriver_for_safari).

          You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests).

          If it is something new, please [create an Issue](https://developer.apple.com/bug-reporting/) with the Safari team.

          Feel free to comment the issues that you raise back in this issue. Thank you.
        action: close
  - name: J-issue-template
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.
          Please follow the issue template; we need more information to reproduce the issue.

          Either a complete code snippet and URL/HTML (if more than one file is needed, provide a GitHub repo and instructions to run the code), the specific versions used, or a more detailed description to help us understand the issue.

          Note: If you cannot share your code and URL/HTML, any complete code snippet and URL/HTML that reproduces the issue is good enough.

          Reply to this issue when all information is provided. Thank you.
  - name: I-question
    labeled:
      issue:
        body: |
          💬 Please ask questions at:
          * 📫 The [Selenium user group](https://groups.google.com/forum/#!forum/selenium-users)
          * 📮 [StackOverflow](https://stackoverflow.com/questions/tagged/selenium)
          * 🗣 Our [IRC/Slack/Matrix channels](https://www.selenium.dev/support/) where the community can help you as well
        action: close
  - name: R-help wanted
    labeled:
      issue:
        body: |
          This issue is looking for contributors.

          Please comment below or reach out to us through our [IRC/Slack/Matrix channels](https://www.selenium.dev/support/) if you are interested.
  - name: J-logging
    labeled:
      issue:
        body: |
          We need more information about this issue in order to troubleshoot.

          Please turn on logging and re-run your code. Information on how to adjust logs for your language can be found in our
          [Troubleshooting documentation](https://www.selenium.dev/documentation/webdriver/troubleshooting/logging/).
  - name: B-support
    labeled:
      issue:
        body: |
          Hi, @{{ issue.user.login }}.

          This is related to code in the Support packages. The support packages contain example code that
          many users find helpful, but they do not necessarily represent the best practices for using Selenium,
          and the Selenium team is not prioritizing work on them right now.
          This doesn't mean that we won't ever work on them, but it is not on our long term roadmap.

          We actively encourage people to create their own wrapper and helper code that makes sense for them.
          If you have any questions, please [contact us](https://www.selenium.dev/support)
      pr:
        body: |
          Thank you, @{{ pull_request.user.login }} for this code suggestion.

          The support packages contain example code that many users find helpful, but they do not necessarily represent
          the best practices for using Selenium, and the Selenium team is not currently merging changes to them.
          
          After reviewing the change, unless it is a critical fix or a feature that is needed for Selenium 
          to work, we will likely close the PR.

          We actively encourage people to add the wrapper and helper code that makes sense for them to their own frameworks.
          If you have any questions, please [contact us](https://www.selenium.dev/support)



