Spaces:
Runtime error
Runtime error
name: Check issue template | |
on: | |
issues: | |
types: [opened] | |
jobs: | |
check-template: | |
runs-on: ubuntu-latest | |
# comment this out when testing with https://github.com/nektos/act | |
if: ${{ github.repository_owner == 'facebookresearch' }} | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/github-script@v3 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
// Arguments available: | |
// - github: A pre-authenticated octokit/rest.js client | |
// - context: An object containing the context of the workflow run | |
// - core: A reference to the @actions/core package | |
// - io: A reference to the @actions/io package | |
const fs = require('fs'); | |
const editDistance = require(`${process.env.GITHUB_WORKSPACE}/.github/workflows/levenshtein.js`).getEditDistance | |
issue = await github.issues.get({ | |
owner: context.issue.owner, | |
repo: context.issue.repo, | |
issue_number: context.issue.number, | |
}); | |
const hasLabel = issue.data.labels.length > 0; | |
if (hasLabel || issue.state === "closed") { | |
// don't require template on them | |
core.debug("Issue " + issue.data.title + " was skipped."); | |
return; | |
} | |
sameAsTemplate = function(filename, body) { | |
let tmpl = fs.readFileSync(`.github/ISSUE_TEMPLATE/${filename}`, 'utf8'); | |
tmpl = tmpl.toLowerCase().split("---").slice(2).join("").trim(); | |
tmpl = tmpl.replace(/(\r\n|\n|\r)/gm, ""); | |
let bodyr = body.replace(/(\r\n|\n|\r)/gm, ""); | |
let dist = editDistance(tmpl, bodyr); | |
return dist < 8; | |
}; | |
checkFail = async function(msg) { | |
core.info("Processing '" + issue.data.title + "' with message: " + msg); | |
await github.issues.addLabels({ | |
owner: context.issue.owner, | |
repo: context.issue.repo, | |
issue_number: context.issue.number, | |
labels: ["needs-more-info"], | |
}); | |
await github.issues.createComment({ | |
owner: context.issue.owner, | |
repo: context.issue.repo, | |
issue_number: context.issue.number, | |
body: msg, | |
}); | |
}; | |
const body = issue.data.body.toLowerCase().trim(); | |
if (sameAsTemplate("bugs.md", body) || sameAsTemplate("unexpected-problems-bugs.md", body)) { | |
await checkFail(` | |
We found that not enough information is provided about this issue. | |
Please provide details following the [issue template](https://github.com/facebookresearch/detectron2/issues/new/choose).`) | |
return; | |
} | |
const hasInstructions = body.indexOf("reproduce") != -1; | |
const hasEnvironment = (body.indexOf("environment") != -1) || (body.indexOf("colab") != -1) || (body.indexOf("docker") != -1); | |
if (hasInstructions && hasEnvironment) { | |
core.debug("Issue " + issue.data.title + " follows template."); | |
return; | |
} | |
let message = "You've chosen to report an unexpected problem or bug. Unless you already know the root cause of it, please include details about it by filling the [issue template](https://github.com/facebookresearch/detectron2/issues/new/choose).\n"; | |
message += "The following information is missing: "; | |
if (!hasInstructions) { | |
message += "\"Instructions To Reproduce the Issue and __Full__ Logs\"; "; | |
} | |
if (!hasEnvironment) { | |
message += "\"Your Environment\"; "; | |
} | |
await checkFail(message); | |