diff --git a/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md b/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md index 802e62d407ac..cda4178c2f16 100644 --- a/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md +++ b/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md @@ -15,6 +15,7 @@ redirect_from: - /code-security/secret-scanning/secret-scanning-patterns layout: inline shortTitle: Supported patterns +autogenerated: secret-scanning --- ## About {% data variables.product.prodname_secret_scanning %} patterns diff --git a/data/tables/copilot/model-supported-clients.yml b/data/tables/copilot/model-supported-clients.yml index 0e0800b20ed0..47241ff5004e 100644 --- a/data/tables/copilot/model-supported-clients.yml +++ b/data/tables/copilot/model-supported-clients.yml @@ -64,10 +64,10 @@ - name: Gemini 3 Flash dotcom: true vscode: true - vs: false - eclipse: false - xcode: false - jetbrains: false + vs: true + eclipse: true + xcode: true + jetbrains: true - name: Gemini 3 Pro dotcom: true diff --git a/package-lock.json b/package-lock.json index 1339ab9df41f..6faa94913cf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -152,7 +152,7 @@ "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-primer-react": "^8.0.0", "event-to-promise": "^0.8.0", - "globals": "^16.3.0", + "globals": "^17.0.0", "graphql": "^16.9.0", "http-status-code": "^2.1.0", "husky": "^9.1.7", @@ -251,7 +251,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -412,6 +411,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -597,6 +597,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -634,12 +635,14 @@ "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "peer": true }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -673,6 +676,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "peer": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -688,6 +692,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "peer": true, "dependencies": { "yallist": "^3.0.2" } @@ -696,6 +701,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -703,7 +709,8 @@ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "peer": true }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", @@ -751,6 +758,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -777,6 +785,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -815,6 +824,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -823,6 +833,7 @@ "version": "7.26.10", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "peer": true, "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.10" @@ -2711,7 +2722,6 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.2.tgz", "integrity": "sha512-ODsoD39Lq6vR6aBgvjTnA3nZGliknKboc9Gtxr7E4WDNqY24MxANKcuDQSF0jzapvGb3KWOEDrKfve4HoWGK+g==", - "peer": true, "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", @@ -3011,7 +3021,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3051,7 +3060,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3072,7 +3080,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3093,7 +3100,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3114,7 +3120,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3135,7 +3140,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3156,7 +3160,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3177,7 +3180,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3198,7 +3200,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3219,7 +3220,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3240,7 +3240,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3261,7 +3260,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3282,7 +3280,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3303,7 +3300,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3321,7 +3317,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, "license": "Apache-2.0", "optional": true, "bin": { @@ -3350,7 +3345,6 @@ "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "playwright": "1.56.1" }, @@ -4162,7 +4156,6 @@ "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", @@ -4324,7 +4317,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -4336,7 +4328,6 @@ "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -4507,7 +4498,6 @@ "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.39.1", "@typescript-eslint/types": "8.39.1", @@ -5153,7 +5143,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5183,7 +5172,6 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5711,7 +5699,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001733", "electron-to-chromium": "^1.5.199", @@ -5962,7 +5949,6 @@ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "license": "MIT", - "peer": true, "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -7202,7 +7188,6 @@ "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -7264,7 +7249,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7507,6 +7491,19 @@ "eslint": "^8 || ^9" } }, + "node_modules/eslint-plugin-github/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-i18n-text": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", @@ -7523,7 +7520,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -8640,7 +8636,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -8696,6 +8691,7 @@ "node_modules/gensync": { "version": "1.0.0-beta.2", "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -8844,9 +8840,9 @@ } }, "node_modules/globals": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", - "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz", + "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==", "dev": true, "license": "MIT", "engines": { @@ -8902,7 +8898,6 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "dev": true, - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -10275,7 +10270,6 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, - "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -10394,6 +10388,7 @@ "node_modules/json5": { "version": "2.2.3", "license": "MIT", + "peer": true, "bin": { "json5": "lib/cli.js" }, @@ -12597,7 +12592,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, "license": "MIT", "optional": true }, @@ -13352,7 +13346,6 @@ "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "playwright-core": "cli.js" }, @@ -13416,7 +13409,6 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13586,7 +13578,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -13607,7 +13598,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -14275,7 +14265,6 @@ "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -15202,7 +15191,6 @@ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", @@ -15449,7 +15437,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -15775,7 +15762,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16123,7 +16109,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.2.2" }, @@ -16326,7 +16311,6 @@ "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -16435,7 +16419,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, diff --git a/package.json b/package.json index 6a33555a67c3..a322696c9d56 100644 --- a/package.json +++ b/package.json @@ -298,7 +298,7 @@ "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-primer-react": "^8.0.0", "event-to-promise": "^0.8.0", - "globals": "^16.3.0", + "globals": "^17.0.0", "graphql": "^16.9.0", "http-status-code": "^2.1.0", "husky": "^9.1.7", diff --git a/src/article-api/middleware/article-body.ts b/src/article-api/middleware/article-body.ts index a47dc865d29a..31dd93626ed6 100644 --- a/src/article-api/middleware/article-body.ts +++ b/src/article-api/middleware/article-body.ts @@ -3,6 +3,7 @@ import type { Response } from 'express' import { Context } from '@/types' import { ExtendedRequestWithPageInfo } from '@/article-api/types' import contextualize from '@/frame/middleware/context/context' +import features from '@/versions/middleware/features' import { transformerRegistry } from '@/article-api/transformers' import { allVersions } from '@/versions/lib/all-versions' import type { Page } from '@/types' @@ -28,6 +29,9 @@ async function createContextualizedRenderingRequest(pathname: string, page: Page await contextualize(renderingReq as ExtendedRequestWithPageInfo, {} as Response, () => {}) renderingReq.context.page = page + // Load feature flags into context (needed for {% ifversion %} tags) + features(renderingReq as ExtendedRequestWithPageInfo, {} as Response, () => {}) + return renderingReq } diff --git a/src/article-api/templates/github-apps-page.template.md b/src/article-api/templates/github-apps-page.template.md new file mode 100644 index 000000000000..f7b01c89e31b --- /dev/null +++ b/src/article-api/templates/github-apps-page.template.md @@ -0,0 +1,25 @@ +# {{ page.title }} + +{% if page.intro %} +{{ page.intro }} +{% endif %} + +{% if manualContent %} +{{ manualContent }} +{% endif %} + +{% if isListPage %} +{% comment %} +Render endpoints as categorized bullet lists +{% endcomment %} +{% for item in items %} +{% if item.operations.size > 0 %} +## {{ item.category }} + +{% for operation in item.operations %} +* [`{{ operation.verb }} {{ operation.requestPath }}`](/{{ currentLanguage }}/{% if currentVersion != 'free-pro-team@latest' %}{{ currentVersion }}/{% endif %}rest/{{ operation.category }}#{{ operation.slug }}) +{% endfor %} + +{% endif %} +{% endfor %} +{% endif %} diff --git a/src/article-api/templates/webhooks-page.template.md b/src/article-api/templates/webhooks-page.template.md new file mode 100644 index 000000000000..c7a4401d0791 --- /dev/null +++ b/src/article-api/templates/webhooks-page.template.md @@ -0,0 +1,22 @@ +# {{ page.title }} + +{% if page.intro %} +{{ page.intro }} +{% endif %} + +{% if manualContent %} +{{ manualContent }} +{% endif %} + +{% for webhook in webhooks %} +## {{ webhook.name }} + +**Available actions:** {% for actionType in webhook.actionTypes %}{% if forloop.last and forloop.length > 1 %}and {% endif %}`{{ actionType }}`{% unless forloop.last %}{% if forloop.length > 2 %}, {% else %} {% endif %}{% endunless %}{% endfor %} + +{% if webhook.data.descriptionHtml %} +{{ webhook.data.descriptionHtml }} +{% endif %} + +**Availability:** {% for availability in webhook.data.availability %}{% if forloop.last and forloop.length > 1 %}and {% endif %}`{{ availability }}`{% unless forloop.last %}{% if forloop.length > 2 %}, {% else %} {% endif %}{% endunless %}{% endfor %} + +{% endfor %} diff --git a/src/article-api/tests/github-apps-transformer.ts b/src/article-api/tests/github-apps-transformer.ts new file mode 100644 index 000000000000..003ea686345a --- /dev/null +++ b/src/article-api/tests/github-apps-transformer.ts @@ -0,0 +1,256 @@ +import { beforeAll, describe, expect, test } from 'vitest' + +import { get } from '@/tests/helpers/e2etest' + +const makeURL = (pathname: string, apiVersion?: string): string => { + const params = new URLSearchParams({ pathname }) + if (apiVersion) { + params.set('apiVersion', apiVersion) + } + return `/api/article/body?${params}` +} + +describe('GitHub Apps transformer', () => { + beforeAll(() => { + if (!process.env.ROOT) { + console.warn( + 'WARNING: The GitHub Apps transformer tests require the ROOT environment variable to be set to the fixture root', + ) + } + }) + + describe('Endpoints pages (list format)', () => { + test('server-to-server-rest page renders with markdown structure', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for the main heading + expect(res.body).toContain('# Endpoints available for GitHub App installation access tokens') + + // Should have category headings as h2 + expect(res.body).toMatch(/^## /m) + + // Should not contain HTML comments + expect(res.body).not.toMatch(//) + }) + + test('user-to-server-rest page renders with markdown structure', async () => { + const res = await get( + makeURL('/en/rest/authentication/endpoints-available-for-github-app-user-access-tokens'), + ) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for the main heading + expect(res.body).toContain('# Endpoints available for GitHub App user access tokens') + + // Should have category headings as h2 + expect(res.body).toMatch(/^## /m) + }) + + test('fine-grained-pat page renders with markdown structure', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/endpoints-available-for-fine-grained-personal-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for the main heading + expect(res.body).toContain('# Endpoints available for fine-grained personal access tokens') + + // Should have category headings as h2 + expect(res.body).toMatch(/^## /m) + }) + + test('endpoints are formatted as bullet lists', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + + // Check for bullet list items with asterisks (per content guidelines) + expect(res.body).toContain('*') + expect(res.body).toMatch(/\* \[`[A-Z]+ \//) + }) + + test('endpoints have correct HTTP verbs', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + + // Check for common HTTP verbs + expect(res.body).toMatch(/`GET \//) + // May also have POST, PUT, PATCH, DELETE depending on data + }) + + test('endpoints link to REST API documentation', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + + // Links should point to /en/rest/ paths with anchors + expect(res.body).toMatch(/\(\/en\/rest\/[^)]+#[^)]+\)/) + }) + }) + + describe('Permissions pages (table format)', () => { + test('server-to-server-permissions page renders with markdown structure', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for the main heading + expect(res.body).toContain('# Permissions required for GitHub Apps') + + // Should have permission group headings as h2 + expect(res.body).toMatch(/^## /m) + }) + + test('fine-grained-pat-permissions page renders with markdown structure', async () => { + const res = await get( + makeURL( + '/en/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens', + ), + ) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for the main heading + expect(res.body).toContain('# Permissions required for fine-grained personal access tokens') + + // Should have permission group headings as h2 + expect(res.body).toMatch(/^## /m) + }) + + test('permissions are formatted as markdown tables', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check for table structure + expect(res.body).toContain('| Endpoint | Access | Tokens | Additional Permissions |') + expect(res.body).toContain('|----------|--------|--------|------------------------|') + }) + + test('table includes access levels', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check for access levels in table cells + expect(res.body).toMatch(/\| read \|/) + expect(res.body).toMatch(/\| write \|/) + // May also have admin depending on data + }) + + test('table includes token types (IAT/UAT)', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check for IAT and UAT links in Tokens column + expect(res.body).toMatch(/\[IAT\]\(\/en\/apps\/creating-github-apps\//) + expect(res.body).toMatch(/\[UAT\]\(\/en\/apps\/creating-github-apps\//) + }) + + test('table shows additional permissions with checkmark/cross', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check for checkmark (✓) or cross (✗) symbols in Additional Permissions column + expect(res.body).toMatch(/\| [✓✗] \|/) + }) + + test('permissions are grouped by permission name', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Should have multiple permission group headings + const headings = res.body.match(/^## .* permissions for .*/gm) + expect(headings).toBeTruthy() + if (headings) { + expect(headings.length).toBeGreaterThan(1) + } + }) + }) + + describe('Common functionality', () => { + test('manual content is included', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check for manual content that should be in the markdown + expect(res.body).toContain('GitHub Apps are created with a set of permissions') + }) + + test('intro is rendered', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // The intro should be present (check frontmatter intro) + expect(res.body).toMatch(/For each permission granted/) + }) + + test('Liquid tags are rendered in content', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Liquid tags should be rendered (fixture might use simplified names) + expect(res.body).not.toContain('{% data variables.product.prodname_github_app %}') + }) + + test('AUTOTITLE links are resolved', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + + // Check that AUTOTITLE has been resolved + expect(res.body).not.toContain('[AUTOTITLE]') + // Should have actual link text + expect(res.body).toMatch(/\[.*?\]\(\/en\/apps\//) + }) + + test('API version parameter is supported', async () => { + const res = await get( + makeURL('/en/rest/authentication/permissions-required-for-github-apps', '2022-11-28'), + ) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + }) + + test('Invalid apiVersion returns 400 error', async () => { + const res = await get( + makeURL('/en/rest/authentication/permissions-required-for-github-apps', 'invalid-version'), + ) + + expect(res.statusCode).toBe(400) + const parsed = JSON.parse(res.body) + expect(parsed.error).toContain("Invalid apiVersion 'invalid-version'") + }) + + test('Missing apiVersion defaults to latest', async () => { + const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) + expect(res.statusCode).toBe(200) + // Should work without explicit apiVersion + }) + + test('Non-GitHub Apps pages are not transformed', async () => { + const res = await get(makeURL('/en/get-started/start-your-journey/hello-world')) + expect(res.statusCode).toBe(200) + + // Regular article pages should still work, they just won't use the GitHub Apps transformer + expect(res.body).toContain('## Introduction') + }) + }) +}) diff --git a/src/article-api/tests/secret-scanning-transformer.ts b/src/article-api/tests/secret-scanning-transformer.ts new file mode 100644 index 000000000000..44b1440fb3be --- /dev/null +++ b/src/article-api/tests/secret-scanning-transformer.ts @@ -0,0 +1,53 @@ +import { describe, expect, test } from 'vitest' +import { get } from '@/tests/helpers/e2etest' + +const makeURL = (pathname: string): string => + `/api/article/body?${new URLSearchParams({ pathname })}` + +describe('secret scanning article body api', () => { + test('supported-secret-scanning-patterns page', async () => { + const res = await get( + makeURL('/en/code-security/secret-scanning/introduction/supported-secret-scanning-patterns'), + ) + + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for expected content + expect(res.body).toContain('# Supported secret scanning patterns') + expect(res.body).toContain('## Supported secrets') + + // Verify HTML comments are stripped + expect(res.body).not.toMatch(//) + + // Verify table content is present with providers + expect(res.body).toMatch(/|\s*Provider\s*|/) + expect(res.body).toMatch(/\| (Adafruit|AWS|Alibaba|Amazon)/) + + // Verify Copilot secret scanning section is present (feature-flagged for fpt/ghec) + // Note: This may not appear if feature flags aren't loaded in the test environment + const hasCopilotSection = res.body.match(/###.*Copilot secret scanning/i) + const hasGenericPassword = res.body.match(/\|\s*Generic\s*\|\s*password\s*\|/) + if (hasCopilotSection) { + // If Copilot section is present, verify it has the expected content + expect(hasGenericPassword).toBeTruthy() + } + + // Verify correct section title (should be "Default patterns" for fpt if feature flags load correctly) + // Accept either title since CI may not load feature flags consistently + const hasDefaultPatterns = res.body.includes('### Default patterns') + const hasHighConfidence = res.body.includes('### High confidence patterns') + + // In fixture mode (CI), the page may have minimal content without these sections + // Just verify the main table exists; section headings are optional + expect(res.body).toContain('## Supported secrets') + + // If either section is present, verify mutual exclusivity + if (hasDefaultPatterns) { + expect(hasHighConfidence).toBe(false) + } + if (hasHighConfidence) { + expect(hasDefaultPatterns).toBe(false) + } + }) +}) diff --git a/src/article-api/tests/webhooks-transformer.ts b/src/article-api/tests/webhooks-transformer.ts new file mode 100644 index 000000000000..630b45ebfba8 --- /dev/null +++ b/src/article-api/tests/webhooks-transformer.ts @@ -0,0 +1,140 @@ +import { beforeAll, describe, expect, test } from 'vitest' + +import { get } from '@/tests/helpers/e2etest' + +function makeURL(pathname: string, queryParams?: Record) { + const params = new URLSearchParams(queryParams || {}) + const queryString = params.toString() + return `/api/article/body?pathname=${encodeURIComponent(pathname)}${queryString ? `&${queryString}` : ''}` +} + +describe('Webhooks transformer', () => { + beforeAll(() => { + if (!process.env.ROOT) { + console.warn( + 'WARNING: The Webhooks transformer tests require the ROOT environment variable to be set to the fixture root', + ) + } + }) + + test('webhook-events-and-payloads page renders with markdown structure', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Should have title + expect(res.body).toContain('# Webhook events and payloads') + + // Should have intro + expect(res.body).toContain('Learn about when each webhook event occurs') + }) + + test('webhooks are formatted as sections with headers', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Check for webhook event headers (## webhook_name) + expect(res.body).toMatch(/^## \w+/m) + }) + + test('webhooks show available actions', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Should list action types for webhooks with multiple actions + expect(res.body).toContain('**Action type:**') + }) + + test('webhooks show availability information', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Should show availability as a heading + expect(res.body).toContain('### Availability') + }) + + test('manual content is included', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Check for some known manual content from the markdown file + expect(res.body).toContain('About webhook events and payloads') + }) + + test('intro is rendered', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + const introMatch = res.body.match(/^Learn about when each webhook event/m) + expect(introMatch).toBeTruthy() + }) + + test('Liquid tags are rendered in content', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Check that data variables are rendered (not left as Liquid syntax) + expect(res.body).not.toContain('{% data') + expect(res.body).not.toContain('{{') + }) + + test('AUTOTITLE links are resolved', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // AUTOTITLE should be replaced with actual titles + expect(res.body).not.toContain('[AUTOTITLE]') + }) + + test('webhooks show payload parameters table', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Should show payload object parameters section + expect(res.body).toContain('### Webhook payload object') + expect(res.body).toContain('#### Webhook payload object parameters') + // Should have a markdown table with parameter columns + expect(res.body).toContain('| Name | Type | Description |') + }) + + test('webhooks show descriptions', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Should include webhook descriptions (converted from HTML to plain text) + // Using actual descriptions from real webhook data + expect(res.body).toContain('A check run was completed') + }) + + test('webhooks show body parameters in table', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // Should show parameter names and types in tables + expect(res.body).toContain('`action`') + expect(res.body).toContain('`string`') + expect(res.body).toContain('`object`') + // Should mark required parameters + expect(res.body).toContain('**Required.**') + }) + + test('webhooks show payload examples when available', async () => { + const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) + expect(res.statusCode).toBe(200) + + // NOTE: The current webhook source data does not include payloadExample fields, + // so this section won't appear in the output. The transformer code (lines 115-120) + // is ready to display payload examples if/when they are added to the source data. + // For now, we just verify the transformer doesn't crash on missing examples. + expect(res.statusCode).toBe(200) + }) + + test('Non-webhooks pages are not transformed', async () => { + const res = await get(makeURL('/en/get-started/start-your-journey/hello-world')) + expect(res.statusCode).toBe(200) + + // Regular pages should not be transformed by webhooks transformer + // They should have their normal HTML-like structure + expect(res.body).toContain('Hello World') + }) +}) diff --git a/src/article-api/transformers/github-apps-transformer.ts b/src/article-api/transformers/github-apps-transformer.ts new file mode 100644 index 000000000000..0d6a4732a1ab --- /dev/null +++ b/src/article-api/transformers/github-apps-transformer.ts @@ -0,0 +1,336 @@ +import type { Context, Page } from '@/types' +import type { PageTransformer } from './types' +import { renderContent } from '@/content-render/index' +import matter from '@gr2m/gray-matter' +import { readFileSync } from 'fs' +import { join, dirname } from 'path' +import { fileURLToPath } from 'url' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +// GitHub Apps data types +interface GitHubAppsOperation { + slug: string + subcategory?: string + verb: string + requestPath: string +} + +interface GitHubAppsPermissionOperation { + category: string + slug: string + subcategory: string + verb: string + requestPath: string + access: 'admin' | 'write' | 'read' + 'user-to-server': boolean + 'server-to-server': boolean + 'additional-permissions': boolean +} + +interface GitHubAppsPermissionGroup { + displayTitle: string + permissions: GitHubAppsPermissionOperation[] +} + +type GitHubAppsListData = Record +type GitHubAppsPermissionsData = Record + +interface PreparedOperation { + slug: string + verb: string + requestPath: string + category: string +} + +interface PreparedPermissionOperation extends PreparedOperation { + access: string + userToServer: boolean + serverToServer: boolean + additionalPermissions: boolean +} + +interface PreparedListItem { + category: string + operations: PreparedOperation[] +} + +interface PreparedPermissionItem { + permissionName: string + displayTitle: string + permissions: PreparedPermissionOperation[] +} + +// Map content files to their page types from config.json +const PAGE_TYPE_MAP: Record = { + 'endpoints-available-for-github-app-installation-access-tokens.md': 'server-to-server-rest', + 'endpoints-available-for-github-app-user-access-tokens.md': 'user-to-server-rest', + 'permissions-required-for-github-apps.md': 'server-to-server-permissions', + 'endpoints-available-for-fine-grained-personal-access-tokens.md': 'fine-grained-pat', + 'permissions-required-for-fine-grained-personal-access-tokens.md': 'fine-grained-pat-permissions', +} + +// Page types that display as bullet lists vs tables +const LIST_PAGE_TYPES = new Set([ + 'server-to-server-rest', + 'user-to-server-rest', + 'fine-grained-pat', +]) + +const PERMISSIONS_PAGE_TYPES = new Set([ + 'server-to-server-permissions', + 'fine-grained-pat-permissions', +]) + +/** + * Transformer for GitHub Apps pages. + * Converts GitHub Apps autogenerated data into markdown format. + * Uses a Liquid template for list pages, but builds markdown tables programmatically + * in TypeScript for permissions pages to avoid Liquid escaping issues. + */ +export class GithubAppsTransformer implements PageTransformer { + canTransform(page: Page): boolean { + return page.autogenerated === 'github-apps' + } + + async transform( + page: Page, + pathname: string, + context: Context, + apiVersion?: string, + ): Promise { + // Import getAppsData dynamically to avoid circular dependencies + const { getAppsData } = await import('@/github-apps/lib/index') + + // Extract version from context + const currentVersion = context.currentVersion! + + // Use the provided apiVersion, or fall back to the latest from context + const effectiveApiVersion = + apiVersion || + (context.currentVersionObj?.apiVersions?.length + ? context.currentVersionObj.latestApiVersion + : undefined) + + // Determine page type from the page's relative path + const filename = page.relativePath.split('/').pop() + const pageType = filename ? PAGE_TYPE_MAP[filename] : undefined + + if (!pageType) { + throw new Error(`Unknown GitHub Apps page type for path: ${page.relativePath}`) + } + + // Get the GitHub Apps data + const appsData = await getAppsData(pageType, currentVersion, effectiveApiVersion) + + // Prepare manual content + let manualContent = '' + if (page.markdown) { + const { content } = matter(page.markdown) + // GitHub Apps pages don't have the automated marker, so we render all markdown content + if (content.trim()) { + manualContent = await renderContent(content, { + ...context, + markdownRequested: true, + }) + + // Strip HTML comments and normalize whitespace + manualContent = manualContent + .replace(//gs, '') + .replace(/\n{3,}/g, '\n\n') + .trim() + } + } + + // Prepare data for template based on page type + const isListPage = LIST_PAGE_TYPES.has(pageType) + const isPermissionsPage = PERMISSIONS_PAGE_TYPES.has(pageType) + + const templateData = await this.prepareTemplateData( + page, + appsData, + context, + manualContent, + isListPage, + isPermissionsPage, + ) + + // Load and render template + const templatePath = join(__dirname, '../templates/github-apps-page.template.md') + const templateContent = readFileSync(templatePath, 'utf8') + + // For permissions pages, we need to construct the tables manually to avoid Liquid escaping + let finalContent: string + if (isPermissionsPage) { + // Build the intro manually + let introMarkdown = `# ${templateData.page.title}\n\n` + if (templateData.page.intro) { + introMarkdown += `${templateData.page.intro}\n\n` + } + if (templateData.manualContent) { + introMarkdown += `${templateData.manualContent}\n\n` + } + + // Build the tables manually + let tablesMarkdown = '' + for (const item of templateData.items as PreparedPermissionItem[]) { + tablesMarkdown += `## ${item.displayTitle}\n\n` + tablesMarkdown += '| Endpoint | Access | Tokens | Additional Permissions |\n' + tablesMarkdown += '|----------|--------|--------|------------------------|\n' + + for (const perm of item.permissions) { + const lang = context.currentLanguage || 'en' + const version = + context.currentVersion === 'free-pro-team@latest' ? '' : `${context.currentVersion}/` + const endpoint = `[\`${perm.verb} ${perm.requestPath}\`](/${lang}/${version}rest/${perm.category}#${perm.slug})` + + let tokens = '' + if (perm.userToServer) { + tokens += `[UAT](/${lang}/${version}apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)` + } + if (perm.userToServer && perm.serverToServer) { + tokens += '
' + } + if (perm.serverToServer) { + tokens += `[IAT](/${lang}/${version}apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation)` + } + + const additionalPerms = perm.additionalPermissions ? '✓' : '✗' + + tablesMarkdown += `| ${endpoint} | ${perm.access} | ${tokens} | ${additionalPerms} |\n` + } + tablesMarkdown += '\n' + } + + finalContent = introMarkdown + tablesMarkdown + } else { + // For list pages, Liquid template works fine + finalContent = await renderContent(templateContent, { + ...context, + pageData: templateData.page, + manualContent: templateData.manualContent, + isListPage: templateData.isListPage, + items: templateData.items, + markdownRequested: true, + }) + } + + return finalContent + } + + /** + * Prepare data for the Liquid template + */ + private async prepareTemplateData( + page: Page, + appsData: GitHubAppsListData | GitHubAppsPermissionsData, + context: Context, + manualContent: string, + isListPage: boolean, + isPermissionsPage: boolean, + ): Promise<{ + page: { title: string; intro: string } + manualContent: string + isListPage: boolean + isPermissionsPage: boolean + items: PreparedListItem[] | PreparedPermissionItem[] + }> { + // Prepare page intro + const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' + + // Get categories without subcategories from rest lib + const { categoriesWithoutSubcategories } = await import('@/rest/lib/index') + + // Prepare items based on page type + let preparedItems: PreparedListItem[] | PreparedPermissionItem[] = [] + + if (isListPage) { + // For list pages, data is organized by category -> array of operations + preparedItems = Object.entries(appsData as GitHubAppsListData).map( + ([category, operations]) => ({ + category, + operations: operations.map((op) => + this.prepareOperation(op, category, categoriesWithoutSubcategories), + ), + }), + ) + } else if (isPermissionsPage) { + // For permissions pages, data is organized by permission name -> permission object + preparedItems = Object.entries(appsData as GitHubAppsPermissionsData).map( + ([permissionName, permissionObject]) => { + const { displayTitle, permissions } = permissionObject + // Sort by access level (admin, write, read) + const adminPermissions = permissions.filter((p) => p.access === 'admin') + const writePermissions = permissions.filter((p) => p.access === 'write') + const readPermissions = permissions.filter((p) => p.access === 'read') + const sortedPermissions = [...adminPermissions, ...writePermissions, ...readPermissions] + + return { + permissionName, + displayTitle, + permissions: sortedPermissions.map((op) => + this.preparePermissionOperation(op, categoriesWithoutSubcategories), + ), + } + }, + ) + } + + return { + page: { + title: page.title, + intro, + }, + manualContent, + isListPage, + isPermissionsPage, + items: preparedItems, + } + } + + /** + * Prepare a single operation for list-based rendering (endpoints) + */ + private prepareOperation( + operation: GitHubAppsOperation, + category: string, + categoriesWithoutSubcategories: string[], + ): PreparedOperation { + const fullCategory = operation.subcategory + ? categoriesWithoutSubcategories.includes(category) + ? category + : `${category}/${operation.subcategory}` + : category + + return { + slug: operation.slug, + verb: operation.verb.toUpperCase(), + requestPath: operation.requestPath, + category: fullCategory, + } + } + + /** + * Prepare a single operation for permissions-based rendering (tables) + */ + private preparePermissionOperation( + operation: GitHubAppsPermissionOperation, + categoriesWithoutSubcategories: string[], + ): PreparedPermissionOperation { + const category = categoriesWithoutSubcategories.includes(operation.category) + ? operation.category + : `${operation.category}/${operation.subcategory}` + + return { + slug: operation.slug, + verb: operation.verb.toUpperCase(), + requestPath: operation.requestPath, + access: operation.access, + category, + userToServer: operation['user-to-server'] || false, + serverToServer: operation['server-to-server'] || false, + additionalPermissions: operation['additional-permissions'] || false, + } + } +} diff --git a/src/article-api/transformers/index.ts b/src/article-api/transformers/index.ts index 70edf35b3689..589439ed8ea7 100644 --- a/src/article-api/transformers/index.ts +++ b/src/article-api/transformers/index.ts @@ -1,8 +1,11 @@ import { TransformerRegistry } from './types' import { RestTransformer } from './rest-transformer' +import { SecretScanningTransformer } from './secret-scanning-transformer' import { CodeQLCliTransformer } from './codeql-cli-transformer' import { AuditLogsTransformer } from './audit-logs-transformer' import { GraphQLTransformer } from './graphql-transformer' +import { GithubAppsTransformer } from './github-apps-transformer' +import { WebhooksTransformer } from './webhooks-transformer' /** * Global transformer registry @@ -11,9 +14,12 @@ import { GraphQLTransformer } from './graphql-transformer' export const transformerRegistry = new TransformerRegistry() transformerRegistry.register(new RestTransformer()) +transformerRegistry.register(new SecretScanningTransformer()) transformerRegistry.register(new CodeQLCliTransformer()) transformerRegistry.register(new AuditLogsTransformer()) transformerRegistry.register(new GraphQLTransformer()) +transformerRegistry.register(new GithubAppsTransformer()) +transformerRegistry.register(new WebhooksTransformer()) export { TransformerRegistry } from './types' export type { PageTransformer } from './types' diff --git a/src/article-api/transformers/secret-scanning-transformer.ts b/src/article-api/transformers/secret-scanning-transformer.ts new file mode 100644 index 000000000000..b98f4cdcf717 --- /dev/null +++ b/src/article-api/transformers/secret-scanning-transformer.ts @@ -0,0 +1,76 @@ +import type { Context, Page, SecretScanningData } from '@/types' +import type { PageTransformer } from './types' +import fs from 'fs' +import yaml from 'js-yaml' +import path from 'path' +import { getVersionInfo } from '@/app/lib/constants' +import { liquid } from '@/content-render/index' +import { allVersions } from '@/versions/lib/all-versions' + +/** + * Transformer for Secret Scanning pages. + * Loads pattern data and converts secret scanning documentation into markdown format. + * Used by the Article API to render Secret Scanning documentation dynamically. + */ +export class SecretScanningTransformer implements PageTransformer { + canTransform(page: Page): boolean { + return page.autogenerated === 'secret-scanning' + } + + async transform(page: Page, _pathname: string, context: Context): Promise { + if (!context.secretScanningData) { + const currentVersion = context.currentVersion + if (!currentVersion) throw new Error('currentVersion is required') + + const { isEnterpriseCloud, isEnterpriseServer } = getVersionInfo(currentVersion) + const versionPath = isEnterpriseCloud + ? 'ghec' + : isEnterpriseServer + ? `ghes-${allVersions[currentVersion].currentRelease}` + : 'fpt' + + const secretScanningDir = path.join(process.cwd(), 'src/secret-scanning/data/pattern-docs') + const filepath = path.join(secretScanningDir, versionPath, 'public-docs.yml') + + if (fs.existsSync(filepath)) { + const data = yaml.load(fs.readFileSync(filepath, 'utf-8')) as SecretScanningData[] + + // Process Liquid in values + for (const entry of data) { + // Only process Liquid for the hasValidityCheck field, as in the middleware + if (typeof entry.hasValidityCheck === 'string' && entry.hasValidityCheck.includes('{%')) { + // Render Liquid and parse as YAML to get correct boolean type + entry.hasValidityCheck = yaml.load( + await liquid.parseAndRender(entry.hasValidityCheck, context), + ) as boolean + } + + if (entry.isduplicate) { + entry.secretType += '
Token versions' + } + if (entry.ismultipart) { + entry.secretType += '
Multi-part secrets' + } + } + + context.secretScanningData = data + } else { + // If the file does not exist, set to empty array to ensure predictable behavior + context.secretScanningData = [] + } + } + + context.markdownRequested = true + let content = await page.render(context) + + // Strip HTML comments from the rendered content + content = content.replace(//gs, '') + + // Normalize whitespace after stripping comments + content = content.replace(/\n{3,}/g, '\n\n').trim() + + const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' + + return `# ${page.title}\n\n${intro}\n\n${content}` + } +} diff --git a/src/article-api/transformers/webhooks-transformer.ts b/src/article-api/transformers/webhooks-transformer.ts new file mode 100644 index 000000000000..21ff264244fa --- /dev/null +++ b/src/article-api/transformers/webhooks-transformer.ts @@ -0,0 +1,125 @@ +import type { Context, Page } from '@/types' +import type { PageTransformer } from './types' +import { renderContent } from '@/content-render/index' +import { fastTextOnly } from '@/content-render/unified/text-only' +import matter from '@gr2m/gray-matter' + +/** + * Transformer for Webhooks pages. + * Converts webhook events and payloads into markdown format. + */ +export class WebhooksTransformer implements PageTransformer { + canTransform(page: Page): boolean { + return page.autogenerated === 'webhooks' + } + + async transform(page: Page, pathname: string, context: Context): Promise { + // Import getInitialPageWebhooks dynamically to avoid circular dependencies + const { getInitialPageWebhooks } = await import('@/webhooks/lib/index') + + // Extract version from context + const currentVersion = context.currentVersion! + + // Get the webhook data + const webhooksData = await getInitialPageWebhooks(currentVersion) + + // Prepare page intro + const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' + + // Build the page header manually to avoid Context type conflicts + let headerMarkdown = `# ${page.title}\n\n` + if (intro) { + headerMarkdown += `${intro}\n\n` + } + + // Prepare manual content + let manualContent = '' + if (page.markdown) { + const { content } = matter(page.markdown) + const markerIndex = content.indexOf( + '', + ) + + if (markerIndex > 0) { + const manualMarkdown = content.substring(0, markerIndex).trim() + if (manualMarkdown) { + manualContent = await renderContent(manualMarkdown, { + ...context, + markdownRequested: true, + }) + } + } + } + + // Build webhooks sections manually + let webhooksMarkdown = '' + for (const webhook of webhooksData) { + webhooksMarkdown += `## ${webhook.name}\n\n` + + // Summary if available + if (webhook.data.summaryHtml) { + const summaryText = fastTextOnly(webhook.data.summaryHtml) + webhooksMarkdown += `${summaryText}\n\n` + } + + // Availability + if (webhook.data.availability && webhook.data.availability.length > 0) { + webhooksMarkdown += '### Availability\n\n' + for (const avail of webhook.data.availability) { + webhooksMarkdown += `- \`${avail}\`\n` + } + webhooksMarkdown += '\n' + } + + // Webhook payload object section + webhooksMarkdown += '### Webhook payload object\n\n' + + // Available actions + if (webhook.actionTypes.length > 1) { + webhooksMarkdown += '**Action type:** ' + const actions = webhook.actionTypes.map((a) => `\`${a}\``).join(', ') + webhooksMarkdown += `${actions}\n\n` + } + + // Description if available + if (webhook.data.descriptionHtml) { + const descriptionText = fastTextOnly(webhook.data.descriptionHtml) + webhooksMarkdown += `${descriptionText}\n\n` + } + + // Body parameters (payload structure) + if (webhook.data.bodyParameters && webhook.data.bodyParameters.length > 0) { + webhooksMarkdown += '#### Webhook payload object parameters\n\n' + webhooksMarkdown += '| Name | Type | Description |\n' + webhooksMarkdown += '|------|------|-------------|\n' + + for (const param of webhook.data.bodyParameters) { + const name = param.name ? `\`${param.name}\`` : '' + const type = param.type ? `\`${param.type}\`` : '' + // Convert HTML description to plain text + let desc = param.description || '' + if (desc) { + desc = fastTextOnly(desc).replace(/\n/g, ' ').trim() + } + // Add required indicator + if (param.isRequired) { + desc = `**Required.** ${desc}` + } + + webhooksMarkdown += `| ${name} | ${type} | ${desc} |\n` + } + webhooksMarkdown += '\n' + } + + // Payload example if available + if (webhook.data.payloadExample) { + webhooksMarkdown += '### Webhook payload example\n\n' + webhooksMarkdown += '```json\n' + webhooksMarkdown += JSON.stringify(webhook.data.payloadExample, null, 2) + webhooksMarkdown += '\n```\n\n' + } + } + + return `${headerMarkdown + manualContent}\n\n${webhooksMarkdown}` + } +} diff --git a/src/audit-logs/data/fpt/organization.json b/src/audit-logs/data/fpt/organization.json index cf2608dc3483..5d33f8dbefb1 100644 --- a/src/audit-logs/data/fpt/organization.json +++ b/src/audit-logs/data/fpt/organization.json @@ -4521,7 +4521,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4565,7 +4567,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -16484,7 +16488,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghec/enterprise.json b/src/audit-logs/data/ghec/enterprise.json index 4be5c164ab0b..6e877de7ba21 100644 --- a/src/audit-logs/data/ghec/enterprise.json +++ b/src/audit-logs/data/ghec/enterprise.json @@ -8288,7 +8288,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -8332,7 +8334,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, diff --git a/src/audit-logs/data/ghec/organization.json b/src/audit-logs/data/ghec/organization.json index cf2608dc3483..5d33f8dbefb1 100644 --- a/src/audit-logs/data/ghec/organization.json +++ b/src/audit-logs/data/ghec/organization.json @@ -4521,7 +4521,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4565,7 +4567,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -16484,7 +16488,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.14/organization.json b/src/audit-logs/data/ghes-3.14/organization.json index a704285ce5dc..0953311696bc 100644 --- a/src/audit-logs/data/ghes-3.14/organization.json +++ b/src/audit-logs/data/ghes-3.14/organization.json @@ -3796,7 +3796,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -3840,7 +3842,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -14052,7 +14056,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.15/organization.json b/src/audit-logs/data/ghes-3.15/organization.json index 8b8f0e2ee99a..074fb69fb72e 100644 --- a/src/audit-logs/data/ghes-3.15/organization.json +++ b/src/audit-logs/data/ghes-3.15/organization.json @@ -3820,7 +3820,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -3864,7 +3866,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -14628,7 +14632,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.16/organization.json b/src/audit-logs/data/ghes-3.16/organization.json index fdc4fd862a39..07d003abcca6 100644 --- a/src/audit-logs/data/ghes-3.16/organization.json +++ b/src/audit-logs/data/ghes-3.16/organization.json @@ -3927,7 +3927,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -3971,7 +3973,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -15091,7 +15095,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.17/organization.json b/src/audit-logs/data/ghes-3.17/organization.json index 3103dd29d278..7e3d865a0377 100644 --- a/src/audit-logs/data/ghes-3.17/organization.json +++ b/src/audit-logs/data/ghes-3.17/organization.json @@ -4093,7 +4093,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4137,7 +4139,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -15506,7 +15510,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.18/organization.json b/src/audit-logs/data/ghes-3.18/organization.json index 14cd3ddb0c78..1ad3456438a9 100644 --- a/src/audit-logs/data/ghes-3.18/organization.json +++ b/src/audit-logs/data/ghes-3.18/organization.json @@ -4218,7 +4218,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4262,7 +4264,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -15805,7 +15809,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.19/organization.json b/src/audit-logs/data/ghes-3.19/organization.json index 429c0385d30f..a31da6d7186a 100644 --- a/src/audit-logs/data/ghes-3.19/organization.json +++ b/src/audit-logs/data/ghes-3.19/organization.json @@ -4454,7 +4454,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4498,7 +4500,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -16417,7 +16421,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/data/ghes-3.20/organization.json b/src/audit-logs/data/ghes-3.20/organization.json index 3e83c169dc8f..0cfb9444bd75 100644 --- a/src/audit-logs/data/ghes-3.20/organization.json +++ b/src/audit-logs/data/ghes-3.20/organization.json @@ -4409,7 +4409,9 @@ "selected_service", "network_settings_ids", "previous_settings_ids", - "network_configuration_id" + "network_configuration_id", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -4453,7 +4455,9 @@ "actor_is_bot", "selected_service", "network_settings_ids", - "previous_settings_ids" + "previous_settings_ids", + "failover_network_settings_ids", + "failover_network_enabled" ], "docs_reference_titles": "About networking for hosted compute products in your enterprise" }, @@ -16372,7 +16376,7 @@ }, { "action": "staff.dependabot_debug_credentials_generated", - "description": "N/A", + "description": "Dependabot encrypted config was read.", "docs_reference_links": "N/A", "fields": [ "user_agent", diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index ff8108353bdc..68bb3c32ff57 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -9,5 +9,5 @@ "git": "Note: Git events have special access requirements and retention policies that differ from other audit log events. For GitHub Enterprise Cloud, access Git events via the REST API only with 7-day retention. For GitHub Enterprise Server, Git events must be enabled in audit log configuration and are not included in search results.", "sso_redirect": "Note: Automatically redirecting users to sign in is currently in beta for Enterprise Managed Users and subject to change." }, - "sha": "2c41fad9df347beaa0fc077fb1dbaffe3d6155ba" + "sha": "a0978e32d2645c04a8281f443d22031a428e5f66" } \ No newline at end of file diff --git a/src/fixtures/fixtures/content/code-security/index.md b/src/fixtures/fixtures/content/code-security/index.md index 208c1557b9ec..c01870c61ff9 100644 --- a/src/fixtures/fixtures/content/code-security/index.md +++ b/src/fixtures/fixtures/content/code-security/index.md @@ -14,5 +14,6 @@ versions: children: - /getting-started - /guides + - /secret-scanning - /codeql-cli --- diff --git a/src/fixtures/fixtures/content/code-security/secret-scanning/index.md b/src/fixtures/fixtures/content/code-security/secret-scanning/index.md new file mode 100644 index 000000000000..745fbc6c0460 --- /dev/null +++ b/src/fixtures/fixtures/content/code-security/secret-scanning/index.md @@ -0,0 +1,10 @@ +--- +title: Secret scanning +intro: Secret scanning documentation +versions: + fpt: '*' + ghes: '*' + ghec: '*' +children: + - /introduction +--- \ No newline at end of file diff --git a/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/index.md b/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/index.md new file mode 100644 index 000000000000..e1df66e8d945 --- /dev/null +++ b/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/index.md @@ -0,0 +1,10 @@ +--- +title: Introduction to secret scanning +intro: Introduction to secret scanning +versions: + fpt: '*' + ghes: '*' + ghec: '*' +children: + - /supported-secret-scanning-patterns +--- \ No newline at end of file diff --git a/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md b/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md new file mode 100644 index 000000000000..fc0c866631af --- /dev/null +++ b/src/fixtures/fixtures/content/code-security/secret-scanning/introduction/supported-secret-scanning-patterns.md @@ -0,0 +1,20 @@ +--- +title: Supported secret scanning patterns +intro: Lists of supported secrets. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +type: reference +autogenerated: secret-scanning +--- + +## Supported secrets + +This table lists the secrets supported by secret scanning. + +| Provider | Token | +|----|:----| +{%- for entry in secretScanningData %} +| {{ entry.provider }} | {{ entry.secretType }} | +{%- endfor %} \ No newline at end of file diff --git a/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-fine-grained-personal-access-tokens.md b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-fine-grained-personal-access-tokens.md new file mode 100644 index 000000000000..02039420e79e --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-fine-grained-personal-access-tokens.md @@ -0,0 +1,14 @@ +--- +title: Endpoints available for fine-grained personal access tokens +shortTitle: Endpoints for fine-grained PATs +intro: You can use fine-grained personal access tokens to make requests to the following REST endpoints. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - API +autogenerated: github-apps +--- + + diff --git a/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-installation-access-tokens.md b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-installation-access-tokens.md new file mode 100644 index 000000000000..01f651198145 --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-installation-access-tokens.md @@ -0,0 +1,15 @@ +--- +title: Endpoints available for GitHub App installation access tokens +shortTitle: Endpoints for GitHub App installation tokens +intro: Your GitHub App can make requests to the following REST endpoints with an installation access token. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - API + - GitHub Apps +autogenerated: github-apps +--- + + diff --git a/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-user-access-tokens.md b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-user-access-tokens.md new file mode 100644 index 000000000000..90a4af09f92c --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/endpoints-available-for-github-app-user-access-tokens.md @@ -0,0 +1,15 @@ +--- +title: Endpoints available for GitHub App user access tokens +shortTitle: Endpoints for GitHub App user tokens +intro: Your GitHub App can make requests to the following REST endpoints with a user access token. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - API + - GitHub Apps +autogenerated: github-apps +--- + + diff --git a/src/fixtures/fixtures/content/rest/authentication/index.md b/src/fixtures/fixtures/content/rest/authentication/index.md new file mode 100644 index 000000000000..7871f85c2e01 --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/index.md @@ -0,0 +1,14 @@ +--- +title: Authentication +intro: Authentication guides and reference documentation for the REST API. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +children: + - /endpoints-available-for-github-app-installation-access-tokens + - /endpoints-available-for-github-app-user-access-tokens + - /endpoints-available-for-fine-grained-personal-access-tokens + - /permissions-required-for-github-apps + - /permissions-required-for-fine-grained-personal-access-tokens +--- diff --git a/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens.md b/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens.md new file mode 100644 index 000000000000..97dd25100c20 --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens.md @@ -0,0 +1,18 @@ +--- +title: Permissions required for fine-grained personal access tokens +intro: For each permission granted to a fine-grained personal access token, these are the REST API endpoints that can be accessed. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - API +shortTitle: Permissions for fine-grained PATs +autogenerated: github-apps +--- + +## About fine-grained personal access token permissions + +Fine-grained personal access tokens are created with a set of permissions. + + diff --git a/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-github-apps.md b/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-github-apps.md new file mode 100644 index 000000000000..fbf39c4938f5 --- /dev/null +++ b/src/fixtures/fixtures/content/rest/authentication/permissions-required-for-github-apps.md @@ -0,0 +1,18 @@ +--- +title: Permissions required for GitHub Apps +intro: For each permission granted to a GitHub App, these are the REST API endpoints that the app can use. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - API +shortTitle: Permissions for GitHub Apps +autogenerated: github-apps +--- + +## About GitHub App permissions + +GitHub Apps are created with a set of permissions. Permissions define what resources the GitHub App can access via the API. + + diff --git a/src/fixtures/fixtures/content/rest/index.md b/src/fixtures/fixtures/content/rest/index.md index a0f5c9ded9cb..71127de8ea33 100644 --- a/src/fixtures/fixtures/content/rest/index.md +++ b/src/fixtures/fixtures/content/rest/index.md @@ -19,6 +19,7 @@ versions: children: - /about-the-rest-api - /actions + - /authentication --- diff --git a/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json new file mode 100644 index 000000000000..39dcd46be7e7 --- /dev/null +++ b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json @@ -0,0 +1,25 @@ +{ + "organization_api_insights": { + "displayTitle": "Organization permissions for \"API Insights\"", + "permissions": [ + { + "category": "orgs", + "slug": "get-route-stats-by-actor", + "subcategory": "api-insights", + "verb": "get", + "requestPath": "/orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}", + "additional-permissions": false, + "access": "read" + }, + { + "category": "orgs", + "slug": "get-subject-stats", + "subcategory": "api-insights", + "verb": "get", + "requestPath": "/orgs/{org}/insights/api/subject-stats", + "additional-permissions": false, + "access": "read" + } + ] + } +} diff --git a/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json new file mode 100644 index 000000000000..49c40f93199e --- /dev/null +++ b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json @@ -0,0 +1,16 @@ +{ + "actions": [ + { + "slug": "get-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "get", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + }, + { + "slug": "set-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "put", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + } + ] +} diff --git a/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json new file mode 100644 index 000000000000..5830350c0419 --- /dev/null +++ b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json @@ -0,0 +1,29 @@ +{ + "organization_api_insights": { + "displayTitle": "Organization permissions for \"API Insights\"", + "permissions": [ + { + "category": "orgs", + "slug": "get-route-stats-by-actor", + "subcategory": "api-insights", + "verb": "get", + "requestPath": "/orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + }, + { + "category": "orgs", + "slug": "get-subject-stats", + "subcategory": "api-insights", + "verb": "get", + "requestPath": "/orgs/{org}/insights/api/subject-stats", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + } + ] + } +} diff --git a/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json new file mode 100644 index 000000000000..49c40f93199e --- /dev/null +++ b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json @@ -0,0 +1,16 @@ +{ + "actions": [ + { + "slug": "get-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "get", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + }, + { + "slug": "set-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "put", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + } + ] +} diff --git a/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json new file mode 100644 index 000000000000..49c40f93199e --- /dev/null +++ b/src/fixtures/fixtures/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json @@ -0,0 +1,16 @@ +{ + "actions": [ + { + "slug": "get-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "get", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + }, + { + "slug": "set-github-actions-cache-retention-limit-for-an-enterprise", + "subcategory": "cache", + "verb": "put", + "requestPath": "/enterprises/{enterprise}/actions/cache/retention-limit" + } + ] +} diff --git a/src/fixtures/fixtures/src/webhooks/data/fpt/schema.json b/src/fixtures/fixtures/src/webhooks/data/fpt/schema.json new file mode 100644 index 000000000000..9c371b9c02c0 --- /dev/null +++ b/src/fixtures/fixtures/src/webhooks/data/fpt/schema.json @@ -0,0 +1,56 @@ +{ + "check_run": { + "completed": { + "descriptionHtml": "

Check run is completed.

", + "summaryHtml": "", + "bodyParameters": [ + { + "name": "action", + "description": "The action performed. Value: completed", + "isRequired": true, + "type": "string" + }, + { + "name": "check_run", + "description": "The check run object", + "isRequired": true, + "type": "object" + } + ], + "availability": ["Repository", "Organization", "GitHub App"], + "action": "completed", + "category": "check_run", + "payloadExample": { + "action": "completed", + "check_run": { + "id": 4, + "status": "completed", + "conclusion": "neutral" + } + } + } + }, + "issues": { + "opened": { + "descriptionHtml": "

Issue is opened.

", + "summaryHtml": "", + "bodyParameters": [ + { + "name": "action", + "description": "The action performed", + "isRequired": true, + "type": "string" + }, + { + "name": "issue", + "description": "The issue object", + "isRequired": false, + "type": "object" + } + ], + "availability": ["Repository", "Organization"], + "action": "opened", + "category": "issues" + } + } +} diff --git a/src/frame/lib/frontmatter.ts b/src/frame/lib/frontmatter.ts index a923d1b06bc5..e914da6f709d 100644 --- a/src/frame/lib/frontmatter.ts +++ b/src/frame/lib/frontmatter.ts @@ -361,7 +361,15 @@ export const schema: Schema = { }, autogenerated: { type: 'string', - enum: ['audit-logs', 'codeql-cli', 'github-apps', 'graphql', 'rest', 'webhooks'], + enum: [ + 'audit-logs', + 'codeql-cli', + 'github-apps', + 'graphql', + 'rest', + 'secret-scanning', + 'webhooks', + ], }, // START category-landing tags category: { diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index 9cbfeb53ec5b..4aee23468eff 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "7c030db5ffcf2d5ba3a1b61eacaed65c27bad7c0" + "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" } \ No newline at end of file diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json index 9a4d58d735a0..0ffe2952c52f 100644 --- a/src/graphql/data/fpt/changelog.json +++ b/src/graphql/data/fpt/changelog.json @@ -1,4 +1,147 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type CreateTeamDiscussionInput was added

", + "

Input field body of type String was added to input object type CreateTeamDiscussionInput

", + "

Input field clientMutationId of type String was added to input object type CreateTeamDiscussionInput

", + "

Input field private of type Boolean was added to input object type CreateTeamDiscussionInput

", + "

Input field teamId of type ID was added to input object type CreateTeamDiscussionInput

", + "

Input field title of type String was added to input object type CreateTeamDiscussionInput

", + "

Type CreateTeamDiscussionPayload was added

", + "

Field clientMutationId was added to object type CreateTeamDiscussionPayload

", + "

Field teamDiscussion was added to object type CreateTeamDiscussionPayload

", + "

Type DeleteTeamDiscussionInput was added

", + "

Input field clientMutationId of type String was added to input object type DeleteTeamDiscussionInput

", + "

Input field id of type ID! was added to input object type DeleteTeamDiscussionInput

", + "

Type DeleteTeamDiscussionPayload was added

", + "

Field clientMutationId was added to object type DeleteTeamDiscussionPayload

", + "

Type TeamDiscussion was added

", + "

TeamDiscussion object implements Comment interface

", + "

TeamDiscussion object implements Deletable interface

", + "

TeamDiscussion object implements Node interface

", + "

TeamDiscussion object implements Reactable interface

", + "

TeamDiscussion object implements Subscribable interface

", + "

TeamDiscussion object implements UniformResourceLocatable interface

", + "

TeamDiscussion object implements Updatable interface

", + "

TeamDiscussion object implements UpdatableComment interface

", + "

Field author was added to object type TeamDiscussion

", + "

Field authorAssociation was added to object type TeamDiscussion

", + "

Field body was added to object type TeamDiscussion

", + "

Field bodyHTML was added to object type TeamDiscussion

", + "

Field bodyText was added to object type TeamDiscussion

", + "

Field bodyVersion was added to object type TeamDiscussion

", + "

Field commentsResourcePath was added to object type TeamDiscussion

", + "

Field commentsUrl was added to object type TeamDiscussion

", + "

Field createdAt was added to object type TeamDiscussion

", + "

Field createdViaEmail was added to object type TeamDiscussion

", + "

Field databaseId was added to object type TeamDiscussion

", + "

Field editor was added to object type TeamDiscussion

", + "

Field id was added to object type TeamDiscussion

", + "

Field includesCreatedEdit was added to object type TeamDiscussion

", + "

Field isPinned was added to object type TeamDiscussion

", + "

Field isPrivate was added to object type TeamDiscussion

", + "

Field lastEditedAt was added to object type TeamDiscussion

", + "

Field number was added to object type TeamDiscussion

", + "

Field publishedAt was added to object type TeamDiscussion

", + "

Field reactionGroups was added to object type TeamDiscussion

", + "

Field reactions was added to object type TeamDiscussion

", + "

Argument after: String added to field TeamDiscussion.reactions

", + "

Argument before: String added to field TeamDiscussion.reactions

", + "

Argument content: ReactionContent added to field TeamDiscussion.reactions

", + "

Argument first: Int added to field TeamDiscussion.reactions

", + "

Argument last: Int added to field TeamDiscussion.reactions

", + "

Argument orderBy: ReactionOrder added to field TeamDiscussion.reactions

", + "

Field resourcePath was added to object type TeamDiscussion

", + "

Field team was added to object type TeamDiscussion

", + "

Field title was added to object type TeamDiscussion

", + "

Field updatedAt was added to object type TeamDiscussion

", + "

Field url was added to object type TeamDiscussion

", + "

Field userContentEdits was added to object type TeamDiscussion

", + "

Argument after: String added to field TeamDiscussion.userContentEdits

", + "

Argument before: String added to field TeamDiscussion.userContentEdits

", + "

Argument first: Int added to field TeamDiscussion.userContentEdits

", + "

Argument last: Int added to field TeamDiscussion.userContentEdits

", + "

Field viewerCanDelete was added to object type TeamDiscussion

", + "

Field viewerCanPin was added to object type TeamDiscussion

", + "

Field viewerCanReact was added to object type TeamDiscussion

", + "

Field viewerCanSubscribe was added to object type TeamDiscussion

", + "

Field viewerCanUpdate was added to object type TeamDiscussion

", + "

Field viewerCannotUpdateReasons was added to object type TeamDiscussion

", + "

Field viewerDidAuthor was added to object type TeamDiscussion

", + "

Field viewerSubscription was added to object type TeamDiscussion

", + "

Type TeamDiscussionConnection was added

", + "

Field edges was added to object type TeamDiscussionConnection

", + "

Field nodes was added to object type TeamDiscussionConnection

", + "

Field pageInfo was added to object type TeamDiscussionConnection

", + "

Field totalCount was added to object type TeamDiscussionConnection

", + "

Type TeamDiscussionEdge was added

", + "

Field cursor was added to object type TeamDiscussionEdge

", + "

Field node was added to object type TeamDiscussionEdge

", + "

Type TeamDiscussionOrder was added

", + "

Input field direction of type OrderDirection! was added to input object type TeamDiscussionOrder

", + "

Input field field of type TeamDiscussionOrderField! was added to input object type TeamDiscussionOrder

", + "

Type TeamDiscussionOrderField was added

", + "

Enum value 'CREATED_ATwas added to enumTeamDiscussionOrderField'

", + "

Type UpdateTeamDiscussionInput was added

", + "

Input field body of type String was added to input object type UpdateTeamDiscussionInput

", + "

Input field bodyVersion of type String was added to input object type UpdateTeamDiscussionInput

", + "

Input field clientMutationId of type String was added to input object type UpdateTeamDiscussionInput

", + "

Input field id of type ID! was added to input object type UpdateTeamDiscussionInput

", + "

Input field pinned of type Boolean was added to input object type UpdateTeamDiscussionInput

", + "

Input field title of type String was added to input object type UpdateTeamDiscussionInput

", + "

Type UpdateTeamDiscussionPayload was added

", + "

Field clientMutationId was added to object type UpdateTeamDiscussionPayload

", + "

Field teamDiscussion was added to object type UpdateTeamDiscussionPayload

", + "

Field createTeamDiscussion was added to object type Mutation

", + "

Argument input: CreateTeamDiscussionInput! added to field Mutation.createTeamDiscussion

", + "

Field deleteTeamDiscussion was added to object type Mutation

", + "

Argument input: DeleteTeamDiscussionInput! added to field Mutation.deleteTeamDiscussion

", + "

Field updateTeamDiscussion was added to object type Mutation

", + "

Argument input: UpdateTeamDiscussionInput! added to field Mutation.updateTeamDiscussion

", + "

Field discussion was added to object type Team

", + "

Argument number: Int! added to field Team.discussion

", + "

Field discussions was added to object type Team

", + "

Argument after: String added to field Team.discussions

", + "

Argument before: String added to field Team.discussions

", + "

Argument first: Int added to field Team.discussions

", + "

Argument isPinned: Boolean added to field Team.discussions

", + "

Argument last: Int added to field Team.discussions

", + "

Argument orderBy: TeamDiscussionOrder added to field Team.discussions

", + "

Field discussionsResourcePath was added to object type Team

", + "

Field discussionsUrl was added to object type Team

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [ + { + "title": "The following changes will be made to the schema:", + "changes": [ + "

On member CreateTeamDiscussionInput.body:body will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member CreateTeamDiscussionInput.private:private will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member CreateTeamDiscussionInput.teamId:teamId will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member CreateTeamDiscussionInput.title:title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member CreateTeamDiscussionPayload.teamDiscussion:teamDiscussion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.authorAssociation:authorAssociation will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.bodyVersion:bodyVersion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.commentsResourcePath:commentsResourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.commentsUrl:commentsUrl will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.isPinned:isPinned will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.isPrivate:isPrivate will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.number:number will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.resourcePath:resourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.team:team will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.title:title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.url:url will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

", + "

On member TeamDiscussion.viewerCanPin:viewerCanPin will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Effective 2024-07-01.

" + ] + } + ], + "date": "2026-01-06" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/fpt/graphql_upcoming_changes.public.yml b/src/graphql/data/fpt/graphql_upcoming_changes.public.yml index 63fed0b0ea09..0f59bb0649a9 100644 --- a/src/graphql/data/fpt/graphql_upcoming_changes.public.yml +++ b/src/graphql/data/fpt/graphql_upcoming_changes.public.yml @@ -402,6 +402,46 @@ upcoming_changes: date: '2024-04-01T00:00:00+00:00' criticality: breaking owner: calvinchilds + - location: CreateTeamDiscussionInput.body + description: + '`body` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.private + description: + '`private` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.teamId + description: + '`teamId` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.title + description: + '`title` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionPayload.teamDiscussion + description: + '`teamDiscussion` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges - location: OrganizationInvitation.inviter description: '`inviter` will be removed. `inviter` will be replaced by `inviterActor`.' reason: '`inviter` will be removed.' @@ -432,6 +472,102 @@ upcoming_changes: date: '2024-07-01T00:00:00+00:00' criticality: breaking owner: JanKoszewski + - location: TeamDiscussion.authorAssociation + description: + '`authorAssociation` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.bodyVersion + description: + '`bodyVersion` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.commentsResourcePath + description: + '`commentsResourcePath` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.commentsUrl + description: + '`commentsUrl` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.isPinned + description: + '`isPinned` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.isPrivate + description: + '`isPrivate` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.number + description: + '`number` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.resourcePath + description: + '`resourcePath` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.team + description: + '`team` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.title + description: + '`title` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.url + description: + '`url` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.viewerCanPin + description: + '`viewerCanPin` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges - location: Workflow.hasWorkflowDispatchTrigger description: '`hasWorkflowDispatchTrigger` will be removed. Use `has_workflow_dispatch_trigger_for_branch(branch_ref)` diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql index f63217359c64..431070437bba 100644 --- a/src/graphql/data/fpt/schema.docs.graphql +++ b/src/graphql/data/fpt/schema.docs.graphql @@ -1126,6 +1126,7 @@ input AddReactionInput { "PullRequestReview" "PullRequestReviewComment" "Release" + "TeamDiscussion" ] abstractType: "Reactable" ) @@ -9211,6 +9212,80 @@ type CreateSponsorshipsPayload { sponsorables: [Sponsorable!] } +""" +Autogenerated input type of CreateTeamDiscussion +""" +input CreateTeamDiscussionInput { + """ + The content of the discussion. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `body` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + If true, restricts the visibility of this discussion to team members and + organization owners. If false or not specified, allows any organization member + to view this discussion. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `private` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + private: Boolean + + """ + The ID of the team to which the discussion belongs. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `teamId` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + teamId: ID @possibleTypes(concreteTypes: ["Team"]) + + """ + The title of the discussion. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `title` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + title: String +} + +""" +Autogenerated return type of CreateTeamDiscussion. +""" +type CreateTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new discussion. + """ + teamDiscussion: TeamDiscussion + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) +} + """ Autogenerated input type of CreateUserList """ @@ -10645,6 +10720,31 @@ type DeleteRepositoryRulesetPayload { clientMutationId: String } +""" +Autogenerated input type of DeleteTeamDiscussion +""" +input DeleteTeamDiscussionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion ID to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"]) +} + +""" +Autogenerated return type of DeleteTeamDiscussion. +""" +type DeleteTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + """ Autogenerated input type of DeleteUserList """ @@ -25341,6 +25441,16 @@ type Mutation { input: CreateSponsorshipsInput! ): CreateSponsorshipsPayload + """ + Creates a new team discussion. + """ + createTeamDiscussion( + """ + Parameters for CreateTeamDiscussion + """ + input: CreateTeamDiscussionInput! + ): CreateTeamDiscussionPayload + """ Creates a new user list. """ @@ -25620,6 +25730,16 @@ type Mutation { input: DeleteRepositoryRulesetInput! ): DeleteRepositoryRulesetPayload + """ + Deletes a team discussion. + """ + deleteTeamDiscussion( + """ + Parameters for DeleteTeamDiscussion + """ + input: DeleteTeamDiscussionInput! + ): DeleteTeamDiscussionPayload + """ Deletes a user list. """ @@ -27116,6 +27236,16 @@ type Mutation { input: UpdateSubscriptionInput! ): UpdateSubscriptionPayload + """ + Updates a team discussion. + """ + updateTeamDiscussion( + """ + Parameters for UpdateTeamDiscussion + """ + input: UpdateTeamDiscussionInput! + ): UpdateTeamDiscussionPayload + """ Updates team review assignment. """ @@ -46213,6 +46343,7 @@ input RemoveReactionInput { "PullRequestReview" "PullRequestReviewComment" "Release" + "TeamDiscussion" ] abstractType: "Reactable" ) @@ -61014,6 +61145,61 @@ type Team implements MemberStatusable & Node & Subscribable { """ description: String + """ + Find a team discussion by its number. + """ + discussion( + """ + The sequence number of the discussion to find. + """ + number: Int! + ): TeamDiscussion + + """ + A list of team discussions. + """ + discussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + If provided, filters discussions according to whether or not they are pinned. + """ + isPinned: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Order for connection + """ + orderBy: TeamDiscussionOrder + ): TeamDiscussionConnection! + + """ + The HTTP path for team discussions + """ + discussionsResourcePath: URI! + + """ + The HTTP URL for team discussions + """ + discussionsUrl: URI! + """ The HTTP path for editing this team """ @@ -61996,6 +62182,337 @@ type TeamConnection { totalCount: Int! } +""" +A team discussion. +""" +type TeamDiscussion implements Comment & Deletable & Node & Reactable & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the discussion's team. + """ + authorAssociation: CommentAuthorAssociation! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + Identifies the discussion body hash. + """ + bodyVersion: String! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The HTTP path for discussion comments + """ + commentsResourcePath: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The HTTP URL for discussion comments + """ + commentsUrl: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Check if this comment was created via an email reply. + """ + createdViaEmail: Boolean! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + The Node ID of the TeamDiscussion object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Whether or not the discussion is pinned. + """ + isPinned: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Whether or not the discussion is only visible to team members and organization owners. + """ + isPrivate: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Identifies the discussion within its team. + """ + number: Int! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + A list of reactions grouped by content left on the subject. + """ + reactionGroups: [ReactionGroup!] + + """ + A list of Reactions left on the Issue. + """ + reactions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Allows filtering Reactions by emoji. + """ + content: ReactionContent + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Allows specifying the order in which reactions are returned. + """ + orderBy: ReactionOrder + ): ReactionConnection! + + """ + The HTTP path for this discussion + """ + resourcePath: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The team that defines the context of this discussion. + """ + team: Team! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The title of the discussion + """ + title: String! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this discussion + """ + url: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + A list of edits to this content. + """ + userContentEdits( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): UserContentEditConnection + + """ + Check if the current viewer can delete this object. + """ + viewerCanDelete: Boolean! + + """ + Whether or not the current viewer can pin this discussion. + """ + viewerCanPin: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the viewer is able to change their subscription status for the repository. + """ + viewerCanSubscribe: Boolean! + + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! + + """ + Reasons why the current viewer can not update this comment. + """ + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState +} + +""" +The connection type for TeamDiscussion. +""" +type TeamDiscussionConnection { + """ + A list of edges. + """ + edges: [TeamDiscussionEdge] + + """ + A list of nodes. + """ + nodes: [TeamDiscussion] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type TeamDiscussionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: TeamDiscussion +} + +""" +Ways in which team discussion connections can be ordered. +""" +input TeamDiscussionOrder { + """ + The direction in which to order nodes. + """ + direction: OrderDirection! + + """ + The field by which to order nodes. + """ + field: TeamDiscussionOrderField! +} + +""" +Properties by which team discussion connections can be ordered. +""" +enum TeamDiscussionOrderField { + """ + Allows chronological ordering of team discussions. + """ + CREATED_AT +} + """ An edge in a connection. """ @@ -66791,7 +67308,7 @@ input UpdateSubscriptionInput { """ subscribableId: ID! @possibleTypes( - concreteTypes: ["Commit", "Discussion", "Issue", "PullRequest", "Repository", "Team"] + concreteTypes: ["Commit", "Discussion", "Issue", "PullRequest", "Repository", "Team", "TeamDiscussion"] abstractType: "Subscribable" ) } @@ -66811,6 +67328,57 @@ type UpdateSubscriptionPayload { subscribable: Subscribable } +""" +Autogenerated input type of UpdateTeamDiscussion +""" +input UpdateTeamDiscussionInput { + """ + The updated text of the discussion. + """ + body: String + + """ + The current version of the body content. If provided, this update operation + will be rejected if the given version does not match the latest version on the server. + """ + bodyVersion: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion to modify. + """ + id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"]) + + """ + If provided, sets the pinned state of the updated discussion. + """ + pinned: Boolean + + """ + The updated title of the discussion. + """ + title: String +} + +""" +Autogenerated return type of UpdateTeamDiscussion. +""" +type UpdateTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated discussion. + """ + teamDiscussion: TeamDiscussion +} + """ Autogenerated input type of UpdateTeamReviewAssignment """ diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json index b406a568ef5a..2df3f25336bf 100644 --- a/src/graphql/data/fpt/schema.json +++ b/src/graphql/data/fpt/schema.json @@ -3665,6 +3665,42 @@ } ] }, + { + "name": "createTeamDiscussion", + "kind": "mutations", + "id": "createteamdiscussion", + "href": "/graphql/reference/mutations#createteamdiscussion", + "description": "

Creates a new team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "CreateTeamDiscussionInput!", + "id": "createteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#createteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "teamDiscussion", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

The new discussion.

", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + } + ] + }, { "name": "createUserList", "kind": "mutations", @@ -4583,6 +4619,32 @@ } ] }, + { + "name": "deleteTeamDiscussion", + "kind": "mutations", + "id": "deleteteamdiscussion", + "href": "/graphql/reference/mutations#deleteteamdiscussion", + "description": "

Deletes a team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "DeleteTeamDiscussionInput!", + "id": "deleteteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#deleteteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + } + ] + }, { "name": "deleteUserList", "kind": "mutations", @@ -9873,6 +9935,40 @@ } ] }, + { + "name": "updateTeamDiscussion", + "kind": "mutations", + "id": "updateteamdiscussion", + "href": "/graphql/reference/mutations#updateteamdiscussion", + "description": "

Updates a team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "UpdateTeamDiscussionInput!", + "id": "updateteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#updateteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "teamDiscussion", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

The updated discussion.

" + } + ] + }, { "name": "updateTeamReviewAssignment", "kind": "mutations", @@ -75987,72 +76083,18 @@ "href": "/graphql/reference/scalars#string" }, { - "name": "editTeamResourcePath", - "description": "

The HTTP path for editing this team.

", - "type": "URI!", - "id": "uri", - "kind": "scalars", - "href": "/graphql/reference/scalars#uri" - }, - { - "name": "editTeamUrl", - "description": "

The HTTP URL for editing this team.

", - "type": "URI!", - "id": "uri", - "kind": "scalars", - "href": "/graphql/reference/scalars#uri" - }, - { - "name": "id", - "description": "

The Node ID of the Team object.

", - "type": "ID!", - "id": "id", - "kind": "scalars", - "href": "/graphql/reference/scalars#id" - }, - { - "name": "invitations", - "description": "

A list of pending invitations for users to this team.

", - "type": "OrganizationInvitationConnection", - "id": "organizationinvitationconnection", + "name": "discussion", + "description": "

Find a team discussion by its number.

", + "type": "TeamDiscussion", + "id": "teamdiscussion", "kind": "objects", - "href": "/graphql/reference/objects#organizationinvitationconnection", + "href": "/graphql/reference/objects#teamdiscussion", "arguments": [ { - "name": "after", - "description": "

Returns the elements in the list that come after the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "before", - "description": "

Returns the elements in the list that come before the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "first", - "description": "

Returns the first n elements from the list.

", - "type": { - "name": "Int", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - }, - { - "name": "last", - "description": "

Returns the last n elements from the list.

", + "name": "number", + "description": "

The sequence number of the discussion to find.

", "type": { - "name": "Int", + "name": "Int!", "id": "int", "kind": "scalars", "href": "/graphql/reference/scalars#int" @@ -76061,12 +76103,12 @@ ] }, { - "name": "memberStatuses", - "description": "

Get the status messages members of this entity have set that are either public or visible only to the organization.

", - "type": "UserStatusConnection!", - "id": "userstatusconnection", + "name": "discussions", + "description": "

A list of team discussions.

", + "type": "TeamDiscussionConnection!", + "id": "teamdiscussionconnection", "kind": "objects", - "href": "/graphql/reference/objects#userstatusconnection", + "href": "/graphql/reference/objects#teamdiscussionconnection", "arguments": [ { "name": "after", @@ -76099,63 +76141,13 @@ } }, { - "name": "last", - "description": "

Returns the last n elements from the list.

", - "type": { - "name": "Int", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - }, - { - "name": "orderBy", - "description": "

Ordering options for user statuses returned from the connection.

", - "type": { - "name": "UserStatusOrder", - "id": "userstatusorder", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#userstatusorder" - } - } - ] - }, - { - "name": "members", - "description": "

A list of users who are members of this team.

", - "type": "TeamMemberConnection!", - "id": "teammemberconnection", - "kind": "objects", - "href": "/graphql/reference/objects#teammemberconnection", - "arguments": [ - { - "name": "after", - "description": "

Returns the elements in the list that come after the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "before", - "description": "

Returns the elements in the list that come before the specified cursor.

", + "name": "isPinned", + "description": "

If provided, filters discussions according to whether or not they are pinned.

", "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "first", - "description": "

Returns the first n elements from the list.

", - "type": { - "name": "Int", - "id": "int", + "name": "Boolean", + "id": "boolean", "kind": "scalars", - "href": "/graphql/reference/scalars#int" + "href": "/graphql/reference/scalars#boolean" } }, { @@ -76168,148 +76160,65 @@ "href": "/graphql/reference/scalars#int" } }, - { - "name": "membership", - "defaultValue": "ALL", - "description": "

Filter by membership type.

", - "type": { - "name": "TeamMembershipType", - "id": "teammembershiptype", - "kind": "enums", - "href": "/graphql/reference/enums#teammembershiptype" - } - }, { "name": "orderBy", - "description": "

Order for the connection.

", + "description": "

Order for connection.

", "type": { - "name": "TeamMemberOrder", - "id": "teammemberorder", + "name": "TeamDiscussionOrder", + "id": "teamdiscussionorder", "kind": "input-objects", - "href": "/graphql/reference/input-objects#teammemberorder" - } - }, - { - "name": "query", - "description": "

The search string to look for.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "role", - "description": "

Filter by team member role.

", - "type": { - "name": "TeamMemberRole", - "id": "teammemberrole", - "kind": "enums", - "href": "/graphql/reference/enums#teammemberrole" + "href": "/graphql/reference/input-objects#teamdiscussionorder" } } ] }, { - "name": "membersResourcePath", - "description": "

The HTTP path for the team' members.

", + "name": "discussionsResourcePath", + "description": "

The HTTP path for team discussions.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "membersUrl", - "description": "

The HTTP URL for the team' members.

", + "name": "discussionsUrl", + "description": "

The HTTP URL for team discussions.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "name", - "description": "

The name of the team.

", - "type": "String!", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - }, - { - "name": "newTeamResourcePath", - "description": "

The HTTP path creating a new team.

", + "name": "editTeamResourcePath", + "description": "

The HTTP path for editing this team.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "newTeamUrl", - "description": "

The HTTP URL creating a new team.

", + "name": "editTeamUrl", + "description": "

The HTTP URL for editing this team.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "notificationSetting", - "description": "

The notification setting that the team has set.

", - "type": "TeamNotificationSetting!", - "id": "teamnotificationsetting", - "kind": "enums", - "href": "/graphql/reference/enums#teamnotificationsetting" - }, - { - "name": "organization", - "description": "

The organization that owns this team.

", - "type": "Organization!", - "id": "organization", - "kind": "objects", - "href": "/graphql/reference/objects#organization" - }, - { - "name": "parentTeam", - "description": "

The parent team of the team.

", - "type": "Team", - "id": "team", - "kind": "objects", - "href": "/graphql/reference/objects#team" - }, - { - "name": "privacy", - "description": "

The level of privacy the team has.

", - "type": "TeamPrivacy!", - "id": "teamprivacy", - "kind": "enums", - "href": "/graphql/reference/enums#teamprivacy" - }, - { - "name": "projectV2", - "description": "

Finds and returns the project according to the provided project number.

", - "type": "ProjectV2", - "id": "projectv2", - "kind": "objects", - "href": "/graphql/reference/objects#projectv2", - "arguments": [ - { - "name": "number", - "description": "

The Project number.

", - "type": { - "name": "Int!", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - } - ] + "name": "id", + "description": "

The Node ID of the Team object.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id" }, { - "name": "projectsV2", - "description": "

List of projects this team has collaborator access to.

", - "type": "ProjectV2Connection!", - "id": "projectv2connection", + "name": "invitations", + "description": "

A list of pending invitations for users to this team.

", + "type": "OrganizationInvitationConnection", + "id": "organizationinvitationconnection", "kind": "objects", - "href": "/graphql/reference/objects#projectv2connection", + "href": "/graphql/reference/objects#organizationinvitationconnection", "arguments": [ { "name": "after", @@ -76331,16 +76240,6 @@ "href": "/graphql/reference/scalars#string" } }, - { - "name": "filterBy", - "description": "

Filtering options for projects returned from this connection.

", - "type": { - "name": "ProjectV2Filters", - "id": "projectv2filters", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#projectv2filters" - } - }, { "name": "first", "description": "

Returns the first n elements from the list.

", @@ -76360,48 +76259,351 @@ "kind": "scalars", "href": "/graphql/reference/scalars#int" } - }, - { - "name": "minPermissionLevel", - "defaultValue": "READ", - "description": "

Filter projects based on user role.

", - "type": { - "name": "ProjectV2PermissionLevel", - "id": "projectv2permissionlevel", - "kind": "enums", - "href": "/graphql/reference/enums#projectv2permissionlevel" - } - }, - { - "name": "orderBy", - "description": "

How to order the returned projects.

", - "type": { - "name": "ProjectV2Order", - "id": "projectv2order", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#projectv2order" - } - }, - { - "name": "query", - "defaultValue": "", - "description": "

The query to search projects by.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } } ] }, { - "name": "repositories", - "description": "

A list of repositories this team has access to.

", - "type": "TeamRepositoryConnection!", - "id": "teamrepositoryconnection", + "name": "memberStatuses", + "description": "

Get the status messages members of this entity have set that are either public or visible only to the organization.

", + "type": "UserStatusConnection!", + "id": "userstatusconnection", "kind": "objects", - "href": "/graphql/reference/objects#teamrepositoryconnection", + "href": "/graphql/reference/objects#userstatusconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "orderBy", + "description": "

Ordering options for user statuses returned from the connection.

", + "type": { + "name": "UserStatusOrder", + "id": "userstatusorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#userstatusorder" + } + } + ] + }, + { + "name": "members", + "description": "

A list of users who are members of this team.

", + "type": "TeamMemberConnection!", + "id": "teammemberconnection", + "kind": "objects", + "href": "/graphql/reference/objects#teammemberconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "membership", + "defaultValue": "ALL", + "description": "

Filter by membership type.

", + "type": { + "name": "TeamMembershipType", + "id": "teammembershiptype", + "kind": "enums", + "href": "/graphql/reference/enums#teammembershiptype" + } + }, + { + "name": "orderBy", + "description": "

Order for the connection.

", + "type": { + "name": "TeamMemberOrder", + "id": "teammemberorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#teammemberorder" + } + }, + { + "name": "query", + "description": "

The search string to look for.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "role", + "description": "

Filter by team member role.

", + "type": { + "name": "TeamMemberRole", + "id": "teammemberrole", + "kind": "enums", + "href": "/graphql/reference/enums#teammemberrole" + } + } + ] + }, + { + "name": "membersResourcePath", + "description": "

The HTTP path for the team' members.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "membersUrl", + "description": "

The HTTP URL for the team' members.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "name", + "description": "

The name of the team.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "newTeamResourcePath", + "description": "

The HTTP path creating a new team.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "newTeamUrl", + "description": "

The HTTP URL creating a new team.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "notificationSetting", + "description": "

The notification setting that the team has set.

", + "type": "TeamNotificationSetting!", + "id": "teamnotificationsetting", + "kind": "enums", + "href": "/graphql/reference/enums#teamnotificationsetting" + }, + { + "name": "organization", + "description": "

The organization that owns this team.

", + "type": "Organization!", + "id": "organization", + "kind": "objects", + "href": "/graphql/reference/objects#organization" + }, + { + "name": "parentTeam", + "description": "

The parent team of the team.

", + "type": "Team", + "id": "team", + "kind": "objects", + "href": "/graphql/reference/objects#team" + }, + { + "name": "privacy", + "description": "

The level of privacy the team has.

", + "type": "TeamPrivacy!", + "id": "teamprivacy", + "kind": "enums", + "href": "/graphql/reference/enums#teamprivacy" + }, + { + "name": "projectV2", + "description": "

Finds and returns the project according to the provided project number.

", + "type": "ProjectV2", + "id": "projectv2", + "kind": "objects", + "href": "/graphql/reference/objects#projectv2", + "arguments": [ + { + "name": "number", + "description": "

The Project number.

", + "type": { + "name": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ] + }, + { + "name": "projectsV2", + "description": "

List of projects this team has collaborator access to.

", + "type": "ProjectV2Connection!", + "id": "projectv2connection", + "kind": "objects", + "href": "/graphql/reference/objects#projectv2connection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "filterBy", + "description": "

Filtering options for projects returned from this connection.

", + "type": { + "name": "ProjectV2Filters", + "id": "projectv2filters", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2filters" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "minPermissionLevel", + "defaultValue": "READ", + "description": "

Filter projects based on user role.

", + "type": { + "name": "ProjectV2PermissionLevel", + "id": "projectv2permissionlevel", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2permissionlevel" + } + }, + { + "name": "orderBy", + "description": "

How to order the returned projects.

", + "type": { + "name": "ProjectV2Order", + "id": "projectv2order", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2order" + } + }, + { + "name": "query", + "defaultValue": "", + "description": "

The query to search projects by.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + } + ] + }, + { + "name": "repositories", + "description": "

A list of repositories this team has access to.

", + "type": "TeamRepositoryConnection!", + "id": "teamrepositoryconnection", + "kind": "objects", + "href": "/graphql/reference/objects#teamrepositoryconnection", "arguments": [ { "name": "after", @@ -77498,6 +77700,531 @@ } ] }, + { + "name": "TeamDiscussion", + "kind": "objects", + "id": "teamdiscussion", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

A team discussion.

", + "implements": [ + { + "name": "Comment", + "id": "comment", + "href": "/graphql/reference/interfaces#comment" + }, + { + "name": "Deletable", + "id": "deletable", + "href": "/graphql/reference/interfaces#deletable" + }, + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "Reactable", + "id": "reactable", + "href": "/graphql/reference/interfaces#reactable" + }, + { + "name": "Subscribable", + "id": "subscribable", + "href": "/graphql/reference/interfaces#subscribable" + }, + { + "name": "UniformResourceLocatable", + "id": "uniformresourcelocatable", + "href": "/graphql/reference/interfaces#uniformresourcelocatable" + }, + { + "name": "Updatable", + "id": "updatable", + "href": "/graphql/reference/interfaces#updatable" + }, + { + "name": "UpdatableComment", + "id": "updatablecomment", + "href": "/graphql/reference/interfaces#updatablecomment" + } + ], + "fields": [ + { + "name": "author", + "description": "

The actor who authored the comment.

", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor" + }, + { + "name": "authorAssociation", + "description": "

Author's association with the discussion's team.

", + "type": "CommentAuthorAssociation!", + "id": "commentauthorassociation", + "kind": "enums", + "href": "/graphql/reference/enums#commentauthorassociation", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "body", + "description": "

The body as Markdown.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyHTML", + "description": "

The body rendered to HTML.

", + "type": "HTML!", + "id": "html", + "kind": "scalars", + "href": "/graphql/reference/scalars#html" + }, + { + "name": "bodyText", + "description": "

The body rendered to text.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyVersion", + "description": "

Identifies the discussion body hash.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "commentsResourcePath", + "description": "

The HTTP path for discussion comments.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "commentsUrl", + "description": "

The HTTP URL for discussion comments.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "createdViaEmail", + "description": "

Check if this comment was created via an email reply.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + }, + { + "name": "editor", + "description": "

The actor who edited the comment.

", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor" + }, + { + "name": "id", + "description": "

The Node ID of the TeamDiscussion object.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id" + }, + { + "name": "includesCreatedEdit", + "description": "

Check if this comment was edited and includes an edit with the creation data.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "isPinned", + "description": "

Whether or not the discussion is pinned.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "isPrivate", + "description": "

Whether or not the discussion is only visible to team members and organization owners.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "lastEditedAt", + "description": "

The moment the editor made the last edit.

", + "type": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "number", + "description": "

Identifies the discussion within its team.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "publishedAt", + "description": "

Identifies when the comment was published at.

", + "type": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "reactionGroups", + "description": "

A list of reactions grouped by content left on the subject.

", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup" + }, + { + "name": "reactions", + "description": "

A list of Reactions left on the Issue.

", + "type": "ReactionConnection!", + "id": "reactionconnection", + "kind": "objects", + "href": "/graphql/reference/objects#reactionconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "content", + "description": "

Allows filtering Reactions by emoji.

", + "type": { + "name": "ReactionContent", + "id": "reactioncontent", + "kind": "enums", + "href": "/graphql/reference/enums#reactioncontent" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "orderBy", + "description": "

Allows specifying the order in which reactions are returned.

", + "type": { + "name": "ReactionOrder", + "id": "reactionorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#reactionorder" + } + } + ] + }, + { + "name": "resourcePath", + "description": "

The HTTP path for this discussion.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "team", + "description": "

The team that defines the context of this discussion.

", + "type": "Team!", + "id": "team", + "kind": "objects", + "href": "/graphql/reference/objects#team", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "title", + "description": "

The title of the discussion.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "url", + "description": "

The HTTP URL for this discussion.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "userContentEdits", + "description": "

A list of edits to this content.

", + "type": "UserContentEditConnection", + "id": "usercontenteditconnection", + "kind": "objects", + "href": "/graphql/reference/objects#usercontenteditconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ] + }, + { + "name": "viewerCanDelete", + "description": "

Check if the current viewer can delete this object.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanPin", + "description": "

Whether or not the current viewer can pin this discussion.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "viewerCanReact", + "description": "

Can user react to this subject.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanSubscribe", + "description": "

Check if the viewer is able to change their subscription status for the repository.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanUpdate", + "description": "

Check if the current viewer can update this object.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCannotUpdateReasons", + "description": "

Reasons why the current viewer can not update this comment.

", + "type": "[CommentCannotUpdateReason!]!", + "id": "commentcannotupdatereason", + "kind": "enums", + "href": "/graphql/reference/enums#commentcannotupdatereason" + }, + { + "name": "viewerDidAuthor", + "description": "

Did the viewer author this comment.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerSubscription", + "description": "

Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.

", + "type": "SubscriptionState", + "id": "subscriptionstate", + "kind": "enums", + "href": "/graphql/reference/enums#subscriptionstate" + } + ] + }, + { + "name": "TeamDiscussionConnection", + "kind": "objects", + "id": "teamdiscussionconnection", + "href": "/graphql/reference/objects#teamdiscussionconnection", + "description": "

The connection type for TeamDiscussion.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[TeamDiscussionEdge]", + "id": "teamdiscussionedge", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussionedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[TeamDiscussion]", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "TeamDiscussionEdge", + "kind": "objects", + "id": "teamdiscussionedge", + "href": "/graphql/reference/objects#teamdiscussionedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion" + } + ] + }, { "name": "TeamEdge", "kind": "objects", @@ -94874,6 +95601,19 @@ } ] }, + { + "name": "TeamDiscussionOrderField", + "kind": "enums", + "id": "teamdiscussionorderfield", + "href": "/graphql/reference/enums#teamdiscussionorderfield", + "description": "

Properties by which team discussion connections can be ordered.

", + "values": [ + { + "name": "CREATED_AT", + "description": "

Allows chronological ordering of team discussions.

" + } + ] + }, { "name": "TeamMemberOrderField", "kind": "enums", @@ -102133,6 +102873,56 @@ } ] }, + { + "name": "CreateTeamDiscussionInput", + "kind": "inputObjects", + "id": "createteamdiscussioninput", + "href": "/graphql/reference/input-objects#createteamdiscussioninput", + "description": "

Autogenerated input type of CreateTeamDiscussion.

", + "inputFields": [ + { + "name": "body", + "description": "

The content of the discussion. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: body will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "private", + "description": "

If true, restricts the visibility of this discussion to team members and\norganization owners. If false or not specified, allows any organization member\nto view this discussion.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: private will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "teamId", + "description": "

The ID of the team to which the discussion belongs. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: teamId will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "title", + "description": "

The title of the discussion. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: title will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "CreateUserListInput", "kind": "inputObjects", @@ -102900,6 +103690,32 @@ } ] }, + { + "name": "DeleteTeamDiscussionInput", + "kind": "inputObjects", + "id": "deleteteamdiscussioninput", + "href": "/graphql/reference/input-objects#deleteteamdiscussioninput", + "description": "

Autogenerated input type of DeleteTeamDiscussion.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "id", + "description": "

The discussion ID to delete.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "DeleteUserListInput", "kind": "inputObjects", @@ -108277,6 +109093,31 @@ } ] }, + { + "name": "TeamDiscussionOrder", + "kind": "inputObjects", + "id": "teamdiscussionorder", + "href": "/graphql/reference/input-objects#teamdiscussionorder", + "description": "

Ways in which team discussion connections can be ordered.

", + "inputFields": [ + { + "name": "direction", + "description": "

The direction in which to order nodes.

", + "type": "OrderDirection!", + "id": "orderdirection", + "kind": "enums", + "href": "/graphql/reference/enums#orderdirection" + }, + { + "name": "field", + "description": "

The field by which to order nodes.

", + "type": "TeamDiscussionOrderField!", + "id": "teamdiscussionorderfield", + "kind": "enums", + "href": "/graphql/reference/enums#teamdiscussionorderfield" + } + ] + }, { "name": "TeamMemberOrder", "kind": "inputObjects", @@ -111822,6 +112663,64 @@ } ] }, + { + "name": "UpdateTeamDiscussionInput", + "kind": "inputObjects", + "id": "updateteamdiscussioninput", + "href": "/graphql/reference/input-objects#updateteamdiscussioninput", + "description": "

Autogenerated input type of UpdateTeamDiscussion.

", + "inputFields": [ + { + "name": "body", + "description": "

The updated text of the discussion.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyVersion", + "description": "

The current version of the body content. If provided, this update operation\nwill be rejected if the given version does not match the latest version on the server.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "id", + "description": "

The Node ID of the discussion to modify.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "pinned", + "description": "

If provided, sets the pinned state of the updated discussion.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "title", + "description": "

The updated title of the discussion.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "UpdateTeamReviewAssignmentInput", "kind": "inputObjects", diff --git a/src/graphql/data/fpt/upcoming-changes.json b/src/graphql/data/fpt/upcoming-changes.json index 0ad394994fe8..b502f6798ad3 100644 --- a/src/graphql/data/fpt/upcoming-changes.json +++ b/src/graphql/data/fpt/upcoming-changes.json @@ -9780,6 +9780,102 @@ } ], "2024-07-01": [ + { + "location": "TeamDiscussion.viewerCanPin", + "description": "

viewerCanPin will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.url", + "description": "

url will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.title", + "description": "

title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.team", + "description": "

team will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.resourcePath", + "description": "

resourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.number", + "description": "

number will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.isPrivate", + "description": "

isPrivate will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.isPinned", + "description": "

isPinned will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.commentsUrl", + "description": "

commentsUrl will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.commentsResourcePath", + "description": "

commentsResourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.bodyVersion", + "description": "

bodyVersion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.authorAssociation", + "description": "

authorAssociation will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, { "location": "PullRequestReviewComment.databaseId", "description": "

databaseId will be removed. Use fullDatabaseId instead.

", @@ -9811,6 +9907,46 @@ "date": "2024-07-01", "criticality": "breaking", "owner": "jdennes" + }, + { + "location": "CreateTeamDiscussionPayload.teamDiscussion", + "description": "

teamDiscussion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.title", + "description": "

title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.teamId", + "description": "

teamId will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.private", + "description": "

private will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.body", + "description": "

body will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" } ], "2024-04-01": [ diff --git a/src/graphql/data/ghec/graphql_upcoming_changes.public.yml b/src/graphql/data/ghec/graphql_upcoming_changes.public.yml index 63fed0b0ea09..0f59bb0649a9 100644 --- a/src/graphql/data/ghec/graphql_upcoming_changes.public.yml +++ b/src/graphql/data/ghec/graphql_upcoming_changes.public.yml @@ -402,6 +402,46 @@ upcoming_changes: date: '2024-04-01T00:00:00+00:00' criticality: breaking owner: calvinchilds + - location: CreateTeamDiscussionInput.body + description: + '`body` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.private + description: + '`private` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.teamId + description: + '`teamId` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionInput.title + description: + '`title` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: CreateTeamDiscussionPayload.teamDiscussion + description: + '`teamDiscussion` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges - location: OrganizationInvitation.inviter description: '`inviter` will be removed. `inviter` will be replaced by `inviterActor`.' reason: '`inviter` will be removed.' @@ -432,6 +472,102 @@ upcoming_changes: date: '2024-07-01T00:00:00+00:00' criticality: breaking owner: JanKoszewski + - location: TeamDiscussion.authorAssociation + description: + '`authorAssociation` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.bodyVersion + description: + '`bodyVersion` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.commentsResourcePath + description: + '`commentsResourcePath` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.commentsUrl + description: + '`commentsUrl` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.isPinned + description: + '`isPinned` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.isPrivate + description: + '`isPrivate` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.number + description: + '`number` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.resourcePath + description: + '`resourcePath` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.team + description: + '`team` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.title + description: + '`title` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.url + description: + '`url` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges + - location: TeamDiscussion.viewerCanPin + description: + '`viewerCanPin` will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ + to find a suitable replacement.' + reason: The Team Discussions feature is deprecated in favor of Organization Discussions. + date: '2024-07-01T00:00:00+00:00' + criticality: breaking + owner: deborah-digges - location: Workflow.hasWorkflowDispatchTrigger description: '`hasWorkflowDispatchTrigger` will be removed. Use `has_workflow_dispatch_trigger_for_branch(branch_ref)` diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql index f63217359c64..431070437bba 100644 --- a/src/graphql/data/ghec/schema.docs.graphql +++ b/src/graphql/data/ghec/schema.docs.graphql @@ -1126,6 +1126,7 @@ input AddReactionInput { "PullRequestReview" "PullRequestReviewComment" "Release" + "TeamDiscussion" ] abstractType: "Reactable" ) @@ -9211,6 +9212,80 @@ type CreateSponsorshipsPayload { sponsorables: [Sponsorable!] } +""" +Autogenerated input type of CreateTeamDiscussion +""" +input CreateTeamDiscussionInput { + """ + The content of the discussion. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `body` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + If true, restricts the visibility of this discussion to team members and + organization owners. If false or not specified, allows any organization member + to view this discussion. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `private` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + private: Boolean + + """ + The ID of the team to which the discussion belongs. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `teamId` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + teamId: ID @possibleTypes(concreteTypes: ["Team"]) + + """ + The title of the discussion. This field is required. + + **Upcoming Change on 2024-07-01 UTC** + **Description:** `title` will be removed. Follow the guide at + https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to + find a suitable replacement. + **Reason:** The Team Discussions feature is deprecated in favor of Organization Discussions. + """ + title: String +} + +""" +Autogenerated return type of CreateTeamDiscussion. +""" +type CreateTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new discussion. + """ + teamDiscussion: TeamDiscussion + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) +} + """ Autogenerated input type of CreateUserList """ @@ -10645,6 +10720,31 @@ type DeleteRepositoryRulesetPayload { clientMutationId: String } +""" +Autogenerated input type of DeleteTeamDiscussion +""" +input DeleteTeamDiscussionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion ID to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"]) +} + +""" +Autogenerated return type of DeleteTeamDiscussion. +""" +type DeleteTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + """ Autogenerated input type of DeleteUserList """ @@ -25341,6 +25441,16 @@ type Mutation { input: CreateSponsorshipsInput! ): CreateSponsorshipsPayload + """ + Creates a new team discussion. + """ + createTeamDiscussion( + """ + Parameters for CreateTeamDiscussion + """ + input: CreateTeamDiscussionInput! + ): CreateTeamDiscussionPayload + """ Creates a new user list. """ @@ -25620,6 +25730,16 @@ type Mutation { input: DeleteRepositoryRulesetInput! ): DeleteRepositoryRulesetPayload + """ + Deletes a team discussion. + """ + deleteTeamDiscussion( + """ + Parameters for DeleteTeamDiscussion + """ + input: DeleteTeamDiscussionInput! + ): DeleteTeamDiscussionPayload + """ Deletes a user list. """ @@ -27116,6 +27236,16 @@ type Mutation { input: UpdateSubscriptionInput! ): UpdateSubscriptionPayload + """ + Updates a team discussion. + """ + updateTeamDiscussion( + """ + Parameters for UpdateTeamDiscussion + """ + input: UpdateTeamDiscussionInput! + ): UpdateTeamDiscussionPayload + """ Updates team review assignment. """ @@ -46213,6 +46343,7 @@ input RemoveReactionInput { "PullRequestReview" "PullRequestReviewComment" "Release" + "TeamDiscussion" ] abstractType: "Reactable" ) @@ -61014,6 +61145,61 @@ type Team implements MemberStatusable & Node & Subscribable { """ description: String + """ + Find a team discussion by its number. + """ + discussion( + """ + The sequence number of the discussion to find. + """ + number: Int! + ): TeamDiscussion + + """ + A list of team discussions. + """ + discussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + If provided, filters discussions according to whether or not they are pinned. + """ + isPinned: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Order for connection + """ + orderBy: TeamDiscussionOrder + ): TeamDiscussionConnection! + + """ + The HTTP path for team discussions + """ + discussionsResourcePath: URI! + + """ + The HTTP URL for team discussions + """ + discussionsUrl: URI! + """ The HTTP path for editing this team """ @@ -61996,6 +62182,337 @@ type TeamConnection { totalCount: Int! } +""" +A team discussion. +""" +type TeamDiscussion implements Comment & Deletable & Node & Reactable & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the discussion's team. + """ + authorAssociation: CommentAuthorAssociation! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + Identifies the discussion body hash. + """ + bodyVersion: String! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The HTTP path for discussion comments + """ + commentsResourcePath: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The HTTP URL for discussion comments + """ + commentsUrl: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Check if this comment was created via an email reply. + """ + createdViaEmail: Boolean! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + The Node ID of the TeamDiscussion object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Whether or not the discussion is pinned. + """ + isPinned: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Whether or not the discussion is only visible to team members and organization owners. + """ + isPrivate: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Identifies the discussion within its team. + """ + number: Int! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + A list of reactions grouped by content left on the subject. + """ + reactionGroups: [ReactionGroup!] + + """ + A list of Reactions left on the Issue. + """ + reactions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Allows filtering Reactions by emoji. + """ + content: ReactionContent + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Allows specifying the order in which reactions are returned. + """ + orderBy: ReactionOrder + ): ReactionConnection! + + """ + The HTTP path for this discussion + """ + resourcePath: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The team that defines the context of this discussion. + """ + team: Team! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + The title of the discussion + """ + title: String! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this discussion + """ + url: URI! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + A list of edits to this content. + """ + userContentEdits( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): UserContentEditConnection + + """ + Check if the current viewer can delete this object. + """ + viewerCanDelete: Boolean! + + """ + Whether or not the current viewer can pin this discussion. + """ + viewerCanPin: Boolean! + @deprecated( + reason: "The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC." + ) + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the viewer is able to change their subscription status for the repository. + """ + viewerCanSubscribe: Boolean! + + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! + + """ + Reasons why the current viewer can not update this comment. + """ + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState +} + +""" +The connection type for TeamDiscussion. +""" +type TeamDiscussionConnection { + """ + A list of edges. + """ + edges: [TeamDiscussionEdge] + + """ + A list of nodes. + """ + nodes: [TeamDiscussion] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type TeamDiscussionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: TeamDiscussion +} + +""" +Ways in which team discussion connections can be ordered. +""" +input TeamDiscussionOrder { + """ + The direction in which to order nodes. + """ + direction: OrderDirection! + + """ + The field by which to order nodes. + """ + field: TeamDiscussionOrderField! +} + +""" +Properties by which team discussion connections can be ordered. +""" +enum TeamDiscussionOrderField { + """ + Allows chronological ordering of team discussions. + """ + CREATED_AT +} + """ An edge in a connection. """ @@ -66791,7 +67308,7 @@ input UpdateSubscriptionInput { """ subscribableId: ID! @possibleTypes( - concreteTypes: ["Commit", "Discussion", "Issue", "PullRequest", "Repository", "Team"] + concreteTypes: ["Commit", "Discussion", "Issue", "PullRequest", "Repository", "Team", "TeamDiscussion"] abstractType: "Subscribable" ) } @@ -66811,6 +67328,57 @@ type UpdateSubscriptionPayload { subscribable: Subscribable } +""" +Autogenerated input type of UpdateTeamDiscussion +""" +input UpdateTeamDiscussionInput { + """ + The updated text of the discussion. + """ + body: String + + """ + The current version of the body content. If provided, this update operation + will be rejected if the given version does not match the latest version on the server. + """ + bodyVersion: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion to modify. + """ + id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"]) + + """ + If provided, sets the pinned state of the updated discussion. + """ + pinned: Boolean + + """ + The updated title of the discussion. + """ + title: String +} + +""" +Autogenerated return type of UpdateTeamDiscussion. +""" +type UpdateTeamDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated discussion. + """ + teamDiscussion: TeamDiscussion +} + """ Autogenerated input type of UpdateTeamReviewAssignment """ diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index b406a568ef5a..2df3f25336bf 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -3665,6 +3665,42 @@ } ] }, + { + "name": "createTeamDiscussion", + "kind": "mutations", + "id": "createteamdiscussion", + "href": "/graphql/reference/mutations#createteamdiscussion", + "description": "

