mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 18:50:33 +00:00
Bumps [actions/github-script](https://github.com/actions/github-script) from 8.0.0 to 9.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/github-script/releases">actions/github-script's releases</a>.</em></p> <blockquote> <h2>v9.0.0</h2> <p><strong>New features:</strong></p> <ul> <li><strong><code>getOctokit</code> factory function</strong> — Available directly in the script context. Create additional authenticated Octokit clients with different tokens for multi-token workflows, GitHub App tokens, and cross-org access. See <a href="https://github.com/actions/github-script#creating-additional-clients-with-getoctokit">Creating additional clients with <code>getOctokit</code></a> for details and examples.</li> <li><strong>Orchestration ID in user-agent</strong> — The <code>ACTIONS_ORCHESTRATION_ID</code> environment variable is automatically appended to the user-agent string for request tracing.</li> </ul> <p><strong>Breaking changes:</strong></p> <ul> <li><strong><code>require('@actions/github')</code> no longer works in scripts.</strong> The upgrade to <code>@actions/github</code> v9 (ESM-only) means <code>require('@actions/github')</code> will fail at runtime. If you previously used patterns like <code>const { getOctokit } = require('@actions/github')</code> to create secondary clients, use the new injected <code>getOctokit</code> function instead — it's available directly in the script context with no imports needed.</li> <li><code>getOctokit</code> is now an injected function parameter. Scripts that declare <code>const getOctokit = ...</code> or <code>let getOctokit = ...</code> will get a <code>SyntaxError</code> because JavaScript does not allow <code>const</code>/<code>let</code> redeclaration of function parameters. Use the injected <code>getOctokit</code> directly, or use <code>var getOctokit = ...</code> if you need to redeclare it.</li> <li>If your script accesses other <code>@actions/github</code> internals beyond the standard <code>github</code>/<code>octokit</code> client, you may need to update those references for v9 compatibility.</li> </ul> <h2>What's Changed</h2> <ul> <li>Add ACTIONS_ORCHESTRATION_ID to user-agent string by <a href="https://github.com/Copilot"><code>@Copilot</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li> <li>ci: use deployment: false for integration test environments by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/712">actions/github-script#712</a></li> <li>feat!: add getOctokit to script context, upgrade <code>@actions/github</code> v9, <code>@octokit/core</code> v7, and related packages by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/700">actions/github-script#700</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Copilot"><code>@Copilot</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/github-script/compare/v8.0.0...v9.0.0">https://github.com/actions/github-script/compare/v8.0.0...v9.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="3a2844b7e9"><code>3a2844b</code></a> Merge pull request <a href="https://redirect.github.com/actions/github-script/issues/700">#700</a> from actions/salmanmkc/expose-getoctokit + prepare re...</li> <li><a href="ca10bbdd1a"><code>ca10bbd</code></a> fix: use <code>@octokit/core/</code>types import for v7 compatibility</li> <li><a href="86e48e20ac"><code>86e48e2</code></a> merge: incorporate main branch changes</li> <li><a href="c1084728b5"><code>c108472</code></a> chore: rebuild dist for v9 upgrade and getOctokit factory</li> <li><a href="afff112e4f"><code>afff112</code></a> Merge pull request <a href="https://redirect.github.com/actions/github-script/issues/712">#712</a> from actions/salmanmkc/deployment-false + fix user-ag...</li> <li><a href="ff8117e5b7"><code>ff8117e</code></a> ci: fix user-agent test to handle orchestration ID</li> <li><a href="81c6b78760"><code>81c6b78</code></a> ci: use deployment: false to suppress deployment noise from integration tests</li> <li><a href="3953caf885"><code>3953caf</code></a> docs: update README examples from <a href="https://github.com/v8"><code>@v8</code></a> to <a href="https://github.com/v9"><code>@v9</code></a>, add getOctokit docs and v9 brea...</li> <li><a href="c17d55b90d"><code>c17d55b</code></a> ci: add getOctokit integration test job</li> <li><a href="a047196d9a"><code>a047196</code></a> test: add getOctokit integration tests via callAsyncFunction</li> <li>Additional commits viewable in <a href="ed597411d8...3a2844b7e9">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) 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 this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
196 lines
8.0 KiB
YAML
196 lines
8.0 KiB
YAML
# Reopen PRs that were auto-closed by require_issue_link.yml when the
|
|
# contributor was not assigned to the linked issue. When a maintainer
|
|
# assigns the contributor to the issue, this workflow finds matching
|
|
# closed PRs, verifies the issue link, and reopens them.
|
|
#
|
|
# Uses the default GITHUB_TOKEN (not a PAT or app token) so that the
|
|
# reopen and label-removal events do NOT re-trigger other workflows.
|
|
# GitHub suppresses events created by the default GITHUB_TOKEN within
|
|
# workflow runs to prevent infinite loops.
|
|
|
|
name: Reopen PR on Issue Assignment
|
|
|
|
on:
|
|
issues:
|
|
types: [assigned]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
reopen-linked-prs:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
actions: write
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- name: Find and reopen matching PRs
|
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
with:
|
|
script: |
|
|
const { owner, repo } = context.repo;
|
|
const issueNumber = context.payload.issue.number;
|
|
const assignee = context.payload.assignee.login;
|
|
|
|
console.log(
|
|
`Issue #${issueNumber} assigned to ${assignee} — searching for closed PRs to reopen`,
|
|
);
|
|
|
|
const q = [
|
|
`is:pr`,
|
|
`is:closed`,
|
|
`author:${assignee}`,
|
|
`label:missing-issue-link`,
|
|
`repo:${owner}/${repo}`,
|
|
].join(' ');
|
|
|
|
let data;
|
|
try {
|
|
({ data } = await github.rest.search.issuesAndPullRequests({
|
|
q,
|
|
per_page: 30,
|
|
}));
|
|
} catch (e) {
|
|
throw new Error(
|
|
`Failed to search for closed PRs to reopen after assigning ${assignee} ` +
|
|
`to #${issueNumber} (HTTP ${e.status ?? 'unknown'}): ${e.message}`,
|
|
);
|
|
}
|
|
|
|
if (data.total_count === 0) {
|
|
console.log('No matching closed PRs found');
|
|
return;
|
|
}
|
|
|
|
console.log(`Found ${data.total_count} candidate PR(s)`);
|
|
|
|
// Must stay in sync with the identical pattern in require_issue_link.yml
|
|
const pattern = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s*#(\d+)/gi;
|
|
|
|
for (const item of data.items) {
|
|
const prNumber = item.number;
|
|
const body = item.body || '';
|
|
const matches = [...body.matchAll(pattern)];
|
|
const referencedIssues = matches.map(m => parseInt(m[1], 10));
|
|
|
|
if (!referencedIssues.includes(issueNumber)) {
|
|
console.log(`PR #${prNumber} does not reference #${issueNumber} — skipping`);
|
|
continue;
|
|
}
|
|
|
|
// Skip if already bypassed
|
|
const labels = item.labels.map(l => l.name);
|
|
if (labels.includes('bypass-issue-check')) {
|
|
console.log(`PR #${prNumber} already has bypass-issue-check — skipping`);
|
|
continue;
|
|
}
|
|
|
|
// Reopen first, remove label second — a closed PR that still has
|
|
// missing-issue-link is recoverable; a closed PR with the label
|
|
// stripped is invisible to both workflows.
|
|
try {
|
|
await github.rest.pulls.update({
|
|
owner,
|
|
repo,
|
|
pull_number: prNumber,
|
|
state: 'open',
|
|
});
|
|
console.log(`Reopened PR #${prNumber}`);
|
|
} catch (e) {
|
|
if (e.status === 422) {
|
|
// Head branch deleted — PR is unrecoverable. Notify the
|
|
// contributor so they know to open a new PR.
|
|
core.warning(`Cannot reopen PR #${prNumber}: head branch was likely deleted`);
|
|
try {
|
|
await github.rest.issues.createComment({
|
|
owner,
|
|
repo,
|
|
issue_number: prNumber,
|
|
body:
|
|
`You have been assigned to #${issueNumber}, but this PR could not be ` +
|
|
`reopened because the head branch has been deleted. Please open a new ` +
|
|
`PR referencing the issue.`,
|
|
});
|
|
} catch (commentErr) {
|
|
core.warning(
|
|
`Also failed to post comment on PR #${prNumber}: ${commentErr.message}`,
|
|
);
|
|
}
|
|
continue;
|
|
}
|
|
// Transient errors (rate limit, 5xx) should fail the job so
|
|
// the label is NOT removed and the run can be retried.
|
|
throw e;
|
|
}
|
|
|
|
// Remove missing-issue-link label only after successful reopen
|
|
try {
|
|
await github.rest.issues.removeLabel({
|
|
owner,
|
|
repo,
|
|
issue_number: prNumber,
|
|
name: 'missing-issue-link',
|
|
});
|
|
console.log(`Removed missing-issue-link from PR #${prNumber}`);
|
|
} catch (e) {
|
|
if (e.status !== 404) throw e;
|
|
}
|
|
|
|
// Minimize stale enforcement comment (best-effort;
|
|
// sync w/ require_issue_link.yml minimize blocks)
|
|
try {
|
|
const marker = '<!-- require-issue-link -->';
|
|
const comments = await github.paginate(
|
|
github.rest.issues.listComments,
|
|
{ owner, repo, issue_number: prNumber, per_page: 100 },
|
|
);
|
|
const stale = comments.find(c => c.body && c.body.includes(marker));
|
|
if (stale) {
|
|
await github.graphql(`
|
|
mutation($id: ID!) {
|
|
minimizeComment(input: {subjectId: $id, classifier: OUTDATED}) {
|
|
minimizedComment { isMinimized }
|
|
}
|
|
}
|
|
`, { id: stale.node_id });
|
|
console.log(`Minimized stale enforcement comment ${stale.id} as outdated`);
|
|
}
|
|
} catch (e) {
|
|
core.warning(`Could not minimize stale comment on PR #${prNumber}: ${e.message}`);
|
|
}
|
|
|
|
// Re-run the failed require_issue_link check so it picks up the
|
|
// new assignment. The re-run uses the original event payload but
|
|
// fetches live issue data, so the assignment check will pass.
|
|
//
|
|
// Limitation: we look up runs by the PR's current head SHA. If the
|
|
// contributor pushed new commits while the PR was closed, head.sha
|
|
// won't match the SHA of the original failed run and the query will
|
|
// return 0 results. This is acceptable because any push after reopen
|
|
// triggers a fresh require_issue_link run against the new SHA.
|
|
try {
|
|
const { data: pr } = await github.rest.pulls.get({
|
|
owner, repo, pull_number: prNumber,
|
|
});
|
|
const { data: runs } = await github.rest.actions.listWorkflowRuns({
|
|
owner, repo,
|
|
workflow_id: 'require_issue_link.yml',
|
|
head_sha: pr.head.sha,
|
|
status: 'failure',
|
|
per_page: 1,
|
|
});
|
|
if (runs.workflow_runs.length > 0) {
|
|
await github.rest.actions.reRunWorkflowFailedJobs({
|
|
owner, repo,
|
|
run_id: runs.workflow_runs[0].id,
|
|
});
|
|
console.log(`Re-ran failed require_issue_link run ${runs.workflow_runs[0].id} for PR #${prNumber}`);
|
|
} else {
|
|
console.log(`No failed require_issue_link runs found for PR #${prNumber} — skipping re-run`);
|
|
}
|
|
} catch (e) {
|
|
core.warning(`Could not re-run require_issue_link check for PR #${prNumber} (HTTP ${e.status ?? 'unknown'}): ${e.message}`);
|
|
}
|
|
}
|