Implement index-only searches with covering vector indexes (#17770) #1233
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Assign a reviewer for documentation | |
on: | |
pull_request_target: | |
types: [opened] | |
jobs: | |
assign-docs-reviewer: | |
runs-on: ubuntu-latest | |
if: contains(github.event.pull_request.body, '* Documentation') && !contains(github.event.pull_request.body, '* New feature') | |
steps: | |
- name: Assign a random documentation reviewer, excluding the PR author and busy members | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.YDBOT_TOKEN }} | |
script: | | |
const teamSlug = "primary-docs-reviewers"; | |
const org = "ydb-platform"; | |
// Get team members | |
const teamMembers = await github.paginate("GET /orgs/{org}/teams/{team_slug}/members", { | |
org, | |
team_slug: teamSlug | |
}); | |
if (teamMembers.length === 0) { | |
core.setFailed("No team members found in the team."); | |
} | |
// Get the PR author | |
const prAuthor = context.payload.pull_request.user.login; | |
// Function to check if a user is busy: | |
// It checks for "busy" in their status message OR if they have limitedAvailability set (checkbox). | |
async function isBusy(login) { | |
const query = ` | |
query($login: String!) { | |
user(login: $login) { | |
status { | |
message | |
indicatesLimitedAvailability | |
} | |
} | |
} | |
`; | |
try { | |
const result = await github.graphql(query, { login }); | |
const status = result.user.status; | |
if (!status) return false; | |
// Consider user busy if limitedAvailability is true or message contains "busy" | |
return status.indicatesLimitedAvailability === true || | |
(status.message && status.message.toLowerCase().includes("busy")); | |
} catch (error) { | |
console.log(`Error checking status for ${login}: ${error}`); | |
return false; // On error, assume not busy | |
} | |
} | |
// Filter out the PR author and busy members | |
const availableMembers = []; | |
for (const member of teamMembers) { | |
if (member.login === prAuthor) { | |
console.log(`Skipping the author ${member.login}.`); | |
continue; | |
} | |
if (await isBusy(member.login)) { | |
console.log(`Skipping ${member.login} as they appear busy.`); | |
continue; | |
} | |
availableMembers.push(member); | |
} | |
if (availableMembers.length === 0) { | |
core.setFailed("No available team members after excluding PR author and busy members."); | |
} | |
// Pick a random available member | |
const randomIndex = Math.floor(Math.random() * availableMembers.length); | |
const randomMember = availableMembers[randomIndex].login; | |
// Get the PR number from the event context | |
const prNumber = context.payload.pull_request.number; | |
// Assign the PR to the selected team member | |
await github.rest.issues.addAssignees({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: prNumber, | |
assignees: [randomMember] | |
}); | |
console.log(`Assigned PR #${prNumber} to ${randomMember}`); |