Creates a new team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "CreateTeamDiscussionInput!", + "id": "createteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#createteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "teamDiscussion", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

The new discussion.

", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + } + ] + }, { "name": "createUserList", "kind": "mutations", @@ -4583,6 +4619,32 @@ } ] }, + { + "name": "deleteTeamDiscussion", + "kind": "mutations", + "id": "deleteteamdiscussion", + "href": "/graphql/reference/mutations#deleteteamdiscussion", + "description": "

Deletes a team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "DeleteTeamDiscussionInput!", + "id": "deleteteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#deleteteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + } + ] + }, { "name": "deleteUserList", "kind": "mutations", @@ -9873,6 +9935,40 @@ } ] }, + { + "name": "updateTeamDiscussion", + "kind": "mutations", + "id": "updateteamdiscussion", + "href": "/graphql/reference/mutations#updateteamdiscussion", + "description": "

Updates a team discussion.

", + "inputFields": [ + { + "name": "input", + "type": "UpdateTeamDiscussionInput!", + "id": "updateteamdiscussioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#updateteamdiscussioninput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "teamDiscussion", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

The updated discussion.

" + } + ] + }, { "name": "updateTeamReviewAssignment", "kind": "mutations", @@ -75987,72 +76083,18 @@ "href": "/graphql/reference/scalars#string" }, { - "name": "editTeamResourcePath", - "description": "

