Files
zed/.github/workflows/add_commented_closed_issue_to_project.yml
T
Lena 963c2afb48 Override project status in Closed Bugs workflow (#46253)
Since the project board to which the closed bugs with new comments are
added might have an automated workflow for moving closed issues to the
"Done" status, we need to override the status to ensure the bugs are
actually surfaced to the team and not buried in "Done".

Release Notes:

- N/A
2026-01-07 13:34:56 +00:00

111 lines
3.9 KiB
YAML

name: "Surface closed issues someone's commented on"
on:
issue_comment:
types:
- created
jobs:
add-to-project:
if: >
github.repository == 'zed-industries/zed' &&
github.event.issue.state == 'closed' &&
github.event.issue.type.name == 'Bug' &&
github.event.comment.user.type != 'Bot'
runs-on: ubuntu-latest
steps:
- id: get-app-token
uses: actions/create-github-app-token@bef1eaf1c0ac2b148ee2a0a74c65fbe6db0631f1 # v2.1.4
with:
app-id: ${{ secrets.ZED_COMMUNITY_BOT_APP_ID }}
private-key: ${{ secrets.ZED_COMMUNITY_BOT_PRIVATE_KEY }}
owner: zed-industries
- id: check-staff
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
github-token: ${{ steps.get-app-token.outputs.token }}
script: |
try {
const response = await github.rest.teams.getMembershipForUserInOrg({
org: 'zed-industries',
team_slug: 'staff',
username: context.payload.comment.user.login
});
return response.data.state === 'active';
} catch (error) {
// 404 means user is not a member
if (error.status === 404) {
return false;
}
throw error;
}
# Add to the support team's board for triage
- id: add-to-project
if: steps.check-staff.outputs.result == 'false'
uses: actions/add-to-project@244f685bbc3b7adfa8466e08b698b5577571133e # v1.0.2
with:
project-url: https://github.com/orgs/zed-industries/projects/71
github-token: ${{ steps.get-app-token.outputs.token }}
# Set status to "Incoming" (overrides project's default "Closed" automation)
- if: steps.add-to-project.outputs.itemId
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
github-token: ${{ steps.get-app-token.outputs.token }}
script: |
const itemId = '${{ steps.add-to-project.outputs.itemId }}';
const projectNumber = 71;
// Get project ID and Status field in one query
const { organization } = await github.graphql(`
query($org: String!, $projectNumber: Int!) {
organization(login: $org) {
projectV2(number: $projectNumber) {
id
field(name: "Status") {
... on ProjectV2SingleSelectField {
id
options {
id
name
}
}
}
}
}
}
`, { org: 'zed-industries', projectNumber });
const project = organization.projectV2;
if (!project.field) {
throw new Error('Could not find "Status" field in project');
}
const incomingOption = project.field.options.find(o => o.name === 'Incoming');
if (!incomingOption) {
throw new Error('Could not find "Incoming" status option');
}
// Update the item's status
await github.graphql(`
mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $projectId
itemId: $itemId
fieldId: $fieldId
value: { singleSelectOptionId: $optionId }
}) {
projectV2Item {
id
}
}
}
`, {
projectId: project.id,
itemId,
fieldId: project.field.id,
optionId: incomingOption.id
});