name: Check For Common Issues

on:
  issues:
    types:
      - opened

jobs:
  check-for-common-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    steps:
      - uses: actions/github-script@v7
        with:
          script: |
            let issue_query = {
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo
            };
            let issue = await github.rest.issues.get(issue_query)
            let commentLabelClose = async (comment, label) => {
              await github.rest.issues.removeAllLabels(issue_query);
              await github.rest.issues.setLabels({...issue_query, labels: [label]});
              await github.rest.issues.createComment({...issue_query, body: comment});
              await github.rest.issues.update({...issue_query, state: "closed"});
            }

            // missing-windows-sdk-issue
            let reg = /RC Pass 1: command "rc .*" failed \(exit code 0\) with the following output:/;
            if (reg.test(issue.data.body)){
              let body = "Thanks for posting this issue. Please make sure you have the following installed.\n" +
                         "- Visual Studio Desktop development with C++.\n" +
                         "- Windows 10 SDK or Windows 11 SDK.";
              return await commentLabelClose(body, "category:question");
            }

            // msys2 download fails => old vcpkg version
            reg = /error: https:\/\/repo\.msys2\.org\/.*: failed: status code 404/;
            if (reg.test(issue.data.body)){
              let body = "Try updating your vcpkg version via `git pull` to resolve this issue. MSYS2 downloads are removed from the upstream servers from time to time, so using an up-to-date vcpkg version is necessary."
              return await commentLabelClose(body, "category:question");
            }

            // Issue text is: Copy issue body from .../issue_body.md
            reg = /^Copy issue body from .*issue_body.md$/;
            if (reg.test(issue.data.body)){
              let body = "Please see #30604 for how to report a build failure."
              return await commentLabelClose(body, "requires:more-information");
            }

            // Issue to short like #36592 or #36668
            reg = /^error: building.* BUILD_FAILED\r\nElapsed time.*\r\nPlease ensure.*(\r\nThen check .*\r\n.*)?$/;
            if (reg.test(issue.data.body)){
              let body = "Please see #30604 for how to report a build failure."
              return await commentLabelClose(body, "requires:more-information");
            }

            // pkg-config/ not found issues like #36011
            reg = /CMake Error at scripts\/cmake\/vcpkg_find_acquire_program.*\r\n(.*Please install it via your package manager:[\s\S]+)Call Stack/;
            match = issue.data.body.match(reg)
            if (match){
              let body = "From the log:\n```\n" + match[1] + "```\n"
              return await commentLabelClose(body, "category:question");
            }

            // MSVC internal compiler error like #36628
            if (issue.data.body.indexOf("fatal error C1001: Internal compiler error") !== -1){
              let body = "The build failed due to an internal compiler error. Please update your compiler or revert to an old version."
              return await commentLabelClose(body, "category:question");
            }
