[]; expected: boolean }> = [
// Single permission, single set - no additional permissions
{ permissionSets: [{ metadata: 'read' }], expected: false },
@@ -283,12 +318,7 @@ describe('metadata permissions filtering', () => {
// - DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}
// Because they have metadata + organization_administration permissions
- const mockMutatingOperation = {
- operationId: 'actions/set-selected-repositories-enabled-github-actions-organization',
- permissionSets: [{ metadata: 'read', organization_administration: 'write' }],
- }
-
- const progData = {
+ const progData: ProgAccessData = {
userToServerRest: true,
serverToServer: true,
permissions: [{ metadata: 'read', organization_administration: 'write' }],
diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json
index ae24cf0eb6d8..1879fd41b8b6 100644
--- a/src/graphql/data/fpt/changelog.json
+++ b/src/graphql/data/fpt/changelog.json
@@ -1,4 +1,17 @@
[
+ {
+ "schemaChanges": [
+ {
+ "title": "The GraphQL schema includes these changes:",
+ "changes": [
+ "Argument query: String (with default value) added to field 'ProjectV2.items'
"
+ ]
+ }
+ ],
+ "previewChanges": [],
+ "upcomingChanges": [],
+ "date": "2025-10-22"
+ },
{
"schemaChanges": [
{
diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql
index abc6e5bd51b9..3ca2d516848e 100644
--- a/src/graphql/data/fpt/schema.docs.graphql
+++ b/src/graphql/data/fpt/schema.docs.graphql
@@ -37388,6 +37388,11 @@ type ProjectV2 implements Closable & Node & Updatable {
Ordering options for project v2 items returned from the connection
"""
orderBy: ProjectV2ItemOrder = {field: POSITION, direction: ASC}
+
+ """
+ Search query for filtering items
+ """
+ query: String = ""
): ProjectV2ItemConnection!
"""
diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json
index 0b87813706f6..53b75091035c 100644
--- a/src/graphql/data/fpt/schema.json
+++ b/src/graphql/data/fpt/schema.json
@@ -49821,6 +49821,17 @@
"kind": "input-objects",
"href": "/graphql/reference/input-objects#projectv2itemorder"
}
+ },
+ {
+ "name": "query",
+ "defaultValue": "",
+ "description": "Search query for filtering items.
",
+ "type": {
+ "name": "String",
+ "id": "string",
+ "kind": "scalars",
+ "href": "/graphql/reference/scalars#string"
+ }
}
]
},
diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql
index abc6e5bd51b9..3ca2d516848e 100644
--- a/src/graphql/data/ghec/schema.docs.graphql
+++ b/src/graphql/data/ghec/schema.docs.graphql
@@ -37388,6 +37388,11 @@ type ProjectV2 implements Closable & Node & Updatable {
Ordering options for project v2 items returned from the connection
"""
orderBy: ProjectV2ItemOrder = {field: POSITION, direction: ASC}
+
+ """
+ Search query for filtering items
+ """
+ query: String = ""
): ProjectV2ItemConnection!
"""
diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json
index 0b87813706f6..53b75091035c 100644
--- a/src/graphql/data/ghec/schema.json
+++ b/src/graphql/data/ghec/schema.json
@@ -49821,6 +49821,17 @@
"kind": "input-objects",
"href": "/graphql/reference/input-objects#projectv2itemorder"
}
+ },
+ {
+ "name": "query",
+ "defaultValue": "",
+ "description": "Search query for filtering items.
",
+ "type": {
+ "name": "String",
+ "id": "string",
+ "kind": "scalars",
+ "href": "/graphql/reference/scalars#string"
+ }
}
]
},
diff --git a/src/graphql/scripts/build-changelog.js b/src/graphql/scripts/build-changelog.ts
similarity index 71%
rename from src/graphql/scripts/build-changelog.js
rename to src/graphql/scripts/build-changelog.ts
index 324b7b5a83f9..1a5b248c3585 100644
--- a/src/graphql/scripts/build-changelog.js
+++ b/src/graphql/scripts/build-changelog.ts
@@ -1,23 +1,74 @@
-import { diff, ChangeType } from '@graphql-inspector/core'
+import { diff, ChangeType, Change } from '@graphql-inspector/core'
import { loadSchema } from '@graphql-tools/load'
import fs from 'fs'
import { renderContent } from '@/content-render/index'
+interface UpcomingChange {
+ location: string
+ date: string
+ description: string
+}
+
+interface Preview {
+ title: string
+ toggled_on: string[]
+}
+
+interface ChangelogSchemaChange {
+ title: string
+ changes: string[]
+}
+
+interface ChangelogPreviewChange {
+ title: string
+ changes: string[]
+}
+
+interface ChangelogUpcomingChange {
+ title: string
+ changes: string[]
+}
+
+export interface ChangelogEntry {
+ date?: string
+ schemaChanges: ChangelogSchemaChange[]
+ previewChanges: ChangelogPreviewChange[]
+ upcomingChanges: ChangelogUpcomingChange[]
+}
+
+interface PreviewChanges {
+ title: string
+ changes: Change[]
+}
+
+interface SegmentedChanges {
+ schemaChangesToReport: Change[]
+ previewChangesToReport: Record
+}
+
+interface IgnoredChangeType {
+ type: string
+ count: number
+}
+
+interface IgnoredChangesSummary {
+ totalCount: number
+ typeCount: number
+ types: IgnoredChangeType[]
+}
+
/**
* Tag `changelogEntry` with `date: YYYY-mm-dd`, then prepend it to the JSON
* structure written to `targetPath`. (`changelogEntry` and that file are modified in place.)
- * @param {object} changelogEntry
- * @param {string} targetPath
- * @return {void}
*/
-export function prependDatedEntry(changelogEntry, targetPath) {
+export function prependDatedEntry(changelogEntry: ChangelogEntry, targetPath: string): void {
// Build a `yyyy-mm-dd`-formatted date string
// and tag the changelog entry with it
const todayString = new Date().toISOString().slice(0, 10)
changelogEntry.date = todayString
- const previousChangelogString = fs.readFileSync(targetPath)
- const previousChangelog = JSON.parse(previousChangelogString)
+ const previousChangelogString = fs.readFileSync(targetPath, 'utf8')
+ const previousChangelog = JSON.parse(previousChangelogString) as ChangelogEntry[]
// add a new entry to the changelog data
previousChangelog.unshift(changelogEntry)
// rewrite the updated changelog
@@ -29,28 +80,23 @@ export function prependDatedEntry(changelogEntry, targetPath) {
* changes that warrant a changelog entry, return a changelog entry.
* Based on the parsed `previews`, identify changes that are under a preview.
* Otherwise, return null.
- * @param {string} [oldSchemaString]
- * @param {string} [newSchemaString]
- * @param {Array