You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitHub GraphQL API获取Issue项目变更时间线?

通过GitHub GraphQL API获取Issue的项目变更时间线

你当前的查询仅捕获了AddedToProjectEvent,但Issue页面时间线中的项目变更还包含移除项目、ProjectV2字段值修改等多种事件类型。要获取完整的历史变更记录,需要扩展timelineItems的类型匹配,覆盖所有与项目相关的时间线事件。

修改后的GraphQL查询示例

query Repository($cursor: String, $timelineCursor: String) {
    repository(owner: "Company", name: "Repository") {
        id
        url
        issues(first: 20, after: $cursor) {
            nodes {
                number
                title
                # 当前项目信息(保留原有逻辑)
                projectItems(first: 10) {
                    nodes {
                        project {
                            title
                        }
                        fieldValues(first: 20) {
                            totalCount
                            nodes {
                                ... on ProjectV2ItemFieldSingleSelectValue {
                                    id
                                    name
                                    optionId
                                }
                            }
                        }
                    }
                }
                # 扩展项目相关的时间线事件
                timelineItems(first: 50, after: $timelineCursor) {
                    edges {
                        __typename
                        node {
                            # 旧版Project(V1)相关事件
                            ... on AddedToProjectEvent {
                                createdAt
                                databaseId
                                projectColumnName
                                project {
                                    title
                                }
                            }
                            ... on RemovedFromProjectEvent {
                                createdAt
                                databaseId
                                project {
                                    title
                                }
                            }
                            # ProjectV2相关事件
                            ... on ProjectV2ItemAddedEvent {
                                createdAt
                                databaseId
                                project {
                                    title
                                    number
                                }
                            }
                            ... on ProjectV2ItemRemovedEvent {
                                createdAt
                                databaseId
                                project {
                                    title
                                    number
                                }
                            }
                            # ProjectV2字段值变更事件(核心:追踪状态/字段修改历史)
                            ... on ProjectV2ItemFieldChangedEvent {
                                createdAt
                                databaseId
                                field {
                                    ... on ProjectV2SingleSelectField {
                                        name
                                    }
                                }
                                # 旧值与新值
                                previousValue {
                                    ... on ProjectV2ItemFieldSingleSelectValue {
                                        name
                                        optionId
                                    }
                                }
                                newValue {
                                    ... on ProjectV2ItemFieldSingleSelectValue {
                                        name
                                        optionId
                                    }
                                }
                            }
                        }
                    }
                    pageInfo {
                        hasNextPage
                        endCursor
                    }
                }
            }
            pageInfo {
                hasNextPage
                endCursor
            }
        }
        # 保留原有项目元信息查询(如需)
        projectsV2(first: 1) {
            totalCount
            nodes {
                databaseId
                title
                id
                items(first: 10) {
                    nodes {
                        id
                        type
                        databaseId
                        project {
                            number
                        }
                    }
                }
            }
        }
        projectV2(number: 8) {
            closed
            closedAt
            createdAt
            databaseId
            fullDatabaseId
            id
            number
            public
            readme
            resourcePath
            shortDescription
            template
            updatedAt
            url
            viewerCanClose
            viewerCanReopen
            viewerCanUpdate
            title
            fields(first: 10) {
                nodes {
                    ... on ProjectV2SingleSelectField {
                        id
                        name
                    }
                }
                totalCount
                edges {
                    node {
                        ... on ProjectV2SingleSelectField {
                            createdAt
                            dataType
                            databaseId
                            id
                            name
                            updatedAt
                            options {
                                id
                                name
                            }
                        }
                    }
                }
            }
            repositories(first: 5) {
                totalCount
                totalDiskUsage
                edges {
                    node {
                        name
                    }
                }
            }
        }
    }
}

关键改进说明

  • 覆盖全量项目事件类型:新增了RemovedFromProjectEvent(旧版项目移除)、ProjectV2ItemAddedEvent/ProjectV2ItemRemovedEvent(ProjectV2增减)、ProjectV2ItemFieldChangedEvent(ProjectV2字段值变更),这些是Issue时间线中项目变更的核心事件。
  • 字段变更细节:ProjectV2ItemFieldChangedEvent中包含previousValue和newValue,可以直接获取字段修改前后的状态,满足团队规划分析中对变更轨迹的追踪需求。
  • 分页支持:为timelineItems新增了$timelineCursor变量,用于遍历单条Issue的所有时间线记录(避免因first限制遗漏历史数据)。
  • 关联项目元信息:在事件中添加了project { title, number },方便直接识别变更所属的项目。

注意事项

  1. 若团队使用的是新版Project(V2),重点关注ProjectV2ItemAddedEvent、ProjectV2ItemRemovedEvent和ProjectV2ItemFieldChangedEvent即可;若仍在使用旧版Project,则保留AddedToProjectEvent和RemovedFromProjectEvent。
  2. 调用API时需处理双层分页:外层是Issue列表的分页($cursor),内层是单条Issue时间线的分页($timelineCursor)。
  3. 确保API token拥有repo或project相关权限,避免因权限不足无法获取数据。

内容的提问来源于stack exchange,提问作者evilfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:53:13