Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 83 additions & 2 deletions .github/workflows/autolabler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
permissions:
issues: write
pull-requests: write
repository-projects: write

jobs:
add-labels:
Expand All @@ -24,10 +25,90 @@ jobs:
await github.rest.issues.addLabels({
...context.repo,
issue_number: prNumber,
labels: ["recode"]
labels: ["in-review", "level 1", "recode"]
});

console.log(`Added labels [recode] to PR #${prNumber}`);
console.log(`Added labels [in-review, level 1, recode] to PR #${prNumber}`);

- name: Set Milestone on PR
if: github.event_name == 'pull_request_target'
uses: actions/github-script@v7
with:
script: |
const prNumber = context.payload.pull_request.number;
const milestoneName = "recode:launch 3.0";

const { data: milestones } = await github.rest.issues.listMilestones({
...context.repo,
state: "open",
per_page: 100
});

const milestone = milestones.find(m => m.title === milestoneName);

if (milestone) {
await github.rest.issues.update({
...context.repo,
issue_number: prNumber,
milestone: milestone.number
});
console.log(`Set milestone '${milestoneName}' (number: ${milestone.number}) on PR #${prNumber}`);
} else {
console.log(`Milestone '${milestoneName}' not found; skipping.`);
}

- name: Add PR to Projects
if: github.event_name == 'pull_request_target'
continue-on-error: true
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
script: |
const prNodeId = context.payload.pull_request.node_id;
const owner = context.repo.owner;
const projectNames = ["@recode-web", "Recode Public Roadmap"];

// Query organization projects (Projects v2)
const query = `
query($owner: String!) {
organization(login: $owner) {
projectsV2(first: 100) {
nodes {
id
title
}
}
}
}
`;

let projects = [];
try {
const result = await github.graphql(query, { owner });
projects = result.organization.projectsV2.nodes;
} catch (err) {
console.log(`Could not fetch org projects: ${err.message}`);
}

for (const projectName of projectNames) {
const project = projects.find(p => p.title === projectName);
if (project) {
try {
await github.graphql(`
mutation($projectId: ID!, $contentId: ID!) {
addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {
item { id }
}
}
`, { projectId: project.id, contentId: prNodeId });
console.log(`Added PR to project '${projectName}'`);
} catch (err) {
console.log(`Could not add PR to project '${projectName}': ${err.message}`);
}
} else {
console.log(`Project '${projectName}' not found; skipping.`);
}
}

- name: Add labels to Issue
if: github.event_name == 'issues'
Expand Down
Loading