The HTTP path for editing this team.

", - "type": "URI!", - "id": "uri", - "kind": "scalars", - "href": "/graphql/reference/scalars#uri" - }, - { - "name": "editTeamUrl", - "description": "

The HTTP URL for editing this team.

", - "type": "URI!", - "id": "uri", - "kind": "scalars", - "href": "/graphql/reference/scalars#uri" - }, - { - "name": "id", - "description": "

The Node ID of the Team object.

", - "type": "ID!", - "id": "id", - "kind": "scalars", - "href": "/graphql/reference/scalars#id" - }, - { - "name": "invitations", - "description": "

A list of pending invitations for users to this team.

", - "type": "OrganizationInvitationConnection", - "id": "organizationinvitationconnection", + "name": "discussion", + "description": "

Find a team discussion by its number.

", + "type": "TeamDiscussion", + "id": "teamdiscussion", "kind": "objects", - "href": "/graphql/reference/objects#organizationinvitationconnection", + "href": "/graphql/reference/objects#teamdiscussion", "arguments": [ { - "name": "after", - "description": "

Returns the elements in the list that come after the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "before", - "description": "

Returns the elements in the list that come before the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "first", - "description": "

Returns the first n elements from the list.

", - "type": { - "name": "Int", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - }, - { - "name": "last", - "description": "

