From b7eacdde1895343e57a84e3b02f6677497c25590 Mon Sep 17 00:00:00 2001 From: Eric Davis <6662995+endavis@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:54:25 +0000 Subject: [PATCH] fix: migrate projects plugin from deprecated Projects (classic) to ProjectsV2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This removes all usage of the deprecated GitHub Projects (classic) API, which was sunset on May 23, 2024. ## Changes **Removed deprecated Projects classic API calls:** 1. **User projects (line 18)**: Removed `projects` query entirely - Before: Tried both `projects` and `projectsV2` - After: Only uses `projectsV2` 2. **Repository projects (lines 36-45)**: Removed classic fallback - Before: Tried ProjectsV2, then fell back to Projects classic - After: Only attempts ProjectsV2 ## Error Fixed ``` GraphqlResponseError: Projects (classic) is being deprecated in favor of the new Projects experience ``` ## Impact - ✅ Eliminates deprecation API errors - ✅ Uses only supported ProjectsV2 API - ✅ Maintains all existing functionality - ⚠️ Projects (classic) will no longer be found (expected, as they're deprecated) ## Migration Note Users with old Projects (classic) should migrate to Projects (beta/v2): https://docs.github.com/en/issues/planning-and-tracking-with-projects ## Related - GitHub Sunset Notice: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/ - May be related to issues with projects plugin showing errors --- source/plugins/projects/index.mjs | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/source/plugins/projects/index.mjs b/source/plugins/projects/index.mjs index 98dfe1ef05c..d6131e872fd 100644 --- a/source/plugins/projects/index.mjs +++ b/source/plugins/projects/index.mjs @@ -13,21 +13,17 @@ export default async function({login, data, imports, graphql, q, queries, accoun //Update limit if repositories projects were specified manually limit = Math.max(repositories.length, limit) - //Retrieve user owned projects from graphql api + //Retrieve user owned projects from graphql api (ProjectsV2 only) console.debug(`metrics/compute/${login}/plugins > projects > querying api`) - const {[account]: {projects}} = await graphql(queries.projects["user.legacy"]({login, limit, account})) - const {[account]: {projectsV2}} = await graphql(queries.projects.user({login, limit, account})) - projects.nodes.unshift(...projectsV2.nodes) - projects.totalCount += projectsV2.totalCount + const {[account]: {projectsV2: projects}} = await graphql(queries.projects.user({login, limit, account})) - //Retrieve repositories projects from graphql api + //Retrieve repositories projects from graphql api (ProjectsV2 only) for (const identifier of repositories) { //Querying repository project console.debug(`metrics/compute/${login}/plugins > projects > querying api for ${identifier}`) const {user, repository, id} = identifier.match(/(?[-\w]+)[/](?[-\w]+)[/]projects[/](?\d+)/)?.groups ?? {} let project = null for (const account of ["user", "organization"]) { - //Try projects beta try { project = (await graphql(queries.projects.repository({user, repository, id, account})))[account].repository.projectV2 if (project) @@ -36,16 +32,6 @@ export default async function({login, data, imports, graphql, q, queries, accoun catch (error) { console.debug(error) } - //Try projects classic - try { - console.debug(`metrics/compute/${login}/plugins > projects > falling back to projects classic for ${identifier}`) - ;({project} = (await graphql(queries.projects["repository.legacy"]({user, repository, id, account})))[account].repository) - if (project) - break - } - catch (error) { - console.debug(error) - } } if (!project) throw new Error(`Could not load project ${user}/${repository}`)