mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 10:17:00 +00:00
Bumps the minor-and-patch group with 2 updates: [actions/create-github-app-token](https://github.com/actions/create-github-app-token) and [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials). Updates `actions/create-github-app-token` from 3.1.1 to 3.2.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/create-github-app-token/releases">actions/create-github-app-token's releases</a>.</em></p> <blockquote> <h2>v3.2.0</h2> <h2><a href="https://github.com/actions/create-github-app-token/compare/v3.1.1...v3.2.0">3.2.0</a> (2026-05-12)</h2> <h3>Features</h3> <ul> <li>add support for enterprise-level GitHub Apps (<a href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>) (<a href="952a2a7073">952a2a7</a>)</li> <li>support full repository names in <code>repositories</code> input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>) (<a href="85eb8dd414">85eb8dd</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>deps:</strong> bump <code>@actions/core</code> from 3.0.0 to 3.0.1 in the production-dependencies group (<a href="https://redirect.github.com/actions/create-github-app-token/issues/364">#364</a>) (<a href="43e5c345bf">43e5c34</a>)</li> <li>validate private-key input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>) (<a href="f24bbd8964">f24bbd8</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/actions/create-github-app-token/blob/main/CHANGELOG.md">actions/create-github-app-token's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2><a href="https://github.com/actions/create-github-app-token/compare/v3.1.1...v3.2.0">3.2.0</a> (2026-05-12)</h2> <h3>Features</h3> <ul> <li>add support for enterprise-level GitHub Apps (<a href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>) (<a href="952a2a7073">952a2a7</a>)</li> <li>support full repository names in <code>repositories</code> input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>) (<a href="85eb8dd414">85eb8dd</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>deps:</strong> bump <code>@actions/core</code> from 3.0.0 to 3.0.1 in the production-dependencies group (<a href="https://redirect.github.com/actions/create-github-app-token/issues/364">#364</a>) (<a href="43e5c345bf">43e5c34</a>)</li> <li>validate private-key input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>) (<a href="f24bbd8964">f24bbd8</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="bcd2ba4921"><code>bcd2ba4</code></a> chore(main): release 3.2.0 (<a href="https://redirect.github.com/actions/create-github-app-token/issues/370">#370</a>)</li> <li><a href="f24bbd8964"><code>f24bbd8</code></a> fix: validate private-key input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/376">#376</a>)</li> <li><a href="363531b6d9"><code>363531b</code></a> docs: capitalize Git as a proper noun in README (<a href="https://redirect.github.com/actions/create-github-app-token/issues/374">#374</a>)</li> <li><a href="fd2801133e"><code>fd28011</code></a> docs: update procedure to configure Git (<a href="https://redirect.github.com/actions/create-github-app-token/issues/287">#287</a>)</li> <li><a href="85eb8dd414"><code>85eb8dd</code></a> feat: support full repository names in <code>repositories</code> input (<a href="https://redirect.github.com/actions/create-github-app-token/issues/372">#372</a>)</li> <li><a href="c9aabb8372"><code>c9aabb8</code></a> build(deps-dev): bump yaml from 2.8.3 to 2.8.4 in the development-dependencie...</li> <li><a href="e02e816e55"><code>e02e816</code></a> build(deps-dev): bump undici from 7.24.6 to 8.2.0 (<a href="https://redirect.github.com/actions/create-github-app-token/issues/366">#366</a>)</li> <li><a href="8d835bfd37"><code>8d835bf</code></a> build(deps-dev): bump esbuild from 0.27.4 to 0.28.0 in the development-depend...</li> <li><a href="952a2a7073"><code>952a2a7</code></a> feat: add support for enterprise-level GitHub Apps (<a href="https://redirect.github.com/actions/create-github-app-token/issues/263">#263</a>)</li> <li><a href="43e5c345bf"><code>43e5c34</code></a> fix(deps): bump <code>@actions/core</code> from 3.0.0 to 3.0.1 in the production-dependenc...</li> <li>Additional commits viewable in <a href="1b10c78c78...bcd2ba4921">compare view</a></li> </ul> </details> <br /> Updates `aws-actions/configure-aws-credentials` from 6.1.0 to 6.1.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/aws-actions/configure-aws-credentials/releases">aws-actions/configure-aws-credentials's releases</a>.</em></p> <blockquote> <h2>v6.1.1</h2> <h2>What's Changed</h2> <ul> <li>chore(deps-dev): bump esbuild from 0.27.4 to 0.28.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1722">aws-actions/configure-aws-credentials#1722</a></li> <li>chore(deps-dev): bump <code>@types/node</code> from 25.5.0 to 25.5.2 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1723">aws-actions/configure-aws-credentials#1723</a></li> <li>chore(deps-dev): bump <code>@smithy/property-provider</code> from 4.2.12 to 4.2.13 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1724">aws-actions/configure-aws-credentials#1724</a></li> <li>chore(deps): bump proxy-agent from 8.0.0 to 8.0.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1726">aws-actions/configure-aws-credentials#1726</a></li> <li>chore(deps): bump <code>@smithy/node-http-handler</code> from 4.5.1 to 4.5.2 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1725">aws-actions/configure-aws-credentials#1725</a></li> <li>chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1020.0 to 3.1025.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1727">aws-actions/configure-aws-credentials#1727</a></li> <li>chore(deps): bump basic-ftp from 5.2.0 to 5.2.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1728">aws-actions/configure-aws-credentials#1728</a></li> <li>chore(deps): bump basic-ftp from 5.2.1 to 5.2.2 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1729">aws-actions/configure-aws-credentials#1729</a></li> <li>chore(deps-dev): bump <code>@types/node</code> from 25.5.2 to 25.6.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1730">aws-actions/configure-aws-credentials#1730</a></li> <li>chore(deps-dev): bump <code>@aws-sdk/credential-provider-env</code> from 3.972.24 to 3.972.25 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1733">aws-actions/configure-aws-credentials#1733</a></li> <li>chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1025.0 to 3.1030.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1732">aws-actions/configure-aws-credentials#1732</a></li> <li>chore(deps-dev): bump <code>@biomejs/biome</code> from 2.4.10 to 2.4.11 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1734">aws-actions/configure-aws-credentials#1734</a></li> <li>chore(deps): bump basic-ftp from 5.2.2 to 5.3.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1736">aws-actions/configure-aws-credentials#1736</a></li> <li>chore(deps-dev): bump memfs from 4.57.1 to 4.57.2 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1737">aws-actions/configure-aws-credentials#1737</a></li> <li>chore(deps-dev): bump typescript from 6.0.2 to 6.0.3 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1740">aws-actions/configure-aws-credentials#1740</a></li> <li>chore(deps-dev): bump <code>@smithy/property-provider</code> from 4.2.13 to 4.2.14 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1741">aws-actions/configure-aws-credentials#1741</a></li> <li>chore(deps-dev): bump <code>@aws-sdk/credential-provider-env</code> from 3.972.25 to 3.972.28 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1742">aws-actions/configure-aws-credentials#1742</a></li> <li>chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1030.0 to 3.1033.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1743">aws-actions/configure-aws-credentials#1743</a></li> <li>chore(deps-dev): bump <code>@biomejs/biome</code> from 2.4.11 to 2.4.12 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1739">aws-actions/configure-aws-credentials#1739</a></li> <li>chore(deps-dev): bump <code>@biomejs/biome</code> from 2.4.12 to 2.4.13 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1747">aws-actions/configure-aws-credentials#1747</a></li> <li>chore(deps): bump postcss from 8.5.6 to 8.5.12 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1752">aws-actions/configure-aws-credentials#1752</a></li> <li>chore(deps): bump <code>@smithy/node-http-handler</code> from 4.6.0 to 4.6.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1750">aws-actions/configure-aws-credentials#1750</a></li> <li>chore(deps-dev): bump <code>@aws-sdk/credential-provider-env</code> from 3.972.28 to 3.972.32 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1751">aws-actions/configure-aws-credentials#1751</a></li> <li>chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1033.0 to 3.1038.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1749">aws-actions/configure-aws-credentials#1749</a></li> <li>chore: release 6.1.1 by <a href="https://github.com/lehmanmj"><code>@lehmanmj</code></a> in <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1757">aws-actions/configure-aws-credentials#1757</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6...v6.1.1">https://github.com/aws-actions/configure-aws-credentials/compare/v6...v6.1.1</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md">aws-actions/configure-aws-credentials's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <p>All notable changes to this project will be documented in this file. See <a href="https://github.com/conventional-changelog/standard-version">standard-version</a> for commit guidelines.</p> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.1.0...v6.1.1">6.1.1</a> (2026-05-05)</h2> <h3>Miscellaneous Chores</h3> <ul> <li>various dependency updates</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.0.0...v6.1.0">6.1.0</a> (2026-04-06)</h2> <h3>Features</h3> <ul> <li>add skip cleanup option (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1716">#1716</a>) (<a href="11b1c58b24">11b1c58</a>), closes <a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1545">#1545</a></li> <li>Support usage of AWS Profiles (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1696">#1696</a>) (<a href="a7f0c828ac">a7f0c82</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v5.1.1...v6.0.0">6.0.0</a> (2026-02-04)</h2> <h3>⚠ BREAKING CHANGES</h3> <ul> <li>Update action to use node24 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1632">#1632</a>) (<a href="a7a2c1125c">a7a2c11</a>)</li> </ul> <h3>Features</h3> <ul> <li>add support to define transitive tag keys (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1316">#1316</a>) (<a href="232435c0c0">232435c</a>) (<a href="930ebd9bca">930ebd9</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>properly output <code>aws-account-id</code> and <code>authenticated-arn</code> when using role-chaining (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/pull/1633">#1633</a>) (<a href="7ceaf96edc">7ceaf96</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v5.1.0...v5.1.1">5.1.1</a> (2025-11-24)</h2> <h3>Miscellaneous Chores</h3> <ul> <li>release 5.1.1 (<a href="56d6a583f0">56d6a58</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v5.0.0...v5.1.0">5.1.0</a> (2025-10-06)</h2> <h3>Features</h3> <ul> <li>Add global timeout support (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1487">#1487</a>) (<a href="1584b8b0e2">1584b8b</a>)</li> <li>add no-proxy support (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1482">#1482</a>) (<a href="dde9b22a8e">dde9b22</a>)</li> <li>Improve debug logging in retry logic (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1485">#1485</a>) (<a href="97ef425d73">97ef425</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="d979d5b3a7"><code>d979d5b</code></a> chore: release 6.1.1 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1757">#1757</a>)</li> <li><a href="d4a9acd8d3"><code>d4a9acd</code></a> chore: Update dist</li> <li><a href="fc44f4ae40"><code>fc44f4a</code></a> chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1033.0 to 3.1038.0 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1749">#1749</a>)</li> <li><a href="0b8336f1ba"><code>0b8336f</code></a> chore: Update dist</li> <li><a href="8c5bf33eed"><code>8c5bf33</code></a> chore(deps-dev): bump <code>@aws-sdk/credential-provider-env</code> (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1751">#1751</a>)</li> <li><a href="53df0c1c32"><code>53df0c1</code></a> chore: Update dist</li> <li><a href="c2c55827d2"><code>c2c5582</code></a> chore(deps): bump <code>@smithy/node-http-handler</code> from 4.6.0 to 4.6.1 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1750">#1750</a>)</li> <li><a href="bd0031d7c3"><code>bd0031d</code></a> chore(deps): bump postcss from 8.5.6 to 8.5.12 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1752">#1752</a>)</li> <li><a href="6ab499a698"><code>6ab499a</code></a> chore(deps-dev): bump <code>@biomejs/biome</code> from 2.4.12 to 2.4.13 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1747">#1747</a>)</li> <li><a href="bc94895858"><code>bc94895</code></a> chore(deps-dev): bump <code>@biomejs/biome</code> from 2.4.11 to 2.4.12 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1739">#1739</a>)</li> <li>Additional commits viewable in <a href="ec61189d14...d979d5b3a7">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
197 lines
8.6 KiB
YAML
197 lines
8.6 KiB
YAML
# Auto-close issues that bypass or ignore the issue template checkboxes.
|
||
#
|
||
# GitHub issue forms enforce `required: true` checkboxes in the web UI,
|
||
# but the API bypasses form validation entirely — bots/scripts can open
|
||
# issues with every box unchecked or skip the template altogether.
|
||
#
|
||
# Rules:
|
||
# 0. No issue type -> close unless author is an org member
|
||
# 1. No checkboxes at all -> close unless author is an org member or bot
|
||
# 2. Checkboxes present but none checked -> close
|
||
# 3. "Submission checklist" section incomplete -> close
|
||
# 4. "Package (Required)" section has no selection -> close
|
||
#
|
||
# Org membership check reuses the shared helper from pr-labeler.js and
|
||
# the same GitHub App used by tag-external-issues.yml.
|
||
|
||
name: Close Unchecked Issues
|
||
|
||
on:
|
||
issues:
|
||
types: [opened]
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
concurrency:
|
||
group: ${{ github.workflow }}-${{ github.event.issue.number }}
|
||
cancel-in-progress: true
|
||
|
||
jobs:
|
||
check-boxes:
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
contents: read
|
||
issues: write
|
||
|
||
steps:
|
||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||
|
||
- name: Generate GitHub App token
|
||
id: app-token
|
||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3
|
||
with:
|
||
app-id: ${{ secrets.ORG_MEMBERSHIP_APP_ID }}
|
||
private-key: ${{ secrets.ORG_MEMBERSHIP_APP_PRIVATE_KEY }}
|
||
|
||
- name: Validate issue checkboxes
|
||
if: steps.app-token.outcome == 'success'
|
||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||
with:
|
||
github-token: ${{ steps.app-token.outputs.token }}
|
||
script: |
|
||
const { owner, repo } = context.repo;
|
||
const issue_number = context.payload.issue.number;
|
||
const body = context.payload.issue.body ?? '';
|
||
const allChecked = (body.match(/- \[x\]/gi) || []).length;
|
||
const allUnchecked = (body.match(/- \[ \]/g) || []).length;
|
||
const total = allChecked + allUnchecked;
|
||
|
||
// ── Helpers ─────────────────────────────────────────────────
|
||
// Extract checkboxes under a markdown H2/H3 heading.
|
||
// Returns { checked, unchecked } counts, or null if the
|
||
// section heading is not found in the body.
|
||
function parseSection(heading) {
|
||
const escaped = heading.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||
// Find the heading line
|
||
const headingRe = new RegExp(`^#{2,3}\\s+${escaped}\\s*$`, 'm');
|
||
const headingMatch = headingRe.exec(body);
|
||
if (!headingMatch) return null;
|
||
// Slice from after the heading to the next heading or end
|
||
const rest = body.slice(headingMatch.index + headingMatch[0].length);
|
||
const nextHeading = rest.search(/\n#{2,3}\s/);
|
||
const block = nextHeading === -1 ? rest : rest.slice(0, nextHeading);
|
||
return {
|
||
checked: (block.match(/- \[x\]/gi) || []).length,
|
||
unchecked: (block.match(/- \[ \]/g) || []).length,
|
||
};
|
||
}
|
||
|
||
let _cachedMember;
|
||
async function isOrgMember() {
|
||
if (_cachedMember) return _cachedMember;
|
||
const { h } = require('./.github/scripts/pr-labeler.js')
|
||
.loadAndInit(github, owner, repo, core);
|
||
const author = context.payload.sender.login;
|
||
const { isExternal } = await h.checkMembership(
|
||
author, context.payload.sender.type,
|
||
);
|
||
_cachedMember = { internal: !isExternal, author };
|
||
return _cachedMember;
|
||
}
|
||
|
||
async function closeWithComment(lines) {
|
||
const templateUrl = `https://github.com/${owner}/${repo}/issues/new/choose`;
|
||
lines.push(
|
||
'',
|
||
`Please use one of the [issue templates](${templateUrl}).`,
|
||
);
|
||
|
||
// Post comment first so the author sees the reason even if
|
||
// the subsequent close call fails.
|
||
await github.rest.issues.createComment({
|
||
owner, repo, issue_number,
|
||
body: lines.join('\n'),
|
||
});
|
||
|
||
await github.rest.issues.update({
|
||
owner, repo, issue_number,
|
||
state: 'closed',
|
||
state_reason: 'not_planned',
|
||
});
|
||
}
|
||
|
||
// ── Rule 0: no issue type (API/CLI bypass) ──────────────────
|
||
// Issue types are set automatically when using web UI templates.
|
||
// External users cannot set issue types via the API (requires
|
||
// write/triage permissions), so a missing type reliably indicates
|
||
// programmatic submission.
|
||
if (!context.payload.issue.type) {
|
||
let membership;
|
||
try {
|
||
membership = await isOrgMember();
|
||
} catch (e) {
|
||
// Org membership check failed — skip Rule 0 and let
|
||
// Rules 1-4 handle validation via checkboxes.
|
||
core.warning(`Rule 0: org membership check failed, skipping: ${e.message}`);
|
||
}
|
||
if (membership?.internal) {
|
||
console.log(`No issue type, but ${membership.author} is internal — OK`);
|
||
} else if (membership) {
|
||
console.log(`No issue type and ${membership.author} is external — closing`);
|
||
await closeWithComment([
|
||
'This issue was automatically closed because it appears to have been submitted programmatically — issue types are automatically set when using the GitHub web interface, and this issue has none.',
|
||
'',
|
||
'We do not allow automated issue submission at this time.',
|
||
]);
|
||
return;
|
||
}
|
||
}
|
||
|
||
// ── Rule 1: no checkboxes at all ────────────────────────────
|
||
if (total === 0) {
|
||
const { internal, author } = await isOrgMember();
|
||
if (internal) {
|
||
console.log(`No checkboxes, but ${author} is internal — OK`);
|
||
return;
|
||
}
|
||
console.log(`No checkboxes and ${author} is external — closing`);
|
||
await closeWithComment([
|
||
'This issue was automatically closed because no issue template was used.',
|
||
]);
|
||
return;
|
||
}
|
||
|
||
// ── Rule 2: checkboxes present but none checked ─────────────
|
||
if (allChecked === 0) {
|
||
console.log(`${allUnchecked} checkbox(es) present, none checked — closing`);
|
||
await closeWithComment([
|
||
'This issue was automatically closed because none of the required checkboxes were checked. Please re-file using an issue template and complete the checklist.',
|
||
]);
|
||
return;
|
||
}
|
||
|
||
// ── Rules 3–4: parse sections for targeted feedback ─────────
|
||
const checklist = parseSection('Submission checklist');
|
||
const pkg = parseSection('Package (Required)');
|
||
console.log(`Section parse — checklist: ${JSON.stringify(checklist)}, pkg: ${JSON.stringify(pkg)}`);
|
||
|
||
const problems = [];
|
||
|
||
if (checklist && checklist.unchecked > 0) {
|
||
problems.push(
|
||
'the submission checklist is incomplete — please confirm you searched for duplicates, included a reproduction, etc.'
|
||
);
|
||
}
|
||
if (pkg !== null && pkg.checked === 0) {
|
||
problems.push(
|
||
'no package was selected (e.g. langchain-core, langchain, langgraph) — this helps us route the issue to the right team'
|
||
);
|
||
} else if (pkg === null) {
|
||
problems.push(
|
||
'the package selection is missing (e.g. langchain-core, langchain, langgraph) — this helps us route the issue to the right team'
|
||
);
|
||
}
|
||
|
||
if (problems.length === 0) {
|
||
console.log(`All section checks passed (${allChecked} checked) — OK`);
|
||
return;
|
||
}
|
||
|
||
console.log(`Closing — problems: ${problems.join('; ')}`);
|
||
await closeWithComment([
|
||
'Thanks for opening an issue! It was automatically closed because:',
|
||
'',
|
||
...problems.map(p => `- ${p}`),
|
||
]);
|