Returns the last n elements from the list.

", + "name": "number", + "description": "

The sequence number of the discussion to find.

", "type": { - "name": "Int", + "name": "Int!", "id": "int", "kind": "scalars", "href": "/graphql/reference/scalars#int" @@ -76061,12 +76103,12 @@ ] }, { - "name": "memberStatuses", - "description": "

Get the status messages members of this entity have set that are either public or visible only to the organization.

", - "type": "UserStatusConnection!", - "id": "userstatusconnection", + "name": "discussions", + "description": "

A list of team discussions.

", + "type": "TeamDiscussionConnection!", + "id": "teamdiscussionconnection", "kind": "objects", - "href": "/graphql/reference/objects#userstatusconnection", + "href": "/graphql/reference/objects#teamdiscussionconnection", "arguments": [ { "name": "after", @@ -76099,63 +76141,13 @@ } }, { - "name": "last", - "description": "

Returns the last n elements from the list.

", - "type": { - "name": "Int", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - }, - { - "name": "orderBy", - "description": "

Ordering options for user statuses returned from the connection.

", - "type": { - "name": "UserStatusOrder", - "id": "userstatusorder", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#userstatusorder" - } - } - ] - }, - { - "name": "members", - "description": "

A list of users who are members of this team.

", - "type": "TeamMemberConnection!", - "id": "teammemberconnection", - "kind": "objects", - "href": "/graphql/reference/objects#teammemberconnection", - "arguments": [ - { - "name": "after", - "description": "

Returns the elements in the list that come after the specified cursor.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "before", - "description": "

Returns the elements in the list that come before the specified cursor.

", + "name": "isPinned", + "description": "

If provided, filters discussions according to whether or not they are pinned.

", "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "first", - "description": "

Returns the first n elements from the list.

", - "type": { - "name": "Int", - "id": "int", + "name": "Boolean", + "id": "boolean", "kind": "scalars", - "href": "/graphql/reference/scalars#int" + "href": "/graphql/reference/scalars#boolean" } }, { @@ -76168,148 +76160,65 @@ "href": "/graphql/reference/scalars#int" } }, - { - "name": "membership", - "defaultValue": "ALL", - "description": "

Filter by membership type.

", - "type": { - "name": "TeamMembershipType", - "id": "teammembershiptype", - "kind": "enums", - "href": "/graphql/reference/enums#teammembershiptype" - } - }, { "name": "orderBy", - "description": "

Order for the connection.

", + "description": "

Order for connection.

", "type": { - "name": "TeamMemberOrder", - "id": "teammemberorder", + "name": "TeamDiscussionOrder", + "id": "teamdiscussionorder", "kind": "input-objects", - "href": "/graphql/reference/input-objects#teammemberorder" - } - }, - { - "name": "query", - "description": "

The search string to look for.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } - }, - { - "name": "role", - "description": "

Filter by team member role.

", - "type": { - "name": "TeamMemberRole", - "id": "teammemberrole", - "kind": "enums", - "href": "/graphql/reference/enums#teammemberrole" + "href": "/graphql/reference/input-objects#teamdiscussionorder" } } ] }, { - "name": "membersResourcePath", - "description": "

The HTTP path for the team' members.

", + "name": "discussionsResourcePath", + "description": "

The HTTP path for team discussions.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "membersUrl", - "description": "

The HTTP URL for the team' members.

", + "name": "discussionsUrl", + "description": "

The HTTP URL for team discussions.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "name", - "description": "

The name of the team.

", - "type": "String!", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - }, - { - "name": "newTeamResourcePath", - "description": "

The HTTP path creating a new team.

", + "name": "editTeamResourcePath", + "description": "

The HTTP path for editing this team.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "newTeamUrl", - "description": "

The HTTP URL creating a new team.

", + "name": "editTeamUrl", + "description": "

The HTTP URL for editing this team.

", "type": "URI!", "id": "uri", "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, { - "name": "notificationSetting", - "description": "

The notification setting that the team has set.

", - "type": "TeamNotificationSetting!", - "id": "teamnotificationsetting", - "kind": "enums", - "href": "/graphql/reference/enums#teamnotificationsetting" - }, - { - "name": "organization", - "description": "

The organization that owns this team.

", - "type": "Organization!", - "id": "organization", - "kind": "objects", - "href": "/graphql/reference/objects#organization" - }, - { - "name": "parentTeam", - "description": "

The parent team of the team.

", - "type": "Team", - "id": "team", - "kind": "objects", - "href": "/graphql/reference/objects#team" - }, - { - "name": "privacy", - "description": "

The level of privacy the team has.

", - "type": "TeamPrivacy!", - "id": "teamprivacy", - "kind": "enums", - "href": "/graphql/reference/enums#teamprivacy" - }, - { - "name": "projectV2", - "description": "

Finds and returns the project according to the provided project number.

", - "type": "ProjectV2", - "id": "projectv2", - "kind": "objects", - "href": "/graphql/reference/objects#projectv2", - "arguments": [ - { - "name": "number", - "description": "

The Project number.

", - "type": { - "name": "Int!", - "id": "int", - "kind": "scalars", - "href": "/graphql/reference/scalars#int" - } - } - ] + "name": "id", + "description": "

The Node ID of the Team object.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id" }, { - "name": "projectsV2", - "description": "

List of projects this team has collaborator access to.

", - "type": "ProjectV2Connection!", - "id": "projectv2connection", + "name": "invitations", + "description": "

A list of pending invitations for users to this team.

", + "type": "OrganizationInvitationConnection", + "id": "organizationinvitationconnection", "kind": "objects", - "href": "/graphql/reference/objects#projectv2connection", + "href": "/graphql/reference/objects#organizationinvitationconnection", "arguments": [ { "name": "after", @@ -76331,16 +76240,6 @@ "href": "/graphql/reference/scalars#string" } }, - { - "name": "filterBy", - "description": "

Filtering options for projects returned from this connection.

", - "type": { - "name": "ProjectV2Filters", - "id": "projectv2filters", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#projectv2filters" - } - }, { "name": "first", "description": "

Returns the first n elements from the list.

", @@ -76360,48 +76259,351 @@ "kind": "scalars", "href": "/graphql/reference/scalars#int" } - }, - { - "name": "minPermissionLevel", - "defaultValue": "READ", - "description": "

Filter projects based on user role.

", - "type": { - "name": "ProjectV2PermissionLevel", - "id": "projectv2permissionlevel", - "kind": "enums", - "href": "/graphql/reference/enums#projectv2permissionlevel" - } - }, - { - "name": "orderBy", - "description": "

How to order the returned projects.

", - "type": { - "name": "ProjectV2Order", - "id": "projectv2order", - "kind": "input-objects", - "href": "/graphql/reference/input-objects#projectv2order" - } - }, - { - "name": "query", - "defaultValue": "", - "description": "

The query to search projects by.

", - "type": { - "name": "String", - "id": "string", - "kind": "scalars", - "href": "/graphql/reference/scalars#string" - } } ] }, { - "name": "repositories", - "description": "

A list of repositories this team has access to.

", - "type": "TeamRepositoryConnection!", - "id": "teamrepositoryconnection", + "name": "memberStatuses", + "description": "

Get the status messages members of this entity have set that are either public or visible only to the organization.

", + "type": "UserStatusConnection!", + "id": "userstatusconnection", "kind": "objects", - "href": "/graphql/reference/objects#teamrepositoryconnection", + "href": "/graphql/reference/objects#userstatusconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "orderBy", + "description": "

Ordering options for user statuses returned from the connection.

", + "type": { + "name": "UserStatusOrder", + "id": "userstatusorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#userstatusorder" + } + } + ] + }, + { + "name": "members", + "description": "

A list of users who are members of this team.

", + "type": "TeamMemberConnection!", + "id": "teammemberconnection", + "kind": "objects", + "href": "/graphql/reference/objects#teammemberconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "membership", + "defaultValue": "ALL", + "description": "

Filter by membership type.

", + "type": { + "name": "TeamMembershipType", + "id": "teammembershiptype", + "kind": "enums", + "href": "/graphql/reference/enums#teammembershiptype" + } + }, + { + "name": "orderBy", + "description": "

Order for the connection.

", + "type": { + "name": "TeamMemberOrder", + "id": "teammemberorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#teammemberorder" + } + }, + { + "name": "query", + "description": "

The search string to look for.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "role", + "description": "

Filter by team member role.

", + "type": { + "name": "TeamMemberRole", + "id": "teammemberrole", + "kind": "enums", + "href": "/graphql/reference/enums#teammemberrole" + } + } + ] + }, + { + "name": "membersResourcePath", + "description": "

The HTTP path for the team' members.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "membersUrl", + "description": "

The HTTP URL for the team' members.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "name", + "description": "

The name of the team.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "newTeamResourcePath", + "description": "

The HTTP path creating a new team.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "newTeamUrl", + "description": "

The HTTP URL creating a new team.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "notificationSetting", + "description": "

The notification setting that the team has set.

", + "type": "TeamNotificationSetting!", + "id": "teamnotificationsetting", + "kind": "enums", + "href": "/graphql/reference/enums#teamnotificationsetting" + }, + { + "name": "organization", + "description": "

The organization that owns this team.

", + "type": "Organization!", + "id": "organization", + "kind": "objects", + "href": "/graphql/reference/objects#organization" + }, + { + "name": "parentTeam", + "description": "

The parent team of the team.

", + "type": "Team", + "id": "team", + "kind": "objects", + "href": "/graphql/reference/objects#team" + }, + { + "name": "privacy", + "description": "

The level of privacy the team has.

", + "type": "TeamPrivacy!", + "id": "teamprivacy", + "kind": "enums", + "href": "/graphql/reference/enums#teamprivacy" + }, + { + "name": "projectV2", + "description": "

Finds and returns the project according to the provided project number.

", + "type": "ProjectV2", + "id": "projectv2", + "kind": "objects", + "href": "/graphql/reference/objects#projectv2", + "arguments": [ + { + "name": "number", + "description": "

The Project number.

", + "type": { + "name": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ] + }, + { + "name": "projectsV2", + "description": "

List of projects this team has collaborator access to.

", + "type": "ProjectV2Connection!", + "id": "projectv2connection", + "kind": "objects", + "href": "/graphql/reference/objects#projectv2connection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "filterBy", + "description": "

Filtering options for projects returned from this connection.

", + "type": { + "name": "ProjectV2Filters", + "id": "projectv2filters", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2filters" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "minPermissionLevel", + "defaultValue": "READ", + "description": "

Filter projects based on user role.

", + "type": { + "name": "ProjectV2PermissionLevel", + "id": "projectv2permissionlevel", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2permissionlevel" + } + }, + { + "name": "orderBy", + "description": "

How to order the returned projects.

", + "type": { + "name": "ProjectV2Order", + "id": "projectv2order", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2order" + } + }, + { + "name": "query", + "defaultValue": "", + "description": "

The query to search projects by.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + } + ] + }, + { + "name": "repositories", + "description": "

A list of repositories this team has access to.

", + "type": "TeamRepositoryConnection!", + "id": "teamrepositoryconnection", + "kind": "objects", + "href": "/graphql/reference/objects#teamrepositoryconnection", "arguments": [ { "name": "after", @@ -77498,6 +77700,531 @@ } ] }, + { + "name": "TeamDiscussion", + "kind": "objects", + "id": "teamdiscussion", + "href": "/graphql/reference/objects#teamdiscussion", + "description": "

A team discussion.

", + "implements": [ + { + "name": "Comment", + "id": "comment", + "href": "/graphql/reference/interfaces#comment" + }, + { + "name": "Deletable", + "id": "deletable", + "href": "/graphql/reference/interfaces#deletable" + }, + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "Reactable", + "id": "reactable", + "href": "/graphql/reference/interfaces#reactable" + }, + { + "name": "Subscribable", + "id": "subscribable", + "href": "/graphql/reference/interfaces#subscribable" + }, + { + "name": "UniformResourceLocatable", + "id": "uniformresourcelocatable", + "href": "/graphql/reference/interfaces#uniformresourcelocatable" + }, + { + "name": "Updatable", + "id": "updatable", + "href": "/graphql/reference/interfaces#updatable" + }, + { + "name": "UpdatableComment", + "id": "updatablecomment", + "href": "/graphql/reference/interfaces#updatablecomment" + } + ], + "fields": [ + { + "name": "author", + "description": "

The actor who authored the comment.

", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor" + }, + { + "name": "authorAssociation", + "description": "

Author's association with the discussion's team.

", + "type": "CommentAuthorAssociation!", + "id": "commentauthorassociation", + "kind": "enums", + "href": "/graphql/reference/enums#commentauthorassociation", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "body", + "description": "

The body as Markdown.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyHTML", + "description": "

The body rendered to HTML.

", + "type": "HTML!", + "id": "html", + "kind": "scalars", + "href": "/graphql/reference/scalars#html" + }, + { + "name": "bodyText", + "description": "

The body rendered to text.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyVersion", + "description": "

Identifies the discussion body hash.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "commentsResourcePath", + "description": "

The HTTP path for discussion comments.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "commentsUrl", + "description": "

The HTTP URL for discussion comments.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "createdViaEmail", + "description": "

Check if this comment was created via an email reply.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + }, + { + "name": "editor", + "description": "

The actor who edited the comment.

", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor" + }, + { + "name": "id", + "description": "

The Node ID of the TeamDiscussion object.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id" + }, + { + "name": "includesCreatedEdit", + "description": "

Check if this comment was edited and includes an edit with the creation data.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "isPinned", + "description": "

Whether or not the discussion is pinned.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "isPrivate", + "description": "

Whether or not the discussion is only visible to team members and organization owners.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "lastEditedAt", + "description": "

The moment the editor made the last edit.

", + "type": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "number", + "description": "

Identifies the discussion within its team.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "publishedAt", + "description": "

Identifies when the comment was published at.

", + "type": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "reactionGroups", + "description": "

A list of reactions grouped by content left on the subject.

", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup" + }, + { + "name": "reactions", + "description": "

A list of Reactions left on the Issue.

", + "type": "ReactionConnection!", + "id": "reactionconnection", + "kind": "objects", + "href": "/graphql/reference/objects#reactionconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "content", + "description": "

Allows filtering Reactions by emoji.

", + "type": { + "name": "ReactionContent", + "id": "reactioncontent", + "kind": "enums", + "href": "/graphql/reference/enums#reactioncontent" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "orderBy", + "description": "

Allows specifying the order in which reactions are returned.

", + "type": { + "name": "ReactionOrder", + "id": "reactionorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#reactionorder" + } + } + ] + }, + { + "name": "resourcePath", + "description": "

The HTTP path for this discussion.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "team", + "description": "

The team that defines the context of this discussion.

", + "type": "Team!", + "id": "team", + "kind": "objects", + "href": "/graphql/reference/objects#team", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "title", + "description": "

The title of the discussion.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "url", + "description": "

The HTTP URL for this discussion.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "userContentEdits", + "description": "

A list of edits to this content.

", + "type": "UserContentEditConnection", + "id": "usercontenteditconnection", + "kind": "objects", + "href": "/graphql/reference/objects#usercontenteditconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ] + }, + { + "name": "viewerCanDelete", + "description": "

Check if the current viewer can delete this object.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanPin", + "description": "

Whether or not the current viewer can pin this discussion.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean", + "isDeprecated": true, + "deprecationReason": "

The Team Discussions feature is deprecated in favor of Organization Discussions. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement. Removal on 2024-07-01 UTC.

" + }, + { + "name": "viewerCanReact", + "description": "

Can user react to this subject.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanSubscribe", + "description": "

Check if the viewer is able to change their subscription status for the repository.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCanUpdate", + "description": "

Check if the current viewer can update this object.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerCannotUpdateReasons", + "description": "

Reasons why the current viewer can not update this comment.

", + "type": "[CommentCannotUpdateReason!]!", + "id": "commentcannotupdatereason", + "kind": "enums", + "href": "/graphql/reference/enums#commentcannotupdatereason" + }, + { + "name": "viewerDidAuthor", + "description": "

Did the viewer author this comment.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "viewerSubscription", + "description": "

Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.

", + "type": "SubscriptionState", + "id": "subscriptionstate", + "kind": "enums", + "href": "/graphql/reference/enums#subscriptionstate" + } + ] + }, + { + "name": "TeamDiscussionConnection", + "kind": "objects", + "id": "teamdiscussionconnection", + "href": "/graphql/reference/objects#teamdiscussionconnection", + "description": "

The connection type for TeamDiscussion.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[TeamDiscussionEdge]", + "id": "teamdiscussionedge", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussionedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[TeamDiscussion]", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "TeamDiscussionEdge", + "kind": "objects", + "id": "teamdiscussionedge", + "href": "/graphql/reference/objects#teamdiscussionedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "TeamDiscussion", + "id": "teamdiscussion", + "kind": "objects", + "href": "/graphql/reference/objects#teamdiscussion" + } + ] + }, { "name": "TeamEdge", "kind": "objects", @@ -94874,6 +95601,19 @@ } ] }, + { + "name": "TeamDiscussionOrderField", + "kind": "enums", + "id": "teamdiscussionorderfield", + "href": "/graphql/reference/enums#teamdiscussionorderfield", + "description": "

Properties by which team discussion connections can be ordered.

", + "values": [ + { + "name": "CREATED_AT", + "description": "

Allows chronological ordering of team discussions.

" + } + ] + }, { "name": "TeamMemberOrderField", "kind": "enums", @@ -102133,6 +102873,56 @@ } ] }, + { + "name": "CreateTeamDiscussionInput", + "kind": "inputObjects", + "id": "createteamdiscussioninput", + "href": "/graphql/reference/input-objects#createteamdiscussioninput", + "description": "

Autogenerated input type of CreateTeamDiscussion.

", + "inputFields": [ + { + "name": "body", + "description": "

The content of the discussion. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: body will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "private", + "description": "

If true, restricts the visibility of this discussion to team members and\norganization owners. If false or not specified, allows any organization member\nto view this discussion.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: private will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "teamId", + "description": "

The ID of the team to which the discussion belongs. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: teamId will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "title", + "description": "

The title of the discussion. This field is required.

\n

Upcoming Change on 2024-07-01 UTC\nDescription: title will be removed. Follow the guide at\nhttps://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to\nfind a suitable replacement.\nReason: The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "CreateUserListInput", "kind": "inputObjects", @@ -102900,6 +103690,32 @@ } ] }, + { + "name": "DeleteTeamDiscussionInput", + "kind": "inputObjects", + "id": "deleteteamdiscussioninput", + "href": "/graphql/reference/input-objects#deleteteamdiscussioninput", + "description": "

Autogenerated input type of DeleteTeamDiscussion.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "id", + "description": "

The discussion ID to delete.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "DeleteUserListInput", "kind": "inputObjects", @@ -108277,6 +109093,31 @@ } ] }, + { + "name": "TeamDiscussionOrder", + "kind": "inputObjects", + "id": "teamdiscussionorder", + "href": "/graphql/reference/input-objects#teamdiscussionorder", + "description": "

Ways in which team discussion connections can be ordered.

", + "inputFields": [ + { + "name": "direction", + "description": "

The direction in which to order nodes.

", + "type": "OrderDirection!", + "id": "orderdirection", + "kind": "enums", + "href": "/graphql/reference/enums#orderdirection" + }, + { + "name": "field", + "description": "

The field by which to order nodes.

", + "type": "TeamDiscussionOrderField!", + "id": "teamdiscussionorderfield", + "kind": "enums", + "href": "/graphql/reference/enums#teamdiscussionorderfield" + } + ] + }, { "name": "TeamMemberOrder", "kind": "inputObjects", @@ -111822,6 +112663,64 @@ } ] }, + { + "name": "UpdateTeamDiscussionInput", + "kind": "inputObjects", + "id": "updateteamdiscussioninput", + "href": "/graphql/reference/input-objects#updateteamdiscussioninput", + "description": "

Autogenerated input type of UpdateTeamDiscussion.

", + "inputFields": [ + { + "name": "body", + "description": "

The updated text of the discussion.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "bodyVersion", + "description": "

The current version of the body content. If provided, this update operation\nwill be rejected if the given version does not match the latest version on the server.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "id", + "description": "

The Node ID of the discussion to modify.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "pinned", + "description": "

If provided, sets the pinned state of the updated discussion.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "title", + "description": "

The updated title of the discussion.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "UpdateTeamReviewAssignmentInput", "kind": "inputObjects", diff --git a/src/graphql/data/ghec/upcoming-changes.json b/src/graphql/data/ghec/upcoming-changes.json index 0ad394994fe8..b502f6798ad3 100644 --- a/src/graphql/data/ghec/upcoming-changes.json +++ b/src/graphql/data/ghec/upcoming-changes.json @@ -9780,6 +9780,102 @@ } ], "2024-07-01": [ + { + "location": "TeamDiscussion.viewerCanPin", + "description": "

viewerCanPin will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.url", + "description": "

url will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.title", + "description": "

title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.team", + "description": "

team will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.resourcePath", + "description": "

resourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.number", + "description": "

number will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.isPrivate", + "description": "

isPrivate will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.isPinned", + "description": "

isPinned will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.commentsUrl", + "description": "

commentsUrl will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.commentsResourcePath", + "description": "

commentsResourcePath will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.bodyVersion", + "description": "

bodyVersion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "TeamDiscussion.authorAssociation", + "description": "

authorAssociation will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, { "location": "PullRequestReviewComment.databaseId", "description": "

databaseId will be removed. Use fullDatabaseId instead.

", @@ -9811,6 +9907,46 @@ "date": "2024-07-01", "criticality": "breaking", "owner": "jdennes" + }, + { + "location": "CreateTeamDiscussionPayload.teamDiscussion", + "description": "

teamDiscussion will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.title", + "description": "

title will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.teamId", + "description": "

teamId will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.private", + "description": "

private will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" + }, + { + "location": "CreateTeamDiscussionInput.body", + "description": "

body will be removed. Follow the guide at https://github.blog/changelog/2023-02-08-sunset-notice-team-discussions/ to find a suitable replacement.

", + "reason": "

The Team Discussions feature is deprecated in favor of Organization Discussions.

", + "date": "2024-07-01", + "criticality": "breaking", + "owner": "deborah-digges" } ], "2024-04-01": [ diff --git a/src/landings/context/LandingContext.tsx b/src/landings/context/LandingContext.tsx index 8564ec1e8c81..eab88fc0b884 100644 --- a/src/landings/context/LandingContext.tsx +++ b/src/landings/context/LandingContext.tsx @@ -18,7 +18,7 @@ export type LandingContextT = { variant?: 'compact' | 'expanded' featuredLinks: Record> renderedPage: string - currentLearningTrack?: LearningTrack + currentLearningTrack?: LearningTrack | null currentLayout: string heroImage?: string // For landing pages with carousels @@ -99,7 +99,7 @@ export const getLandingContextFromRequest = async ( variant: context.genericTocFlat ? 'expanded' : 'compact', featuredLinks: getFeaturedLinksFromReq(req), renderedPage: context.renderedPage ?? '', - currentLearningTrack: context.currentLearningTrack ?? undefined, + currentLearningTrack: context.currentLearningTrack ?? null, currentLayout: context.currentLayoutName ?? '', heroImage: page.heroImage || '/assets/images/banner-images/hero-1', introLinks: page.introLinks || null, diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index 01eab55fea03..0e8f8ddd8916 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -501354,6 +501354,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -501511,6 +501528,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -501642,6 +501676,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -501804,6 +501855,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 7c514a2ec535..8e853276124e 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -369390,6 +369390,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -369543,6 +369560,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -369670,6 +369704,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -369828,6 +369879,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -550996,6 +551064,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -551153,6 +551238,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -551284,6 +551386,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ @@ -551446,6 +551565,23 @@ "123ABC456DEF789" ] }, + "failover_network_settings_ids": { + "description": "The unique identifier of each failover network settings in the configuration.", + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + "123ABC456DEF789" + ] + }, + "failover_network_enabled": { + "description": "Indicates whether the failover network resource is enabled.", + "type": "boolean", + "examples": [ + true + ] + }, "created_on": { "description": "The time at which the network configuration was created, in ISO 8601 format.", "type": [ diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index eb6525f4fcd9..40d1fd74b6c4 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -50,5 +50,5 @@ ] } }, - "sha": "7c030db5ffcf2d5ba3a1b61eacaed65c27bad7c0" + "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index e6e3954e658e..7fbb18ac332c 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "7c030db5ffcf2d5ba3a1b61eacaed65c27bad7c0" + "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" } \ No newline at end of file