diff --git a/Cargo.lock b/Cargo.lock index 99bf3b8c..cf6f2a6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -19,9 +19,9 @@ checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -58,22 +58,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -82,6 +82,15 @@ version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +[[package]] +name = "arc-swap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +dependencies = [ + "rustversion", +] + [[package]] name = "arraydeque" version = "0.5.1" @@ -103,6 +112,17 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + [[package]] name = "atomic" version = "0.6.1" @@ -131,9 +151,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "backon" @@ -146,6 +166,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.22.1" @@ -154,15 +180,21 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64" -version = "0.23.0" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[package]] +name = "base64ct" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" @@ -175,26 +207,26 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f" dependencies = [ "memchr", "regex-automata", - "serde", + "serde_core", ] [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "bytes" @@ -210,9 +242,12 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "camino" -version = "1.2.1" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +dependencies = [ + "serde_core", +] [[package]] name = "cap-primitives" @@ -246,25 +281,44 @@ dependencies = [ ] [[package]] -name = "cc" -version = "1.2.34" +name = "cargo-platform" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" dependencies = [ - "shlex", + "serde", + "serde_core", ] [[package]] -name = "cfg-if" -version = "1.0.3" +name = "cargo_metadata" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "cc" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" @@ -277,14 +331,14 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link 0.2.0", + "windows-link", ] [[package]] name = "clap" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -299,14 +353,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "clap_builder" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -334,9 +388,9 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "colored" @@ -349,6 +403,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes 1.12.1", + "memchr", +] + [[package]] name = "console" version = "0.16.4" @@ -357,14 +421,20 @@ checksum = "4fe5f465a4f6fee88fad41b85d990f84c835335e85b5d9e6e63e0d06d28cba7c" dependencies = [ "encode_unicode", "libc", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "convert_case" -version = "0.7.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ "unicode-segmentation", ] @@ -380,9 +450,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -405,9 +475,9 @@ dependencies = [ [[package]] name = "crokey" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51360853ebbeb3df20c76c82aecf43d387a62860f1a59ba65ab51f00eea85aad" +checksum = "074bc31bff1084f74e5a145ad5f6ac74469fa312159faa5144f0b1c4506b8d80" dependencies = [ "crokey-proc_macros", "crossterm", @@ -418,15 +488,15 @@ dependencies = [ [[package]] name = "crokey-proc_macros" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf1a727caeb5ee5e0a0826a97f205a9cf84ee964b0b48239fef5214a00ae439" +checksum = "b88c4ff2d5717616c3bb4a31d06b0b241ed811c7c0c41d077d77631bee7caad0" dependencies = [ "crossterm", "proc-macro2", "quote", "strict", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -444,18 +514,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -463,27 +533,27 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crossterm" @@ -512,6 +582,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -523,33 +605,69 @@ dependencies = [ ] [[package]] -name = "deranged" -version = "0.4.0" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "powerfmt", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", ] +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" + [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.106", + "rustc_version", + "syn 2.0.119", ] [[package]] @@ -574,7 +692,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", + "subtle", ] [[package]] @@ -616,25 +736,25 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.3", ] [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -652,20 +772,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "encode_unicode" -version = "1.0.0" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "cfg-if", + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "equivalent" version = "1.0.2" @@ -674,19 +844,35 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "fastrand" -version = "2.3.0" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "figment" @@ -715,6 +901,12 @@ dependencies = [ "serde", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" + [[package]] name = "float-cmp" version = "0.10.0" @@ -736,7 +928,7 @@ dependencies = [ "intl_pluralrules", "rustc-hash", "self_cell", - "smallvec 1.15.1", + "smallvec 1.15.2", "unic-langid", ] @@ -756,7 +948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" dependencies = [ "memchr", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -803,9 +995,12 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" +checksum = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9" +dependencies = [ + "futures-core", +] [[package]] name = "fs-set-times" @@ -830,9 +1025,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -845,9 +1040,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -855,15 +1050,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -872,44 +1067,44 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -924,19 +1119,20 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -947,23 +1143,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", - "wasi 0.14.3+wasi-0.2.4", - "wasm-bindgen", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "gloo-timers" @@ -978,38 +1171,81 @@ dependencies = [ ] [[package]] -name = "h2" -version = "0.4.15" +name = "graphql-introspection-query" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "e063446242093b0acecc78a2313801e6c4faafa3501277b409a2b1972eff5d85" dependencies = [ - "atomic-waker", - "bytes 1.12.1", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap", - "slab", - "tokio", - "tokio-util 0.7.16", - "tracing", + "serde", ] [[package]] -name = "hashbrown" -version = "0.15.5" +name = "graphql-parser" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "7a818c0d883d7c0801df27be910917750932be279c7bc82dc541b8769425f409" dependencies = [ - "foldhash 0.1.5", + "combine", + "thiserror 1.0.69", +] + +[[package]] +name = "graphql_client" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0f04840854efa7b06377d86fab117f598f5f5c95727067463417ccaf8aa7635" +dependencies = [ + "graphql_query_derive", + "serde", + "serde_json", +] + +[[package]] +name = "graphql_client_codegen" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa0141e66c8d0302f8a586df12ad5d0cf87c0fa8c391f2f5b5dc296312dce569" +dependencies = [ + "graphql-introspection-query", + "graphql-parser", + "heck", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.119", +] + +[[package]] +name = "graphql_query_derive" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16ecf9bb87a6760cf5227f66cbe48bad7b89505aeb002aa9439ea090e6038a3" +dependencies = [ + "graphql_client_codegen", + "proc-macro2", + "syn 2.0.119", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", ] [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] [[package]] name = "hashbrown" @@ -1051,19 +1287,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] -name = "html5ever" -version = "0.35.0" +name = "hkdf" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "log", - "markup5ever", - "match_token", + "hmac", ] [[package]] -name = "http" -version = "0.2.12" +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "http" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ @@ -1074,12 +1328,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes 1.12.1", - "fnv", "itoa", ] @@ -1096,12 +1349,12 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes 1.12.1", - "http 1.3.1", + "http 1.5.0", ] [[package]] @@ -1112,11 +1365,21 @@ checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes 1.12.1", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", ] +[[package]] +name = "http-serde" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" +dependencies = [ + "http 1.5.0", + "serde", +] + [[package]] name = "httparse" version = "1.10.1" @@ -1162,29 +1425,29 @@ dependencies = [ "bytes 1.12.1", "futures-channel", "futures-core", - "h2", - "http 1.3.1", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "httparse", "httpdate", "itoa", "pin-project-lite", - "smallvec 1.15.1", + "smallvec 1.15.2", "tokio", "want", ] [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.3.1", + "http 1.5.0", "hyper 1.11.0", "hyper-util", + "log", "rustls", - "rustls-pki-types", + "rustls-native-certs", "tokio", "tokio-rustls", "tower-service", @@ -1192,18 +1455,15 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.6.0" +name = "hyper-timeout" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "bytes 1.12.1", - "http-body-util", "hyper 1.11.0", "hyper-util", - "native-tls", + "pin-project-lite", "tokio", - "tokio-native-tls", "tower-service", ] @@ -1213,30 +1473,25 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", "bytes 1.12.1", "futures-channel", "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "hyper 1.11.0", - "ipnet", "libc", - "percent-encoding", "pin-project-lite", - "socket2 0.6.0", - "system-configuration", + "socket2 0.6.5", "tokio", "tower-service", "tracing", - "windows-registry", ] [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1258,12 +1513,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1271,9 +1527,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1284,57 +1540,52 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", - "smallvec 1.15.1", + "smallvec 1.15.2", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1349,15 +1600,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", - "smallvec 1.15.1", + "smallvec 1.15.2", "utf8_iter", ] [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1365,12 +1616,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", ] [[package]] @@ -1431,40 +1682,41 @@ checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi 0.5.2", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] @@ -1479,11 +1731,35 @@ dependencies = [ "serde", ] +[[package]] +name = "jsonwebtoken" +version = "10.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" +dependencies = [ + "base64 0.22.1", + "ed25519-dalek", + "getrandom 0.2.17", + "hmac", + "js-sys", + "p256", + "p384", + "pem", + "rand", + "rsa", + "serde", + "serde_json", + "sha2", + "signature", + "simple_asn1", + "zeroize", +] + [[package]] name = "lazy-regex" -version = "3.4.1" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" +checksum = "4994ba703f78b083e2f7946dac9251abd83fd43a0365f030e99b69be5b4b9ef9" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -1492,14 +1768,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.4.1" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +checksum = "fd97232314824e6dbef1918a871bb93f51070455e3715bf26e19a6d01aa977a0" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -1507,6 +1783,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -1514,13 +1793,18 @@ version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" dependencies = [ - "bitflags", "libc", ] @@ -1532,37 +1816,30 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - -[[package]] -name = "lru-slab" -version = "0.1.2" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "mac" @@ -1601,7 +1878,7 @@ checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -1621,15 +1898,9 @@ checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" [[package]] name = "memchr" -version = "2.7.5" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimad" @@ -1642,14 +1913,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1675,14 +1946,14 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", @@ -1715,18 +1986,63 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec 1.15.2", + "zeroize", ] [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" +dependencies = [ + "num-integer", + "num-traits", +] [[package]] name = "num-traits" @@ -1735,6 +2051,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1746,29 +2063,68 @@ dependencies = [ "libc", ] +[[package]] +name = "octocrab" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "432fad6f447c52acda76a7a0660f022b21f4c42f373bbdc29f04332ba19a89bf" +dependencies = [ + "arc-swap", + "async-trait", + "base64 0.22.1", + "bytes 1.12.1", + "cargo_metadata", + "cfg-if", + "chrono", + "futures", + "getrandom 0.2.17", + "http 1.5.0", + "http-body 1.1.0", + "http-body-util", + "http-serde", + "hyper 1.11.0", + "hyper-rustls", + "hyper-timeout", + "hyper-util", + "jsonwebtoken", + "percent-encoding", + "pin-project", + "rustls", + "secrecy", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "snafu", + "tokio", + "tower 0.5.3", + "tower-http", + "url", + "web-time", +] + [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", - "once_cell", "openssl-macros", "openssl-sys", ] @@ -1781,20 +2137,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -1830,8 +2186,8 @@ dependencies = [ "serde", "serde-saphyr", "serde_json", - "thiserror 2.0.19", - "toml 0.9.8", + "thiserror 2.0.20", + "toml 0.9.12+spec-1.1.0", "tracing", "uncased", "unic-langid", @@ -1847,14 +2203,38 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", +] + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1862,15 +2242,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", - "smallvec 1.15.1", - "windows-targets 0.52.6", + "smallvec 1.15.2", + "windows-link", ] [[package]] @@ -1893,7 +2273,26 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.106", + "syn 2.0.119", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", ] [[package]] @@ -1904,20 +2303,19 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "7df728be843c7070fab6ab7c328c4e9e9d78e23bf749c0669c86ee7ebfa050a2" dependencies = [ "memchr", - "thiserror 2.0.19", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "9e2dd6fc3b26b3462ee188aac870f5a41d398f1cd5e2408d16531bd71c9591fd" dependencies = [ "pest", "pest_generator", @@ -1925,25 +2323,24 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "6a7a9205cfb6f596a9e8b689c0a15f9ceb7a1aafae7aaf788150ac65b29975b6" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "85abd351c0de1e8384fc791a0737111a350394937e92b956b743dac12429f57c" dependencies = [ "pest", - "sha2", ] [[package]] @@ -1972,7 +2369,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand 0.8.5", + "rand", ] [[package]] @@ -1984,23 +2381,64 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -2042,27 +2480,36 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit", + "toml_edit 0.25.13+spec-1.1.0", ] [[package]] @@ -2088,66 +2535,11 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", "version_check", "yansi", ] -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes 1.12.1", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2 0.6.0", - "thiserror 2.0.19", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "bytes 1.12.1", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.19", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.0", - "tracing", - "windows-sys 0.60.2", -] - [[package]] name = "quote" version = "1.0.47" @@ -2159,37 +2551,29 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.3.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ + "libc", "rand_chacha", - "rand_core 0.9.3", + "rand_core", ] [[package]] name = "rand_chacha" -version = "0.9.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core", ] [[package]] @@ -2197,21 +2581,15 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.2.17", ] [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] @@ -2222,7 +2600,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -2233,9 +2611,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -2274,47 +2652,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] -name = "reqwest" -version = "0.12.28" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "base64 0.22.1", - "bytes 1.12.1", - "encoding_rs", - "futures-core", - "h2", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.11.0", - "hyper-rustls", - "hyper-tls", - "hyper-util", - "js-sys", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tower 0.5.2", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", + "hmac", + "subtle", ] [[package]] @@ -2325,12 +2669,32 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rstest" version = "0.26.1" @@ -2356,15 +2720,15 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.106", + "syn 2.0.119", "unicode-ident", ] [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2385,7 +2749,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -2400,10 +2764,11 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -2412,21 +2777,32 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ - "web-time", "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -2435,15 +2811,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "saphyr-parser" @@ -2457,24 +2833,47 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "secrecy" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] [[package]] name = "security-framework" -version = "2.11.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", "core-foundation", @@ -2485,9 +2884,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -2495,15 +2894,19 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "serde" @@ -2586,9 +2989,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -2627,7 +3030,7 @@ checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -2652,9 +3055,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook" @@ -2668,9 +3071,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ "libc", "mio", @@ -2679,19 +3082,42 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "similar" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +[[package]] +name = "simple_asn1" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.20", + "time 0.3.55", +] + [[package]] name = "simple_logger" version = "1.16.0" @@ -2701,27 +3127,27 @@ dependencies = [ "atty", "colored", "log", - "time 0.3.41", + "time 0.3.55", "winapi", ] [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smallvec" @@ -2729,6 +3155,27 @@ version = "2.0.0-alpha.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef784004ca8777809dcdad6ac37629f0a97caee4c685fcea805278d81dd8b857" +[[package]] +name = "snafu" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "socket2" version = "0.5.10" @@ -2741,19 +3188,35 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "strict" @@ -2800,9 +3263,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.106" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -2825,9 +3288,6 @@ name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] [[package]] name = "synstructure" @@ -2837,28 +3297,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "system-configuration" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", + "syn 2.0.119", ] [[package]] @@ -2868,10 +3307,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -2897,7 +3336,7 @@ dependencies = [ "lazy-regex", "minimad", "serde", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-width", ] @@ -2941,11 +3380,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.19", + "thiserror-impl 2.0.20", ] [[package]] @@ -2956,14 +3395,14 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", @@ -2972,9 +3411,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -2992,32 +3431,31 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -3025,34 +3463,20 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" -version = "1.50.0" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes 1.12.1", "libc", @@ -3060,20 +3484,20 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.0", + "socket2 0.6.5", "tokio-macros", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.3", ] [[package]] @@ -3088,9 +3512,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -3112,9 +3536,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes 1.12.1", "futures-core", @@ -3132,22 +3556,22 @@ dependencies = [ "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_edit", + "toml_edit 0.22.27", ] [[package]] name = "toml" -version = "0.9.8" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.3", - "toml_datetime 0.7.3", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -3161,9 +3585,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -3179,16 +3612,28 @@ dependencies = [ "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.15", +] + +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow", + "winnow 1.0.4", ] [[package]] @@ -3199,9 +3644,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -3216,17 +3661,19 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", "pin-project-lite", "sync_wrapper", "tokio", + "tokio-util 0.7.19", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -3237,14 +3684,12 @@ checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags", "bytes 1.12.1", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", - "tower 0.5.2", "tower-layer", "tower-service", - "url", + "tracing", ] [[package]] @@ -3279,7 +3724,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -3314,7 +3759,7 @@ dependencies = [ "once_cell", "regex-automata", "sharded-slab", - "smallvec 1.15.1", + "smallvec 1.15.2", "thread_local", "tracing", "tracing-core", @@ -3338,9 +3783,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -3396,21 +3841,21 @@ checksum = "a1249a628de3ad34b821ecb1001355bca3940bcb2f88558f1a8bd82e977f75b5" dependencies = [ "proc-macro-hack", "quote", - "syn 2.0.106", + "syn 2.0.119", "unic-langid-impl", ] [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -3434,6 +3879,7 @@ dependencies = [ "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -3479,24 +3925,27 @@ dependencies = [ "anyhow", "assert_cmd", "backon", - "base64 0.23.0", + "base64 0.23.1", "bytes 1.12.1", "chrono", "clap", "diffy", "futures", + "graphql_client", "html5ever", + "http 1.5.0", "http-body-util", "hyper 1.11.0", + "hyper-rustls", "hyper-util", "insta", "libc", "markup5ever_rcdom", "mockall", + "octocrab", "ortho_config", "predicates", "regex", - "reqwest", "rstest", "serde", "serde_json", @@ -3505,7 +3954,7 @@ dependencies = [ "tempfile", "termimad", "third-wheel", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio", "tracing", "tracing-subscriber", @@ -3542,59 +3991,24 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.3+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3602,36 +4016,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] -[[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "web-time" version = "1.1.0" @@ -3639,6 +4043,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", + "serde", "wasm-bindgen", ] @@ -3656,9 +4061,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -3687,78 +4092,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.3", + "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-link" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" - -[[package]] -name = "windows-registry" -version = "0.5.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" -dependencies = [ - "windows-link 0.1.3", - "windows-result", - "windows-strings", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -3790,20 +4178,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.3", -] - -[[package]] -name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -3830,30 +4209,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" -dependencies = [ - "windows-link 0.1.3", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -3866,12 +4228,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -3884,12 +4240,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -3902,24 +4252,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -3932,12 +4270,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -3950,12 +4282,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -3968,12 +4294,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -3987,16 +4307,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" +name = "winnow" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] [[package]] name = "winnow" -version = "0.7.13" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -4011,17 +4334,11 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "wit-bindgen" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" - [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "xdg" @@ -4047,11 +4364,10 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4059,68 +4375,82 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -4129,10 +4459,11 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", @@ -4140,13 +4471,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5fa4babb..b8e35328 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,21 +10,55 @@ repository = "https://github.com/leynos/vk" [dependencies] clap = { version = "4.5.47", features = ["derive"] } -reqwest = { version = "0.12.23", features = ["json", "rustls-tls"] } serde = { version = "1.0.196", features = ["derive"] } serde_json = "1.0.113" serde_path_to_error = "0.1.17" -tokio = { version = "1.36.0", features = ["rt-multi-thread", "macros"] } +tokio = { version = "1.36.0", features = ["rt-multi-thread", "macros", "time"] } termimad = "0.35.1" thiserror = "2.0.16" url = "2.5.0" regex = "1.10.3" diffy = "0.5.1" chrono = { version = "0.4.42", features = ["serde", "clock"] } +graphql_client = "0.16" anyhow = "1.0" backon = "1.5.2" html5ever = "0.35.0" +http = "1" +# GraphQL transport stack (replaces reqwest). `hyper-util`'s legacy pooled +# client over a `hyper-rustls` connector reproduces the connection pooling and +# rustls TLS that reqwest supplied. The `server` feature on `hyper-util` and +# the plain `hyper`/`http-body-util` crates are also exercised by the +# integration tests, so a single runtime entry covers both uses. +hyper = { version = "1", features = ["client", "http1"] } +hyper-util = { version = "0.1", features = [ + "client-legacy", + "http1", + "tokio", + "server", +] } +# webpki-roots + ring matches reqwest's `rustls-tls` feature, which expands to +# `rustls-tls-webpki-roots` (Mozilla's bundled roots) with the ring provider; +# see docs/adr-001-github-api-client-modernisation.md. Defaults are disabled to +# keep aws-lc-rs out of the graph so ring remains the sole crypto provider. +hyper-rustls = { version = "0.27", default-features = false, features = [ + "ring", + "webpki-roots", + "http1", + "tls12", +] } +http-body-util = "0.1" markup5ever_rcdom = "0.35.0" +# Patch updates within octocrab 0.54 are accepted; widening to 0.55 requires +# review. The `retry` feature is deliberately excluded so the REST reply path +# stays retry-free (see docs/adr-001-github-api-client-modernisation.md). +octocrab = { version = "~0.54", default-features = false, features = [ + "default-client", + "jwt-rust-crypto", + "rustls", + "rustls-ring", + "timeout", +] } ortho_config = "0.8.0" base64 = "0.23.0" tracing = "0.1" @@ -47,9 +81,6 @@ tokio = { version = "1.36.0", features = ["full"] } serde_json = "1.0" predicates = "3.1" mockall = "0.15.0" -hyper = "1.6.0" -hyper-util = { version = "0.1.17", features = ["server", "http1", "tokio"] } -http-body-util = "0.1" bytes = "1" futures = "0.3" insta = { version = "1.43", features = ["redactions"] } diff --git a/docs/adr-001-github-api-client-modernisation.md b/docs/adr-001-github-api-client-modernisation.md new file mode 100644 index 00000000..2287d2ee --- /dev/null +++ b/docs/adr-001-github-api-client-modernisation.md @@ -0,0 +1,181 @@ +# Architectural decision record (ADR) 001: GitHub API client modernization + +## Status + +Accepted (2026-07-09). The project owner accepted the three-part programme +after reviewing the ExecPlan draft: octocrab for the REST resolve path, a +direct hyper transport inside the bespoke GraphQL client (removing reqwest), and +`graphql_client` codegen for compile-time-checked GraphQL queries. + +## Date + +2026-07-09. + +## Context and problem statement + +`vk` is a command-line tool that shows unresolved GitHub pull request review +comments. It talks to GitHub through two bespoke, hand-rolled clients built +directly on the `reqwest` crate: + +- A GraphQL client (`src/api/client/`) used by every subcommand. It carries a + substantial observability investment: transcript recording of each request, + redacted error snippets in failure context, `backon` jittered-exponential + retry with transient-error classification (HTTP 5xx, HTTP 429, and + HTML-looking bodies), `serde_path_to_error` deserialization diagnostics, and + an environment-variable endpoint override (`GITHUB_GRAPHQL_URL`). +- A feature-gated REST client (`src/resolve/rest.rs`, compiled only under the + `unstable-rest-resolve` feature) that posts review-comment replies with no + retry and its own environment-variable base-URL override (`GITHUB_API_URL`). + +The original decision to hand-roll these clients was never recorded, so the +constraints that justified it are no longer legible to maintainers. The current +arrangement carries four problems: + +- Two duplicated header-building and client-construction code paths that drift + independently. +- No compile-time checking of GraphQL query strings: queries are raw `&str` + constants and operation names are recovered by string-sniffing the query text. +- A dependency on `reqwest` for work that a single hyper stack could serve, + when the rest of the intended stack (hyper, rustls) is already present. +- Bespoke REST plumbing (authentication, base-URI handling, header + construction) that duplicates what a maintained library already provides. + +The question this record settles is how to modernize GitHub API access without +regressing the observable behaviour that the test suite pins: command output, +error-message fragments, retry semantics, transcript format, authentication +precedence, and the environment-variable endpoint overrides. + +## Decision drivers + +- Preserve the observability machinery. Transcript recording, error snippets, + and retry classification all depend on access to the raw HTTP response + (status and body), including partial-success GraphQL payloads that carry both + `data` and `errors`. +- Preserve the test infrastructure. The environment-variable endpoint overrides + redirect the binary to loopback servers, and roughly twenty tests assert + exact error text; neither may change. +- Converge on a single HTTP stack rather than maintaining two. +- Gain compile-time validation of GraphQL queries and their variables. +- Minimize bespoke plumbing by delegating maintained concerns to a library + where doing so does not compromise observability. +- Keep TLS rustls-only; introduce no native-tls or OpenSSL dependency. +- Remain compatible with the minimum supported Rust version (MSRV) of 1.89. + +## Options considered + +### Option 1: keep both bespoke clients (status quo) + +Retain the two `reqwest`-based clients unchanged. This preserves all behaviour +at zero migration cost but resolves none of the problems: there is no +compile-time query checking, the duplicated plumbing persists, and two HTTP +paths remain. + +### Option 2: route all traffic through octocrab + +Adopt [octocrab](https://docs.rs/octocrab) as the single transport for both +REST and GraphQL. Rejected: octocrab's `graphql()` helper hides the raw +response, discarding the partial-success `data` and the response body that the +transcript, error-snippet, and retry-classification machinery depend on. Its +default builder accepts no custom middleware layers through which that +machinery could be reattached, GraphQL cursor pagination remains hand-rolled +regardless, and the escape-hatch `_post` method would become the primary +interface. The compile-time-checking gain is marginal because octocrab does not +type GraphQL queries itself. + +### Option 3: graphql_client codegen with reqwest retained + +Adopt `graphql_client` codegen for typed queries while keeping `reqwest` as the +transport. This gains typed queries but keeps two HTTP stacks once octocrab +arrives for the REST path, and retains the bespoke REST plumbing that a +maintained library would otherwise absorb. + +### Option 4 (adopted): three-part split + +Separate the concerns by transport: + +- octocrab (tilde-pinned `~0.54`) serves the REST resolve path only, replacing + the bespoke `reqwest` REST client and inheriting maintained authentication + and base-URI plumbing. +- A direct hyper transport (`hyper-util` legacy client plus `hyper-rustls`, + promoted from dev-dependencies to runtime dependencies) replaces `reqwest` + inside the bespoke GraphQL client, which retains its observability machinery. + `reqwest` then leaves the dependency graph. +- `graphql_client` 0.16 codegen validates every query against GitHub's vendored + public schema + ([`schema.docs.graphql`](https://docs.github.com/public/fpt/schema.docs.graphql)) + at compile time. Generated types stay private behind conversions to the + existing exported domain structs. + +| Dimension | Option 1 | Option 2 | Option 3 | Option 4 | +| ----------------------------- | -------- | -------- | -------- | -------- | +| Compile-time query checking | No | Marginal | Yes | Yes | +| HTTP stacks after change | Two | One | Two | One | +| Observability preserved | Yes | No | Yes | Yes | +| Bespoke REST plumbing removed | No | Yes | No | Yes | +| Maintained REST library | No | Yes | Yes | Yes | + +_Table 1: Comparison of the four GitHub API client options against the decision +drivers._ + +## Decision outcome + +Adopt option 4, the three-part split. octocrab's value concentrates in its +typed REST surface and maintained plumbing, whereas the bespoke GraphQL +client's value is its observability, which octocrab's `graphql()` helper would +discard. octocrab's own GraphQL example delegates query typing to +`graphql_client`, confirming that the intended division of labour matches the +tools' strengths. + +The programme is delivered as three pull requests, each behaviour-preserving +and gated by the existing test suite: + +1. Adopt octocrab for the REST resolve path. +2. Replace `reqwest` inside the GraphQL client with a hyper transport and + remove `reqwest` from the dependency graph. +3. Adopt `graphql_client` codegen so malformed queries fail the build rather + than a runtime request. + +The REST-first ordering proves octocrab in-tree with the smallest blast radius; +the transport change then removes `reqwest` before the largest change; the +codegen change is type-level only and benefits from a settled transport beneath +it. + +## Migration plan + +The migration is tracked as a living document in the ExecPlan +[`docs/execplans/adopt-octocrab.md`](execplans/adopt-octocrab.md). Its numbered +phases correspond to the three pull requests above, and it records the +constraints, tolerances, risks, decision log, and per-phase acceptance criteria +in detail. This record does not duplicate that content; consult the ExecPlan +for the authoritative migration sequence and progress. + +## Known risks and limitations + +- octocrab has shipped breaking changes in patch releases (upstream issue 899). + The dependency is therefore tilde-pinned (`~0.54`) rather than caret-ranged, + with the reason recorded both here and in a `Cargo.toml` comment; widen only + after review. +- The hyper transport must reproduce the pooling, TLS root-store, and + total-request timeout semantics that `reqwest` provided for free. A subtle + difference under failure could change behaviour; the retry and timeout unit + tests act as a characterization harness because the transport change alters + nothing else. +- GitHub's vendored public schema is roughly 1.5 MB, and each + `#[derive(GraphQLQuery)]` re-parses it at compile time. The build-time impact + is bounded by the tolerance recorded in the ExecPlan; operations are grouped + per document to amortize the parse. +- GitHub's custom scalars (`DateTime`, `URI`, `HTML`, and related types) + require Rust type aliases in scope of each derive. A shared `scalars` module + supplies them; a missing alias surfaces as an easily misread compile error. + +## Design for reuse + +The refitted GraphQL client is shaped for cheap future extraction into a shared +crate. The sibling project frankie (a code-review terminal user interface, +currently REST-only on octocrab) will need the same GraphQL review-thread +surface, and the executor (transport, retry, transcript, typed operations, and +cursor pagination) is the reusable part while query documents stay per-project. +To keep extraction cheap, `vk`-specific coupling (`VkError` and +`vk::environment`) is confined to the edges of the transport and typed modules +rather than woven through them. Extraction itself is out of scope for this +decision. diff --git a/docs/contents.md b/docs/contents.md index d4e4a29a..09f9078a 100644 --- a/docs/contents.md +++ b/docs/contents.md @@ -27,6 +27,13 @@ - [Documentation style guide](documentation-style-guide.md): Use this for spelling, formatting, and document-structure rules. +## Architecture decision records + +- [ADR 001: GitHub API client](adr-001-github-api-client-modernisation.md): + Records the accepted decision to serve REST through octocrab, move the + bespoke GraphQL client onto hyper transport, and add `graphql_client` code + generation for typed queries. + ## Migration guides - [Ortho Config v0.6.0 migration guide](ortho-config-v0-6-0-migration-guide.md): @@ -39,5 +46,9 @@ - [Execution plans](execplans/): Use this directory for living implementation plans that need to survive context handoffs. + - [Adopt octocrab](execplans/adopt-octocrab.md): + Records the living plan to modernize GitHub API access: octocrab for REST, + hyper transport for the bespoke GraphQL client, and `graphql_client` + code generation for typed queries. - [Adopt Ortho Config v0.8.0](execplans/adopt-ortho-config-v0-8-0.md): Use this for the recorded plan behind the v0.8.0 configuration adoption work. diff --git a/docs/developers-guide.md b/docs/developers-guide.md index d110081e..4e9d0894 100644 --- a/docs/developers-guide.md +++ b/docs/developers-guide.md @@ -83,6 +83,23 @@ Before extracting a helper, port, or abstraction, check whether one already exists and document the new ownership boundary in the relevant design or developer document. +### REST resolve client + +REST review-comment replies use octocrab through its raw `_post` route. The +`http` and `octocrab` entries in `Cargo.toml` are direct dependencies: `http` +supplies the header types, while octocrab owns authentication, base-URI +handling, and request execution. The octocrab `retry` feature remains excluded +so the reply path stays retry-free. + +The connection timeout maps to octocrab's connect timeout. The request timeout +configures octocrab's read and write timeouts and also wraps the complete +`_post` operation, preserving a total deadline across connection, write, and +response-read work. + +Status interpretation remains in `vk`: the resolve client warns and continues +for HTTP 404, accepts other successful statuses, and maps every other non-2xx +status to `VkError::RequestContext` with the route and status. + ## Documentation maintenance Update documentation in the same branch as the behaviour it describes: diff --git a/docs/execplans/adopt-octocrab.md b/docs/execplans/adopt-octocrab.md new file mode 100644 index 00000000..a0035762 --- /dev/null +++ b/docs/execplans/adopt-octocrab.md @@ -0,0 +1,812 @@ +# Modernize GitHub API access: octocrab REST, hyper transport, typed GraphQL + +This ExecPlan (execution plan) is a living document. The sections `Constraints`, +`Tolerances`, `Risks`, `Progress`, `Surprises & Discoveries`, `Decision Log`, +and `Outcomes & Retrospective` must be kept up to date as work proceeds. + +Status: COMPLETE (awaiting review/merge of PRs #194, #195, #196) + +## Purpose / big picture + +`vk` is a command-line tool that shows unresolved GitHub pull request review +comments in the terminal. Today it talks to GitHub through two hand-rolled HTTP +clients built directly on the `reqwest` crate: a GraphQL client +(`src/api/client/`) used by every subcommand, and a REST client +(`src/resolve/rest.rs`, compiled only under the `unstable-rest-resolve` +feature) used to post a reply before resolving a review thread. + +An earlier draft of this plan proposed routing everything through +[octocrab](https://docs.rs/octocrab). Review concluded octocrab is a weak fit +for the GraphQL side (its `graphql()` helper hides the raw response that `vk`'s +transcript, error-snippet, and retry machinery depend on) but a genuine win for +the REST side (typed pull-request APIs, maintained auth and base-URI plumbing). +The revised programme is therefore three separable changes, delivered as three +pull requests: + +1. PR 1 — adopt octocrab for the REST resolve path, replacing the bespoke + `reqwest`-based `RestClient`. +2. PR 2 — replace `reqwest` inside the bespoke GraphQL client with a direct + hyper transport, then remove `reqwest` from the dependency graph. The binary + converges on one HTTP stack (hyper/rustls), shared with octocrab. +3. PR 3 — adopt `graphql_client` codegen so every GraphQL query and its + variables are checked against GitHub's published schema at compile time, + removing the raw query-string constants and hand-maintained response + envelopes. + +`vk`'s externally observable behaviour is preserved throughout: command output, +error messages, retry semantics, transcript recording, authentication +precedence, and the environment-variable endpoint overrides that the entire +test suite depends on. + +Success is observable per PR: after PR 1, `tests/resolve.rs` passes with +octocrab serving the reply path; after PR 2, `cargo tree -i reqwest` reports +the crate absent while the full suite passes; after PR 3, malforming any query +in the vendored `.graphql` documents fails the build rather than a runtime +request, and the suite still passes. All gates (`make check-fmt`, `make lint`, +`make test`, `make markdownlint`, `make nixie`) pass at every commit. + +## Constraints + +Hard invariants that must hold throughout implementation. Violation requires +escalation, not workarounds. + +- The public CLI behaviour must not change: identical stdout/stderr for the + same inputs, including error-message fragments asserted by tests (for example + `"status 500"`, `"body snippet:"`, and serde error paths such as + `"repository.pullRequest.reviewThreads"`). +- The environment-variable overrides `GITHUB_GRAPHQL_URL` (full GraphQL + endpoint URL) and `GITHUB_API_URL` (REST base URL) must keep working, because + every network-facing test redirects the binary to a loopback server through + them. +- Token precedence must remain: `--github-token` flag, then + `VK_GITHUB_TOKEN`, then `GITHUB_TOKEN`, then the config-file value + (`src/auth.rs`). +- GraphQL requests must keep sending `User-Agent: vk`, + `Accept: application/vnd.github+json`, and `Authorization: Bearer ` + (only when a token is present; anonymous access must keep working and keep + printing the "GitHub token not set, using anonymous API access" warning). +- The transcript feature (`VK_TRANSCRIPT` / constructor parameter) must keep + writing the same JSON-lines format consumed by + `tests/e2e/common.rs::load_transcript` and the `tests/fixtures/pr42.json` + fixture: one object per line with keys `operation`, `status`, `request`, and + `response` (response body truncated to 500 characters). +- Retry behaviour on the GraphQL path must be preserved: jittered + exponential backoff via `backon` with the transient-error classification in + `src/api/retry.rs` (retry on request errors, empty responses, HTTP 5xx, HTTP + 429, and HTML-looking bodies). The REST reply path performs no retries today + and must not gain any. +- TLS must remain rustls-based; do not introduce a native-tls or OpenSSL + dependency. +- Dependency versions must use caret requirements unless a tilde pin is + documented with a reason (see Decision Log for the octocrab pin). +- The error type `VkError` and its variants remain the error surface of + `src/api/`; octocrab's, hyper's, and `graphql_client`'s error types must be + mapped at module boundaries and never leak into public signatures. +- The exported domain types (`ReviewThread`, `ReviewComment`, + `CommentConnection`, `PageInfo`, `PullRequestReview`, `Issue`, `User`) remain + the types consumers and the printer use; generated GraphQL types stay private + behind a conversion layer. +- All commit gates pass on every commit: `make check-fmt`, `make lint`, + `make test`, and for documentation changes `make markdownlint` and + `make nixie`. +- No single source file may exceed 400 lines; module-level `//!` comments + and en-GB-oxendict spelling are required in all new code. The vendored + GraphQL schema is third-party generated data, not source, and is exempt. + +## Tolerances (exception triggers) + +- Scope: if any single PR requires editing more than 20 source files or a + net change beyond roughly 1,200 lines (excluding the vendored schema and + `.graphql` documents), stop and escalate. +- Interface: if a public API of the `vk` library crate (anything re-exported + from `src/lib.rs`) must change signature or be removed, stop and escalate — + with one pre-approved exception: PR 3 may add typed operation-execution + methods to `GraphQLClient` and deprecate (not remove) the string-based + `run_query`/`fetch_page`/`paginate_all` surface if call-site migration leaves + them unused. +- Dependencies: this plan pre-approves `octocrab` and `http` (PR 1 — + `http` is already in the tree; `reqwest::header` re-exports it, and octocrab's + `add_header` and PR 2's transport interface both need it directly), + promotion of `hyper`, `hyper-util`, `hyper-rustls`, and `http-body-util` from + dev-dependencies to runtime dependencies (PR 2), and `graphql_client` (PR 3). + Any further new direct dependency requires escalation. +- Behaviour: if preserving an asserted behaviour (error text, transcript + format, header set, retry counts) proves impossible, stop and present + options; do not weaken tests to fit. +- Iterations: if a gate still fails after three fix attempts on the same + failure, stop and escalate. +- Build time: if PR 3's schema-parsing derives push a clean `cargo build` + more than 50% above the pre-PR baseline (record the baseline first), stop and + escalate with options (group operations per derive, prune the schema). + +## Risks + +- Risk: octocrab's typed REST models may not deserialize the minimal inline + JSON bodies used by `tests/resolve.rs`, and its error mapping may not + reproduce the 404-non-fatal / other-non-2xx-fatal semantics exactly. + Severity: medium. Likelihood: medium. Mitigation: PR 1 starts with a spike; + test stub bodies may be enriched to realistic fixtures (that is + strengthening, not weakening); fall back to octocrab's raw `_post` route + (which inherits auth and base-URI middleware but leaves response handling to + `vk`) if the typed handler cannot match semantics. +- Risk: octocrab has shipped breaking changes in patch releases before + (upstream issue 899). Severity: medium. Likelihood: medium. Mitigation: pin + with a tilde requirement (`~0.54`) and record the reason in a `Cargo.toml` + comment and the architectural decision record (ADR). +- Risk: a direct hyper transport must reassemble what `reqwest` provided + for free: connection pooling, TLS configuration, total-request timeout, and + body collection. A subtle difference (for example timeout scope or TLS root + store) could change behaviour under failure. Severity: medium. Likelihood: + medium. Mitigation: the retry and timeout unit tests in + `src/api/client/tests.rs` count attempts against scripted local servers and + act as a characterization harness; PR 2 changes nothing but the transport + internals, so any drift surfaces there. Root-store choice (webpki versus + native) is recorded in the Decision Log during implementation. +- Risk: `graphql_client`'s generated response types may produce + `serde_path_to_error` paths that differ from the hand-written structs, + breaking the e2e assertion on `"repository.pullRequest.reviewThreads"`. + Severity: low. Likelihood: low (generated fields carry the same camelCase + serde renames). Mitigation: the e2e test is in the harness; if paths differ, + adjust the conversion boundary, not the test. +- Risk: GitHub's vendored schema is ~73,000 lines (~1.5 MB) and each + `#[derive(GraphQLQuery)]` re-parses it at compile time. Severity: low. + Likelihood: medium. Mitigation: benchmark before and after (see Build time + tolerance); group operations into shared documents where sensible; generated + code is small because only selected fields are generated. +- Risk: GitHub's custom scalars (`DateTime`, `URI`, `HTML`, `GitObjectID`) + need Rust type aliases in scope of each derive; a missed alias is a compile + error easily misread. Severity: low. Likelihood: high (it will arise). + Mitigation: a single shared `scalars` module + (`type DateTime = chrono::DateTime`, `type URI = String`, + `type HTML = String`) imported by every operation module. +- Risk: `paginate_all` currently injects the cursor into an untyped JSON + variables map; typed `Variables` structs break that mechanism. Severity: + medium. Likelihood: certain (by design). Mitigation: PR 3 introduces a small + `CursorVariables` trait (set the cursor on a typed variables struct) + implemented per paginated operation; written test-first. +- Risk: binary size and compile time grow while both reqwest and the hyper + stack are present (during PR 1, and PR 2 before removal). Severity: low. + Likelihood: certain but transient. Mitigation: PR 2 ends with + `cargo tree -i reqwest` failing to find the package. + +## Progress + +- [x] (2026-07-09 12:20Z) Explored codebase (client layer, consumers, test + infrastructure, docs) and researched octocrab 0.54; findings folded into this + plan. +- [x] (2026-07-09 12:40Z) ExecPlan drafted and linked from + `docs/contents.md`. +- [x] (2026-07-09 14:10Z) Scope revised after review: octocrab confined to + REST; GraphQL keeps the bespoke client on a hyper transport with + `graphql_client` codegen. `graphql_client` 0.16 researched and confirmed + transport-agnostic. +- [x] (2026-07-09 15:30Z) Stage A: ADR + `docs/adr-001-github-api-client-modernisation.md` authored and linked from + `docs/vk-design.md` and `docs/contents.md`; octocrab `~0.54` added to + `Cargo.toml` (default features off; `default-client`, `jwt-rust-crypto`, + `rustls`, `rustls-ring`, `timeout`; `retry` excluded deliberately). +- [x] (2026-07-09 17:20Z) PR 1: octocrab REST resolve path complete. + `src/resolve/rest.rs` reworked onto octocrab via the raw `_post` route with + `RestClient::new` and `post_reply` signatures and semantics preserved, + `github_client` deleted, `x-github-api-version` and `Accept` headers restored + via builder `add_header` with a direct `http` dependency; `tests/resolve.rs` + green unchanged; design doc updated; all gates green; CodeRabbit review + completed with zero findings; draft pull request opened as leynos/vk#194. +- [x] (2026-07-28) Review follow-up restored the total REST reply deadline, + strengthened raw POST coverage for the route, body, authentication, required + headers, and status handling, and reconciled the documentation findings. +- [x] (2026-08-03) Documentation review follow-up corrected the dependency + record, documentation index, Oxford spelling, and REST ownership guidance. +- [x] (2026-07-09 18:30Z) PR 2 complete: `src/api/client/transport.rs` + added with `GraphQLClient` delegating to it; reqwest removed from the graph + entirely (`cargo tree -i reqwest` finds nothing in normal, dev, and + all-features graphs); transcript-replay test `e2e_pr_42` passes; design doc + and e2e testing guide corrected; all gates green; CodeRabbit review completed + with zero findings; draft pull request opened as leynos/vk#195 (stacked on PR + 1). +- [x] (2026-07-09 21:10Z) PR 3 implementation complete: schema vendored + (72,911 lines); all six operations in named `.graphql` documents; + `run_operation`/`run_operation_as`/`paginate_operation_as` plus the + `CursorVariables` trait (red-green tested); domain structs preserved behind + conversions; `src/graphql_queries.rs` and the string query surface deleted + with characterization tests ported; the resolve thread-lookup latent bug fixed + (`reviewThreads`/`fullDatabaseId`); wire-submodule split restores the + 400-line limit; compile-fail demonstrated + (`No field named titleTYPO on Issue`) and reverted; clean build 17 s versus + the 46 s baseline (well within tolerance); full suite green. +- [x] (2026-07-09 21:20Z) Documentation pass complete across all PRs: + `docs/vk-design.md` networking and resolve sections rewritten for the typed + path, e2e guide MITM correction (PR 2), `docs/repository-layout.md` gains the + `graphql/` entry; users' guide reviewed, no change needed. +- [x] (2026-07-09 21:50Z) PR 3 CodeRabbit review completed with zero + findings against the cumulative diff from main; draft pull request opened as + leynos/vk#196 (stacked on PR 2). Plan status COMPLETE pending review and + merges. + +## Surprises & discoveries + +- Observation: despite the branch name, no octocrab groundwork exists; this + is a from-scratch adoption. Evidence: `grep octocrab Cargo.toml src/ -r` + returns nothing. Impact: the plan treats the migration as new work, not a + continuation. +- Observation: `docs/vk-end-to-end-testing-guide.md` describes `third-wheel` + as a man-in-the-middle proxy, but the implementation only uses + `third_wheel::hyper` re-exports for a plain loopback stub server driven by + env-var endpoint overrides. Evidence: `tests/utils/mod.rs:186-192` sets + `GITHUB_GRAPHQL_URL` and `GITHUB_API_URL`; no proxy or certificate trust is + configured anywhere. Impact: only the env-var overrides need preserving; the + guide should be corrected when first touched. +- Observation: the transcript writes the raw, unredacted request payload; + redaction (`redact_sensitive`) applies only to error-context snippets. + Evidence: `src/api/client/transcript.rs` versus + `src/api/client/mod.rs:126-134`. Impact: parity is the goal; do not silently + change redaction behaviour during the migration. Flagged for a possible + follow-up outside this plan. +- Observation: octocrab 0.54 with `default-features = false` fails to + compile unless one of its JWT crypto features is enabled, even when app (JWT) + auth is unused. Evidence: `compile_error!` at octocrab's `src/lib.rs:304` + during the first gate run. Impact: the dependency carries `jwt-rust-crypto` + (pure-Rust, matching the ring/rustls posture) alongside `default-client`, + `rustls`, `rustls-ring`, and `timeout`; this is the final feature set + anticipated by the Interfaces section. +- Observation: octocrab's own GraphQL example delegates query typing to + `graphql_client`, confirming the two tools' division of labour matches this + plan's (octocrab does not provide typed GraphQL itself). Evidence: + `examples/graphql_issues.rs` in the octocrab repository. Impact: supports + confining octocrab to REST. + +## Decision log + +- Decision: adopt the three-part programme — octocrab for REST only, a + direct hyper transport for the bespoke GraphQL client, and `graphql_client` + codegen for typed queries — instead of routing all traffic through octocrab. + Rationale: the bespoke GraphQL client is heavily leveraged for + instrumentability (transcript recording, body-snippet error context, + transient-retry classification on raw bodies), all of which octocrab's + `graphql()` helper hides; octocrab's value concentrates in its typed REST + surface and maintained plumbing. This keeps the observability investment, + converges on one HTTP stack, and adds the compile-time query checking the + bespoke client always lacked. Date/Author: 2026-07-09, direction given by the + user in review of the first draft. +- Decision: deliver as three pull requests in the order REST (PR 1), + transport (PR 2), codegen (PR 3). Rationale: PR 1 is the smallest and proves + octocrab in-tree with minimal blast radius; PR 2 removes reqwest early so the + dependency win lands before the largest change; PR 3 is type-level only and + benefits from a settled transport underneath it. PRs 2 and 3 are + order-independent if circumstances change. Date/Author: 2026-07-09, planning + session. +- Decision: keep the `GraphQLClient` facade and `VkError` taxonomy + throughout; all three PRs change internals or add typed surface only. + Rationale: consumers (`src/commands.rs`, `src/review_threads.rs`, + `src/reviews.rs`, `src/issues.rs`, `src/branch_pr/`, `src/resolve/`) and + roughly twenty network tests couple to the facade, the error text, and the + env-var overrides. Date/Author: 2026-07-09, planning session. +- Decision: keep `backon` retry as the single retry authority on the + GraphQL path; build octocrab (REST) without its retry feature so the reply + path stays retry-free as today. Rationale: preserves tested attempt counts; + octocrab's retry layer cannot see GraphQL rate-limit errors (HTTP 200 with an + `errors` payload) anyway. Date/Author: 2026-07-09, planning session. +- Decision: pin octocrab with a tilde requirement (`~0.54`). Rationale: + octocrab has a documented history of breaking changes in patch releases + (upstream issue 899). AGENTS.md permits tilde pins where the reason is + documented; this is that documentation, and the ADR repeats it. Date/Author: + 2026-07-09, planning session. +- Decision: in PR 3, keep the exported domain structs and convert from + generated `ResponseData` types at a private boundary (`From` + implementations), rather than exporting generated types. Rationale: the + domain structs are public API (re-exported from `src/lib.rs`) and are + consumed by the printer and summary modules; the generated types are an + implementation detail of the wire format. Date/Author: 2026-07-09, planning + session. +- Decision: design the refitted GraphQL client (PRs 2 and 3) for cheap + future extraction into a shared crate. Rationale: the sibling project frankie + (a code-review terminal user interface (TUI), currently REST-only octocrab) + will need the GraphQL-only review-thread surface (`isResolved`, + `resolveReviewThread`) that motivated this client, and the executor + (transport, retry, transcript, typed operations, cursor pagination) is the + reusable part while query documents stay per-project. Concretely: keep + `VkError` and `vk::environment` coupling at the edges of the transport and + typed modules rather than woven through them. Extraction itself is out of + scope for this plan. Date/Author: 2026-07-09, follow-up review discussion. +- Decision: PR 1 uses octocrab's raw `_post` route for the reply, not the + typed `pulls(...).comment(id).reply(...)` route. Rationale: the typed route + funnels non-2xx responses through octocrab's `Error::GitHub`, whose display + carries neither the request path nor the HTTP status code that + `tests/resolve.rs` asserts in stderr; `_post` returns the raw + `http::Response`, keeping the 404-non-fatal / other-non-2xx-fatal mapping and + error text in `vk`'s hands. Timeout mapping: octocrab's read and write + timeouts remain configured, `connect_timeout` maps directly, and `post_reply` + additionally enforces reqwest's original total-request deadline. Date/Author: + 2026-07-09, PR 1 implementation. +- Decision: in PR 1, keep octocrab's own `User-Agent: octocrab` on the + REST path (no test asserts the REST user agent, and octocrab hard-codes its + value first in the header list), but restore the + `x-github-api-version: 2022-11-28` pin and the + `Accept: application/vnd.github+json` header via the builder's `add_header`, + using a direct `http` dependency. Rationale: the API-version pin is + documented behaviour in `docs/vk-design.md` and protects against GitHub + changing its default API version; dropping it silently would contradict the + design document. Date/Author: 2026-07-09, PR 1 implementation. +- Decision: PR 2 transport details. The hyper connector uses webpki + roots with the ring provider, matching what reqwest's `rustls-tls` feature + expanded to (verified against reqwest 0.12.23's manifest); `https_or_http` + keeps the loopback test servers working. The total-request timeout is one + `tokio::time::timeout` spanning send plus body collection, mirroring reqwest's + `.timeout()`; a timeout maps to `VkError::RequestContext`, which + `should_retry` already classifies as transient. System proxies + (`HTTP(S)_PROXY`) and redirects are deliberately not supported by the new + transport — reqwest honoured both by default, but neither is used or tested + on the GraphQL path; both are documented in the transport module. The + binary-internal `VkError::Request` variant (constructed only from reqwest + errors) was removed along with its retry-classifier arm; `VkError` is not + exported from `src/lib.rs`, so this is not a public API change. Date/Author: + 2026-07-09, PR 2 implementation. +- Decision: in PR 3, a missing repository or issue in the Issue + operation's response now surfaces as `VkError::BadResponse` ("issue #N not + found") instead of the previous accidental `BadResponseSerde` (the old + hand-written struct made `issue` non-optional, so a null issue failed + deserialization). The generated types make the nullability explicit, and no + test pinned the old text; the clearer semantic error is deliberate. A + malformed present issue still yields `BadResponseSerde` with the same path. + Date/Author: 2026-07-09, PR 3 pilot migration. +- Decision: the resolve thread-lookup query was redesigned onto + `repository.pullRequest.reviewThreads` because the field it previously + selected (`PullRequest.reviewComments`) does not exist in GitHub's published + schema — a latent production bug that only mocked tests kept green, exposed + by codegen validation. The new operation matches comments by `fullDatabaseId` + (the schema deprecates `databaseId`), carried as a `BigInt` string scalar. + Accepted limitation: a comment beyond the first 100 comments of one thread is + not found (same class of cap as the old flat query's page size). Date/Author: + 2026-07-09, PR 3 implementation. +- Decision: keep the string-based query surface (`run_query`, + `fetch_page`, `paginate_all`, `paginate`, `Query`) after the last production + consumer moved to typed operations. Rationale: it is a thin wrapper over the + shared `run_payload` core, remains fully exercised by the characterization + tests (retry counts, error text, transcript, cursor merging, page caps), + carries no lint debt, and a raw-query escape hatch is deliberately valuable + for the planned extraction into a shared crate. This supersedes the earlier + intent to port those tests and remove the surface. Date/Author: 2026-07-09, + PR 3 implementation. +- Decision (supersedes the previous entry): the string-based query + surface (`run_query`, `fetch_page`, `paginate_all`, `paginate`, `Query`) IS + removed after all. The earlier "keep as escape hatch" entry was recorded + while the implementation agent appeared stalled; the agent in fact completed + the sanctioned removal, porting every characterization assertion (retry + counts on missing-data/5xx/HTML bodies, the four error-detail cases, + cursor-in-request capture) to the shared `run_payload` core and the typed + pagination path with identical assertions, so coverage is preserved with a + smaller surface. `fetch_page_rejects_non_object_variables` was retired, not + ported: typed `Variables` structs are objects by construction, so the guarded + failure mode no longer exists. A raw-query escape hatch can be reintroduced + at shared-crate extraction time if a consumer needs it. The commit message of + "Redesign resolve thread lookup onto reviewThreads" states the surface was + retained — this entry corrects the record. Date/Author: 2026-07-09, PR 3 + implementation. +- Decision: record the programme in a new ADR, + `docs/adr-001-github-api-client-modernisation.md`. Rationale: no ADRs exist; + the bespoke-client choice was never recorded. AGENTS.md requires substantive + decisions to be captured as ADRs following + `docs/documentation-style-guide.md`. Date/Author: 2026-07-09, planning + session (path renamed from `adr-001-adopt-octocrab.md` when the scope + changed). + +## Outcomes & retrospective + +Interim (2026-07-09, all three PRs implemented; PRs 1 and 2 reviewed clean by +CodeRabbit; PR 3 review pending): + +- The programme delivered its purpose: one HTTP stack (hyper/rustls), + octocrab serving REST, and compile-time-checked GraphQL, with the observable + behaviour pinned by the suite preserved throughout. +- Biggest surprise: codegen validation exposed that the resolve + thread-lookup query selected a field (`PullRequest.reviewComments`) that does + not exist in GitHub's schema — `vk resolve` could never have worked against + the live API. The compile-time checking paid for itself before the PR even + landed. +- The `_as` escape hatch (schema-checked query, hand-written + deserialization target) proved the pivotal design move: it let every lenient + documented behaviour survive codegen strictness and kept serde error paths + byte-identical. +- Lesson: octocrab's semver-loose history and hidden feature coupling + (`jwt-rust-crypto` mandatory under `default-features = false`) justify the + tilde pin twice over. +- Lesson (process): two construction agents racing one file set caused + formatting/lint churn; sequencing construction strictly would have saved + several gate iterations. + +## Context and orientation + +The repository is a single Rust crate (`vk`, edition 2024, minimum supported +Rust version (MSRV) 1.89) with sources under `src/` and integration tests under +`tests/`. The `Makefile` is the canonical command runner. Read `AGENTS.md` +before contributing. + +The API layer, all under `src/api/`: + +- `src/api/mod.rs` re-exports `GraphQLClient`, `Endpoint`, `Query`, `Token` + (from `client/`), `paginate` (from `pagination.rs`), and `RetryConfig` (from + `retry.rs`). +- `src/api/client/mod.rs` defines `GraphQLClient` (fields: a + `reqwest::Client`, headers, endpoint, optional transcript, and retry config) + with constructors `new` (endpoint from the `GITHUB_GRAPHQL_URL` env var, + default `https://api.github.com/graphql`), `with_endpoint`, and + `with_endpoint_retry`; methods `run_query` (POST, backon retry loop), + `fetch_page` (cursor merge), and private `execute_single_request` / + `process_graphql_response` (status handling, transcript logging, GraphQL + error surfacing, `serde_path_to_error` deserialization). +- `src/api/client/helpers.rs` builds headers (`User-Agent: vk`, `Accept`, + optional `Authorization`) and provides snippet/redaction helpers. +- `src/api/client/types.rs` defines the `Query`, `Token`, and `Endpoint` + newtypes and the `GraphQLResponse` envelope. +- `src/api/client/transcript.rs` appends one JSON line per request to the + optional transcript file. +- `src/api/client/pagination.rs` implements `paginate_all` (cursor loop, + 1,000-page cap); `src/api/pagination.rs` holds the generic `paginate` helper + and `PageInfo` handling. +- `src/api/retry.rs` defines `RetryConfig` (5 attempts, 200 ms base delay, + 30 s request timeout, jitter) and `should_retry` transient classification. + +GraphQL queries are raw string constants in `src/graphql_queries.rs` +(`THREADS_QUERY`, `COMMENT_QUERY`, `ISSUE_QUERY`, `PR_FOR_BRANCH_QUERY`) and in +`src/resolve/graphql.rs` (`RESOLVE_THREAD_MUTATION`, `REVIEW_COMMENTS_PAGE`). +Responses deserialize into per-module serde structs that mirror the GraphQL +wire shape; the exported ones (`ReviewThread`, `ReviewComment`, +`CommentConnection`, `PageInfo`, `PullRequestReview`, `Issue`, `User`) are +public API and survive all three PRs. + +The REST path: `src/resolve/rest.rs` (only compiled with +`--features unstable-rest-resolve`) builds a second `reqwest::Client` +(`github_client`) and a `RestClient` whose base URL comes from the +`GITHUB_API_URL` env var (default `https://api.github.com`). Its one operation, +`post_reply`, POSTs to +`repos/{owner}/{name}/pulls/{pull_number}/comments/{comment_id}/replies`, +treating 404 as non-fatal (warn and continue) and other non-2xx as fatal, with +no retry. + +Authentication: `src/auth.rs::resolve_github_token` implements the precedence +chain; no `gh` CLI integration exists. The token is a plain string handed to +the client constructors. + +Tests that constrain this work: + +- `src/api/client/tests.rs` spins up loopback hyper servers and constructs + clients via `with_endpoint`/`with_endpoint_retry` using endpoints without a + path; it counts retry attempts and asserts error-text fragments. +- `src/test_utils/test_http.rs` and `src/branch_pr/tests.rs` follow the + same pattern. +- `tests/utils/mod.rs::vk_cmd` runs the real binary with + `GITHUB_GRAPHQL_URL=http://{addr}/graphql`, `GITHUB_API_URL=http://{addr}`, + and `GITHUB_TOKEN=dummy`. +- `tests/auth.rs` asserts the captured `Authorization` header and the + anonymous-access warning. +- `tests/resolve.rs` asserts the exact REST path and status-code semantics. +- `tests/cli.rs` holds two insta snapshots of rendered output (client-swap + insensitive, data-shape sensitive). +- `tests/e2e/common.rs::load_transcript` and `tests/fixtures/pr42.json` + encode the transcript JSON-lines format. + +Key library facts (verified 2026-07-09): + +- octocrab 0.54.0 (MSRV 1.85) builds on hyper 1.x and tower, rustls with + the ring provider by default. `OctocrabBuilder` provides `personal_token`, + `base_uri` (applies to all routes), `add_header`, and timeouts. + `pulls(owner, repo)` exposes typed review-comment operations including + replying to a comment; the raw `_post(route, body)` method returns an + unprocessed `http::Response` as a fallback. Resolving a review thread has no + REST endpoint; the `resolveReviewThread` GraphQL mutation is the only way. +- `graphql_client` 0.16.0 (January 2026, maintained, MSRV 1.66): + `#[derive(GraphQLQuery)]` with `schema_path`/`query_path` generates + `Variables` and `ResponseData` types per operation. + `Operation::build_query(variables)` returns a `QueryBody` that serializes to + the standard `{"query", "variables", "operationName"}` envelope, and + responses are plain serde — both compose with any transport, so the bespoke + client's envelope handling, transcript, and `serde_path_to_error` diagnostics + continue to work. The reqwest features are optional and stay off. Custom + scalars used by GitHub (`DateTime`, `URI`, `HTML`, and friends) need type + aliases in scope of the derive. +- GitHub's public GraphQL schema is published at + `https://docs.github.com/public/fpt/schema.docs.graphql` (~73,000 lines, ~1.5 + MB SDL); vendoring it whole is the established practice (octocrab and + graphql_client both do so in their examples). + +## Plan of work + +Stage A (lands with PR 1): author +`docs/adr-001-github-api-client-modernisation.md` following the ADR template in +`docs/documentation-style-guide.md`. Status: Accepted. Context: two bespoke +reqwest clients, an undocumented prior decision, and no compile-time query +checking. Options Considered: keep bespoke; route everything through octocrab; +the adopted three-part split; `graphql_client` plus reqwest without octocrab. +Decision Outcome: the three-part programme, with the octocrab tilde pin and its +rationale. Migration Plan: reference this ExecPlan. Reference the ADR from +`docs/vk-design.md` and list it in `docs/contents.md`. + +### PR 1 — octocrab for the REST resolve path + +Add the dependency (final feature list recorded here after the spike; the +`retry` feature is deliberately excluded so no retry layer exists, matching +today's retry-free reply path): + +```toml +# Tilde pin: octocrab has shipped breaking changes in patch releases +# (upstream issue 899); widen only after review. +octocrab = { version = "~0.54", default-features = false, features = [ + "default-client", "jwt-rust-crypto", "rustls", "rustls-ring", "timeout", +] } +``` + +Rework `src/resolve/rest.rs` behind its existing `pub(crate)` surface: +`RestClient::new(token, api, timeout, connect_timeout)` builds an +`octocrab::Octocrab` via `OctocrabBuilder` (`personal_token` when the token is +non-empty, `base_uri` from the existing parameter → `GITHUB_API_URL` → default +resolution, and connect/read/write timeouts from the existing arguments). +`post_reply` additionally enforces the original total-request deadline and uses +octocrab's raw `_post` route with the hand-built +`/repos/{owner}/{name}/pulls/{pull_number}/comments/{comment_id}/replies` +endpoint. It preserves the semantics `tests/resolve.rs` asserts: the exact +request path, a 404 mapped to a warning and success, and every other non-2xx +response mapped to a fatal `VkError` containing the route and status. Delete +`github_client` and the hand-rolled header constants. Acceptance: +`cargo test --features unstable-rest-resolve` and `make lint` (all-features) +pass; `tests/resolve.rs` unchanged in what it asserts. + +### PR 2 — hyper transport; remove reqwest + +Add a private transport module `src/api/client/transport.rs` owning a pooled +hyper client (`hyper_util::client::legacy::Client` with a `hyper_rustls` HTTPS +connector) and exposing one method mirroring `execute_single_request`'s +contract: take the JSON payload and headers, POST to the configured endpoint +URL (kept whole — no base/route splitting is needed because the bespoke client +posts to one absolute URL), enforce the total-request timeout via +`tokio::time::timeout` (mirroring reqwest's `.timeout()` scope: connect plus +body), collect the body with `http-body-util`, and return +`HttpResponse { status, body }` or a `VkError::RequestContext` with today's +context text. Promote `hyper`, `hyper-util`, `hyper-rustls`, and +`http-body-util` to runtime dependencies; record the chosen TLS root store +(webpki roots, matching the current `rustls-tls` posture) in the Decision Log. +Switch `execute_single_request` to delegate to the transport; the transcript +call, status check, snippets, retry loop, and headers logic are untouched. +Remove `reqwest` from `Cargo.toml` and replace any residual `reqwest::header` +imports with the `http` crate equivalents (they are the same types +re-exported). Acceptance: `make test` passes without any test edits; +`cargo tree -i reqwest` reports the package is not found. + +### PR 3 — typed GraphQL via graphql_client codegen + +Record the build-time baseline first (`cargo build` from clean, wall clock). +Vendor the schema at `graphql/schema.docs.graphql` with a short +`graphql/README.md` noting the source URL and refresh procedure. Move each +operation into a `.graphql` document under `graphql/` (thread listing, comment +paging, issue lookup, PR-for-branch, review-comments paging, the +`resolveReviewThread` mutation, and reviews listing), grouping related +operations per file to amortize the per-derive schema parse. Create a shared +scalars module (`type DateTime = chrono::DateTime`, +`type URI = String`, `type HTML = String`, extended as compile errors direct). +Derive `GraphQLQuery` per operation with +`response_derives = "Debug, Clone, PartialEq"`. + +Client surface: add a typed method to `GraphQLClient` (see Interfaces) that +takes an operation's `Variables`, builds the envelope with `build_query`, and +reuses the existing POST, transcript, retry, and `serde_path_to_error` +machinery; the codegen'd operation name replaces the string-sniffing +`operation_name` helper on this path. For pagination, introduce a +`CursorVariables` trait (set/replace the cursor on a typed variables struct) +and a typed `paginate_operation` counterpart to `paginate_all`, written +test-first against the existing scripted stub servers. + +Conversion boundary: implement `From` (or dedicated mapper +functions where `From` is awkward) producing the existing exported domain +structs, so `src/commands.rs`, the printer, and the summary modules do not +change. Migrate call sites module by module (review_threads, reviews, issues, +branch_pr, resolve/graphql), deleting each raw query constant as its operation +moves; `src/graphql_queries.rs` is deleted at the end. Red-green applies to the +new units (the `CursorVariables` trait, each conversion): write the rstest +cases first against fixture JSON and observe the expected failure before +implementing. Acceptance: full suite green; introducing a deliberate typo into +any `.graphql` document fails `cargo build` (demonstrate once, then revert); +build-time delta within tolerance. + +Documentation lands with each PR: `docs/vk-design.md` networking and resolve +sections (PRs 1–2), the third-wheel correction in +`docs/vk-end-to-end-testing-guide.md` (first PR that touches test docs), the +GraphQL section rewrite and schema-refresh procedure (PR 3), and +`docs/contents.md` whenever a document is added. + +## Concrete steps + +All commands run from the repository root +(`/home/leynos/Projects/vk.worktrees/adopt-octocrab`). Long outputs go through +`tee` to a log file for review, for example: + +```shell +make test 2>&1 | tee "/tmp/test-vk-adopt-octocrab.out" +``` + +Per-milestone sequence (repeat for each commit within each PR): + +1. Make the edits described in Plan of work. +2. `make check-fmt` (apply `make fmt` first if needed). +3. `make lint` — expect zero warnings; clippy runs with `-D warnings` and + `--all-features`, so the REST feature code is always linted. +4. `make test` — expect all tests to pass. The suite currently passes on a + clean checkout; any new failure is caused by the change under test. +5. For documentation edits: `make markdownlint` and `make nixie`. +6. Commit with an imperative-mood message; update the `Progress` section of + this plan in the same commit. + +Useful focused commands: + +```shell +cargo test --features unstable-rest-resolve --test resolve 2>&1 | tee /tmp/test-vk-adopt-octocrab.out +cargo test api::client 2>&1 | tee /tmp/test-vk-adopt-octocrab.out +cargo test --test e2e -- --ignored e2e_pr_42 2>&1 | tee /tmp/test-vk-adopt-octocrab.out +cargo tree -i reqwest # PR 2 exit: expect "package … not found" +cargo tree -d # check duplicate transitive versions +curl -L https://docs.github.com/public/fpt/schema.docs.graphql -o graphql/schema.docs.graphql +``` + +Expected shape of a passing test run (counts will drift as tests are added): + +```text +test result: ok. 0 failed; finished in … +``` + +## Validation and acceptance + +The programme is behaviour-preserving, so the existing suite is the primary +acceptance harness: every commit ends with `make check-fmt`, `make lint`, and +`make test` green with no test weakened or deleted. Enriching REST stub bodies +toward realistic fixtures (PR 1) and adding new tests is permitted; loosening +assertions is not. + +Red-green-refactor evidence is required for the genuinely new units: + +- PR 2: if any helper with observable logic is added to the transport + (beyond direct delegation), specify it with a failing test first; otherwise + the characterization harness (retry counts, error text, transcript replay) + stands in, and that substitution is recorded here. +- PR 3: the `CursorVariables` trait, `paginate_operation`, and each + `ResponseData` → domain conversion get rstest cases against fixture JSON + written before the implementation; run the focused test, observe the expected + failure, implement, observe the pass, then run the wider gates. + +End-to-end observations per PR: + +- PR 1: `cargo test --features unstable-rest-resolve --test resolve` + passes; a manual run against a loopback stub shows the reply POST hitting + `repos/{owner}/{name}/pulls/{n}/comments/{id}/replies` exactly as on `main`. +- PR 2: `cargo tree -i reqwest` fails to find the package; the ignored + transcript-replay test (`cargo test --test e2e -- --ignored e2e_pr_42`) + passes, proving transcript format parity; with no server listening, running + `cargo run -- pr ` with `GITHUB_TOKEN=dummy` and + `GITHUB_GRAPHQL_URL=http://127.0.0.1:1/graphql` fails with a + connection-refused `RequestContext` error naming the operation, exactly as on + `main`. +- PR 3: a deliberate field typo in a `.graphql` document turns into a + compile error (demonstrated once and reverted); the insta snapshots in + `tests/cli.rs` are byte-identical. + +Quality criteria: all gates above; documentation gates (`make markdownlint`, +`make nixie`) for the ADR, design-doc, and `graphql/README.md` changes; +build-time delta within the stated tolerance for PR 3. + +## Idempotence and recovery + +Every step is an ordinary source edit gated by the test suite; re-running any +command is safe. Each PR (and each commit within it) is independent, so a +failed attempt is abandoned with `git restore` / `git reset --hard HEAD` +without affecting completed work. The schema download is re-runnable and +version-controlled once vendored. Nothing in this plan touches user data, CI +configuration, or anything outside the repository; the only files written +outside it are `tee` logs under `/tmp`. + +## Artifacts and notes + +Recorded evidence: + +- octocrab final feature set: `default-client`, `jwt-rust-crypto`, + `rustls`, `rustls-ring`, `timeout` (no `retry`). +- Clean `cargo build --all-features`: 46 s pre-codegen baseline, 17 s + after PR 3 on the same machine (variance dominated by cache warmth; the + schema-parsing derives are immaterial). +- Compile-fail evidence: a deliberate `titleTYPO` field in + `graphql/issue.graphql` fails `cargo check` with "No field named titleTYPO on + Issue"; reverted. +- Transcript parity: `cargo test --test e2e -- --ignored e2e_pr_42` + passes on the hyper transport and the typed path (replay is sequential, + insensitive to query text). +- reqwest absence: `cargo tree -i reqwest` reports the package is not + found in normal, dev, and all-features graphs. + +Also to record as milestones complete: the final octocrab feature set, the +`cargo tree -d` duplicate report, the clean-build baseline and post-PR 3 delta, +a sample transcript line proving format parity, and the closing test counts. + +## Interfaces and dependencies + +Dependencies to add: + +```toml +# PR 1. Tilde pin: octocrab has shipped breaking changes in patch +# releases (upstream issue 899); widen only after review. +# jwt-rust-crypto is mandatory under default-features = false. +octocrab = { version = "~0.54", default-features = false, features = [ + "default-client", "jwt-rust-crypto", "rustls", "rustls-ring", "timeout", +] } + +# PR 2 (promoted from dev-dependencies; align versions with the lockfile) +hyper = "1" +hyper-util = { version = "0.1", features = ["client", "client-legacy", "http1", "tokio"] } +hyper-rustls = { version = "0.27", features = ["webpki-roots", "http1", "ring"] } +http-body-util = "0.1" + +# PR 3 +graphql_client = "0.16" +``` + +Dependency to remove (PR 2): `reqwest`. + +In `src/api/client/transport.rs` (PR 2, new, private to `client`): + +```rust +/// Owns the pooled hyper client used for GraphQL requests. +pub(super) struct Transport { /* hyper_util legacy client + HTTPS connector */ } + +impl Transport { + pub(super) fn new() -> Result; + + /// POST `payload` to `endpoint` with `headers`, honouring `timeout` + /// across the whole request, returning status and body. + pub(super) async fn post_json( + &self, + endpoint: &Endpoint, + headers: &http::HeaderMap, + payload: &serde_json::Value, + timeout: std::time::Duration, + ) -> Result; +} +``` + +In `src/api/client/mod.rs` (PR 3, added; string-based methods retained until +unused, then deprecated per the Interface tolerance): + +```rust +/// Execute a codegen'd GraphQL operation using this client. +pub async fn run_operation( + &self, + variables: Q::Variables, +) -> Result; +``` + +In `src/api/pagination.rs` or a sibling module (PR 3): + +```rust +/// Implemented by generated Variables types for paginated operations. +pub(crate) trait CursorVariables { + fn set_cursor(&mut self, cursor: Option); +} +``` + +Unchanged public surface (re-exported from `src/lib.rs` and `src/api/`): +`GraphQLClient` and its constructors, `Endpoint`, `Token`, `Query`, +`RetryConfig`, `paginate`, `PageInfo`, `CommentConnection`, `ReviewThread`, +`ReviewComment`, `PullRequestReview`, `Issue`, `User`, and `VkError`. + +In `src/resolve/rest.rs` (PR 1), `RestClient` keeps its `pub(crate)` +construction and the `post_reply` free function; only the inner client type +changes from `reqwest::Client` to `octocrab::Octocrab`. + +## Revision note + +2026-07-09: initial draft proposed octocrab as the transport for both GraphQL +and REST. + +2026-07-09 (second revision): scope changed on user direction after review of +the first draft. octocrab is now confined to the REST resolve path; the bespoke +GraphQL client is retained for its observability machinery and moves from +reqwest to a direct hyper transport; `graphql_client` codegen adds compile-time +query checking. Delivery is three pull requests. The planned ADR was renamed +from `adr-001-adopt-octocrab.md` to +`adr-001-github-api-client-modernisation.md`. Constraints, tolerances, risks, +decisions, and interfaces were rewritten to match. PR 1 is complete; PRs 2 and +3 remain as authorized future work. diff --git a/docs/repository-layout.md b/docs/repository-layout.md index c87912a9..ff6cab8b 100644 --- a/docs/repository-layout.md +++ b/docs/repository-layout.md @@ -13,6 +13,7 @@ listing. ├── .github/ ├── docs/ │ └── execplans/ +├── graphql/ ├── src/ │ ├── api/ │ ├── branch_pr/ @@ -42,6 +43,9 @@ _Figure 1: Compact repository tree for contributor orientation._ documentation. - `docs/execplans/`: Living implementation plans that record progress, decisions, and handoff context. +- `graphql/`: Vendored GitHub GraphQL schema and the operation documents that + `graphql_client` codegen validates against it at compile time. See + [graphql/README.md](../graphql/README.md). - `src/`: Rust source code for the `vk` library and command-line application. - `src/api/`: GitHub API access, pagination, and retry behaviour. - `src/branch_pr/`: Pull request discovery for the current Git branch. diff --git a/docs/vk-design.md b/docs/vk-design.md index 311b97f1..5a1ece58 100644 --- a/docs/vk-design.md +++ b/docs/vk-design.md @@ -49,20 +49,28 @@ even when multiple comments reference the same code. - **Resolve threads**: `vk resolve ` resolves the thread via the `resolveReviewThread` GraphQL mutation. When compiled with the `unstable-rest-resolve` feature and a reply message is supplied (`-m`), it - posts a reply via the REST API before resolving. If the REST reply fails the - command aborts without calling `resolveReviewThread`, does not retry, and - does not apply backoff; missing comments return a warning and continue. The - resolver pages through the pull request's `reviewComments` connection using - typed `serde` structures (see `src/resolve/graphql.rs`), matching the - requested `databaseId` and extracting the owning thread identifier. - Pagination detects repeated or non-advancing cursors and aborts with an error - rather than looping indefinitely. This subcommand requires `GITHUB_TOKEN` - with sufficient scopes (resolving threads and posting replies require - `repo`); if absent, it aborts rather than performing anonymous calls. - Resolution steps emit debug spans via `tracing` to aid diagnostics; the - binary initialises `tracing_subscriber::fmt()` with an environment filter, so - running with `RUST_LOG=vk=debug` (or a more specific filter) surfaces the - spans on stderr. + posts a reply via the REST API before resolving. The REST reply is served + through [octocrab](https://docs.rs/octocrab) (see + [ADR 001](adr-001-github-api-client-modernisation.md)), pinning + `x-github-api-version: 2022-11-28`; status handling stays in `vk` via + octocrab's raw request route. If the REST reply fails the command aborts + without calling `resolveReviewThread`, does not retry, and does not apply + backoff; missing comments return a warning and continue. The resolver pages + through the pull request's `reviewThreads` connection using typed + `graphql_client` operations (see `src/resolve/graphql.rs`), scanning each + thread's first 100 comments for the requested `fullDatabaseId` and extracting + the owning thread identifier. The earlier design paged a flat + `reviewComments` connection, a field that does not exist in GitHub's + published schema and only ever worked against mocked responses; codegen + validation exposed the latent bug. An accepted limitation follows: a comment + beyond the first 100 comments of a single thread is not found. Pagination + detects repeated or non-advancing cursors and aborts with an error rather + than looping indefinitely. This subcommand requires `GITHUB_TOKEN` with + sufficient scopes (resolving threads and posting replies require `repo`); if + absent, it aborts rather than performing anonymous calls. Resolution steps + emit debug spans via `tracing` to aid diagnostics; the binary initializes + `tracing_subscriber::fmt()` with an environment filter, so running with + `RUST_LOG=vk=debug` (or a more specific filter) surfaces the spans on stderr. - **Configurable timeouts**: `--http-timeout` and `--connect-timeout` override the default 10 s request and 5 s connection limits for REST replies. @@ -79,6 +87,11 @@ even when multiple comments reference the same code. ## Architecture +The modernization of `vk`'s GitHub API access — octocrab for the REST resolve +path, hyper transport for the bespoke GraphQL client, and `graphql_client` +codegen for typed queries — is governed by +[ADR 001](adr-001-github-api-client-modernisation.md). + The code centres on these printing helpers: @@ -146,6 +159,14 @@ merges an optional cursor into a variables map and rejects non-object input upfront. The `paginate_all` helper loops until `PageInfo` indicates completion, discarding any items fetched before an error occurs. +Requests are sent by a private hyper-based transport +([src/api/client/transport.rs](../src/api/client/transport.rs)) that uses +rustls with Mozilla's webpki roots; this replaces the former `reqwest` client. +The total-request timeout spans both sending the request and collecting the +response body. Unlike the previous client, this transport supports neither +system proxies (`HTTP(S)_PROXY`) nor HTTP redirects, neither of which the +GraphQL path uses. These transport choices are governed by ADR 001. + ## Utility Splitting the printing logic into reusable `write_*` functions enables testing diff --git a/docs/vk-end-to-end-testing-guide.md b/docs/vk-end-to-end-testing-guide.md index 8ea7245a..22d2a15a 100644 --- a/docs/vk-end-to-end-testing-guide.md +++ b/docs/vk-end-to-end-testing-guide.md @@ -76,6 +76,18 @@ integration (CI) pipeline. ### Architectural Overview of the Chosen Testing Stack +> **Correction — how the harness actually works.** This guide was originally +> written around a Man-in-the-Middle (MITM) proxy design, and much of the +> discussion below still describes that aspirational approach. The implemented +> harness does not proxy or intercept traffic and performs no TLS +> interception. Instead, the helpers in `tests/utils/mod.rs` (`start_mitm`, +> `start_mitm_capture`, and `vk_cmd`) start plain hyper loopback stub servers +> and point the `vk` binary straight at them through the `GITHUB_GRAPHQL_URL` +> and `GITHUB_API_URL` environment variables. The `third-wheel` crate is used +> only for the hyper types it re-exports in some unit-test helpers; it is not +> run as a proxy. Treat MITM-proxy passages that follow as background context +> rather than a description of the current implementation. + To achieve a hermetic and comprehensive E2E testing environment for `vk`, this guide employs a carefully selected "testing triad" of Rust crates. Each component serves a distinct and complementary purpose, working in concert to @@ -88,16 +100,17 @@ provide a holistic solution. for success or failure and inspecting the contents of the standard error (`stderr`) stream for user-facing error messages.[^8] -- `third-wheel`: This crate provides the critical network isolation layer. It - is a Man-in-the-Middle (MITM) proxy, written in Rust, that can be embedded - directly within the test harness.[^11] Its role is to intercept all outgoing - HTTP requests that - - `vk` attempts to make to the GitHub GraphQL API. Instead of allowing these - requests to reach the internet, `third-wheel` captures them and returns - controlled, predefined responses from local fixture files. This makes the - tests completely independent of the network and ensures that the API's - behaviour is deterministic for every test run. +- `third-wheel`: In the implemented harness this crate is not run as a proxy. + It is a Man-in-the-Middle (MITM) proxy, written in Rust,[^11] but the tests + use only the hyper types it re-exports in some unit-test helpers. Network + isolation is instead achieved by running plain hyper loopback stub servers + (see `tests/utils/mod.rs`) and pointing `vk` at them via the + `GITHUB_GRAPHQL_URL` and `GITHUB_API_URL` environment variables. Rather than + intercepting traffic, these stub servers receive the binary's requests + directly and return controlled, predefined responses. This makes the tests + completely independent of the network and ensures that the API's behaviour is + deterministic for every test run. The MITM-proxy descriptions that follow are + retained as background on the original design. - `insta`: This crate is the output verifier, specialized for snapshot testing. Given that `vk` produces complex, styled terminal output via `termimad`, @@ -111,8 +124,8 @@ provide a holistic solution. approach is vastly superior to manual string assertions for validating rich UIs.[^14] -Together, these three tools form a powerful and cohesive system. `assert_cmd` -drives the application, `third-wheel` controls its external environment, and +Together, these tools form a powerful and cohesive system. `assert_cmd` drives +the application, loopback stub servers control its external environment, and `insta` verifies its final output. This architecture enables the creation of a test suite that is robust, maintainable, and provides the highest degree of confidence in the correctness of the `vk` CLI. @@ -259,34 +272,51 @@ this test provides high confidence that: With this foundation in place, the next step is to introduce the complexity of API mocking. -## Deterministic API Behaviour via Mocking with third-wheel +## Deterministic API behaviour via loopback stub servers + +> **Note:** The implemented harness uses loopback stub servers, not a MITM +> proxy. This section preserves the original MITM-proxy design as background; +> the stub-server approach that the tests actually use is described at the end +> of the section and in `tests/utils/mod.rs`. To create a truly hermetic test suite for a network-dependent application like `vk`, it is imperative to isolate it from the actual network. Making live calls to the GitHub API during tests is untenable; it would make the tests slow, flaky (dependent on network conditions and API availability), and would require valid authentication tokens, posing a security risk in CI environments. The -solution is to mock the API. +solution is to serve mock responses locally. -### The Role of a Man-in-the-Middle (MITM) Proxy in Testing +### Background: the role of a Man-in-the-Middle (MITM) proxy in testing + +The following describes the aspirational MITM-proxy design and is retained as +background rather than a description of the implemented harness. While one could attempt to mock the `GraphQLClient` struct within `vk`'s source code, this approach has significant drawbacks for E2E testing. It would require modifying the application code specifically for testing (e.g., with `#[cfg(test)]` attributes), which moves away from true black-box testing. -A superior approach is to use a Man-in-the-Middle (MITM) proxy. This technique -involves placing a server *between* the application under test and the real API +One design uses a Man-in-the-Middle (MITM) proxy. This technique involves +placing a server *between* the application under test and the real API endpoint. This proxy transparently intercepts all outgoing network traffic. For testing, this allows us to capture requests intended for `api.github.com` and return a controlled, deterministic response without the request ever leaving the local machine. This method requires zero changes to the `vk` source code, preserving the integrity of the black-box testing model. -The `third-wheel` crate is ideal for this purpose because it is a lightweight -MITM proxy written in Rust.[^11] This allows it to be embedded and controlled -programmatically from within the test code itself, eliminating the complexity -of managing a separate, external proxy process.[^11] +The `third-wheel` crate was originally chosen for this purpose because it is a +lightweight MITM proxy written in Rust.[^11] + +### What the implemented harness does instead + +Rather than proxying traffic, the tests point `vk` directly at a local stub +server. The helpers in `tests/utils/mod.rs` (`start_mitm` and +`start_mitm_capture`, whose names are historical) bind a plain hyper server to +a loopback port and dispatch each request to a shared response handler. The +`vk_cmd` helper then sets the `GITHUB_GRAPHQL_URL` and `GITHUB_API_URL` +environment variables so the binary sends its requests to that stub server. No +proxying or TLS interception occurs, and `third-wheel` is present only for the +hyper types it re-exports in some unit-test helpers. ### Step-by-Step: Embedding the third-wheel Mock Server diff --git a/graphql/README.md b/graphql/README.md new file mode 100644 index 00000000..0829c001 --- /dev/null +++ b/graphql/README.md @@ -0,0 +1,27 @@ +# GraphQL schema and query documents + +This directory holds the vendored GitHub GraphQL schema and the query documents +that `graphql_client` codegen validates against it at compile time (see +[ADR 001](../docs/adr-001-github-api-client-modernisation.md)). + +## Contents + +- `schema.docs.graphql` — GitHub's published public schema (free, pro, + and team plans). This is third-party generated data, not project source; do + not edit it by hand. +- `*.graphql` — one document per operation group. Each document is named + after the operation(s) it contains and is referenced by a + `#[derive(GraphQLQuery)]` item in `src/`. + +## Refreshing the schema + +Download the current published schema and re-run the test suite; any query the +new schema no longer satisfies fails the build: + + curl -L https://docs.github.com/public/fpt/schema.docs.graphql \ + -o graphql/schema.docs.graphql + make lint test + +Record the refresh (date and reason) in the commit message. GitHub evolves the +schema additively, so refreshes are expected to be safe; a build failure after +a refresh means GitHub removed or renamed something a query relies on. diff --git a/graphql/issue.graphql b/graphql/issue.graphql new file mode 100644 index 00000000..6f84fcbe --- /dev/null +++ b/graphql/issue.graphql @@ -0,0 +1,8 @@ +query IssueQuery($owner: String!, $name: String!, $number: Int!) { + repository(owner: $owner, name: $name) { + issue(number: $number) { + title + body + } + } +} diff --git a/graphql/pr_for_branch.graphql b/graphql/pr_for_branch.graphql new file mode 100644 index 00000000..18d31e68 --- /dev/null +++ b/graphql/pr_for_branch.graphql @@ -0,0 +1,15 @@ +query PrForBranchQuery($owner: String!, $name: String!, $headRef: String!) { + repository(owner: $owner, name: $name) { + pullRequests(headRefName: $headRef, first: 10, states: [OPEN, MERGED]) { + nodes { + number + headRepository { + owner { + __typename + login + } + } + } + } + } +} diff --git a/graphql/resolve.graphql b/graphql/resolve.graphql new file mode 100644 index 00000000..598ef285 --- /dev/null +++ b/graphql/resolve.graphql @@ -0,0 +1,26 @@ +query ThreadForCommentQuery($owner: String!, $name: String!, $number: Int!, $after: String) { + repository(owner: $owner, name: $name) { + pullRequest(number: $number) { + reviewThreads(first: 100, after: $after) { + pageInfo { + endCursor + hasNextPage + } + nodes { + id + comments(first: 100) { + nodes { + fullDatabaseId + } + } + } + } + } + } +} + +mutation ResolveReviewThreadMutation($id: ID!) { + resolveReviewThread(input: { threadId: $id }) { + clientMutationId + } +} diff --git a/graphql/review_threads.graphql b/graphql/review_threads.graphql new file mode 100644 index 00000000..cb14324a --- /dev/null +++ b/graphql/review_threads.graphql @@ -0,0 +1,61 @@ +query ThreadsQuery($owner: String!, $name: String!, $number: Int!, $cursor: String) { + repository(owner: $owner, name: $name) { + pullRequest(number: $number) { + reviewThreads(first: 100, after: $cursor) { + nodes { + id + isResolved + isOutdated + comments(first: 100) { + nodes { + body + diffHunk + originalPosition + position + path + url + author { + __typename + login + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + } +} + +query CommentQuery($id: ID!, $cursor: String) { + node(id: $id) { + __typename + ... on PullRequestReviewThread { + comments(first: 100, after: $cursor) { + nodes { + body + diffHunk + originalPosition + position + path + url + author { + __typename + login + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + } +} diff --git a/graphql/reviews.graphql b/graphql/reviews.graphql new file mode 100644 index 00000000..9e416662 --- /dev/null +++ b/graphql/reviews.graphql @@ -0,0 +1,21 @@ +query ReviewsQuery($owner: String!, $name: String!, $number: Int!, $cursor: String) { + repository(owner: $owner, name: $name) { + pullRequest(number: $number) { + reviews(first: 100, after: $cursor) { + nodes { + body + state + submittedAt + author { + __typename + login + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + } +} diff --git a/graphql/schema.docs.graphql b/graphql/schema.docs.graphql new file mode 100644 index 00000000..1302ecf1 --- /dev/null +++ b/graphql/schema.docs.graphql @@ -0,0 +1,72911 @@ +""" +Marks an element of a GraphQL schema as only available via a preview header +""" +directive @preview( + """ + The identifier of the API preview that toggles this field. + """ + toggledBy: String! +) on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION + +""" +Defines what type of global IDs are accepted for a mutation argument of type ID. +""" +directive @possibleTypes( + """ + Abstract type of accepted global ID + """ + abstractType: String + + """ + Accepted types of global IDs. + """ + concreteTypes: [String!]! +) on INPUT_FIELD_DEFINITION + +""" +Assigns a documentation category for docs.github.com, aligned with REST API reference sections. +""" +directive @docsCategory( + """ + The category slug (e.g. "issues", "pulls", "repos"). + """ + name: String! +) on ENUM | FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | UNION + +""" +Autogenerated input type of AbortQueuedMigrations +""" +input AbortQueuedMigrationsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the organization that is running the migrations. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of AbortQueuedMigrations. +""" +type AbortQueuedMigrationsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Did the operation succeed? + """ + success: Boolean +} + +""" +Autogenerated input type of AbortRepositoryMigration +""" +input AbortRepositoryMigrationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the migration to be aborted. + """ + migrationId: ID! @possibleTypes(concreteTypes: ["RepositoryMigration"]) +} + +""" +Autogenerated return type of AbortRepositoryMigration. +""" +type AbortRepositoryMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Did the operation succeed? + """ + success: Boolean +} + +""" +Autogenerated input type of AcceptEnterpriseAdministratorInvitation +""" +input AcceptEnterpriseAdministratorInvitationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the invitation being accepted + """ + invitationId: ID! @possibleTypes(concreteTypes: ["EnterpriseAdministratorInvitation"]) +} + +""" +Autogenerated return type of AcceptEnterpriseAdministratorInvitation. +""" +type AcceptEnterpriseAdministratorInvitationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The invitation that was accepted. + """ + invitation: EnterpriseAdministratorInvitation + + """ + A message confirming the result of accepting an administrator invitation. + """ + message: String +} + +""" +Autogenerated input type of AcceptEnterpriseMemberInvitation +""" +input AcceptEnterpriseMemberInvitationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the invitation being accepted + """ + invitationId: ID! @possibleTypes(concreteTypes: ["EnterpriseMemberInvitation"]) +} + +""" +Autogenerated return type of AcceptEnterpriseMemberInvitation. +""" +type AcceptEnterpriseMemberInvitationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The invitation that was accepted. + """ + invitation: EnterpriseMemberInvitation + + """ + A message confirming the result of accepting an unaffiliated member invitation. + """ + message: String +} + +""" +Autogenerated input type of AcceptTopicSuggestion +""" +input AcceptTopicSuggestionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the suggested topic. + + **Upcoming Change on 2024-04-01 UTC** + **Description:** `name` will be removed. + **Reason:** Suggested topics are no longer supported + """ + name: String + + """ + The Node ID of the repository. + + **Upcoming Change on 2024-04-01 UTC** + **Description:** `repositoryId` will be removed. + **Reason:** Suggested topics are no longer supported + """ + repositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of AcceptTopicSuggestion. +""" +type AcceptTopicSuggestionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The accepted topic. + """ + topic: Topic @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") +} + +""" +Autogenerated input type of AccessUserNamespaceRepository +""" +input AccessUserNamespaceRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise owning the user namespace repository. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the user namespace repository to access. + """ + repositoryId: ID! +} + +""" +Autogenerated return type of AccessUserNamespaceRepository. +""" +type AccessUserNamespaceRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The time that repository access expires at + """ + expiresAt: DateTime + + """ + The repository that is temporarily accessible. + """ + repository: Repository +} + +""" +Represents an object which can take actions on GitHub. Typically a User or Bot. +""" +interface Actor @docsCategory(name: "users") { + """ + A URL pointing to the actor's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The username of the actor. + """ + login: String! + + """ + The HTTP path for this actor. + """ + resourcePath: URI! + + """ + The HTTP URL for this actor. + """ + url: URI! +} + +""" +The connection type for Actor. +""" +type ActorConnection { + """ + A list of edges. + """ + edges: [ActorEdge] + + """ + A list of nodes. + """ + nodes: [Actor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ActorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Actor +} + +""" +Location information for an actor +""" +type ActorLocation @docsCategory(name: "users") { + """ + City + """ + city: String + + """ + Country name + """ + country: String + + """ + Country code + """ + countryCode: String + + """ + Region name + """ + region: String + + """ + Region or state code + """ + regionCode: String +} + +""" +The actor's type. +""" +enum ActorType @docsCategory(name: "users") { + """ + Indicates a team actor. + """ + TEAM + + """ + Indicates a user actor. + """ + USER +} + +""" +Autogenerated input type of AddAssigneesToAssignable +""" +input AddAssigneesToAssignableInput { + """ + Configuration for assigning Copilot to this issue. + """ + agentAssignment: AgentAssignmentInput + + """ + The id of the assignable object to add assignees to. + """ + assignableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Assignable") + + """ + The ids of actors (users or bots) to add as assignees. Mutually exclusive with `assignees`. + """ + assigneeIds: [ID!] + @possibleTypes( + concreteTypes: ["Bot", "EnterpriseUserAccount", "Mannequin", "Organization", "User"] + abstractType: "Actor" + ) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated return type of AddAssigneesToAssignable. +""" +type AddAssigneesToAssignablePayload { + """ + The item that was assigned. + """ + assignable: Assignable + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of AddBlockedBy +""" +input AddBlockedByInput { + """ + The ID of the issue that blocks the given issue. + """ + blockingIssueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue to be blocked. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of AddBlockedBy. +""" +type AddBlockedByPayload { + """ + The issue that is blocking the given issue. + """ + blockingIssue: Issue + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that is blocked. + """ + issue: Issue +} + +""" +Autogenerated input type of AddComment +""" +input AddCommentInput { + """ + The contents of the comment. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the subject to modify. + """ + subjectId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest") +} + +""" +Autogenerated return type of AddComment. +""" +type AddCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The edge from the subject's comment connection. + """ + commentEdge: IssueCommentEdge + + """ + The subject + """ + subject: Node + + """ + The edge from the subject's timeline connection. + """ + timelineEdge: IssueTimelineItemEdge +} + +""" +Autogenerated input type of AddDiscussionComment +""" +input AddDiscussionCommentInput { + """ + The contents of the comment. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion to comment on. + """ + discussionId: ID! @possibleTypes(concreteTypes: ["Discussion"]) + + """ + The Node ID of the discussion comment within this discussion to reply to. + """ + replyToId: ID @possibleTypes(concreteTypes: ["DiscussionComment"]) +} + +""" +Autogenerated return type of AddDiscussionComment. +""" +type AddDiscussionCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created discussion comment. + """ + comment: DiscussionComment +} + +""" +Autogenerated input type of AddDiscussionPollVote +""" +input AddDiscussionPollVoteInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion poll option to vote for. + """ + pollOptionId: ID! @possibleTypes(concreteTypes: ["DiscussionPollOption"]) +} + +""" +Autogenerated return type of AddDiscussionPollVote. +""" +type AddDiscussionPollVotePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The poll option that a vote was added to. + """ + pollOption: DiscussionPollOption +} + +""" +Autogenerated input type of AddEnterpriseOrganizationMember +""" +input AddEnterpriseOrganizationMemberInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise which owns the organization. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the organization the users will be added to. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The role to assign the users in the organization + """ + role: OrganizationMemberRole + + """ + The IDs of the enterprise members to add. + """ + userIds: [ID!]! +} + +""" +Autogenerated return type of AddEnterpriseOrganizationMember. +""" +type AddEnterpriseOrganizationMemberPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The users who were added to the organization. + """ + users: [User!] +} + +""" +Autogenerated input type of AddEnterpriseSupportEntitlement +""" +input AddEnterpriseSupportEntitlementInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Enterprise which the admin belongs to. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of a member who will receive the support entitlement. + """ + login: String! +} + +""" +Autogenerated return type of AddEnterpriseSupportEntitlement. +""" +type AddEnterpriseSupportEntitlementPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of adding the support entitlement. + """ + message: String +} + +""" +Autogenerated input type of AddLabelsToLabelable +""" +input AddLabelsToLabelableInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ids of the labels to add. + """ + labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"]) + + """ + The id of the labelable object to add labels to. + """ + labelableId: ID! @possibleTypes(concreteTypes: ["Discussion", "Issue", "PullRequest"], abstractType: "Labelable") +} + +""" +Autogenerated return type of AddLabelsToLabelable. +""" +type AddLabelsToLabelablePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item that was labeled. + """ + labelable: Labelable +} + +""" +Autogenerated input type of AddProjectCard +""" +input AddProjectCardInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The content of the card. Must be a member of the ProjectCardItem union + """ + contentId: ID @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "ProjectCardItem") + + """ + The note on the card. + """ + note: String + + """ + The Node ID of the ProjectColumn. + """ + projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"]) +} + +""" +Autogenerated return type of AddProjectCard. +""" +type AddProjectCardPayload { + """ + The edge from the ProjectColumn's card connection. + """ + cardEdge: ProjectCardEdge + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ProjectColumn + """ + projectColumn: ProjectColumn +} + +""" +Autogenerated input type of AddProjectColumn +""" +input AddProjectColumnInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the column. + """ + name: String! + + """ + The Node ID of the project. + """ + projectId: ID! @possibleTypes(concreteTypes: ["Project"]) +} + +""" +Autogenerated return type of AddProjectColumn. +""" +type AddProjectColumnPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The edge from the project's column connection. + """ + columnEdge: ProjectColumnEdge + + """ + The project + """ + project: Project +} + +""" +Autogenerated input type of AddProjectV2DraftIssue +""" +input AddProjectV2DraftIssueInput { + """ + The IDs of the assignees of the draft issue. + """ + assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"]) + + """ + The body of the draft issue. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to add the draft issue to. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The title of the draft issue. A project item can also be created by providing + the URL of an Issue or Pull Request if you have access. + """ + title: String! +} + +""" +Autogenerated return type of AddProjectV2DraftIssue. +""" +type AddProjectV2DraftIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The draft issue added to the project. + """ + projectItem: ProjectV2Item +} + +""" +Autogenerated input type of AddProjectV2ItemById +""" +input AddProjectV2ItemByIdInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the Issue or Pull Request to add. + """ + contentId: ID! + @possibleTypes(concreteTypes: ["DraftIssue", "Issue", "PullRequest"], abstractType: "ProjectV2ItemContent") + + """ + The ID of the Project to add the item to. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of AddProjectV2ItemById. +""" +type AddProjectV2ItemByIdPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item added to the project. + """ + item: ProjectV2Item +} + +""" +Autogenerated input type of AddPullRequestCreationCapBypassUsers +""" +input AddPullRequestCreationCapBypassUsersInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The Node IDs of the users to add to the bypass list. + """ + userIds: [ID!]! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of AddPullRequestCreationCapBypassUsers. +""" +type AddPullRequestCreationCapBypassUsersPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository with the updated bypass list. + """ + repository: Repository +} + +""" +Autogenerated input type of AddPullRequestReviewComment +""" +input AddPullRequestReviewCommentInput { + """ + The text of the comment. This field is required + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `body` will be removed. use addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The SHA of the commit to comment on. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `commitOID` will be removed. use addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + commitOID: GitObjectID + + """ + The comment id to reply to. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `inReplyTo` will be removed. use addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + inReplyTo: ID @possibleTypes(concreteTypes: ["PullRequestReviewComment"]) + + """ + The relative path of the file to comment on. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `path` will be removed. use addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + path: String + + """ + The line index in the diff to comment on. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `position` will be removed. use addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + position: Int + + """ + The node ID of the pull request reviewing + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `pullRequestId` will be removed. use + addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The Node ID of the review to modify. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `pullRequestReviewId` will be removed. use + addPullRequestReviewThread or addPullRequestReviewThreadReply instead + **Reason:** We are deprecating the addPullRequestReviewComment mutation + """ + pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"]) +} + +""" +Autogenerated return type of AddPullRequestReviewComment. +""" +type AddPullRequestReviewCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created comment. + """ + comment: PullRequestReviewComment + + """ + The edge from the review's comment connection. + """ + commentEdge: PullRequestReviewCommentEdge +} + +""" +Autogenerated input type of AddPullRequestReview +""" +input AddPullRequestReviewInput { + """ + The contents of the review body comment. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The review line comments. + + **Upcoming Change on 2023-10-01 UTC** + **Description:** `comments` will be removed. use the `threads` argument instead + **Reason:** We are deprecating comment fields that use diff-relative positioning + """ + comments: [DraftPullRequestReviewComment] + + """ + The commit OID the review pertains to. + """ + commitOID: GitObjectID + + """ + The event to perform on the pull request review. + """ + event: PullRequestReviewEvent + + """ + The Node ID of the pull request to modify. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The review line comment threads. + """ + threads: [DraftPullRequestReviewThread] +} + +""" +Autogenerated return type of AddPullRequestReview. +""" +type AddPullRequestReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created pull request review. + """ + pullRequestReview: PullRequestReview + + """ + The edge from the pull request's review connection. + """ + reviewEdge: PullRequestReviewEdge +} + +""" +Autogenerated input type of AddPullRequestReviewThread +""" +input AddPullRequestReviewThreadInput { + """ + Body of the thread's first comment. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The line of the blob to which the thread refers, required for line-level + threads. The end of the line range for multi-line comments. + """ + line: Int + + """ + Path to the file being commented on. + """ + path: String + + """ + The node ID of the pull request reviewing + """ + pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The Node ID of the review to modify. + """ + pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"]) + + """ + The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range. + """ + side: DiffSide = RIGHT + + """ + The first line of the range to which the comment refers. + """ + startLine: Int + + """ + The side of the diff on which the start line resides. + """ + startSide: DiffSide = RIGHT + + """ + The level at which the comments in the corresponding thread are targeted, can be a diff line or a file + """ + subjectType: PullRequestReviewThreadSubjectType = LINE +} + +""" +Autogenerated return type of AddPullRequestReviewThread. +""" +type AddPullRequestReviewThreadPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created thread. + """ + thread: PullRequestReviewThread +} + +""" +Autogenerated input type of AddPullRequestReviewThreadReply +""" +input AddPullRequestReviewThreadReplyInput { + """ + The text of the reply. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pending review to which the reply will belong. + """ + pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"]) + + """ + The Node ID of the thread to which this reply is being written. + """ + pullRequestReviewThreadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"]) +} + +""" +Autogenerated return type of AddPullRequestReviewThreadReply. +""" +type AddPullRequestReviewThreadReplyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created reply. + """ + comment: PullRequestReviewComment +} + +""" +Autogenerated input type of AddReaction +""" +input AddReactionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the emoji to react with. + """ + content: ReactionContent! + + """ + The Node ID of the subject to modify. + """ + subjectId: ID! + @possibleTypes( + concreteTypes: [ + "CommitComment" + "Discussion" + "DiscussionComment" + "Issue" + "IssueComment" + "PullRequest" + "PullRequestReview" + "PullRequestReviewComment" + "Release" + ] + abstractType: "Reactable" + ) +} + +""" +Autogenerated return type of AddReaction. +""" +type AddReactionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The reaction object. + """ + reaction: Reaction + + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + + """ + The reactable subject. + """ + subject: Reactable +} + +""" +Autogenerated input type of AddStar +""" +input AddStarInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Starrable ID to star. + """ + starrableId: ID! @possibleTypes(concreteTypes: ["Gist", "Repository", "Topic"], abstractType: "Starrable") +} + +""" +Autogenerated return type of AddStar. +""" +type AddStarPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The starrable. + """ + starrable: Starrable +} + +""" +Autogenerated input type of AddSubIssue +""" +input AddSubIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + Option to replace parent issue if one already exists + """ + replaceParent: Boolean + + """ + The id of the sub-issue. + """ + subIssueId: ID @possibleTypes(concreteTypes: ["Issue"]) + + """ + The url of the sub-issue. + """ + subIssueUrl: String +} + +""" +Autogenerated return type of AddSubIssue. +""" +type AddSubIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The parent issue that the sub-issue was added to. + """ + issue: Issue + + """ + The sub-issue of the parent. + """ + subIssue: Issue +} + +""" +Autogenerated input type of AddUpvote +""" +input AddUpvoteInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion or comment to upvote. + """ + subjectId: ID! @possibleTypes(concreteTypes: ["Discussion", "DiscussionComment"], abstractType: "Votable") +} + +""" +Autogenerated return type of AddUpvote. +""" +type AddUpvotePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The votable subject. + """ + subject: Votable +} + +""" +Autogenerated input type of AddVerifiableDomain +""" +input AddVerifiableDomainInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The URL of the domain + """ + domain: URI! + + """ + The ID of the owner to add the domain to + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Enterprise", "Organization"], abstractType: "VerifiableDomainOwner") +} + +""" +Autogenerated return type of AddVerifiableDomain. +""" +type AddVerifiableDomainPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The verifiable domain that was added. + """ + domain: VerifiableDomain +} + +""" +Represents an 'added_to_merge_queue' event on a given pull request. +""" +type AddedToMergeQueueEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who added this Pull Request to the merge queue + """ + enqueuer: User + + """ + The Node ID of the AddedToMergeQueueEvent object + """ + id: ID! + + """ + The merge queue where this pull request was added to. + """ + mergeQueue: MergeQueue + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest +} + +""" +Represents a 'added_to_project' event on a given issue or pull request. +""" +type AddedToProjectEvent implements Node @docsCategory(name: "projects-classic") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the AddedToProjectEvent object + """ + id: ID! + + """ + Project referenced by event. + """ + project: Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Project card referenced by this project event. + """ + projectCard: ProjectCard + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Column name referenced by this project event. + """ + projectColumnName: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +Represents a 'added_to_project_v2' event on a given issue or pull request. +""" +type AddedToProjectV2Event implements Node & ProjectV2Event @docsCategory(name: "projects") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the AddedToProjectV2Event object + """ + id: ID! + + """ + Project referenced by event. + """ + project: ProjectV2 + + """ + Did this event result from workflow automation? + """ + wasAutomated: Boolean! +} + +""" +Represents configuration for assigning Copilot to an issue (public variant) +""" +input AgentAssignmentInput @docsCategory(name: "users") { + """ + The base ref/branch for the repository. Defaults to the default branch if not provided. + """ + baseRef: String + + """ + Custom agent for Copilot. + """ + customAgent: String + + """ + Custom instructions for Copilot. + """ + customInstructions: String + + """ + The Node ID of the target repository where Copilot should work. Defaults to the issue's repository if not provided. + """ + targetRepositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Copilot Agentic fields in context of the current viewer. +""" +interface Agentic @docsCategory(name: "copilot") { + """ + Channel value for subscribing to live updates for session creations. + """ + viewerCopilotAgentCreatesChannel: String + + """ + Channel value for subscribing to live updates for session log updates. + """ + viewerCopilotAgentLogUpdatesChannel: String + + """ + Channel value for subscribing to live updates for task updates. + """ + viewerCopilotAgentTaskUpdatesChannel: String + + """ + Channel value for subscribing to live updates for session updates. + """ + viewerCopilotAgentUpdatesChannel: String +} + +""" +An announcement banner for an enterprise or organization. +""" +type AnnouncementBanner @docsCategory(name: "enterprise-admin") { + """ + The date the announcement was created + """ + createdAt: DateTime! + + """ + The expiration date of the announcement, if any + """ + expiresAt: DateTime + + """ + Whether the announcement can be dismissed by the user + """ + isUserDismissible: Boolean! + + """ + The text of the announcement + """ + message: String +} + +""" +A GitHub App. +""" +type App implements Node @docsCategory(name: "apps") { + """ + The client ID of the app. + """ + clientId: String + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The description of the app. + """ + description: String + + """ + The Node ID of the App object + """ + id: ID! + + """ + The IP addresses of the app. + """ + ipAllowListEntries( + """ + 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 + + """ + Ordering options for IP allow list entries returned. + """ + orderBy: IpAllowListEntryOrder = {field: ALLOW_LIST_VALUE, direction: ASC} + ): IpAllowListEntryConnection! + + """ + The hex color code, without the leading '#', for the logo background. + """ + logoBackgroundColor: String! + + """ + A URL pointing to the app's logo. + """ + logoUrl( + """ + The size of the resulting image. + """ + size: Int + ): URI! + + """ + The name of the app. + """ + name: String! + + """ + A slug based on the name of the app for use in URLs. + """ + slug: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The URL to the app's homepage. + """ + url: URI! +} + +""" +Autogenerated input type of ApproveDeployments +""" +input ApproveDeploymentsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Optional comment for approving deployments + """ + comment: String = "" + + """ + The ids of environments to reject deployments + """ + environmentIds: [ID!]! + + """ + The node ID of the workflow run containing the pending deployments. + """ + workflowRunId: ID! @possibleTypes(concreteTypes: ["WorkflowRun"]) +} + +""" +Autogenerated return type of ApproveDeployments. +""" +type ApproveDeploymentsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The affected deployments. + """ + deployments: [Deployment!] +} + +""" +Autogenerated input type of ApproveVerifiableDomain +""" +input ApproveVerifiableDomainInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the verifiable domain to approve. + """ + id: ID! @possibleTypes(concreteTypes: ["VerifiableDomain"]) +} + +""" +Autogenerated return type of ApproveVerifiableDomain. +""" +type ApproveVerifiableDomainPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The verifiable domain that was approved. + """ + domain: VerifiableDomain +} + +""" +Autogenerated input type of ArchiveProjectV2Item +""" +input ArchiveProjectV2ItemInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the ProjectV2Item to archive. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project to archive the item from. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of ArchiveProjectV2Item. +""" +type ArchiveProjectV2ItemPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item archived from the project. + """ + item: ProjectV2Item +} + +""" +Autogenerated input type of ArchivePullRequest +""" +input ArchivePullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to archive. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of ArchivePullRequest. +""" +type ArchivePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was archived. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of ArchiveRepository +""" +input ArchiveRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the repository to mark as archived. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of ArchiveRepository. +""" +type ArchiveRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository that was marked as archived. + """ + repository: Repository +} + +""" +An object that can have users assigned to it. +""" +interface Assignable @docsCategory(name: "issues") { + """ + A list of actors assigned to this object. + """ + assignedActors( + """ + 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 + ): AssigneeConnection! + + """ + A list of Users assigned to this object. + """ + assignees( + """ + 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 + ): UserConnection! + + """ + A list of suggested actors to assign to this object + """ + suggestedActors( + """ + 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 + + """ + If provided, searches users by login or profile name + """ + query: String + ): AssigneeConnection! +} + +""" +Represents an 'assigned' event on any assignable object. +""" +type AssignedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the assignable associated with the event. + """ + assignable: Assignable! + + """ + Identifies the user or mannequin that was assigned. + """ + assignee: Assignee + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the AssignedEvent object + """ + id: ID! + + """ + Identifies the user who was assigned. + """ + user: User + @deprecated(reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC.") +} + +""" +Types that can be assigned to issues. +""" +union Assignee @docsCategory(name: "issues") = Bot | Mannequin | Organization | User + +""" +The connection type for Assignee. +""" +type AssigneeConnection { + """ + A list of edges. + """ + edges: [AssigneeEdge] + + """ + A list of nodes. + """ + nodes: [Assignee] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type AssigneeEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Assignee +} + +""" +An entry in the audit log. +""" +interface AuditEntry @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Types that can initiate an audit log event. +""" +union AuditEntryActor @docsCategory(name: "enterprise-admin") = Bot | Organization | User + +""" +Ordering options for Audit Log connections. +""" +input AuditLogOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection + + """ + The field to order Audit Logs by. + """ + field: AuditLogOrderField +} + +""" +Properties by which Audit Log connections can be ordered. +""" +enum AuditLogOrderField @docsCategory(name: "enterprise-admin") { + """ + Order audit log entries by timestamp + """ + CREATED_AT +} + +""" +Represents a 'auto_merge_disabled' event on a given pull request. +""" +type AutoMergeDisabledEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who disabled auto-merge for this Pull Request + """ + disabler: User + + """ + The Node ID of the AutoMergeDisabledEvent object + """ + id: ID! + + """ + PullRequest referenced by event + """ + pullRequest: PullRequest + + """ + The reason auto-merge was disabled + """ + reason: String + + """ + The reason_code relating to why auto-merge was disabled + """ + reasonCode: String +} + +""" +Represents a 'auto_merge_enabled' event on a given pull request. +""" +type AutoMergeEnabledEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who enabled auto-merge for this Pull Request + """ + enabler: User + + """ + The Node ID of the AutoMergeEnabledEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest +} + +""" +Represents an auto-merge request for a pull request +""" +type AutoMergeRequest @docsCategory(name: "pulls") { + """ + The email address of the author of this auto-merge request. + """ + authorEmail: String + + """ + The commit message of the auto-merge request. If a merge queue is required by + the base branch, this value will be set by the merge queue when merging. + """ + commitBody: String + + """ + The commit title of the auto-merge request. If a merge queue is required by + the base branch, this value will be set by the merge queue when merging + """ + commitHeadline: String + + """ + When was this auto-merge request was enabled. + """ + enabledAt: DateTime + + """ + The actor who created the auto-merge request. + """ + enabledBy: Actor + + """ + The merge method of the auto-merge request. If a merge queue is required by + the base branch, this value will be set by the merge queue when merging. + """ + mergeMethod: PullRequestMergeMethod! + + """ + The pull request that this auto-merge request is set against. + """ + pullRequest: PullRequest! +} + +""" +Represents a 'auto_rebase_enabled' event on a given pull request. +""" +type AutoRebaseEnabledEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who enabled auto-merge (rebase) for this Pull Request + """ + enabler: User + + """ + The Node ID of the AutoRebaseEnabledEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest +} + +""" +Represents a 'auto_squash_enabled' event on a given pull request. +""" +type AutoSquashEnabledEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who enabled auto-merge (squash) for this Pull Request + """ + enabler: User + + """ + The Node ID of the AutoSquashEnabledEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest +} + +""" +Represents a 'automatic_base_change_failed' event on a given pull request. +""" +type AutomaticBaseChangeFailedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the AutomaticBaseChangeFailedEvent object + """ + id: ID! + + """ + The new base for this PR + """ + newBase: String! + + """ + The old base for this PR + """ + oldBase: String! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +Represents a 'automatic_base_change_succeeded' event on a given pull request. +""" +type AutomaticBaseChangeSucceededEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the AutomaticBaseChangeSucceededEvent object + """ + id: ID! + + """ + The new base for this PR + """ + newBase: String! + + """ + The old base for this PR + """ + oldBase: String! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +A (potentially binary) string encoded using base64. +""" +scalar Base64String + +""" +Represents a 'base_ref_changed' event on a given issue or pull request. +""" +type BaseRefChangedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the name of the base ref for the pull request after it was changed. + """ + currentRefName: String! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the BaseRefChangedEvent object + """ + id: ID! + + """ + Identifies the name of the base ref for the pull request before it was changed. + """ + previousRefName: String! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +Represents a 'base_ref_deleted' event on a given pull request. +""" +type BaseRefDeletedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the name of the Ref associated with the `base_ref_deleted` event. + """ + baseRefName: String + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BaseRefDeletedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest +} + +""" +Represents a 'base_ref_force_pushed' event on a given pull request. +""" +type BaseRefForcePushedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the after commit SHA for the 'base_ref_force_pushed' event. + """ + afterCommit: Commit + + """ + Identifies the before commit SHA for the 'base_ref_force_pushed' event. + """ + beforeCommit: Commit + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BaseRefForcePushedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + Identifies the fully qualified ref name for the 'base_ref_force_pushed' event. + """ + ref: Ref +} + +""" +Represents non-fractional signed whole numeric values. Since the value may +exceed the size of a 32-bit integer, it's encoded as a string. +""" +scalar BigInt + +""" +Represents a Git blame. +""" +type Blame @docsCategory(name: "git") { + """ + The list of ranges from a Git blame. + """ + ranges: [BlameRange!]! +} + +""" +Represents a range of information from a Git blame. +""" +type BlameRange @docsCategory(name: "git") { + """ + Identifies the recency of the change, from 1 (new) to 10 (old). This is + calculated as a 2-quantile and determines the length of distance between the + median age of all the changes in the file and the recency of the current + range's change. + """ + age: Int! + + """ + Identifies the line author + """ + commit: Commit! + + """ + The ending line for the range + """ + endingLine: Int! + + """ + The starting line for the range + """ + startingLine: Int! +} + +""" +Represents a Git blob. +""" +type Blob implements GitObject & Node @docsCategory(name: "git") { + """ + An abbreviated version of the Git object ID + """ + abbreviatedOid: String! + + """ + Byte size of Blob object + """ + byteSize: Int! + + """ + The HTTP path for this Git object + """ + commitResourcePath: URI! + + """ + The HTTP URL for this Git object + """ + commitUrl: URI! + + """ + The Node ID of the Blob object + """ + id: ID! + + """ + Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding. + """ + isBinary: Boolean + + """ + Indicates whether the contents is truncated + """ + isTruncated: Boolean! + + """ + The Git object ID + """ + oid: GitObjectID! + + """ + The Repository the Git object belongs to + """ + repository: Repository! + + """ + UTF8 text data or null if the Blob is binary + """ + text: String +} + +""" +Represents a 'blocked_by_added' event on a given issue. +""" +type BlockedByAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The blocking issue that was added. + """ + blockingIssue: Issue + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BlockedByAddedEvent object + """ + id: ID! +} + +""" +Represents a 'blocked_by_removed' event on a given issue. +""" +type BlockedByRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The blocking issue that was removed. + """ + blockingIssue: Issue + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BlockedByRemovedEvent object + """ + id: ID! +} + +""" +Represents a 'blocking_added' event on a given issue. +""" +type BlockingAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The blocked issue that was added. + """ + blockedIssue: Issue + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BlockingAddedEvent object + """ + id: ID! +} + +""" +Represents a 'blocking_removed' event on a given issue. +""" +type BlockingRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The blocked issue that was removed. + """ + blockedIssue: Issue + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the BlockingRemovedEvent object + """ + id: ID! +} + +""" +A special type of user which takes actions on behalf of GitHub Apps. +""" +type Bot implements Actor & Node & UniformResourceLocatable @docsCategory(name: "apps") { + """ + A URL pointing to the GitHub App's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the Bot object + """ + id: ID! + + """ + The username of the actor. + """ + login: String! + + """ + The HTTP path for this bot + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this bot + """ + url: URI! +} + +""" +Types which can be actors for `BranchActorAllowance` objects. +""" +union BranchActorAllowanceActor @docsCategory(name: "branches") = App | Team | User + +""" +Parameters to be used for the branch_name_pattern rule +""" +type BranchNamePatternParameters @docsCategory(name: "branches") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean! + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Parameters to be used for the branch_name_pattern rule +""" +input BranchNamePatternParametersInput @docsCategory(name: "branches") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +A branch protection rule. +""" +type BranchProtectionRule implements Node @docsCategory(name: "branches") { + """ + Can this branch be deleted. + """ + allowsDeletions: Boolean! + + """ + Are force pushes allowed on this branch. + """ + allowsForcePushes: Boolean! + + """ + Is branch creation a protected operation. + """ + blocksCreations: Boolean! + + """ + A list of conflicts matching branches protection rule and other branch protection rules + """ + branchProtectionRuleConflicts( + """ + 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 + ): BranchProtectionRuleConflictConnection! + + """ + A list of actors able to force push for this branch protection rule. + """ + bypassForcePushAllowances( + """ + 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 + ): BypassForcePushAllowanceConnection! + + """ + A list of actors able to bypass PRs for this branch protection rule. + """ + bypassPullRequestAllowances( + """ + 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 + ): BypassPullRequestAllowanceConnection! + + """ + The actor who created this branch protection rule. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Will new commits pushed to matching branches dismiss pull request review approvals. + """ + dismissesStaleReviews: Boolean! + + """ + The Node ID of the BranchProtectionRule object + """ + id: ID! + + """ + Can admins override branch protection. + """ + isAdminEnforced: Boolean! + + """ + Whether users can pull changes from upstream when the branch is locked. Set to + `true` to allow fork syncing. Set to `false` to prevent fork syncing. + """ + lockAllowsFetchAndMerge: Boolean! + + """ + Whether to set the branch as read-only. If this is true, users will not be able to push to the branch. + """ + lockBranch: Boolean! + + """ + Repository refs that are protected by this rule + """ + matchingRefs( + """ + 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 + + """ + Filters refs with query on name + """ + query: String + ): RefConnection! + + """ + Identifies the protection rule pattern. + """ + pattern: String! + + """ + A list push allowances for this branch protection rule. + """ + pushAllowances( + """ + 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 + ): PushAllowanceConnection! + + """ + The repository associated with this branch protection rule. + """ + repository: Repository + + """ + Whether the most recent push must be approved by someone other than the person who pushed it + """ + requireLastPushApproval: Boolean! + + """ + Number of approving reviews required to update matching branches. + """ + requiredApprovingReviewCount: Int + + """ + List of required deployment environments that must be deployed successfully to update matching branches + """ + requiredDeploymentEnvironments: [String] + + """ + List of required status check contexts that must pass for commits to be accepted to matching branches. + """ + requiredStatusCheckContexts: [String] + + """ + List of required status checks that must pass for commits to be accepted to matching branches. + """ + requiredStatusChecks: [RequiredStatusCheckDescription!] + + """ + Are approving reviews required to update matching branches. + """ + requiresApprovingReviews: Boolean! + + """ + Are reviews from code owners required to update matching branches. + """ + requiresCodeOwnerReviews: Boolean! + + """ + Are commits required to be signed. + """ + requiresCommitSignatures: Boolean! + + """ + Are conversations required to be resolved before merging. + """ + requiresConversationResolution: Boolean! + + """ + Does this branch require deployment to specific environments before merging + """ + requiresDeployments: Boolean! + + """ + Are merge commits prohibited from being pushed to this branch. + """ + requiresLinearHistory: Boolean! + + """ + Are status checks required to update matching branches. + """ + requiresStatusChecks: Boolean! + + """ + Are branches required to be up to date before merging. + """ + requiresStrictStatusChecks: Boolean! + + """ + Is pushing to matching branches restricted. + """ + restrictsPushes: Boolean! + + """ + Is dismissal of pull request reviews restricted. + """ + restrictsReviewDismissals: Boolean! + + """ + A list review dismissal allowances for this branch protection rule. + """ + reviewDismissalAllowances( + """ + 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 + ): ReviewDismissalAllowanceConnection! +} + +""" +A conflict between two branch protection rules. +""" +type BranchProtectionRuleConflict @docsCategory(name: "branches") { + """ + Identifies the branch protection rule. + """ + branchProtectionRule: BranchProtectionRule + + """ + Identifies the conflicting branch protection rule. + """ + conflictingBranchProtectionRule: BranchProtectionRule + + """ + Identifies the branch ref that has conflicting rules + """ + ref: Ref +} + +""" +The connection type for BranchProtectionRuleConflict. +""" +type BranchProtectionRuleConflictConnection { + """ + A list of edges. + """ + edges: [BranchProtectionRuleConflictEdge] + + """ + A list of nodes. + """ + nodes: [BranchProtectionRuleConflict] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type BranchProtectionRuleConflictEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: BranchProtectionRuleConflict +} + +""" +The connection type for BranchProtectionRule. +""" +type BranchProtectionRuleConnection { + """ + A list of edges. + """ + edges: [BranchProtectionRuleEdge] + + """ + A list of nodes. + """ + nodes: [BranchProtectionRule] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type BranchProtectionRuleEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: BranchProtectionRule +} + +""" +Information about a sponsorship to make for a user or organization with a GitHub +Sponsors profile, as part of sponsoring many users or organizations at once. +""" +input BulkSponsorship @docsCategory(name: "sponsors") { + """ + The amount to pay to the sponsorable in US dollars. Valid values: 1-12000. + """ + amount: Int! + + """ + The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. + """ + sponsorableId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsorable") + + """ + The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. + """ + sponsorableLogin: String +} + +""" +Types that can represent a repository ruleset bypass actor. +""" +union BypassActor @docsCategory(name: "repos") = App | EnterpriseTeam | Team | User + +""" +A user, team, or app who has the ability to bypass a force push requirement on a protected branch. +""" +type BypassForcePushAllowance implements Node @docsCategory(name: "branches") { + """ + The actor that can force push. + """ + actor: BranchActorAllowanceActor + + """ + Identifies the branch protection rule associated with the allowed user, team, or app. + """ + branchProtectionRule: BranchProtectionRule + + """ + The Node ID of the BypassForcePushAllowance object + """ + id: ID! +} + +""" +The connection type for BypassForcePushAllowance. +""" +type BypassForcePushAllowanceConnection { + """ + A list of edges. + """ + edges: [BypassForcePushAllowanceEdge] + + """ + A list of nodes. + """ + nodes: [BypassForcePushAllowance] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type BypassForcePushAllowanceEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: BypassForcePushAllowance +} + +""" +A user, team, or app who has the ability to bypass a pull request requirement on a protected branch. +""" +type BypassPullRequestAllowance implements Node @docsCategory(name: "branches") { + """ + The actor that can bypass. + """ + actor: BranchActorAllowanceActor + + """ + Identifies the branch protection rule associated with the allowed user, team, or app. + """ + branchProtectionRule: BranchProtectionRule + + """ + The Node ID of the BypassPullRequestAllowance object + """ + id: ID! +} + +""" +The connection type for BypassPullRequestAllowance. +""" +type BypassPullRequestAllowanceConnection { + """ + A list of edges. + """ + edges: [BypassPullRequestAllowanceEdge] + + """ + A list of nodes. + """ + nodes: [BypassPullRequestAllowance] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type BypassPullRequestAllowanceEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: BypassPullRequestAllowance +} + +""" +The Common Vulnerability Scoring System +""" +type CVSS @docsCategory(name: "security-advisories") { + """ + The CVSS score associated with this advisory + """ + score: Float! + + """ + The CVSS vector string associated with this advisory + """ + vectorString: String +} + +""" +A common weakness enumeration +""" +type CWE implements Node @docsCategory(name: "security-advisories") { + """ + The id of the CWE + """ + cweId: String! + + """ + A detailed description of this CWE + """ + description: String! + + """ + The Node ID of the CWE object + """ + id: ID! + + """ + The name of this CWE + """ + name: String! +} + +""" +The connection type for CWE. +""" +type CWEConnection { + """ + A list of edges. + """ + edges: [CWEEdge] + + """ + A list of nodes. + """ + nodes: [CWE] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CWEEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CWE +} + +""" +Autogenerated input type of CancelEnterpriseAdminInvitation +""" +input CancelEnterpriseAdminInvitationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pending enterprise administrator invitation. + """ + invitationId: ID! @possibleTypes(concreteTypes: ["EnterpriseAdministratorInvitation"]) +} + +""" +Autogenerated return type of CancelEnterpriseAdminInvitation. +""" +type CancelEnterpriseAdminInvitationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The invitation that was canceled. + """ + invitation: EnterpriseAdministratorInvitation + + """ + A message confirming the result of canceling an administrator invitation. + """ + message: String +} + +""" +Autogenerated input type of CancelEnterpriseMemberInvitation +""" +input CancelEnterpriseMemberInvitationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pending enterprise member invitation. + """ + invitationId: ID! @possibleTypes(concreteTypes: ["EnterpriseMemberInvitation"]) +} + +""" +Autogenerated return type of CancelEnterpriseMemberInvitation. +""" +type CancelEnterpriseMemberInvitationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The invitation that was canceled. + """ + invitation: EnterpriseMemberInvitation + + """ + A message confirming the result of canceling an member invitation. + """ + message: String +} + +""" +Autogenerated input type of CancelSponsorship +""" +input CancelSponsorshipInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the user or organization who is acting as the sponsor, paying for + the sponsorship. Required if sponsorLogin is not given. + """ + sponsorId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsor") + + """ + The username of the user or organization who is acting as the sponsor, paying + for the sponsorship. Required if sponsorId is not given. + """ + sponsorLogin: String + + """ + The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. + """ + sponsorableId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsorable") + + """ + The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. + """ + sponsorableLogin: String +} + +""" +Autogenerated return type of CancelSponsorship. +""" +type CancelSponsorshipPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was being used at the time of cancellation. + """ + sponsorsTier: SponsorsTier +} + +""" +Autogenerated input type of ChangeUserStatus +""" +input ChangeUserStatusInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The emoji to represent your status. Can either be a native Unicode emoji or an emoji name with colons, e.g., :grinning:. + """ + emoji: String + + """ + If set, the user status will not be shown after this date. + """ + expiresAt: DateTime + + """ + Whether this status should indicate you are not fully available on GitHub, e.g., you are away. + """ + limitedAvailability: Boolean = false + + """ + A short description of your current status. + """ + message: String + + """ + The ID of the organization whose members will be allowed to see the status. If + omitted, the status will be publicly visible. + """ + organizationId: ID @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of ChangeUserStatus. +""" +type ChangeUserStatusPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Your updated status. + """ + status: UserStatus +} + +""" +A single check annotation. +""" +type CheckAnnotation @docsCategory(name: "checks") { + """ + The annotation's severity level. + """ + annotationLevel: CheckAnnotationLevel + + """ + The path to the file that this annotation was made on. + """ + blobUrl: URI! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2027-01-01 UTC." + ) + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The position of this annotation. + """ + location: CheckAnnotationSpan! + + """ + The annotation's message. + """ + message: String! + + """ + The path that this annotation was made on. + """ + path: String! + + """ + Additional information about the annotation. + """ + rawDetails: String + + """ + The annotation's title + """ + title: String +} + +""" +The connection type for CheckAnnotation. +""" +type CheckAnnotationConnection { + """ + A list of edges. + """ + edges: [CheckAnnotationEdge] + + """ + A list of nodes. + """ + nodes: [CheckAnnotation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Information from a check run analysis to specific lines of code. +""" +input CheckAnnotationData @docsCategory(name: "checks") { + """ + Represents an annotation's information level + """ + annotationLevel: CheckAnnotationLevel! + + """ + The location of the annotation + """ + location: CheckAnnotationRange! + + """ + A short description of the feedback for these lines of code. + """ + message: String! + + """ + The path of the file to add an annotation to. + """ + path: String! + + """ + Details about this annotation. + """ + rawDetails: String + + """ + The title that represents the annotation. + """ + title: String +} + +""" +An edge in a connection. +""" +type CheckAnnotationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CheckAnnotation +} + +""" +Represents an annotation's information level. +""" +enum CheckAnnotationLevel @docsCategory(name: "checks") { + """ + An annotation indicating an inescapable error. + """ + FAILURE + + """ + An annotation indicating some information. + """ + NOTICE + + """ + An annotation indicating an ignorable error. + """ + WARNING +} + +""" +A character position in a check annotation. +""" +type CheckAnnotationPosition @docsCategory(name: "checks") { + """ + Column number (1 indexed). + """ + column: Int + + """ + Line number (1 indexed). + """ + line: Int! +} + +""" +Information from a check run analysis to specific lines of code. +""" +input CheckAnnotationRange @docsCategory(name: "checks") { + """ + The ending column of the range. + """ + endColumn: Int + + """ + The ending line of the range. + """ + endLine: Int! + + """ + The starting column of the range. + """ + startColumn: Int + + """ + The starting line of the range. + """ + startLine: Int! +} + +""" +An inclusive pair of positions for a check annotation. +""" +type CheckAnnotationSpan @docsCategory(name: "checks") { + """ + End position (inclusive). + """ + end: CheckAnnotationPosition! + + """ + Start position (inclusive). + """ + start: CheckAnnotationPosition! +} + +""" +The possible states for a check suite or run conclusion. +""" +enum CheckConclusionState @docsCategory(name: "checks") { + """ + The check suite or run requires action. + """ + ACTION_REQUIRED + + """ + The check suite or run has been cancelled. + """ + CANCELLED + + """ + The check suite or run has failed. + """ + FAILURE + + """ + The check suite or run was neutral. + """ + NEUTRAL + + """ + The check suite or run was skipped. + """ + SKIPPED + + """ + The check suite or run was marked stale by GitHub. Only GitHub can use this conclusion. + """ + STALE + + """ + The check suite or run has failed at startup. + """ + STARTUP_FAILURE + + """ + The check suite or run has succeeded. + """ + SUCCESS + + """ + The check suite or run has timed out. + """ + TIMED_OUT +} + +""" +A check run. +""" +type CheckRun implements Node & RequirableByPullRequest & UniformResourceLocatable @docsCategory(name: "checks") { + """ + The check run's annotations + """ + annotations( + """ + 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 + ): CheckAnnotationConnection + + """ + The check suite that this run is a part of. + """ + checkSuite: CheckSuite! + + """ + Identifies the date and time when the check run was completed. + """ + completedAt: DateTime + + """ + The conclusion of the check run. + """ + conclusion: CheckConclusionState + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The corresponding deployment for this job, if any + """ + deployment: Deployment + + """ + The URL from which to find full details of the check run on the integrator's site. + """ + detailsUrl: URI + + """ + A reference for the check run on the integrator's system. + """ + externalId: String + + """ + The Node ID of the CheckRun object + """ + id: ID! + + """ + Whether this is required to pass before merging for a specific pull request. + """ + isRequired( + """ + The id of the pull request this is required for + """ + pullRequestId: ID + + """ + The number of the pull request this is required for + """ + pullRequestNumber: Int + ): Boolean! + + """ + The name of the check for this check run. + """ + name: String! + + """ + Information about a pending deployment, if any, in this check run + """ + pendingDeploymentRequest: DeploymentRequest + + """ + The permalink to the check run summary. + """ + permalink: URI! + + """ + The repository associated with this check run. + """ + repository: Repository! + + """ + The HTTP path for this check run. + """ + resourcePath: URI! + + """ + Identifies the date and time when the check run was started. + """ + startedAt: DateTime + + """ + The current status of the check run. + """ + status: CheckStatusState! + + """ + The check run's steps + """ + steps( + """ + 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 + + """ + Step number + """ + number: Int + ): CheckStepConnection + + """ + A string representing the check run's summary + """ + summary: String + + """ + A string representing the check run's text + """ + text: String + + """ + A string representing the check run + """ + title: String + + """ + The HTTP URL for this check run. + """ + url: URI! +} + +""" +Possible further actions the integrator can perform. +""" +input CheckRunAction @docsCategory(name: "checks") { + """ + A short explanation of what this action would do. + """ + description: String! + + """ + A reference for the action on the integrator's system. + """ + identifier: String! + + """ + The text to be displayed on a button in the web UI. + """ + label: String! +} + +""" +The connection type for CheckRun. +""" +type CheckRunConnection { + """ + A list of edges. + """ + edges: [CheckRunEdge] + + """ + A list of nodes. + """ + nodes: [CheckRun] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CheckRunEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CheckRun +} + +""" +The filters that are available when fetching check runs. +""" +input CheckRunFilter @docsCategory(name: "checks") { + """ + Filters the check runs created by this application ID. + """ + appId: Int + + """ + Filters the check runs by this name. + """ + checkName: String + + """ + Filters the check runs by this type. + """ + checkType: CheckRunType + + """ + Filters the check runs by these conclusions. + """ + conclusions: [CheckConclusionState!] + + """ + Filters the check runs by this status. Superceded by statuses. + """ + status: CheckStatusState + + """ + Filters the check runs by this status. Overrides status. + """ + statuses: [CheckStatusState!] +} + +""" +Descriptive details about the check run. +""" +input CheckRunOutput @docsCategory(name: "checks") { + """ + The annotations that are made as part of the check run. + """ + annotations: [CheckAnnotationData!] + + """ + Images attached to the check run output displayed in the GitHub pull request UI. + """ + images: [CheckRunOutputImage!] + + """ + The summary of the check run (supports Commonmark). + """ + summary: String! + + """ + The details of the check run (supports Commonmark). + """ + text: String + + """ + A title to provide for this check run. + """ + title: String! +} + +""" +Images attached to the check run output displayed in the GitHub pull request UI. +""" +input CheckRunOutputImage @docsCategory(name: "checks") { + """ + The alternative text for the image. + """ + alt: String! + + """ + A short image description. + """ + caption: String + + """ + The full URL of the image. + """ + imageUrl: URI! +} + +""" +The possible states of a check run in a status rollup. +""" +enum CheckRunState @docsCategory(name: "checks") { + """ + The check run requires action. + """ + ACTION_REQUIRED + + """ + The check run has been cancelled. + """ + CANCELLED + + """ + The check run has been completed. + """ + COMPLETED + + """ + The check run has failed. + """ + FAILURE + + """ + The check run is in progress. + """ + IN_PROGRESS + + """ + The check run was neutral. + """ + NEUTRAL + + """ + The check run is in pending state. + """ + PENDING + + """ + The check run has been queued. + """ + QUEUED + + """ + The check run was skipped. + """ + SKIPPED + + """ + The check run was marked stale by GitHub. Only GitHub can use this conclusion. + """ + STALE + + """ + The check run has failed at startup. + """ + STARTUP_FAILURE + + """ + The check run has succeeded. + """ + SUCCESS + + """ + The check run has timed out. + """ + TIMED_OUT + + """ + The check run is in waiting state. + """ + WAITING +} + +""" +Represents a count of the state of a check run. +""" +type CheckRunStateCount @docsCategory(name: "checks") { + """ + The number of check runs with this state. + """ + count: Int! + + """ + The state of a check run. + """ + state: CheckRunState! +} + +""" +The possible types of check runs. +""" +enum CheckRunType @docsCategory(name: "checks") { + """ + Every check run available. + """ + ALL + + """ + The latest check run. + """ + LATEST +} + +""" +The possible states for a check suite or run status. +""" +enum CheckStatusState @docsCategory(name: "checks") { + """ + The check suite or run has been completed. + """ + COMPLETED + + """ + The check suite or run is in progress. + """ + IN_PROGRESS + + """ + The check suite or run is in pending state. + """ + PENDING + + """ + The check suite or run has been queued. + """ + QUEUED + + """ + The check suite or run has been requested. + """ + REQUESTED + + """ + The check suite or run is in waiting state. + """ + WAITING +} + +""" +A single check step. +""" +type CheckStep @docsCategory(name: "checks") { + """ + Identifies the date and time when the check step was completed. + """ + completedAt: DateTime + + """ + The conclusion of the check step. + """ + conclusion: CheckConclusionState + + """ + A reference for the check step on the integrator's system. + """ + externalId: String + + """ + The step's name. + """ + name: String! + + """ + The index of the step in the list of steps of the parent check run. + """ + number: Int! + + """ + Number of seconds to completion. + """ + secondsToCompletion: Int + + """ + Identifies the date and time when the check step was started. + """ + startedAt: DateTime + + """ + The current status of the check step. + """ + status: CheckStatusState! +} + +""" +The connection type for CheckStep. +""" +type CheckStepConnection { + """ + A list of edges. + """ + edges: [CheckStepEdge] + + """ + A list of nodes. + """ + nodes: [CheckStep] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CheckStepEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CheckStep +} + +""" +A check suite. +""" +type CheckSuite implements Node @docsCategory(name: "checks") { + """ + The GitHub App which created this check suite. + """ + app: App + + """ + The name of the branch for this check suite. + """ + branch: Ref + + """ + The check runs associated with a check suite. + """ + checkRuns( + """ + 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 + + """ + Filters the check runs by this type. + """ + filterBy: CheckRunFilter + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): CheckRunConnection + + """ + The commit for this check suite + """ + commit: Commit! + + """ + The conclusion of this check suite. + """ + conclusion: CheckConclusionState + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who triggered the check suite. + """ + creator: User + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the CheckSuite object + """ + id: ID! + + """ + A list of open pull requests matching the check suite. + """ + matchingPullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection + + """ + The push that triggered this check suite. + """ + push: Push + + """ + The repository associated with this check suite. + """ + repository: Repository! + + """ + The HTTP path for this check suite + """ + resourcePath: URI! + + """ + The status of this check suite. + """ + status: CheckStatusState! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this check suite + """ + url: URI! + + """ + The workflow run associated with this check suite. + """ + workflowRun: WorkflowRun +} + +""" +The auto-trigger preferences that are available for check suites. +""" +input CheckSuiteAutoTriggerPreference @docsCategory(name: "checks") { + """ + The node ID of the application that owns the check suite. + """ + appId: ID! + + """ + Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository. + """ + setting: Boolean! +} + +""" +The connection type for CheckSuite. +""" +type CheckSuiteConnection { + """ + A list of edges. + """ + edges: [CheckSuiteEdge] + + """ + A list of nodes. + """ + nodes: [CheckSuite] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CheckSuiteEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CheckSuite +} + +""" +The filters that are available when fetching check suites. +""" +input CheckSuiteFilter @docsCategory(name: "checks") { + """ + Filters the check suites created by this application ID. + """ + appId: Int + + """ + Filters the check suites by this name. + """ + checkName: String +} + +""" +An object which can have its data claimed or claim data from another. +""" +union Claimable @docsCategory(name: "users") = Mannequin | User + +""" +Autogenerated input type of ClearLabelsFromLabelable +""" +input ClearLabelsFromLabelableInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the labelable object to clear the labels from. + """ + labelableId: ID! @possibleTypes(concreteTypes: ["Discussion", "Issue", "PullRequest"], abstractType: "Labelable") +} + +""" +Autogenerated return type of ClearLabelsFromLabelable. +""" +type ClearLabelsFromLabelablePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item that was unlabeled. + """ + labelable: Labelable +} + +""" +Autogenerated input type of ClearProjectV2ItemFieldValue +""" +input ClearProjectV2ItemFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to be cleared. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) + + """ + The ID of the item to be cleared. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of ClearProjectV2ItemFieldValue. +""" +type ClearProjectV2ItemFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated item. + """ + projectV2Item: ProjectV2Item +} + +""" +Autogenerated input type of CloneProject +""" +input CloneProjectInput { + """ + The description of the project. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether or not to clone the source project's workflows. + """ + includeWorkflows: Boolean! + + """ + The name of the project. + """ + name: String! + + """ + The visibility of the project, defaults to false (private). + """ + public: Boolean + + """ + The source project to clone. + """ + sourceId: ID! @possibleTypes(concreteTypes: ["Project"]) + + """ + The owner ID to create the project under. + """ + targetOwnerId: ID! @possibleTypes(concreteTypes: ["Organization", "Repository", "User"], abstractType: "ProjectOwner") +} + +""" +Autogenerated return type of CloneProject. +""" +type CloneProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the JobStatus for populating cloned fields. + """ + jobStatusId: String + + """ + The new cloned project. + """ + project: Project +} + +""" +Autogenerated input type of CloneTemplateRepository +""" +input CloneTemplateRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A short description of the new repository. + """ + description: String + + """ + Whether to copy all branches from the template to the new repository. Defaults + to copying only the default branch of the template. + """ + includeAllBranches: Boolean = false + + """ + The name of the new repository. + """ + name: String! + + """ + The ID of the owner for the new repository. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "RepositoryOwner") + + """ + The Node ID of the template repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + Indicates the repository's visibility level. + """ + visibility: RepositoryVisibility! +} + +""" +Autogenerated return type of CloneTemplateRepository. +""" +type CloneTemplateRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new repository. + """ + repository: Repository +} + +""" +An object that can be closed +""" +interface Closable @docsCategory(name: "issues") { + """ + Indicates if the object is closed (definition of closed may depend on type) + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: Boolean! +} + +""" +Autogenerated input type of CloseDiscussion +""" +input CloseDiscussionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the discussion to be closed. + """ + discussionId: ID! @possibleTypes(concreteTypes: ["Discussion"]) + + """ + The reason why the discussion is being closed. + """ + reason: DiscussionCloseReason = RESOLVED +} + +""" +Autogenerated return type of CloseDiscussion. +""" +type CloseDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that was closed. + """ + discussion: Discussion +} + +""" +Autogenerated input type of CloseIssue +""" +input CloseIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the issue that this is a duplicate of. + """ + duplicateIssueId: ID @possibleTypes(concreteTypes: ["Issue"]) + + """ + ID of the issue to be closed. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The reason the issue is to be closed. + """ + stateReason: IssueClosedStateReason +} + +""" +Autogenerated return type of CloseIssue. +""" +type CloseIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that was closed. + """ + issue: Issue +} + +""" +Autogenerated input type of ClosePullRequest +""" +input ClosePullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the pull request to be closed. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of ClosePullRequest. +""" +type ClosePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was closed. + """ + pullRequest: PullRequest +} + +""" +Represents a 'closed' event on any `Closable`. +""" +type ClosedEvent implements Node & UniformResourceLocatable @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Object that was closed. + """ + closable: Closable! + + """ + Object which triggered the creation of this event. + """ + closer: Closer + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The issue or pull request that this issue was marked as a duplicate of. + """ + duplicateOf: IssueOrPullRequest + + """ + The Node ID of the ClosedEvent object + """ + id: ID! + + """ + The HTTP path for this closed event. + """ + resourcePath: URI! + + """ + The reason the issue state was changed to closed. + """ + stateReason: IssueStateReason + + """ + The HTTP URL for this closed event. + """ + url: URI! +} + +""" +The object which triggered a `ClosedEvent`. +""" +union Closer @docsCategory(name: "issues") = Commit | ProjectV2 | PullRequest + +""" +The Code of Conduct for a repository +""" +type CodeOfConduct implements Node @docsCategory(name: "meta") { + """ + The body of the Code of Conduct + """ + body: String + + """ + The Node ID of the CodeOfConduct object + """ + id: ID! + + """ + The key for the Code of Conduct + """ + key: String! + + """ + The formal name of the Code of Conduct + """ + name: String! + + """ + The HTTP path for this Code of Conduct + """ + resourcePath: URI + + """ + The HTTP URL for this Code of Conduct + """ + url: URI +} + +""" +Choose which tools must provide code scanning results before the reference is +updated. When configured, code scanning must be enabled and have results for +both the commit and the reference being updated. +""" +type CodeScanningParameters @docsCategory(name: "repos") { + """ + Tools that must provide code scanning results for this rule to pass. + """ + codeScanningTools: [CodeScanningTool!]! +} + +""" +Choose which tools must provide code scanning results before the reference is +updated. When configured, code scanning must be enabled and have results for +both the commit and the reference being updated. +""" +input CodeScanningParametersInput @docsCategory(name: "repos") { + """ + Tools that must provide code scanning results for this rule to pass. + """ + codeScanningTools: [CodeScanningToolInput!]! +} + +""" +A tool that must provide code scanning results for this rule to pass. +""" +type CodeScanningTool @docsCategory(name: "repos") { + """ + The severity level at which code scanning results that raise alerts block a + reference update. For more information on alert severity levels, see "[About code scanning alerts](${externalDocsUrl}/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts#about-alert-severity-and-security-severity-levels)." + """ + alertsThreshold: String! + + """ + The severity level at which code scanning results that raise security alerts + block a reference update. For more information on security severity levels, + see "[About code scanning alerts](${externalDocsUrl}/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts#about-alert-severity-and-security-severity-levels)." + """ + securityAlertsThreshold: String! + + """ + The name of a code scanning tool + """ + tool: String! +} + +""" +A tool that must provide code scanning results for this rule to pass. +""" +input CodeScanningToolInput @docsCategory(name: "repos") { + """ + The severity level at which code scanning results that raise alerts block a + reference update. For more information on alert severity levels, see "[About code scanning alerts](${externalDocsUrl}/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts#about-alert-severity-and-security-severity-levels)." + """ + alertsThreshold: String! + + """ + The severity level at which code scanning results that raise security alerts + block a reference update. For more information on security severity levels, + see "[About code scanning alerts](${externalDocsUrl}/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts#about-alert-severity-and-security-severity-levels)." + """ + securityAlertsThreshold: String! + + """ + The name of a code scanning tool + """ + tool: String! +} + +""" +Collaborators affiliation level with a subject. +""" +enum CollaboratorAffiliation @docsCategory(name: "repos") { + """ + All collaborators the authenticated user can see. + """ + ALL + + """ + All collaborators with permissions to an organization-owned subject, regardless of organization membership status. + """ + DIRECT + + """ + All outside collaborators of an organization-owned subject. + """ + OUTSIDE +} + +""" +Represents a comment. +""" +interface Comment @docsCategory(name: "issues") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Check if this comment was created via an email reply. + """ + createdViaEmail: Boolean! + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + The Node ID of the Comment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + 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 + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! +} + +""" +A comment author association with repository. +""" +enum CommentAuthorAssociation @docsCategory(name: "issues") { + """ + Author has been invited to collaborate on the repository. + """ + COLLABORATOR + + """ + Author has previously committed to the repository. + """ + CONTRIBUTOR + + """ + Author has not previously committed to GitHub. + """ + FIRST_TIMER + + """ + Author has not previously committed to the repository. + """ + FIRST_TIME_CONTRIBUTOR + + """ + Author is a placeholder for an unclaimed user. + """ + MANNEQUIN + + """ + Author is a member of the organization that owns the repository. + """ + MEMBER + + """ + Author has no association with the repository. + """ + NONE + + """ + Author is the owner of the repository. + """ + OWNER +} + +""" +The possible errors that will prevent a user from updating a comment. +""" +enum CommentCannotUpdateReason @docsCategory(name: "issues") { + """ + Unable to create comment because repository is archived. + """ + ARCHIVED + + """ + You cannot update this comment + """ + DENIED + + """ + You must be the author or have write access to this repository to update this comment. + """ + INSUFFICIENT_ACCESS + + """ + Unable to create comment because issue is locked. + """ + LOCKED + + """ + You must be logged in to update this comment. + """ + LOGIN_REQUIRED + + """ + Repository is under maintenance. + """ + MAINTENANCE + + """ + At least one email address must be verified to update this comment. + """ + VERIFIED_EMAIL_REQUIRED +} + +""" +Represents a 'comment_deleted' event on a given issue or pull request. +""" +type CommentDeletedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The user who authored the deleted comment. + """ + deletedCommentAuthor: Actor + + """ + The Node ID of the CommentDeletedEvent object + """ + id: ID! +} + +""" +Represents a Git commit. +""" +type Commit implements GitObject & Node & Subscribable & UniformResourceLocatable @docsCategory(name: "commits") { + """ + An abbreviated version of the Git object ID + """ + abbreviatedOid: String! + + """ + The number of additions in this commit. + """ + additions: Int! + + """ + The merged Pull Request that introduced the commit to the repository. If the + commit is not present in the default branch, additionally returns open Pull + Requests associated with the commit + """ + associatedPullRequests( + """ + 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 + + """ + Ordering options for pull requests. + """ + orderBy: PullRequestOrder = {field: CREATED_AT, direction: ASC} + ): PullRequestConnection + + """ + Authorship details of the commit. + """ + author: GitActor + + """ + Check if the committer and the author match. + """ + authoredByCommitter: Boolean! + + """ + The datetime when this commit was authored. + """ + authoredDate: DateTime! + + """ + The list of authors for this commit based on the git author and the Co-authored-by + message trailer. The git author will always be first. + """ + authors( + """ + 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 + ): GitActorConnection! + + """ + Fetches `git blame` information. + """ + blame( + """ + The file whose Git blame information you want. + """ + path: String! + ): Blame! + + """ + We recommend using the `changedFilesIfAvailable` field instead of + `changedFiles`, as `changedFiles` will cause your request to return an error + if GitHub is unable to calculate the number of changed files. + """ + changedFiles: Int! + @deprecated( + reason: "`changedFiles` will be removed. Use `changedFilesIfAvailable` instead. Removal on 2023-01-01 UTC." + ) + + """ + The number of changed files in this commit. If GitHub is unable to calculate + the number of changed files (for example due to a timeout), this will return + `null`. We recommend using this field instead of `changedFiles`. + """ + changedFilesIfAvailable: Int + + """ + The check suites associated with a commit. + """ + checkSuites( + """ + 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 + + """ + Filters the check suites by this type. + """ + filterBy: CheckSuiteFilter + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): CheckSuiteConnection + + """ + Comments made on the commit. + """ + comments( + """ + 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 + ): CommitCommentConnection! + + """ + The HTTP path for this Git object + """ + commitResourcePath: URI! + + """ + The HTTP URL for this Git object + """ + commitUrl: URI! + + """ + The datetime when this commit was committed. + """ + committedDate: DateTime! + + """ + Check if committed via GitHub web UI. + """ + committedViaWeb: Boolean! + + """ + Committer details of the commit. + """ + committer: GitActor + + """ + The number of deletions in this commit. + """ + deletions: Int! + + """ + The deployments associated with a commit. + """ + deployments( + """ + 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 + + """ + Environments to list deployments for + """ + environments: [String!] + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for deployments returned from the connection. + """ + orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC} + ): DeploymentConnection + + """ + The tree entry representing the file located at the given path. + """ + file( + """ + The path for the file + """ + path: String! + ): TreeEntry + + """ + The linear commit history starting from (and including) this commit, in the same order as `git log`. + """ + history( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + If non-null, filters history to only show commits with matching authorship. + """ + author: CommitAuthor + + """ + 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 + + """ + If non-null, filters history to only show commits touching files under this path. + """ + path: String + + """ + Allows specifying a beginning time or date for fetching commits. Unexpected + results may be returned for dates not between 1970-01-01 and 2099-12-13 (inclusive). + """ + since: GitTimestamp + + """ + Allows specifying an ending time or date for fetching commits. Unexpected + results may be returned for dates not between 1970-01-01 and 2099-12-13 (inclusive). + """ + until: GitTimestamp + ): CommitHistoryConnection! + + """ + The Node ID of the Commit object + """ + id: ID! + + """ + The Git commit message + """ + message: String! + + """ + The Git commit message body + """ + messageBody: String! + + """ + The commit message body rendered to HTML. + """ + messageBodyHTML: HTML! + + """ + The Git commit message headline + """ + messageHeadline: String! + + """ + The commit message headline rendered to HTML. + """ + messageHeadlineHTML: HTML! + + """ + The Git object ID + """ + oid: GitObjectID! + + """ + The organization this commit was made on behalf of. + """ + onBehalfOf: Organization + + """ + The parents of a commit. + """ + parents( + """ + 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 + ): CommitConnection! + + """ + The datetime when this commit was pushed. + """ + pushedDate: DateTime @deprecated(reason: "`pushedDate` is no longer supported. Removal on 2023-07-01 UTC.") + + """ + The Repository this commit belongs to + """ + repository: Repository! + + """ + The HTTP path for this commit + """ + resourcePath: URI! + + """ + Commit signing information, if present. + """ + signature: GitSignature + + """ + Status information for this commit + """ + status: Status + + """ + Check and Status rollup information for this commit. + """ + statusCheckRollup: StatusCheckRollup + + """ + Returns a list of all submodules in this repository as of this Commit parsed from the .gitmodules file. + """ + submodules( + """ + 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 + ): SubmoduleConnection! + + """ + Returns a URL to download a tarball archive for a repository. + Note: For private repositories, these links are temporary and expire after five minutes. + """ + tarballUrl: URI! + + """ + Commit's root Tree + """ + tree: Tree! + + """ + The HTTP path for the tree of this commit + """ + treeResourcePath: URI! + + """ + The HTTP URL for the tree of this commit + """ + treeUrl: URI! + + """ + The HTTP URL for this commit + """ + url: URI! + + """ + Check if the viewer is able to change their subscription status for the repository. + """ + viewerCanSubscribe: Boolean! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState + + """ + Returns a URL to download a zipball archive for a repository. + Note: For private repositories, these links are temporary and expire after five minutes. + """ + zipballUrl: URI! +} + +""" +Specifies an author for filtering Git commits. +""" +input CommitAuthor @docsCategory(name: "commits") { + """ + Email addresses to filter by. Commits authored by any of the specified email addresses will be returned. + """ + emails: [String!] + + """ + ID of a User to filter by. If non-null, only commits authored by this user + will be returned. This field takes precedence over emails. + """ + id: ID +} + +""" +Parameters to be used for the commit_author_email_pattern rule +""" +type CommitAuthorEmailPatternParameters @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean! + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Parameters to be used for the commit_author_email_pattern rule +""" +input CommitAuthorEmailPatternParametersInput @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Represents a comment on a given Commit. +""" +type CommitComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment + @docsCategory(name: "commits") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + Identifies the comment body. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + Identifies the commit associated with the comment, if the commit exists. + """ + commit: Commit + + """ + 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 CommitComment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + Identifies the file path associated with the comment. + """ + path: String + + """ + Identifies the line position associated with the comment. + """ + position: Int + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path permalink for this commit comment. + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL permalink for this commit comment. + """ + url: URI! + + """ + 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! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: 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! +} + +""" +The connection type for CommitComment. +""" +type CommitCommentConnection { + """ + A list of edges. + """ + edges: [CommitCommentEdge] + + """ + A list of nodes. + """ + nodes: [CommitComment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CommitCommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CommitComment +} + +""" +A thread of comments on a commit. +""" +type CommitCommentThread implements Node & RepositoryNode @docsCategory(name: "commits") { + """ + The comments that exist in this thread. + """ + comments( + """ + 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 + ): CommitCommentConnection! + + """ + The commit the comments were made on. + """ + commit: Commit + + """ + The Node ID of the CommitCommentThread object + """ + id: ID! + + """ + The file the comments were made on. + """ + path: String + + """ + The position in the diff for the commit that the comment was made on. + """ + position: Int + + """ + The repository associated with this node. + """ + repository: Repository! +} + +""" +The connection type for Commit. +""" +type CommitConnection { + """ + A list of edges. + """ + edges: [CommitEdge] + + """ + A list of nodes. + """ + nodes: [Commit] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Ordering options for commit contribution connections. +""" +input CommitContributionOrder @docsCategory(name: "commits") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field by which to order commit contributions. + """ + field: CommitContributionOrderField! +} + +""" +Properties by which commit contribution connections can be ordered. +""" +enum CommitContributionOrderField @docsCategory(name: "commits") { + """ + Order commit contributions by how many commits they represent. + """ + COMMIT_COUNT + + """ + Order commit contributions by when they were made. + """ + OCCURRED_AT +} + +""" +This aggregates commits made by a user within one repository. +""" +type CommitContributionsByRepository @docsCategory(name: "commits") { + """ + The commit contributions, each representing a day. + """ + contributions( + """ + 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 + + """ + Ordering options for commit contributions returned from the connection. + """ + orderBy: CommitContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedCommitContributionConnection! + + """ + The repository in which the commits were made. + """ + repository: Repository! + + """ + The HTTP path for the user's commits to the repository in this time range. + """ + resourcePath: URI! + + """ + The HTTP URL for the user's commits to the repository in this time range. + """ + url: URI! +} + +""" +An edge in a connection. +""" +type CommitEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Commit +} + +""" +The connection type for Commit. +""" +type CommitHistoryConnection { + """ + A list of edges. + """ + edges: [CommitEdge] + + """ + A list of nodes. + """ + nodes: [Commit] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +A message to include with a new commit +""" +input CommitMessage @docsCategory(name: "commits") { + """ + The body of the message. + """ + body: String + + """ + The headline of the message. + """ + headline: String! +} + +""" +Parameters to be used for the commit_message_pattern rule +""" +type CommitMessagePatternParameters @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean! + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Parameters to be used for the commit_message_pattern rule +""" +input CommitMessagePatternParametersInput @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +A git ref for a commit to be appended to. + +The ref must be a branch, i.e. its fully qualified name must start +with `refs/heads/` (although the input is not required to be fully +qualified). + +The Ref may be specified by its global node ID or by the +`repositoryNameWithOwner` and `branchName`. + +### Examples + +Specify a branch using a global node ID: + + { "id": "MDM6UmVmMTpyZWZzL2hlYWRzL21haW4=" } + +Specify a branch using `repositoryNameWithOwner` and `branchName`: + + { + "repositoryNameWithOwner": "github/graphql-client", + "branchName": "main" + } +""" +input CommittableBranch @docsCategory(name: "git") { + """ + The unqualified name of the branch to append the commit to. + """ + branchName: String + + """ + The Node ID of the Ref to be updated. + """ + id: ID + + """ + The nameWithOwner of the repository to commit to. + """ + repositoryNameWithOwner: String +} + +""" +Parameters to be used for the committer_email_pattern rule +""" +type CommitterEmailPatternParameters @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean! + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Parameters to be used for the committer_email_pattern rule +""" +input CommitterEmailPatternParametersInput @docsCategory(name: "commits") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Represents a comparison between two commit revisions. +""" +type Comparison implements Node @docsCategory(name: "commits") { + """ + The number of commits ahead of the base branch. + """ + aheadBy: Int! + + """ + The base revision of this comparison. + """ + baseTarget: GitObject! + + """ + The number of commits behind the base branch. + """ + behindBy: Int! + + """ + The commits which compose this comparison. + """ + commits( + """ + 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 + ): ComparisonCommitConnection! + + """ + The head revision of this comparison. + """ + headTarget: GitObject! + + """ + The Node ID of the Comparison object + """ + id: ID! + + """ + The status of this comparison. + """ + status: ComparisonStatus! +} + +""" +The connection type for Commit. +""" +type ComparisonCommitConnection { + """ + The total count of authors and co-authors across all commits. + """ + authorCount: Int! + + """ + A list of edges. + """ + edges: [CommitEdge] + + """ + A list of nodes. + """ + nodes: [Commit] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The status of a git comparison between two refs. +""" +enum ComparisonStatus @docsCategory(name: "commits") { + """ + The head ref is ahead of the base ref. + """ + AHEAD + + """ + The head ref is behind the base ref. + """ + BEHIND + + """ + The head ref is both ahead and behind of the base ref, indicating git history has diverged. + """ + DIVERGED + + """ + The head ref and base ref are identical. + """ + IDENTICAL +} + +""" +Represents a 'connected' event on a given issue or pull request. +""" +type ConnectedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ConnectedEvent object + """ + id: ID! + + """ + Reference originated in a different repository. + """ + isCrossRepository: Boolean! + + """ + Issue or pull request that made the reference. + """ + source: ReferencedSubject! + + """ + Issue or pull request which was connected. + """ + subject: ReferencedSubject! +} + +""" +The content warning for a repository +""" +type ContentWarning @docsCategory(name: "meta") { + """ + The content warning' category. E.g. 'mis_dis_information' + """ + category: String! + + """ + The content warning's custom sub category text. E.g. 'dangerous stuff.' + """ + customSubCategory: String + + """ + The content warning's sub category. E.g. 'medical_scientific' + """ + subCategory: String + + """ + The content warning's sub title. E.g. 'The information contained in this page has not been verified.' + """ + subTitle: String + + """ + The content warning's title. E.g. 'This page may contain false or misleading information.' + """ + title: String! + + """ + The type of content warning. E.g. 'interstitial' + """ + type: String! +} + +""" +The Contributing Guidelines for a repository. +""" +type ContributingGuidelines @docsCategory(name: "repos") { + """ + The body of the Contributing Guidelines. + """ + body: String + + """ + The HTTP path for the Contributing Guidelines. + """ + resourcePath: URI + + """ + The HTTP URL for the Contributing Guidelines. + """ + url: URI +} + +""" +Represents a contribution a user made on GitHub, such as opening an issue. +""" +interface Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +A calendar of contributions made on GitHub by a user. +""" +type ContributionCalendar @docsCategory(name: "users") { + """ + A list of hex color codes used in this calendar. The darker the color, the more contributions it represents. + """ + colors: [String!]! + + """ + Determine if the color set was chosen because it's currently Halloween. + """ + isHalloween: Boolean! + + """ + A list of the months of contributions in this calendar. + """ + months: [ContributionCalendarMonth!]! + + """ + The count of total contributions in the calendar. + """ + totalContributions: Int! + + """ + A list of the weeks of contributions in this calendar. + """ + weeks: [ContributionCalendarWeek!]! +} + +""" +Represents a single day of contributions on GitHub by a user. +""" +type ContributionCalendarDay @docsCategory(name: "users") { + """ + The hex color code that represents how many contributions were made on this day compared to others in the calendar. + """ + color: String! + + """ + How many contributions were made by the user on this day. + """ + contributionCount: Int! + + """ + Indication of contributions, relative to other days. Can be used to indicate + which color to represent this day on a calendar. + """ + contributionLevel: ContributionLevel! + + """ + The day this square represents. + """ + date: Date! + + """ + A number representing which day of the week this square represents, e.g., 1 is Monday. + """ + weekday: Int! +} + +""" +A month of contributions in a user's contribution graph. +""" +type ContributionCalendarMonth @docsCategory(name: "users") { + """ + The date of the first day of this month. + """ + firstDay: Date! + + """ + The name of the month. + """ + name: String! + + """ + How many weeks started in this month. + """ + totalWeeks: Int! + + """ + The year the month occurred in. + """ + year: Int! +} + +""" +A week of contributions in a user's contribution graph. +""" +type ContributionCalendarWeek @docsCategory(name: "users") { + """ + The days of contributions in this week. + """ + contributionDays: [ContributionCalendarDay!]! + + """ + The date of the earliest square in this week. + """ + firstDay: Date! +} + +""" +Varying levels of contributions from none to many. +""" +enum ContributionLevel @docsCategory(name: "users") { + """ + Lowest 25% of days of contributions. + """ + FIRST_QUARTILE + + """ + Highest 25% of days of contributions. More contributions than the third quartile. + """ + FOURTH_QUARTILE + + """ + No contributions occurred. + """ + NONE + + """ + Second lowest 25% of days of contributions. More contributions than the first quartile. + """ + SECOND_QUARTILE + + """ + Second highest 25% of days of contributions. More contributions than second quartile, less than the fourth quartile. + """ + THIRD_QUARTILE +} + +""" +Ordering options for contribution connections. +""" +input ContributionOrder @docsCategory(name: "users") { + """ + The ordering direction. + """ + direction: OrderDirection! +} + +""" +A collection of contributions made by a user, including opened issues, commits, and pull requests. +Contributions in private and internal repositories are only included with the optional read:user scope. +""" +type ContributionsCollection @docsCategory(name: "users") { + """ + Commit contributions made by the user, grouped by repository. + """ + commitContributionsByRepository( + """ + How many repositories should be included. + """ + maxRepositories: Int = 25 + ): [CommitContributionsByRepository!]! + + """ + A calendar of this user's contributions on GitHub. + """ + contributionCalendar: ContributionCalendar! + + """ + The years the user has been making contributions with the most recent year first. + """ + contributionYears: [Int!]! + + """ + Determine if this collection's time span ends in the current month. + """ + doesEndInCurrentMonth: Boolean! + + """ + The date of the first restricted contribution the user made in this time + period. Can only be non-null when the user has enabled private contribution counts. + """ + earliestRestrictedContributionDate: Date + + """ + The ending date and time of this collection. + """ + endedAt: DateTime! + + """ + The first issue the user opened on GitHub. This will be null if that issue was + opened outside the collection's time range and ignoreTimeRange is false. If + the issue is not visible but the user has opted to show private contributions, + a RestrictedContribution will be returned. + """ + firstIssueContribution: CreatedIssueOrRestrictedContribution + + """ + The first pull request the user opened on GitHub. This will be null if that + pull request was opened outside the collection's time range and + ignoreTimeRange is not true. If the pull request is not visible but the user + has opted to show private contributions, a RestrictedContribution will be returned. + """ + firstPullRequestContribution: CreatedPullRequestOrRestrictedContribution + + """ + The first repository the user created on GitHub. This will be null if that + first repository was created outside the collection's time range and + ignoreTimeRange is false. If the repository is not visible, then a + RestrictedContribution is returned. + """ + firstRepositoryContribution: CreatedRepositoryOrRestrictedContribution + + """ + Does the user have any more activity in the timeline that occurred prior to the collection's time range? + """ + hasActivityInThePast: Boolean! + + """ + Determine if there are any contributions in this collection. + """ + hasAnyContributions: Boolean! + + """ + Determine if the user made any contributions in this time frame whose details + are not visible because they were made in a private repository. Can only be + true if the user enabled private contribution counts. + """ + hasAnyRestrictedContributions: Boolean! + + """ + Whether or not the collector's time span is all within the same day. + """ + isSingleDay: Boolean! + + """ + A list of issues the user opened. + """ + issueContributions( + """ + 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 + + """ + Should the user's first issue ever be excluded from the result. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented issue be excluded from the result. + """ + excludePopular: Boolean = false + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedIssueContributionConnection! + + """ + Issue contributions made by the user, grouped by repository. + """ + issueContributionsByRepository( + """ + Should the user's first issue ever be excluded from the result. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented issue be excluded from the result. + """ + excludePopular: Boolean = false + + """ + How many repositories should be included. + """ + maxRepositories: Int = 25 + ): [IssueContributionsByRepository!]! + + """ + When the user signed up for GitHub. This will be null if that sign up date + falls outside the collection's time range and ignoreTimeRange is false. + """ + joinedGitHubContribution: JoinedGitHubContribution + + """ + The date of the most recent restricted contribution the user made in this time + period. Can only be non-null when the user has enabled private contribution counts. + """ + latestRestrictedContributionDate: Date + + """ + When this collection's time range does not include any activity from the user, use this + to get a different collection from an earlier time range that does have activity. + """ + mostRecentCollectionWithActivity: ContributionsCollection + + """ + Returns a different contributions collection from an earlier time range than this one + that does not have any contributions. + """ + mostRecentCollectionWithoutActivity: ContributionsCollection + + """ + The issue the user opened on GitHub that received the most comments in the specified + time frame. + """ + popularIssueContribution: CreatedIssueContribution + + """ + The pull request the user opened on GitHub that received the most comments in the + specified time frame. + """ + popularPullRequestContribution: CreatedPullRequestContribution + + """ + Pull request contributions made by the user. + """ + pullRequestContributions( + """ + 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 + + """ + Should the user's first pull request ever be excluded from the result. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented pull request be excluded from the result. + """ + excludePopular: Boolean = false + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedPullRequestContributionConnection! + + """ + Pull request contributions made by the user, grouped by repository. + """ + pullRequestContributionsByRepository( + """ + Should the user's first pull request ever be excluded from the result. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented pull request be excluded from the result. + """ + excludePopular: Boolean = false + + """ + How many repositories should be included. + """ + maxRepositories: Int = 25 + ): [PullRequestContributionsByRepository!]! + + """ + Pull request review contributions made by the user. Returns the most recently + submitted review for each PR reviewed by the user. + """ + pullRequestReviewContributions( + """ + 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 + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedPullRequestReviewContributionConnection! + + """ + Pull request review contributions made by the user, grouped by repository. + """ + pullRequestReviewContributionsByRepository( + """ + How many repositories should be included. + """ + maxRepositories: Int = 25 + ): [PullRequestReviewContributionsByRepository!]! + + """ + A list of repositories owned by the user that the user created in this time range. + """ + repositoryContributions( + """ + 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 + + """ + Should the user's first repository ever be excluded from the result. + """ + excludeFirst: Boolean = false + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedRepositoryContributionConnection! + + """ + A count of contributions made by the user that the viewer cannot access. Only + non-zero when the user has chosen to share their private contribution counts. + """ + restrictedContributionsCount: Int! + + """ + The beginning date and time of this collection. + """ + startedAt: DateTime! + + """ + How many commits were made by the user in this time span. + """ + totalCommitContributions: Int! + + """ + How many issues the user opened. + """ + totalIssueContributions( + """ + Should the user's first issue ever be excluded from this count. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented issue be excluded from this count. + """ + excludePopular: Boolean = false + ): Int! + + """ + How many pull requests the user opened. + """ + totalPullRequestContributions( + """ + Should the user's first pull request ever be excluded from this count. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented pull request be excluded from this count. + """ + excludePopular: Boolean = false + ): Int! + + """ + How many pull request reviews the user left. + """ + totalPullRequestReviewContributions: Int! + + """ + How many different repositories the user committed to. + """ + totalRepositoriesWithContributedCommits: Int! + + """ + How many different repositories the user opened issues in. + """ + totalRepositoriesWithContributedIssues( + """ + Should the user's first issue ever be excluded from this count. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented issue be excluded from this count. + """ + excludePopular: Boolean = false + ): Int! + + """ + How many different repositories the user left pull request reviews in. + """ + totalRepositoriesWithContributedPullRequestReviews: Int! + + """ + How many different repositories the user opened pull requests in. + """ + totalRepositoriesWithContributedPullRequests( + """ + Should the user's first pull request ever be excluded from this count. + """ + excludeFirst: Boolean = false + + """ + Should the user's most commented pull request be excluded from this count. + """ + excludePopular: Boolean = false + ): Int! + + """ + How many repositories the user created. + """ + totalRepositoryContributions( + """ + Should the user's first repository ever be excluded from this count. + """ + excludeFirst: Boolean = false + ): Int! + + """ + The user who made the contributions in this collection. + """ + user: User! +} + +""" +Autogenerated input type of ConvertProjectCardNoteToIssue +""" +input ConvertProjectCardNoteToIssueInput { + """ + The body of the newly created issue. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ProjectCard ID to convert. + """ + projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"]) + + """ + The ID of the repository to create the issue in. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The title of the newly created issue. Defaults to the card's note text. + """ + title: String +} + +""" +Autogenerated return type of ConvertProjectCardNoteToIssue. +""" +type ConvertProjectCardNoteToIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated ProjectCard. + """ + projectCard: ProjectCard +} + +""" +Autogenerated input type of ConvertProjectV2DraftIssueItemToIssue +""" +input ConvertProjectV2DraftIssueItemToIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the draft issue ProjectV2Item to convert. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the repository to create the issue in. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of ConvertProjectV2DraftIssueItemToIssue. +""" +type ConvertProjectV2DraftIssueItemToIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated project item. + """ + item: ProjectV2Item +} + +""" +Autogenerated input type of ConvertPullRequestToDraft +""" +input ConvertPullRequestToDraftInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the pull request to convert to draft + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of ConvertPullRequestToDraft. +""" +type ConvertPullRequestToDraftPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is now a draft. + """ + pullRequest: PullRequest +} + +""" +Represents a 'convert_to_draft' event on a given pull request. +""" +type ConvertToDraftEvent implements Node & UniformResourceLocatable @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ConvertToDraftEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + The HTTP path for this convert to draft event. + """ + resourcePath: URI! + + """ + The HTTP URL for this convert to draft event. + """ + url: URI! +} + +""" +Represents a 'converted_from_draft' event on a given issue or pull request. +""" +type ConvertedFromDraftEvent implements Node & ProjectV2Event @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ConvertedFromDraftEvent object + """ + id: ID! + + """ + Project referenced by event. + """ + project: ProjectV2 + + """ + Did this event result from workflow automation? + """ + wasAutomated: Boolean! +} + +""" +Represents a 'converted_note_to_issue' event on a given issue or pull request. +""" +type ConvertedNoteToIssueEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ConvertedNoteToIssueEvent object + """ + id: ID! + + """ + Project referenced by event. + """ + project: Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Project card referenced by this project event. + """ + projectCard: ProjectCard + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Column name referenced by this project event. + """ + projectColumnName: String! +} + +""" +Represents a 'converted_to_discussion' event on a given issue. +""" +type ConvertedToDiscussionEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The discussion that the issue was converted into. + """ + discussion: Discussion + + """ + The Node ID of the ConvertedToDiscussionEvent object + """ + id: ID! +} + +""" +Request Copilot code review for new pull requests automatically if the author +has access to Copilot code review and their premium requests quota has not +reached the limit. +""" +type CopilotCodeReviewParameters @docsCategory(name: "pulls") { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean! + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean! +} + +""" +Request Copilot code review for new pull requests automatically if the author +has access to Copilot code review and their premium requests quota has not +reached the limit. +""" +input CopilotCodeReviewParametersInput @docsCategory(name: "pulls") { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean +} + +""" +Copilot endpoint information +""" +type CopilotEndpoints @docsCategory(name: "copilot") { + """ + Copilot API endpoint + """ + api: String! + + """ + Copilot origin tracker endpoint + """ + originTracker: String! + + """ + Copilot proxy endpoint + """ + proxy: String! + + """ + Copilot telemetry endpoint + """ + telemetry: String! +} + +""" +Autogenerated input type of CopyProjectV2 +""" +input CopyProjectV2Input { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Include draft issues in the new project + """ + includeDraftIssues: Boolean = false + + """ + The owner ID of the new project. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization", "User"]) + + """ + The ID of the source Project to copy. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The title of the project. + """ + title: String! +} + +""" +Autogenerated return type of CopyProjectV2. +""" +type CopyProjectV2Payload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The copied project. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of CreateAttributionInvitation +""" +input CreateAttributionInvitationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the owner scoping the reattributable data. + """ + ownerId: ID! + @possibleTypes(concreteTypes: ["Bot", "Enterprise", "Mannequin", "Organization", "User"], abstractType: "Account") + + """ + The Node ID of the account owning the data to reattribute. + """ + sourceId: ID! + @possibleTypes(concreteTypes: ["Bot", "Enterprise", "Mannequin", "Organization", "User"], abstractType: "Account") + + """ + The Node ID of the account which may claim the data. + """ + targetId: ID! + @possibleTypes(concreteTypes: ["Bot", "Enterprise", "Mannequin", "Organization", "User"], abstractType: "Account") +} + +""" +Autogenerated return type of CreateAttributionInvitation. +""" +type CreateAttributionInvitationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The owner scoping the reattributable data. + """ + owner: Organization + + """ + The account owning the data to reattribute. + """ + source: Claimable + + """ + The account which may claim the data. + """ + target: Claimable +} + +""" +Autogenerated input type of CreateBranchProtectionRule +""" +input CreateBranchProtectionRuleInput { + """ + Can this branch be deleted. + """ + allowsDeletions: Boolean + + """ + Are force pushes allowed on this branch. + """ + allowsForcePushes: Boolean + + """ + Is branch creation a protected operation. + """ + blocksCreations: Boolean + + """ + A list of User, Team, or App IDs allowed to bypass force push targeting matching branches. + """ + bypassForcePushActorIds: [ID!] + + """ + A list of User, Team, or App IDs allowed to bypass pull requests targeting matching branches. + """ + bypassPullRequestActorIds: [ID!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Will new commits pushed to matching branches dismiss pull request review approvals. + """ + dismissesStaleReviews: Boolean + + """ + Can admins override branch protection. + """ + isAdminEnforced: Boolean + + """ + Whether users can pull changes from upstream when the branch is locked. Set to + `true` to allow fork syncing. Set to `false` to prevent fork syncing. + """ + lockAllowsFetchAndMerge: Boolean + + """ + Whether to set the branch as read-only. If this is true, users will not be able to push to the branch. + """ + lockBranch: Boolean + + """ + The glob-like pattern used to determine matching branches. + """ + pattern: String! + + """ + A list of User, Team, or App IDs allowed to push to matching branches. + """ + pushActorIds: [ID!] + + """ + The global relay id of the repository in which a new branch protection rule should be created in. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + Whether the most recent push must be approved by someone other than the person who pushed it + """ + requireLastPushApproval: Boolean + + """ + Number of approving reviews required to update matching branches. + """ + requiredApprovingReviewCount: Int + + """ + The list of required deployment environments + """ + requiredDeploymentEnvironments: [String!] + + """ + List of required status check contexts that must pass for commits to be accepted to matching branches. + """ + requiredStatusCheckContexts: [String!] + + """ + The list of required status checks + """ + requiredStatusChecks: [RequiredStatusCheckInput!] + + """ + Are approving reviews required to update matching branches. + """ + requiresApprovingReviews: Boolean + + """ + Are reviews from code owners required to update matching branches. + """ + requiresCodeOwnerReviews: Boolean + + """ + Are commits required to be signed. + """ + requiresCommitSignatures: Boolean + + """ + Are conversations required to be resolved before merging. + """ + requiresConversationResolution: Boolean + + """ + Are successful deployments required before merging. + """ + requiresDeployments: Boolean + + """ + Are merge commits prohibited from being pushed to this branch. + """ + requiresLinearHistory: Boolean + + """ + Are status checks required to update matching branches. + """ + requiresStatusChecks: Boolean + + """ + Are branches required to be up to date before merging. + """ + requiresStrictStatusChecks: Boolean + + """ + Is pushing to matching branches restricted. + """ + restrictsPushes: Boolean + + """ + Is dismissal of pull request reviews restricted. + """ + restrictsReviewDismissals: Boolean + + """ + A list of User, Team, or App IDs allowed to dismiss reviews on pull requests targeting matching branches. + """ + reviewDismissalActorIds: [ID!] +} + +""" +Autogenerated return type of CreateBranchProtectionRule. +""" +type CreateBranchProtectionRulePayload { + """ + The newly created BranchProtectionRule. + """ + branchProtectionRule: BranchProtectionRule + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of CreateCheckRun +""" +input CreateCheckRunInput { + """ + Possible further actions the integrator can perform, which a user may trigger. + """ + actions: [CheckRunAction!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The time that the check run finished. + """ + completedAt: DateTime + + """ + The final conclusion of the check. + """ + conclusion: CheckConclusionState + + """ + The URL of the integrator's site that has the full details of the check. + """ + detailsUrl: URI + + """ + A reference for the run on the integrator's system. + """ + externalId: String + + """ + The SHA of the head commit. + """ + headSha: GitObjectID! + + """ + The name of the check. + """ + name: String! + + """ + Descriptive details about the run. + """ + output: CheckRunOutput + + """ + The node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The time that the check run began. + """ + startedAt: DateTime + + """ + The current status. + """ + status: RequestableCheckStatusState +} + +""" +Autogenerated return type of CreateCheckRun. +""" +type CreateCheckRunPayload { + """ + The newly created check run. + """ + checkRun: CheckRun + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of CreateCheckSuite +""" +input CreateCheckSuiteInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The SHA of the head commit. + """ + headSha: GitObjectID! + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of CreateCheckSuite. +""" +type CreateCheckSuitePayload { + """ + The newly created check suite. + """ + checkSuite: CheckSuite + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of CreateCommitOnBranch +""" +input CreateCommitOnBranchInput { + """ + The Ref to be updated. Must be a branch. + """ + branch: CommittableBranch! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The git commit oid expected at the head of the branch prior to the commit + """ + expectedHeadOid: GitObjectID! + + """ + A description of changes to files in this commit. + """ + fileChanges: FileChanges + + """ + The commit message the be included with the commit. + """ + message: CommitMessage! +} + +""" +Autogenerated return type of CreateCommitOnBranch. +""" +type CreateCommitOnBranchPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new commit. + """ + commit: Commit + + """ + The ref which has been updated to point to the new commit. + """ + ref: Ref +} + +""" +Autogenerated input type of CreateDeployment +""" +input CreateDeploymentInput { + """ + Attempt to automatically merge the default branch into the requested ref, defaults to true. + """ + autoMerge: Boolean = true + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Short description of the deployment. + """ + description: String = "" + + """ + Name for the target deployment environment. + """ + environment: String = "production" + + """ + JSON payload with extra information about the deployment. + """ + payload: String = "{}" + + """ + The node ID of the ref to be deployed. + """ + refId: ID! @possibleTypes(concreteTypes: ["Ref"]) + + """ + The node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The status contexts to verify against commit status checks. To bypass required + contexts, pass an empty array. Defaults to all unique contexts. + """ + requiredContexts: [String!] + + """ + Specifies a task to execute. + """ + task: String = "deploy" +} + +""" +Autogenerated return type of CreateDeployment. +""" +type CreateDeploymentPayload { + """ + True if the default branch has been auto-merged into the deployment ref. + """ + autoMerged: Boolean + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new deployment. + """ + deployment: Deployment +} + +""" +Autogenerated input type of CreateDeploymentStatus +""" +input CreateDeploymentStatusInput { + """ + Adds a new inactive status to all non-transient, non-production environment + deployments with the same repository and environment name as the created + status's deployment. + """ + autoInactive: Boolean = true + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The node ID of the deployment. + """ + deploymentId: ID! @possibleTypes(concreteTypes: ["Deployment"]) + + """ + A short description of the status. Maximum length of 140 characters. + """ + description: String = "" + + """ + If provided, updates the environment of the deploy. Otherwise, does not modify the environment. + """ + environment: String + + """ + Sets the URL for accessing your environment. + """ + environmentUrl: String = "" + + """ + The log URL to associate with this status. This URL should contain + output to keep the user updated while the task is running or serve as + historical information for what happened in the deployment. + """ + logUrl: String = "" + + """ + The state of the deployment. + """ + state: DeploymentStatusState! +} + +""" +Autogenerated return type of CreateDeploymentStatus. +""" +type CreateDeploymentStatusPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new deployment status. + """ + deploymentStatus: DeploymentStatus +} + +""" +Autogenerated input type of CreateDiscussion +""" +input CreateDiscussionInput { + """ + The body of the discussion. + """ + body: String! + + """ + The id of the discussion category to associate with this discussion. + """ + categoryId: ID! @possibleTypes(concreteTypes: ["DiscussionCategory"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the repository on which to create the discussion. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The title of the discussion. + """ + title: String! +} + +""" +Autogenerated return type of CreateDiscussion. +""" +type CreateDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that was just created. + """ + discussion: Discussion +} + +""" +Autogenerated input type of CreateEnterpriseOrganization +""" +input CreateEnterpriseOrganizationInput { + """ + The logins for the administrators of the new organization. + """ + adminLogins: [String!]! + + """ + The email used for sending billing receipts. + """ + billingEmail: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise owning the new organization. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of the new organization. + """ + login: String! + + """ + The profile name of the new organization. + """ + profileName: String! +} + +""" +Autogenerated return type of CreateEnterpriseOrganization. +""" +type CreateEnterpriseOrganizationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise that owns the created organization. + """ + enterprise: Enterprise + + """ + The organization that was created. + """ + organization: Organization +} + +""" +Autogenerated input type of CreateEnvironment +""" +input CreateEnvironmentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the environment. + """ + name: String! + + """ + The node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of CreateEnvironment. +""" +type CreateEnvironmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new or existing environment. + """ + environment: Environment +} + +""" +Autogenerated input type of CreateIpAllowListEntry +""" +input CreateIpAllowListEntryInput { + """ + An IP address or range of addresses in CIDR notation. + """ + allowListValue: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether the IP allow list entry is active when an IP allow list is enabled. + """ + isActive: Boolean! + + """ + An optional name for the IP allow list entry. + """ + name: String + + """ + The ID of the owner for which to create the new IP allow list entry. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["App", "Enterprise", "Organization"], abstractType: "IpAllowListOwner") +} + +""" +Autogenerated return type of CreateIpAllowListEntry. +""" +type CreateIpAllowListEntryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list entry that was created. + """ + ipAllowListEntry: IpAllowListEntry +} + +""" +Autogenerated input type of CreateIssueField +""" +input CreateIssueFieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The data type of the issue field. + """ + dataType: IssueFieldDataType! + + """ + A description of the issue field. + """ + description: String + + """ + The name of the issue field. + """ + name: String! + + """ + The options for the issue field if applicable. + """ + options: [IssueFieldSingleSelectOptionInput!] + + """ + The ID of the organization where the issue field will be created. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The visibility of the issue field. + """ + visibility: IssueFieldVisibility +} + +""" +Autogenerated return type of CreateIssueField. +""" +type CreateIssueFieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created issue field. + """ + issueField: IssueFields +} + +""" +Autogenerated input type of CreateIssueFieldValue +""" +input CreateIssueFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The field value to create. + """ + issueField: IssueFieldCreateOrUpdateInput! + + """ + The ID of the issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of CreateIssueFieldValue. +""" +type CreateIssueFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue object. + """ + issue: Issue + + """ + The newly created issue field value. + """ + issueFieldValue: IssueFieldValue +} + +""" +Autogenerated input type of CreateIssue +""" +input CreateIssueInput { + """ + Configuration for assigning Copilot to this issue. + """ + agentAssignment: AgentAssignmentInput + + """ + The Node ID of assignees for this issue. + """ + assigneeIds: [ID!] + @possibleTypes( + concreteTypes: ["Bot", "EnterpriseUserAccount", "Mannequin", "Organization", "User"] + abstractType: "Actor" + ) + + """ + The body for the issue description. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + An array of issue fields to set on the issue during creation + """ + issueFields: [IssueFieldCreateOrUpdateInput!] + + """ + The name of an issue template in the repository, assigns labels and assignees from the template to the issue + """ + issueTemplate: String + + """ + The Node ID of the issue type for this issue + """ + issueTypeId: ID + + """ + An array of Node IDs of labels for this issue. + """ + labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"]) + + """ + The Node ID of the milestone for this issue. + """ + milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"]) + + """ + The Node ID of the parent issue to add this new issue to + """ + parentIssueId: ID @possibleTypes(concreteTypes: ["Issue"]) + + """ + An array of Node IDs for projects associated with this issue. + """ + projectIds: [ID!] @possibleTypes(concreteTypes: ["Project"]) + + """ + An array of Node IDs for Projects V2 associated with this issue. + """ + projectV2Ids: [ID!] @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The title for the issue. + """ + title: String! +} + +""" +Autogenerated return type of CreateIssue. +""" +type CreateIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new issue. + """ + issue: Issue +} + +""" +Autogenerated input type of CreateIssueType +""" +input CreateIssueTypeInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Color for the issue type + """ + color: IssueTypeColor + + """ + Description of the new issue type + """ + description: String + + """ + Whether or not the issue type is enabled on the org level + """ + isEnabled: Boolean! + + """ + Name of the new issue type + """ + name: String! + + """ + The ID for the organization on which the issue type is created + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of CreateIssueType. +""" +type CreateIssueTypePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created issue type + """ + issueType: IssueType +} + +""" +Autogenerated input type of CreateLabel +""" +input CreateLabelInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A 6 character hex code, without the leading #, identifying the color of the label. + """ + color: String! + + """ + A brief description of the label, such as its purpose. + """ + description: String + + """ + The name of the label. + """ + name: String! + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of CreateLabel. +""" +type CreateLabelPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new label. + """ + label: Label +} + +""" +Autogenerated input type of CreateLinkedBranch +""" +input CreateLinkedBranchInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the issue to link to. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The name of the new branch. Defaults to issue number and title. + """ + name: String + + """ + The commit SHA to base the new branch on. + """ + oid: GitObjectID! + + """ + ID of the repository to create the branch in. Defaults to the issue repository. + """ + repositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of CreateLinkedBranch. +""" +type CreateLinkedBranchPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that was linked to. + """ + issue: Issue + + """ + The new branch issue reference. + """ + linkedBranch: LinkedBranch +} + +""" +Autogenerated input type of CreateMigrationSource +""" +input CreateMigrationSourceInput { + """ + The migration source access token. + """ + accessToken: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The GitHub personal access token of the user importing to the target repository. + """ + githubPat: String + + """ + The migration source name. + """ + name: String! + + """ + The ID of the organization that will own the migration source. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The migration source type. + """ + type: MigrationSourceType! + + """ + The migration source URL, for example `https://github.com` or `https://monalisa.ghe.com`. + """ + url: String +} + +""" +Autogenerated return type of CreateMigrationSource. +""" +type CreateMigrationSourcePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The created migration source. + """ + migrationSource: MigrationSource +} + +""" +Autogenerated input type of CreateProject +""" +input CreateProjectInput { + """ + The description of project. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of project. + """ + name: String! + + """ + The owner ID to create the project under. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization", "Repository", "User"], abstractType: "ProjectOwner") + + """ + A list of repository IDs to create as linked repositories for the project + """ + repositoryIds: [ID!] @possibleTypes(concreteTypes: ["Repository"]) + + """ + The name of the GitHub-provided template. + """ + template: ProjectTemplate +} + +""" +Autogenerated return type of CreateProject. +""" +type CreateProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new project. + """ + project: Project +} + +""" +Autogenerated input type of CreateProjectV2Field +""" +input CreateProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The data type of the field. + """ + dataType: ProjectV2CustomFieldType! + + """ + Configuration for an iteration field. + """ + iterationConfiguration: ProjectV2IterationFieldConfigurationInput + + """ + The name of the field. + """ + name: String! + + """ + The ID of the Project to create the field in. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + Options for a single select field. At least one value is required if data_type is SINGLE_SELECT + """ + singleSelectOptions: [ProjectV2SingleSelectFieldOptionInput!] +} + +""" +Autogenerated return type of CreateProjectV2Field. +""" +type CreateProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + +""" +Autogenerated input type of CreateProjectV2 +""" +input CreateProjectV2Input { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The owner ID to create the project under. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization", "User"]) + + """ + The repository to link the project to. + """ + repositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + + """ + The team to link the project to. The team will be granted read permissions. + """ + teamId: ID @possibleTypes(concreteTypes: ["Team"]) + + """ + The title of the project. + """ + title: String! +} + +""" +Autogenerated input type of CreateProjectV2IssueField +""" +input CreateProjectV2IssueFieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the IssueField to create the field for. + """ + issueFieldId: ID! + @possibleTypes( + concreteTypes: [ + "IssueFieldDate" + "IssueFieldMultiSelect" + "IssueFieldNumber" + "IssueFieldSingleSelect" + "IssueFieldText" + ] + abstractType: "IssueFields" + ) + + """ + The ID of the Project to create the field in. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of CreateProjectV2IssueField. +""" +type CreateProjectV2IssueFieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + +""" +Autogenerated return type of CreateProjectV2. +""" +type CreateProjectV2Payload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new project. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of CreateProjectV2StatusUpdate +""" +input CreateProjectV2StatusUpdateInput { + """ + The body of the status update. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to create the status update in. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The start date of the status update. + """ + startDate: Date + + """ + The status of the status update. + """ + status: ProjectV2StatusUpdateStatus + + """ + The target date of the status update. + """ + targetDate: Date +} + +""" +Autogenerated return type of CreateProjectV2StatusUpdate. +""" +type CreateProjectV2StatusUpdatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The status update updated in the project. + """ + statusUpdate: ProjectV2StatusUpdate +} + +""" +Autogenerated input type of CreatePullRequest +""" +input CreatePullRequestInput { + """ + The name of the branch you want your changes pulled into. This should be an existing branch + on the current repository. You cannot update the base branch on a pull request to point + to another repository. + """ + baseRefName: String! + + """ + The contents of the pull request. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Indicates whether this pull request should be a draft. + """ + draft: Boolean = false + + """ + The name of the branch where your changes are implemented. For cross-repository pull requests + in the same network, namespace `head_ref_name` with a user like this: `username:branch`. + """ + headRefName: String! + + """ + The Node ID of the head repository. + """ + headRepositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + + """ + Indicates whether maintainers can modify the pull request. + """ + maintainerCanModify: Boolean = true + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The title of the pull request. + """ + title: String! +} + +""" +Autogenerated return type of CreatePullRequest. +""" +type CreatePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new pull request. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of CreateRef +""" +input CreateRefInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The fully qualified name of the new Ref (ie: `refs/heads/my_new_branch`). + """ + name: String! + + """ + The GitObjectID that the new Ref shall target. Must point to a commit. + """ + oid: GitObjectID! + + """ + The Node ID of the Repository to create the Ref in. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of CreateRef. +""" +type CreateRefPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created ref. + """ + ref: Ref +} + +""" +Autogenerated input type of CreateRepositoryCustomProperty +""" +input CreateRepositoryCustomPropertyInput { + """ + The allowed values for the custom property. + """ + allowedValues: [String!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The default value for the custom property if the property is required. + """ + defaultValue: String + + """ + The description of the custom property. + """ + description: String + + """ + The name of the custom property. + """ + propertyName: String! + + """ + The regex pattern that the value of the custom property must match, if the `value_type` is `string`. + """ + regex: String + + """ + Whether this repository custom property requires explicit values. + """ + requireExplicitValues: Boolean + + """ + Whether the custom property is required. + """ + required: Boolean + + """ + The global relay id of the source in which a new custom property should be created in. + """ + sourceId: ID! @possibleTypes(concreteTypes: ["Enterprise", "Organization"], abstractType: "CustomPropertySource") + + """ + The value type for the custom property. + """ + valueType: CustomPropertyValueType! + + """ + The allowed actors who can edit the values of a custom property. + """ + valuesEditableBy: RepositoryCustomPropertyValuesEditableBy +} + +""" +Autogenerated return type of CreateRepositoryCustomProperty. +""" +type CreateRepositoryCustomPropertyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created repository custom property. + """ + repositoryCustomProperty: RepositoryCustomProperty +} + +""" +Autogenerated input type of CreateRepository +""" +input CreateRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A short description of the new repository. + """ + description: String + + """ + Indicates if the repository should have the issues feature enabled. + """ + hasIssuesEnabled: Boolean = true + + """ + Indicates if the repository should have the wiki feature enabled. + """ + hasWikiEnabled: Boolean = false + + """ + The URL for a web page about this repository. + """ + homepageUrl: URI + + """ + The name of the new repository. + """ + name: String! + + """ + The ID of the owner for the new repository. + """ + ownerId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "RepositoryOwner") + + """ + When an organization is specified as the owner, this ID identifies the team + that should be granted access to the new repository. + """ + teamId: ID @possibleTypes(concreteTypes: ["Team"]) + + """ + Whether this repository should be marked as a template such that anyone who + can access it can create new repositories with the same files and directory structure. + """ + template: Boolean = false + + """ + Indicates the repository's visibility level. + """ + visibility: RepositoryVisibility! +} + +""" +Autogenerated return type of CreateRepository. +""" +type CreateRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new repository. + """ + repository: Repository +} + +""" +Autogenerated input type of CreateRepositoryRuleset +""" +input CreateRepositoryRulesetInput { + """ + A list of actors that are allowed to bypass rules in this ruleset. + """ + bypassActors: [RepositoryRulesetBypassActorInput!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The set of conditions for this ruleset + """ + conditions: RepositoryRuleConditionsInput! + + """ + The enforcement level for this ruleset + """ + enforcement: RuleEnforcement! + + """ + The name of the ruleset. + """ + name: String! + + """ + The list of rules for this ruleset + """ + rules: [RepositoryRuleInput!] + + """ + The global relay id of the source in which a new ruleset should be created in. + """ + sourceId: ID! @possibleTypes(concreteTypes: ["Enterprise", "Organization", "Repository"], abstractType: "RuleSource") + + """ + The target of the ruleset. + """ + target: RepositoryRulesetTarget +} + +""" +Autogenerated return type of CreateRepositoryRuleset. +""" +type CreateRepositoryRulesetPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created Ruleset. + """ + ruleset: RepositoryRuleset +} + +""" +Autogenerated input type of CreateSponsorsListing +""" +input CreateSponsorsListingInput { + """ + The country or region where the sponsorable's bank account is located. + Required if fiscalHostLogin is not specified, ignored when fiscalHostLogin is specified. + """ + billingCountryOrRegionCode: SponsorsCountryOrRegionCode + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The email address we should use to contact you about the GitHub Sponsors + profile being created. This will not be shared publicly. Must be a verified + email address already on your GitHub account. Only relevant when the + sponsorable is yourself. Defaults to your primary email address on file if omitted. + """ + contactEmail: String + + """ + The username of the supported fiscal host's GitHub organization, if you want + to receive sponsorship payouts through a fiscal host rather than directly to a + bank account. For example, 'Open-Source-Collective' for Open Source Collective + or 'numfocus' for numFOCUS. Case insensitive. See https://docs.github.com/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts + for more information. + """ + fiscalHostLogin: String + + """ + The URL for your profile page on the fiscal host's website, e.g., + https://opencollective.com/babel or https://numfocus.org/project/bokeh. + Required if fiscalHostLogin is specified. + """ + fiscallyHostedProjectProfileUrl: String + + """ + Provide an introduction to serve as the main focus that appears on your GitHub + Sponsors profile. It's a great opportunity to help potential sponsors learn + more about you, your work, and why their sponsorship is important to you. + GitHub-flavored Markdown is supported. + """ + fullDescription: String + + """ + The country or region where the sponsorable resides. This is for tax purposes. + Required if the sponsorable is yourself, ignored when sponsorableLogin + specifies an organization. + """ + residenceCountryOrRegionCode: SponsorsCountryOrRegionCode + + """ + The username of the organization to create a GitHub Sponsors profile for, if + desired. Defaults to creating a GitHub Sponsors profile for the authenticated + user if omitted. + """ + sponsorableLogin: String +} + +""" +Autogenerated return type of CreateSponsorsListing. +""" +type CreateSponsorsListingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new GitHub Sponsors profile. + """ + sponsorsListing: SponsorsListing +} + +""" +Autogenerated input type of CreateSponsorsTier +""" +input CreateSponsorsTierInput { + """ + The value of the new tier in US dollars. Valid values: 1-12000. + """ + amount: Int! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A description of what this tier is, what perks sponsors might receive, what a sponsorship at this tier means for you, etc. + """ + description: String! + + """ + Whether sponsorships using this tier should happen monthly/yearly or just once. + """ + isRecurring: Boolean = true + + """ + Whether to make the tier available immediately for sponsors to choose. + Defaults to creating a draft tier that will not be publicly visible. + """ + publish: Boolean = false + + """ + Optional ID of the private repository that sponsors at this tier should gain + read-only access to. Must be owned by an organization. + """ + repositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + + """ + Optional name of the private repository that sponsors at this tier should gain + read-only access to. Must be owned by an organization. Necessary if + repositoryOwnerLogin is given. Will be ignored if repositoryId is given. + """ + repositoryName: String + + """ + Optional login of the organization owner of the private repository that + sponsors at this tier should gain read-only access to. Necessary if + repositoryName is given. Will be ignored if repositoryId is given. + """ + repositoryOwnerLogin: String + + """ + The ID of the user or organization who owns the GitHub Sponsors profile. + Defaults to the current user if omitted and sponsorableLogin is not given. + """ + sponsorableId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsorable") + + """ + The username of the user or organization who owns the GitHub Sponsors profile. + Defaults to the current user if omitted and sponsorableId is not given. + """ + sponsorableLogin: String + + """ + Optional message new sponsors at this tier will receive. + """ + welcomeMessage: String +} + +""" +Autogenerated return type of CreateSponsorsTier. +""" +type CreateSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new tier. + """ + sponsorsTier: SponsorsTier +} + +""" +Autogenerated input type of CreateSponsorship +""" +input CreateSponsorshipInput { + """ + The amount to pay to the sponsorable in US dollars. Required if a tierId is not specified. Valid values: 1-12000. + """ + amount: Int + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether the sponsorship should happen monthly/yearly or just this one time. Required if a tierId is not specified. + """ + isRecurring: Boolean + + """ + Specify whether others should be able to see that the sponsor is sponsoring + the sponsorable. Public visibility still does not reveal which tier is used. + """ + privacyLevel: SponsorshipPrivacy = PUBLIC + + """ + Whether the sponsor should receive email updates from the sponsorable. + """ + receiveEmails: Boolean = true + + """ + The ID of the user or organization who is acting as the sponsor, paying for + the sponsorship. Required if sponsorLogin is not given. + """ + sponsorId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsor") + + """ + The username of the user or organization who is acting as the sponsor, paying + for the sponsorship. Required if sponsorId is not given. + """ + sponsorLogin: String + + """ + The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. + """ + sponsorableId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsorable") + + """ + The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. + """ + sponsorableLogin: String + + """ + The ID of one of sponsorable's existing tiers to sponsor at. Required if amount is not specified. + """ + tierId: ID @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of CreateSponsorship. +""" +type CreateSponsorshipPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The sponsorship that was started. + """ + sponsorship: Sponsorship +} + +""" +Autogenerated input type of CreateSponsorships +""" +input CreateSponsorshipsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Specify whether others should be able to see that the sponsor is sponsoring + the sponsorables. Public visibility still does not reveal the dollar value of + the sponsorship. + """ + privacyLevel: SponsorshipPrivacy = PUBLIC + + """ + Whether the sponsor should receive email updates from the sponsorables. + """ + receiveEmails: Boolean = false + + """ + Whether the sponsorships created should continue each billing cycle for the + sponsor (monthly or annually), versus lasting only a single month. Defaults to + one-time sponsorships. + """ + recurring: Boolean = false + + """ + The username of the user or organization who is acting as the sponsor, paying for the sponsorships. + """ + sponsorLogin: String! + + """ + The list of maintainers to sponsor and for how much apiece. + """ + sponsorships: [BulkSponsorship!]! +} + +""" +Autogenerated return type of CreateSponsorships. +""" +type CreateSponsorshipsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The users and organizations who received a sponsorship. + """ + sponsorables: [Sponsorable!] +} + +""" +Autogenerated input type of CreateUserList +""" +input CreateUserListInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A description of the list + """ + description: String + + """ + Whether or not the list is private + """ + isPrivate: Boolean = false + + """ + The name of the new list + """ + name: String! +} + +""" +Autogenerated return type of CreateUserList. +""" +type CreateUserListPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The list that was just created + """ + list: UserList + + """ + The user who created the list + """ + viewer: User +} + +""" +Represents the contribution a user made by committing to a repository. +""" +type CreatedCommitContribution implements Contribution @docsCategory(name: "users") { + """ + How many commits were made on this day to this repository by the user. + """ + commitCount: Int! + + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The repository the user made a commit in. + """ + repository: Repository! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +The connection type for CreatedCommitContribution. +""" +type CreatedCommitContributionConnection { + """ + A list of edges. + """ + edges: [CreatedCommitContributionEdge] + + """ + A list of nodes. + """ + nodes: [CreatedCommitContribution] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of commits across days and repositories in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CreatedCommitContributionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CreatedCommitContribution +} + +""" +Represents the contribution a user made on GitHub by opening an issue. +""" +type CreatedIssueContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + The issue that was opened. + """ + issue: Issue! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +The connection type for CreatedIssueContribution. +""" +type CreatedIssueContributionConnection { + """ + A list of edges. + """ + edges: [CreatedIssueContributionEdge] + + """ + A list of nodes. + """ + nodes: [CreatedIssueContribution] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CreatedIssueContributionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CreatedIssueContribution +} + +""" +Represents either a issue the viewer can access or a restricted contribution. +""" +union CreatedIssueOrRestrictedContribution @docsCategory(name: "users") = + | CreatedIssueContribution + | RestrictedContribution + +""" +Represents the contribution a user made on GitHub by opening a pull request. +""" +type CreatedPullRequestContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The pull request that was opened. + """ + pullRequest: PullRequest! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +The connection type for CreatedPullRequestContribution. +""" +type CreatedPullRequestContributionConnection { + """ + A list of edges. + """ + edges: [CreatedPullRequestContributionEdge] + + """ + A list of nodes. + """ + nodes: [CreatedPullRequestContribution] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CreatedPullRequestContributionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CreatedPullRequestContribution +} + +""" +Represents either a pull request the viewer can access or a restricted contribution. +""" +union CreatedPullRequestOrRestrictedContribution @docsCategory(name: "users") = + | CreatedPullRequestContribution + | RestrictedContribution + +""" +Represents the contribution a user made by leaving a review on a pull request. +""" +type CreatedPullRequestReviewContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The pull request the user reviewed. + """ + pullRequest: PullRequest! + + """ + The review the user left on the pull request. + """ + pullRequestReview: PullRequestReview! + + """ + The repository containing the pull request that the user reviewed. + """ + repository: Repository! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +The connection type for CreatedPullRequestReviewContribution. +""" +type CreatedPullRequestReviewContributionConnection { + """ + A list of edges. + """ + edges: [CreatedPullRequestReviewContributionEdge] + + """ + A list of nodes. + """ + nodes: [CreatedPullRequestReviewContribution] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CreatedPullRequestReviewContributionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CreatedPullRequestReviewContribution +} + +""" +Represents the contribution a user made on GitHub by creating a repository. +""" +type CreatedRepositoryContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The repository that was created. + """ + repository: Repository! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +The connection type for CreatedRepositoryContribution. +""" +type CreatedRepositoryContributionConnection { + """ + A list of edges. + """ + edges: [CreatedRepositoryContributionEdge] + + """ + A list of nodes. + """ + nodes: [CreatedRepositoryContribution] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type CreatedRepositoryContributionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: CreatedRepositoryContribution +} + +""" +Represents either a repository the viewer can access or a restricted contribution. +""" +union CreatedRepositoryOrRestrictedContribution @docsCategory(name: "users") = + | CreatedRepositoryContribution + | RestrictedContribution + +""" +Represents a mention made by one issue or pull request to another. +""" +type CrossReferencedEvent implements Node & UniformResourceLocatable @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the CrossReferencedEvent object + """ + id: ID! + + """ + Reference originated in a different repository. + """ + isCrossRepository: Boolean! + + """ + Identifies when the reference was made. + """ + referencedAt: DateTime! + + """ + The HTTP path for this pull request. + """ + resourcePath: URI! + + """ + Issue or pull request that made the reference. + """ + source: ReferencedSubject! + + """ + Issue or pull request to which the reference was made. + """ + target: ReferencedSubject! + + """ + The HTTP URL for this pull request. + """ + url: URI! + + """ + Checks if the target will be closed when the source is merged. + """ + willCloseTarget: Boolean! +} + +""" +Sources which can have custom properties defined. +""" +union CustomPropertySource @docsCategory(name: "repos") = Enterprise | Organization + +""" +A custom property value can be either a string or an array of strings. All +property types support only a single string value, except for the multi-select +type, which supports only a string array. +""" +scalar CustomPropertyValue + +""" +The custom property name and value to be set. +""" +input CustomPropertyValueInput @docsCategory(name: "repos") { + """ + The name of the custom property. + """ + propertyName: String! + + """ + The value to set for the custom property. Using a value of null will unset the + property value, reverting to the default value if the property is required. + """ + value: CustomPropertyValue +} + +""" +The allowed value types for a custom property definition. +""" +enum CustomPropertyValueType @docsCategory(name: "repos") { + """ + A multi-select value. + """ + MULTI_SELECT + + """ + A single-select value. + """ + SINGLE_SELECT + + """ + A string value. + """ + STRING + + """ + A true/false value. + """ + TRUE_FALSE + + """ + A URL value. + """ + URL +} + +""" +The Common Vulnerability Scoring System +""" +type CvssSeverities @docsCategory(name: "security-advisories") { + """ + The CVSS v3 severity associated with this advisory + """ + cvssV3: CVSS + + """ + The CVSS v4 severity associated with this advisory + """ + cvssV4: CVSS +} + +""" +An ISO-8601 encoded date string. +""" +scalar Date + +""" +An ISO-8601 encoded UTC date string. +""" +scalar DateTime + +""" +Autogenerated input type of DeclineTopicSuggestion +""" +input DeclineTopicSuggestionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the suggested topic. + + **Upcoming Change on 2024-04-01 UTC** + **Description:** `name` will be removed. + **Reason:** Suggested topics are no longer supported + """ + name: String + + """ + The reason why the suggested topic is declined. + + **Upcoming Change on 2024-04-01 UTC** + **Description:** `reason` will be removed. + **Reason:** Suggested topics are no longer supported + """ + reason: TopicSuggestionDeclineReason + + """ + The Node ID of the repository. + + **Upcoming Change on 2024-04-01 UTC** + **Description:** `repositoryId` will be removed. + **Reason:** Suggested topics are no longer supported + """ + repositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of DeclineTopicSuggestion. +""" +type DeclineTopicSuggestionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The declined topic. + """ + topic: Topic @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") +} + +""" +The possible base permissions for repositories. +""" +enum DefaultRepositoryPermissionField @docsCategory(name: "repos") { + """ + Can read, write, and administrate repos by default + """ + ADMIN + + """ + No access + """ + NONE + + """ + Can read repos by default + """ + READ + + """ + Can read and write repos by default + """ + WRITE +} + +""" +Entities that can be deleted. +""" +interface Deletable @docsCategory(name: "issues") { + """ + Check if the current viewer can delete this object. + """ + viewerCanDelete: Boolean! +} + +""" +Autogenerated input type of DeleteBranchProtectionRule +""" +input DeleteBranchProtectionRuleInput { + """ + The global relay id of the branch protection rule to be deleted. + """ + branchProtectionRuleId: ID! @possibleTypes(concreteTypes: ["BranchProtectionRule"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated return type of DeleteBranchProtectionRule. +""" +type DeleteBranchProtectionRulePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteDeployment +""" +input DeleteDeploymentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the deployment to be deleted. + """ + id: ID! @possibleTypes(concreteTypes: ["Deployment"]) +} + +""" +Autogenerated return type of DeleteDeployment. +""" +type DeleteDeploymentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteDiscussionComment +""" +input DeleteDiscussionCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node id of the discussion comment to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["DiscussionComment"]) +} + +""" +Autogenerated return type of DeleteDiscussionComment. +""" +type DeleteDiscussionCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion comment that was just deleted. + """ + comment: DiscussionComment +} + +""" +Autogenerated input type of DeleteDiscussion +""" +input DeleteDiscussionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the discussion to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["Discussion"]) +} + +""" +Autogenerated return type of DeleteDiscussion. +""" +type DeleteDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that was just deleted. + """ + discussion: Discussion +} + +""" +Autogenerated input type of DeleteEnvironment +""" +input DeleteEnvironmentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the environment to be deleted. + """ + id: ID! @possibleTypes(concreteTypes: ["Environment"]) +} + +""" +Autogenerated return type of DeleteEnvironment. +""" +type DeleteEnvironmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteIpAllowListEntry +""" +input DeleteIpAllowListEntryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the IP allow list entry to delete. + """ + ipAllowListEntryId: ID! @possibleTypes(concreteTypes: ["IpAllowListEntry"]) +} + +""" +Autogenerated return type of DeleteIpAllowListEntry. +""" +type DeleteIpAllowListEntryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list entry that was deleted. + """ + ipAllowListEntry: IpAllowListEntry +} + +""" +Autogenerated input type of DeleteIssueComment +""" +input DeleteIssueCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the comment to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["IssueComment"]) +} + +""" +Autogenerated return type of DeleteIssueComment. +""" +type DeleteIssueCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteIssueField +""" +input DeleteIssueFieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to delete. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: [ + "IssueFieldDate" + "IssueFieldMultiSelect" + "IssueFieldNumber" + "IssueFieldSingleSelect" + "IssueFieldText" + ] + abstractType: "IssueFields" + ) +} + +""" +Autogenerated return type of DeleteIssueField. +""" +type DeleteIssueFieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted issue field. + """ + issueField: IssueFields +} + +""" +Autogenerated input type of DeleteIssueFieldValue +""" +input DeleteIssueFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to delete. + """ + fieldId: ID! + + """ + The ID of the issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of DeleteIssueFieldValue. +""" +type DeleteIssueFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue object. + """ + issue: Issue + + """ + Whether the field value was successfully deleted. + """ + success: Boolean +} + +""" +Autogenerated input type of DeleteIssue +""" +input DeleteIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue to delete. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of DeleteIssue. +""" +type DeleteIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository the issue belonged to + """ + repository: Repository +} + +""" +Autogenerated input type of DeleteIssueType +""" +input DeleteIssueTypeInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue type to delete + """ + issueTypeId: ID! @possibleTypes(concreteTypes: ["IssueType"]) +} + +""" +Autogenerated return type of DeleteIssueType. +""" +type DeleteIssueTypePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the deleted issue type + """ + deletedIssueTypeId: ID +} + +""" +Autogenerated input type of DeleteLabel +""" +input DeleteLabelInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the label to be deleted. + """ + id: ID! @possibleTypes(concreteTypes: ["Label"]) +} + +""" +Autogenerated return type of DeleteLabel. +""" +type DeleteLabelPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteLinkedBranch +""" +input DeleteLinkedBranchInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the linked branch + """ + linkedBranchId: ID! @possibleTypes(concreteTypes: ["LinkedBranch"]) +} + +""" +Autogenerated return type of DeleteLinkedBranch. +""" +type DeleteLinkedBranchPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue the linked branch was unlinked from. + """ + issue: Issue +} + +""" +Autogenerated input type of DeletePackageVersion +""" +input DeletePackageVersionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the package version to be deleted. + """ + packageVersionId: ID! @possibleTypes(concreteTypes: ["PackageVersion"]) +} + +""" +Autogenerated return type of DeletePackageVersion. +""" +type DeletePackageVersionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether or not the operation succeeded. + """ + success: Boolean +} + +""" +Autogenerated input type of DeleteProjectCard +""" +input DeleteProjectCardInput { + """ + The id of the card to delete. + """ + cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated return type of DeleteProjectCard. +""" +type DeleteProjectCardPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The column the deleted card was in. + """ + column: ProjectColumn + + """ + The deleted card ID. + """ + deletedCardId: ID +} + +""" +Autogenerated input type of DeleteProjectColumn +""" +input DeleteProjectColumnInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the column to delete. + """ + columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"]) +} + +""" +Autogenerated return type of DeleteProjectColumn. +""" +type DeleteProjectColumnPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted column ID. + """ + deletedColumnId: ID + + """ + The project the deleted column was in. + """ + project: Project +} + +""" +Autogenerated input type of DeleteProject +""" +input DeleteProjectInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Project ID to update. + """ + projectId: ID! @possibleTypes(concreteTypes: ["Project"]) +} + +""" +Autogenerated return type of DeleteProject. +""" +type DeleteProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository or organization the project was removed from. + """ + owner: ProjectOwner +} + +""" +Autogenerated input type of DeleteProjectV2Field +""" +input DeleteProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to delete. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) +} + +""" +Autogenerated return type of DeleteProjectV2Field. +""" +type DeleteProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + +""" +Autogenerated input type of DeleteProjectV2 +""" +input DeleteProjectV2Input { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to delete. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated input type of DeleteProjectV2Item +""" +input DeleteProjectV2ItemInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the item to be removed. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project from which the item should be removed. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of DeleteProjectV2Item. +""" +type DeleteProjectV2ItemPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the deleted item. + """ + deletedItemId: ID +} + +""" +Autogenerated return type of DeleteProjectV2. +""" +type DeleteProjectV2Payload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted Project. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of DeleteProjectV2StatusUpdate +""" +input DeleteProjectV2StatusUpdateInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the status update to be removed. + """ + statusUpdateId: ID! @possibleTypes(concreteTypes: ["ProjectV2StatusUpdate"]) +} + +""" +Autogenerated return type of DeleteProjectV2StatusUpdate. +""" +type DeleteProjectV2StatusUpdatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the deleted status update. + """ + deletedStatusUpdateId: ID + + """ + The project the deleted status update was in. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of DeleteProjectV2Workflow +""" +input DeleteProjectV2WorkflowInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the workflow to be removed. + """ + workflowId: ID! @possibleTypes(concreteTypes: ["ProjectV2Workflow"]) +} + +""" +Autogenerated return type of DeleteProjectV2Workflow. +""" +type DeleteProjectV2WorkflowPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the deleted workflow. + """ + deletedWorkflowId: ID + + """ + The project the deleted workflow was in. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of DeletePullRequestReviewComment +""" +input DeletePullRequestReviewCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the comment to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["PullRequestReviewComment"]) +} + +""" +Autogenerated return type of DeletePullRequestReviewComment. +""" +type DeletePullRequestReviewCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request review the deleted comment belonged to. + """ + pullRequestReview: PullRequestReview + + """ + The deleted pull request review comment. + """ + pullRequestReviewComment: PullRequestReviewComment +} + +""" +Autogenerated input type of DeletePullRequestReview +""" +input DeletePullRequestReviewInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request review to delete. + """ + pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"]) +} + +""" +Autogenerated return type of DeletePullRequestReview. +""" +type DeletePullRequestReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted pull request review. + """ + pullRequestReview: PullRequestReview +} + +""" +Autogenerated input type of DeleteRef +""" +input DeleteRefInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the Ref to be deleted. + """ + refId: ID! @possibleTypes(concreteTypes: ["Ref"]) +} + +""" +Autogenerated return type of DeleteRef. +""" +type DeleteRefPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteRepositoryCustomProperty +""" +input DeleteRepositoryCustomPropertyInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The global relay id of the custom property to be deleted. + """ + id: ID! @possibleTypes(concreteTypes: ["RepositoryCustomProperty"]) +} + +""" +Autogenerated return type of DeleteRepositoryCustomProperty. +""" +type DeleteRepositoryCustomPropertyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted custom property. + """ + repositoryCustomProperty: RepositoryCustomProperty +} + +""" +Autogenerated input type of DeleteRepositoryRuleset +""" +input DeleteRepositoryRulesetInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The global relay id of the repository ruleset to be deleted. + """ + repositoryRulesetId: ID! @possibleTypes(concreteTypes: ["RepositoryRuleset"]) +} + +""" +Autogenerated return type of DeleteRepositoryRuleset. +""" +type DeleteRepositoryRulesetPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of DeleteUserList +""" +input DeleteUserListInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the list to delete. + """ + listId: ID! @possibleTypes(concreteTypes: ["UserList"]) +} + +""" +Autogenerated return type of DeleteUserList. +""" +type DeleteUserListPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The owner of the list that will be deleted + """ + user: User +} + +""" +Autogenerated input type of DeleteVerifiableDomain +""" +input DeleteVerifiableDomainInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the verifiable domain to delete. + """ + id: ID! @possibleTypes(concreteTypes: ["VerifiableDomain"]) +} + +""" +Autogenerated return type of DeleteVerifiableDomain. +""" +type DeleteVerifiableDomainPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The owning account from which the domain was deleted. + """ + owner: VerifiableDomainOwner +} + +""" +Represents a 'demilestoned' event on a given issue or pull request. +""" +type DemilestonedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the DemilestonedEvent object + """ + id: ID! + + """ + Identifies the milestone title associated with the 'demilestoned' event. + """ + milestoneTitle: String! + + """ + Object referenced by event. + """ + subject: MilestoneItem! +} + +""" +A Dependabot Update for a dependency in a repository +""" +type DependabotUpdate implements RepositoryNode @docsCategory(name: "dependabot") { + """ + The error from a dependency update + """ + error: DependabotUpdateError + + """ + The associated pull request + """ + pullRequest: PullRequest + + """ + The repository associated with this node. + """ + repository: Repository! +} + +""" +An error produced from a Dependabot Update +""" +type DependabotUpdateError @docsCategory(name: "dependabot") { + """ + The body of the error + """ + body: String! + + """ + The error code + """ + errorType: String! + + """ + The title of the error + """ + title: String! +} + +""" +A dependency manifest entry +""" +type DependencyGraphDependency @docsCategory(name: "dependency-graph") { + """ + Does the dependency itself have dependencies? + """ + hasDependencies: Boolean! + + """ + The original name of the package, as it appears in the manifest. + """ + packageLabel: String! + @deprecated( + reason: "`packageLabel` will be removed. Use normalized `packageName` field instead. Removal on 2022-10-01 UTC." + ) + + """ + The dependency package manager + """ + packageManager: String + + """ + The name of the package in the canonical form used by the package manager. + """ + packageName: String! + + """ + Public preview: The dependency package URL + """ + packageUrl: URI + + """ + Public preview: The relationship of the dependency. Can be direct, transitive, or unknown + """ + relationship: String! + + """ + The repository containing the package + """ + repository: Repository + + """ + The dependency version requirements + """ + requirements: String! +} + +""" +The connection type for DependencyGraphDependency. +""" +type DependencyGraphDependencyConnection { + """ + A list of edges. + """ + edges: [DependencyGraphDependencyEdge] + + """ + A list of nodes. + """ + nodes: [DependencyGraphDependency] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DependencyGraphDependencyEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DependencyGraphDependency +} + +""" +The possible ecosystems of a dependency graph package. +""" +enum DependencyGraphEcosystem @docsCategory(name: "dependency-graph") { + """ + GitHub Actions + """ + ACTIONS + + """ + PHP packages hosted at packagist.org + """ + COMPOSER + + """ + Go modules + """ + GO + + """ + Java artifacts hosted at the Maven central repository + """ + MAVEN + + """ + JavaScript packages hosted at npmjs.com + """ + NPM + + """ + .NET packages hosted at the NuGet Gallery + """ + NUGET + + """ + Python packages hosted at PyPI.org + """ + PIP + + """ + Dart packages hosted at pub.dev + """ + PUB + + """ + Ruby gems hosted at RubyGems.org + """ + RUBYGEMS + + """ + Rust crates + """ + RUST + + """ + Swift packages + """ + SWIFT +} + +""" +Dependency manifest for a repository +""" +type DependencyGraphManifest implements Node @docsCategory(name: "dependency-graph") { + """ + Path to view the manifest file blob + """ + blobPath: String! + + """ + A list of manifest dependencies + """ + dependencies( + """ + 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 + ): DependencyGraphDependencyConnection + + """ + The number of dependencies listed in the manifest + """ + dependenciesCount: Int + + """ + Is the manifest too big to parse? + """ + exceedsMaxSize: Boolean! + + """ + Fully qualified manifest filename + """ + filename: String! + + """ + The Node ID of the DependencyGraphManifest object + """ + id: ID! + + """ + Were we able to parse the manifest? + """ + parseable: Boolean! + + """ + The repository containing the manifest + """ + repository: Repository! +} + +""" +The connection type for DependencyGraphManifest. +""" +type DependencyGraphManifestConnection { + """ + A list of edges. + """ + edges: [DependencyGraphManifestEdge] + + """ + A list of nodes. + """ + nodes: [DependencyGraphManifest] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DependencyGraphManifestEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DependencyGraphManifest +} + +""" +A repository deploy key. +""" +type DeployKey implements Node @docsCategory(name: "deploy-keys") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Whether or not the deploy key is enabled by policy at the Enterprise or Organization level. + """ + enabled: Boolean! + + """ + The Node ID of the DeployKey object + """ + id: ID! + + """ + The deploy key. + """ + key: String! + + """ + Whether or not the deploy key is read only. + """ + readOnly: Boolean! + + """ + The deploy key title. + """ + title: String! + + """ + Whether or not the deploy key has been verified. + """ + verified: Boolean! +} + +""" +The connection type for DeployKey. +""" +type DeployKeyConnection { + """ + A list of edges. + """ + edges: [DeployKeyEdge] + + """ + A list of nodes. + """ + nodes: [DeployKey] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeployKeyEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeployKey +} + +""" +Represents a 'deployed' event on a given pull request. +""" +type DeployedEvent implements Node @docsCategory(name: "deployments") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The deployment associated with the 'deployed' event. + """ + deployment: Deployment! + + """ + The Node ID of the DeployedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + The ref associated with the 'deployed' event. + """ + ref: Ref +} + +""" +Represents triggered deployment instance. +""" +type Deployment implements Node @docsCategory(name: "deployments") { + """ + Identifies the commit sha of the deployment. + """ + commit: Commit + + """ + Identifies the oid of the deployment commit, even if the commit has been deleted. + """ + commitOid: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the actor who triggered the deployment. + """ + creator: Actor! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The deployment description. + """ + description: String + + """ + The latest environment to which this deployment was made. + """ + environment: String + + """ + The Node ID of the Deployment object + """ + id: ID! + + """ + The latest environment to which this deployment was made. + """ + latestEnvironment: String + + """ + The latest status of this deployment. + """ + latestStatus: DeploymentStatus + + """ + The original environment to which this deployment was made. + """ + originalEnvironment: String + + """ + Extra information that a deployment system might need. + """ + payload: String + + """ + Identifies the Ref of the deployment, if the deployment was created by ref. + """ + ref: Ref + + """ + Identifies the repository associated with the deployment. + """ + repository: Repository! + + """ + The current state of the deployment. + """ + state: DeploymentState + + """ + A list of statuses associated with the deployment. + """ + statuses( + """ + 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 + ): DeploymentStatusConnection + + """ + The deployment task. + """ + task: String + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for Deployment. +""" +type DeploymentConnection { + """ + A list of edges. + """ + edges: [DeploymentEdge] + + """ + A list of nodes. + """ + nodes: [Deployment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Deployment +} + +""" +Represents a 'deployment_environment_changed' event on a given pull request. +""" +type DeploymentEnvironmentChangedEvent implements Node @docsCategory(name: "deployments") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The deployment status that updated the deployment environment. + """ + deploymentStatus: DeploymentStatus! + + """ + The Node ID of the DeploymentEnvironmentChangedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +Ordering options for deployment connections +""" +input DeploymentOrder @docsCategory(name: "deployments") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order deployments by. + """ + field: DeploymentOrderField! +} + +""" +Properties by which deployment connections can be ordered. +""" +enum DeploymentOrderField @docsCategory(name: "deployments") { + """ + Order collection by creation time + """ + CREATED_AT +} + +""" +A protection rule. +""" +type DeploymentProtectionRule @docsCategory(name: "deployments") { + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Whether deployments to this environment can be approved by the user who created the deployment. + """ + preventSelfReview: Boolean + + """ + The teams or users that can review the deployment + """ + reviewers( + """ + 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 + ): DeploymentReviewerConnection! + + """ + The timeout in minutes for this protection rule. + """ + timeout: Int! + + """ + The type of protection rule. + """ + type: DeploymentProtectionRuleType! +} + +""" +The connection type for DeploymentProtectionRule. +""" +type DeploymentProtectionRuleConnection { + """ + A list of edges. + """ + edges: [DeploymentProtectionRuleEdge] + + """ + A list of nodes. + """ + nodes: [DeploymentProtectionRule] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentProtectionRuleEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeploymentProtectionRule +} + +""" +The possible protection rule types. +""" +enum DeploymentProtectionRuleType @docsCategory(name: "deployments") { + """ + Branch policy + """ + BRANCH_POLICY + + """ + Required reviewers + """ + REQUIRED_REVIEWERS + + """ + Wait timer + """ + WAIT_TIMER +} + +""" +A request to deploy a workflow run to an environment. +""" +type DeploymentRequest @docsCategory(name: "deployments") { + """ + Whether or not the current user can approve the deployment + """ + currentUserCanApprove: Boolean! + + """ + The target environment of the deployment + """ + environment: Environment! + + """ + The teams or users that can review the deployment + """ + reviewers( + """ + 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 + ): DeploymentReviewerConnection! + + """ + The wait timer in minutes configured in the environment + """ + waitTimer: Int! + + """ + The wait timer in minutes configured in the environment + """ + waitTimerStartedAt: DateTime +} + +""" +The connection type for DeploymentRequest. +""" +type DeploymentRequestConnection { + """ + A list of edges. + """ + edges: [DeploymentRequestEdge] + + """ + A list of nodes. + """ + nodes: [DeploymentRequest] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentRequestEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeploymentRequest +} + +""" +A deployment review. +""" +type DeploymentReview implements Node @docsCategory(name: "deployments") { + """ + The comment the user left. + """ + comment: String! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The environments approved or rejected + """ + environments( + """ + 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 + ): EnvironmentConnection! + + """ + The Node ID of the DeploymentReview object + """ + id: ID! + + """ + The decision of the user. + """ + state: DeploymentReviewState! + + """ + The user that reviewed the deployment. + """ + user: User! +} + +""" +The connection type for DeploymentReview. +""" +type DeploymentReviewConnection { + """ + A list of edges. + """ + edges: [DeploymentReviewEdge] + + """ + A list of nodes. + """ + nodes: [DeploymentReview] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentReviewEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeploymentReview +} + +""" +The possible states for a deployment review. +""" +enum DeploymentReviewState @docsCategory(name: "deployments") { + """ + The deployment was approved. + """ + APPROVED + + """ + The deployment was rejected. + """ + REJECTED +} + +""" +Users and teams. +""" +union DeploymentReviewer @docsCategory(name: "deployments") = Team | User + +""" +The connection type for DeploymentReviewer. +""" +type DeploymentReviewerConnection { + """ + A list of edges. + """ + edges: [DeploymentReviewerEdge] + + """ + A list of nodes. + """ + nodes: [DeploymentReviewer] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentReviewerEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeploymentReviewer +} + +""" +The possible states in which a deployment can be. +""" +enum DeploymentState @docsCategory(name: "deployments") { + """ + The pending deployment was not updated after 30 minutes. + """ + ABANDONED + + """ + The deployment is currently active. + """ + ACTIVE + + """ + An inactive transient deployment. + """ + DESTROYED + + """ + The deployment experienced an error. + """ + ERROR + + """ + The deployment has failed. + """ + FAILURE + + """ + The deployment is inactive. + """ + INACTIVE + + """ + The deployment is in progress. + """ + IN_PROGRESS + + """ + The deployment is pending. + """ + PENDING + + """ + The deployment has queued + """ + QUEUED + + """ + The deployment was successful. + """ + SUCCESS + + """ + The deployment is waiting. + """ + WAITING +} + +""" +Describes the status of a given deployment attempt. +""" +type DeploymentStatus implements Node @docsCategory(name: "deployments") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the actor who triggered the deployment. + """ + creator: Actor! + + """ + Identifies the deployment associated with status. + """ + deployment: Deployment! + + """ + Identifies the description of the deployment. + """ + description: String + + """ + Identifies the environment of the deployment at the time of this deployment status + """ + environment: String + + """ + Identifies the environment URL of the deployment. + """ + environmentUrl: URI + + """ + The Node ID of the DeploymentStatus object + """ + id: ID! + + """ + Identifies the log URL of the deployment. + """ + logUrl: URI + + """ + Identifies the current state of the deployment. + """ + state: DeploymentStatusState! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for DeploymentStatus. +""" +type DeploymentStatusConnection { + """ + A list of edges. + """ + edges: [DeploymentStatusEdge] + + """ + A list of nodes. + """ + nodes: [DeploymentStatus] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DeploymentStatusEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DeploymentStatus +} + +""" +The possible states for a deployment status. +""" +enum DeploymentStatusState @docsCategory(name: "deployments") { + """ + The deployment experienced an error. + """ + ERROR + + """ + The deployment has failed. + """ + FAILURE + + """ + The deployment is inactive. + """ + INACTIVE + + """ + The deployment is in progress. + """ + IN_PROGRESS + + """ + The deployment is pending. + """ + PENDING + + """ + The deployment is queued + """ + QUEUED + + """ + The deployment was successful. + """ + SUCCESS + + """ + The deployment is waiting. + """ + WAITING +} + +""" +Autogenerated input type of DequeuePullRequest +""" +input DequeuePullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the pull request to be dequeued. + """ + id: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of DequeuePullRequest. +""" +type DequeuePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The merge queue entry of the dequeued pull request. + """ + mergeQueueEntry: MergeQueueEntry +} + +""" +The possible sides of a diff. +""" +enum DiffSide @docsCategory(name: "pulls") { + """ + The left side of the diff. + """ + LEFT + + """ + The right side of the diff. + """ + RIGHT +} + +""" +Autogenerated input type of DisablePullRequestAutoMerge +""" +input DisablePullRequestAutoMergeInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the pull request to disable auto merge on. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of DisablePullRequestAutoMerge. +""" +type DisablePullRequestAutoMergePayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request auto merge was disabled on. + """ + pullRequest: PullRequest +} + +""" +Represents a 'disconnected' event on a given issue or pull request. +""" +type DisconnectedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the DisconnectedEvent object + """ + id: ID! + + """ + Reference originated in a different repository. + """ + isCrossRepository: Boolean! + + """ + Issue or pull request from which the issue was disconnected. + """ + source: ReferencedSubject! + + """ + Issue or pull request which was disconnected. + """ + subject: ReferencedSubject! +} + +""" +A discussion in a repository. +""" +type Discussion implements Closable & Comment & Deletable & Labelable & Lockable & Node & Reactable & RepositoryNode & Subscribable & Updatable & Votable + @docsCategory(name: "discussions") { + """ + Reason that the conversation was locked. + """ + activeLockReason: LockReason + + """ + The comment chosen as this discussion's answer, if any. + """ + answer: DiscussionComment + + """ + The time when a user chose this discussion's answer, if answered. + """ + answerChosenAt: DateTime + + """ + The user who chose this discussion's answer, if answered. + """ + answerChosenBy: Actor + + """ + The actor who authored the discussion. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + The main text of the discussion post. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + The category for this discussion. + """ + category: DiscussionCategory! + + """ + Indicates if the object is closed (definition of closed may depend on type) + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + The replies to the discussion. + """ + comments( + """ + 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 + ): DiscussionCommentConnection! + + """ + 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 Discussion object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Only return answered/unanswered discussions + """ + isAnswered: Boolean + + """ + A list of labels associated with the object. + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + ): LabelConnection + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + `true` if the object is locked + """ + locked: Boolean! + + """ + The number identifying this discussion within the repository. + """ + number: Int! + + """ + The poll associated with this discussion, if one exists. + """ + poll: DiscussionPoll + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The path for this discussion. + """ + resourcePath: URI! + + """ + Identifies the reason for the discussion's state. + """ + stateReason: DiscussionStateReason + + """ + The title of this discussion. + """ + title: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + Number of upvotes that this subject has received. + """ + upvoteCount: Int! + + """ + The URL for this discussion. + """ + url: URI! + + """ + 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 + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Check if the current viewer can delete this object. + """ + viewerCanDelete: Boolean! + + """ + Indicates if the viewer can edit labels for this object. + """ + viewerCanLabel: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: 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! + + """ + Whether or not the current user can add or remove an upvote on this subject. + """ + viewerCanUpvote: Boolean! + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! + + """ + Whether or not the current user has already upvoted this subject. + """ + viewerHasUpvoted: Boolean! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState +} + +""" +A category for discussions in a repository. +""" +type DiscussionCategory implements Node & RepositoryNode @docsCategory(name: "discussions") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + A description of this category. + """ + description: String + + """ + An emoji representing this category. + """ + emoji: String! + + """ + This category's emoji rendered as HTML. + """ + emojiHTML: HTML! + + """ + The Node ID of the DiscussionCategory object + """ + id: ID! + + """ + Whether or not discussions in this category support choosing an answer with the markDiscussionCommentAsAnswer mutation. + """ + isAnswerable: Boolean! + + """ + The name of this category. + """ + name: String! + + """ + The repository associated with this node. + """ + repository: Repository! + + """ + The slug of this category. + """ + slug: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for DiscussionCategory. +""" +type DiscussionCategoryConnection { + """ + A list of edges. + """ + edges: [DiscussionCategoryEdge] + + """ + A list of nodes. + """ + nodes: [DiscussionCategory] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DiscussionCategoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DiscussionCategory +} + +""" +The possible reasons for closing a discussion. +""" +enum DiscussionCloseReason @docsCategory(name: "discussions") { + """ + The discussion is a duplicate of another + """ + DUPLICATE + + """ + The discussion is no longer relevant + """ + OUTDATED + + """ + The discussion has been resolved + """ + RESOLVED +} + +""" +A comment on a discussion. +""" +type DiscussionComment implements Comment & Deletable & Minimizable & Node & Reactable & Updatable & UpdatableComment & Votable + @docsCategory(name: "discussions") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + 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 time when this replied-to comment was deleted + """ + deletedAt: DateTime + + """ + The discussion this comment was created in + """ + discussion: Discussion + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + The Node ID of the DiscussionComment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Has this comment been chosen as the answer of its discussion? + """ + isAnswer: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + 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 threaded replies to this comment. + """ + replies( + """ + 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 + ): DiscussionCommentConnection! + + """ + The discussion comment this comment is a reply to + """ + replyTo: DiscussionComment + + """ + The path for this discussion comment. + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + Number of upvotes that this subject has received. + """ + upvoteCount: Int! + + """ + The URL for this discussion comment. + """ + url: URI! + + """ + 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! + + """ + Can the current user mark this comment as an answer? + """ + viewerCanMarkAsAnswer: Boolean! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Can the current user unmark this comment as an answer? + """ + viewerCanUnmarkAsAnswer: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: Boolean! + + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! + + """ + Whether or not the current user can add or remove an upvote on this subject. + """ + viewerCanUpvote: Boolean! + + """ + Reasons why the current viewer can not update this comment. + """ + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! + + """ + Whether or not the current user has already upvoted this subject. + """ + viewerHasUpvoted: Boolean! +} + +""" +The connection type for DiscussionComment. +""" +type DiscussionCommentConnection { + """ + A list of edges. + """ + edges: [DiscussionCommentEdge] + + """ + A list of nodes. + """ + nodes: [DiscussionComment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DiscussionCommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DiscussionComment +} + +""" +The connection type for Discussion. +""" +type DiscussionConnection { + """ + A list of edges. + """ + edges: [DiscussionEdge] + + """ + A list of nodes. + """ + nodes: [Discussion] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DiscussionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Discussion +} + +""" +Ways in which lists of discussions can be ordered upon return. +""" +input DiscussionOrder @docsCategory(name: "discussions") { + """ + The direction in which to order discussions by the specified field. + """ + direction: OrderDirection! + + """ + The field by which to order discussions. + """ + field: DiscussionOrderField! +} + +""" +Properties by which discussion connections can be ordered. +""" +enum DiscussionOrderField @docsCategory(name: "discussions") { + """ + Order discussions by creation time. + """ + CREATED_AT + + """ + Order discussions by most recent modification time. + """ + UPDATED_AT +} + +""" +A poll for a discussion. +""" +type DiscussionPoll implements Node @docsCategory(name: "discussions") { + """ + The discussion that this poll belongs to. + """ + discussion: Discussion + + """ + The Node ID of the DiscussionPoll object + """ + id: ID! + + """ + The options for this poll. + """ + options( + """ + 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 + + """ + How to order the options for the discussion poll. + """ + orderBy: DiscussionPollOptionOrder = {field: AUTHORED_ORDER, direction: ASC} + ): DiscussionPollOptionConnection + + """ + The question that is being asked by this poll. + """ + question: String! + + """ + The total number of votes that have been cast for this poll. + """ + totalVoteCount: Int! + + """ + Indicates if the viewer has permission to vote in this poll. + """ + viewerCanVote: Boolean! + + """ + Indicates if the viewer has voted for any option in this poll. + """ + viewerHasVoted: Boolean! +} + +""" +An option for a discussion poll. +""" +type DiscussionPollOption implements Node @docsCategory(name: "discussions") { + """ + The Node ID of the DiscussionPollOption object + """ + id: ID! + + """ + The text for this option. + """ + option: String! + + """ + The discussion poll that this option belongs to. + """ + poll: DiscussionPoll + + """ + The total number of votes that have been cast for this option. + """ + totalVoteCount: Int! + + """ + Indicates if the viewer has voted for this option in the poll. + """ + viewerHasVoted: Boolean! +} + +""" +The connection type for DiscussionPollOption. +""" +type DiscussionPollOptionConnection { + """ + A list of edges. + """ + edges: [DiscussionPollOptionEdge] + + """ + A list of nodes. + """ + nodes: [DiscussionPollOption] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type DiscussionPollOptionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: DiscussionPollOption +} + +""" +Ordering options for discussion poll option connections. +""" +input DiscussionPollOptionOrder @docsCategory(name: "discussions") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order poll options by. + """ + field: DiscussionPollOptionOrderField! +} + +""" +Properties by which discussion poll option connections can be ordered. +""" +enum DiscussionPollOptionOrderField @docsCategory(name: "discussions") { + """ + Order poll options by the order that the poll author specified when creating the poll. + """ + AUTHORED_ORDER + + """ + Order poll options by the number of votes it has. + """ + VOTE_COUNT +} + +""" +The possible states of a discussion. +""" +enum DiscussionState @docsCategory(name: "discussions") { + """ + A discussion that has been closed + """ + CLOSED + + """ + A discussion that is open + """ + OPEN +} + +""" +The possible state reasons of a discussion. +""" +enum DiscussionStateReason @docsCategory(name: "discussions") { + """ + The discussion is a duplicate of another + """ + DUPLICATE + + """ + The discussion is no longer relevant + """ + OUTDATED + + """ + The discussion was reopened + """ + REOPENED + + """ + The discussion has been resolved + """ + RESOLVED +} + +""" +Autogenerated input type of DismissPullRequestReview +""" +input DismissPullRequestReviewInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The contents of the pull request review dismissal message. + """ + message: String! + + """ + The Node ID of the pull request review to modify. + """ + pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"]) +} + +""" +Autogenerated return type of DismissPullRequestReview. +""" +type DismissPullRequestReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The dismissed pull request review. + """ + pullRequestReview: PullRequestReview +} + +""" +The possible reasons that a Dependabot alert was dismissed. +""" +enum DismissReason @docsCategory(name: "dependabot") { + """ + A fix has already been started + """ + FIX_STARTED + + """ + This alert is inaccurate or incorrect + """ + INACCURATE + + """ + Vulnerable code is not actually used + """ + NOT_USED + + """ + No bandwidth to fix this + """ + NO_BANDWIDTH + + """ + Risk is tolerable to this project + """ + TOLERABLE_RISK +} + +""" +Autogenerated input type of DismissRepositoryVulnerabilityAlert +""" +input DismissRepositoryVulnerabilityAlertInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The reason the Dependabot alert is being dismissed. + """ + dismissReason: DismissReason! + + """ + The Dependabot alert ID to dismiss. + """ + repositoryVulnerabilityAlertId: ID! @possibleTypes(concreteTypes: ["RepositoryVulnerabilityAlert"]) +} + +""" +Autogenerated return type of DismissRepositoryVulnerabilityAlert. +""" +type DismissRepositoryVulnerabilityAlertPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Dependabot alert that was dismissed + """ + repositoryVulnerabilityAlert: RepositoryVulnerabilityAlert +} + +""" +Specify people, teams, or apps allowed to dismiss pull request reviews. +""" +type DismissalRestriction @docsCategory(name: "pulls") { + """ + Specify people, teams, or apps allowed to dismiss pull request reviews. + """ + allowedActors: [ID!] + + """ + Whether to restrict review dismissal to specific actors. + """ + enabled: Boolean! +} + +""" +Specify people, teams, or apps allowed to dismiss pull request reviews. +""" +input DismissalRestrictionInput @docsCategory(name: "pulls") { + """ + Specify people, teams, or apps allowed to dismiss pull request reviews. + """ + allowedActors: [ID!] + + """ + Whether to restrict review dismissal to specific actors. + """ + enabled: Boolean! +} + +""" +A draft issue within a project. +""" +type DraftIssue implements Node @docsCategory(name: "projects") { + """ + A list of users to assigned to this draft issue. + """ + assignees( + """ + 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 + ): UserConnection! + + """ + The body of the draft issue. + """ + body: String! + + """ + The body of the draft issue rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body of the draft issue rendered to text. + """ + bodyText: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created this draft issue. + """ + creator: Actor + + """ + The Node ID of the DraftIssue object + """ + id: ID! + + """ + List of items linked with the draft issue (currently draft issue can be linked to only one item). + """ + projectV2Items( + """ + 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 + ): ProjectV2ItemConnection! + + """ + Projects that link to this draft issue (currently draft issue can be linked to only one project). + """ + projectsV2( + """ + 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 + ): ProjectV2Connection! + + """ + The title of the draft issue + """ + title: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Specifies a review comment to be left with a Pull Request Review. +""" +input DraftPullRequestReviewComment @docsCategory(name: "pulls") { + """ + Body of the comment to leave. + """ + body: String! + + """ + Path to the file being commented on. + """ + path: String! + + """ + Position in the file to leave a comment on. + """ + position: Int! +} + +""" +Specifies a review comment thread to be left with a Pull Request Review. +""" +input DraftPullRequestReviewThread @docsCategory(name: "pulls") { + """ + Body of the comment to leave. + """ + body: String! + + """ + The line of the blob to which the thread refers. The end of the line range for + multi-line comments. Required if not using positioning. + """ + line: Int + + """ + Path to the file being commented on. Required if not using positioning. + """ + path: String + + """ + The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range. + """ + side: DiffSide = RIGHT + + """ + The first line of the range to which the comment refers. + """ + startLine: Int + + """ + The side of the diff on which the start line resides. + """ + startSide: DiffSide = RIGHT +} + +""" +The Exploit Prediction Scoring System +""" +type EPSS @docsCategory(name: "security-advisories") { + """ + The EPSS percentage represents the likelihood of a CVE being exploited. + """ + percentage: Float + + """ + The EPSS percentile represents the relative rank of the CVE's likelihood of being exploited compared to other CVEs. + """ + percentile: Float +} + +""" +Autogenerated input type of EnablePullRequestAutoMerge +""" +input EnablePullRequestAutoMergeInput { + """ + The email address to associate with this merge. + """ + authorEmail: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Commit body to use for the commit when the PR is mergable; if omitted, a + default message will be used. NOTE: when merging with a merge queue any input + value for commit message is ignored. + """ + commitBody: String + + """ + Commit headline to use for the commit when the PR is mergable; if omitted, a + default message will be used. NOTE: when merging with a merge queue any input + value for commit headline is ignored. + """ + commitHeadline: String + + """ + The expected head OID of the pull request. + """ + expectedHeadOid: GitObjectID + + """ + The merge method to use. If omitted, defaults to `MERGE`. NOTE: when merging + with a merge queue any input value for merge method is ignored. + """ + mergeMethod: PullRequestMergeMethod = MERGE + + """ + ID of the pull request to enable auto-merge on. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of EnablePullRequestAutoMerge. +""" +type EnablePullRequestAutoMergePayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request auto-merge was enabled on. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of EnqueuePullRequest +""" +input EnqueuePullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The expected head OID of the pull request. + """ + expectedHeadOid: GitObjectID + + """ + Add the pull request to the front of the queue. + """ + jump: Boolean + + """ + The ID of the pull request to enqueue. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of EnqueuePullRequest. +""" +type EnqueuePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The merge queue entry for the enqueued pull request. + """ + mergeQueueEntry: MergeQueueEntry +} + +""" +An account to manage multiple organizations with consolidated policy and billing. +""" +type Enterprise implements Node @docsCategory(name: "enterprise-admin") { + """ + The announcement banner set on this enterprise, if any. Only visible to members of the enterprise. + """ + announcementBanner: AnnouncementBanner + + """ + A URL pointing to the enterprise's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The enterprise's billing email. + """ + billingEmail: String + + """ + Enterprise billing information visible to enterprise billing managers. + """ + billingInfo: EnterpriseBillingInfo + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The description of the enterprise. + """ + description: String + + """ + The description of the enterprise as HTML. + """ + descriptionHTML: HTML! + + """ + Find an enterprise team by its slug. + """ + enterpriseTeam( + """ + The slug of the enterprise team to find. + """ + slug: String! + ): EnterpriseTeam + + """ + A list of enterprise teams in this enterprise. + """ + enterpriseTeams( + """ + 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 + + """ + Ordering options for enterprise teams returned from the connection. + """ + orderBy: EnterpriseTeamOrder = {field: ID, direction: ASC} + + """ + The search string to look for. + """ + query: String + ): EnterpriseTeamConnection! + + """ + The Node ID of the Enterprise object + """ + id: ID! + + """ + The location of the enterprise. + """ + location: String + + """ + A list of users who are members of this enterprise. + """ + members( + """ + 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 + + """ + Only return members within the selected GitHub Enterprise deployment + """ + deployment: EnterpriseUserDeployment + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Only return members with this two-factor authentication status. Does not + include members who only have an account on a GitHub Enterprise Server instance. + + **Upcoming Change on 2025-04-01 UTC** + **Description:** `hasTwoFactorEnabled` will be removed. Use `two_factor_method_security` instead. + **Reason:** `has_two_factor_enabled` will be removed. + """ + hasTwoFactorEnabled: Boolean = null + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for members returned from the connection. + """ + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + + """ + Only return members within the organizations with these logins + """ + organizationLogins: [String!] + + """ + The search string to look for. + """ + query: String + + """ + The role of the user in the enterprise organization or server. + """ + role: EnterpriseUserAccountMembershipRole + + """ + Only return members with this type of two-factor authentication method. Does + not include members who only have an account on a GitHub Enterprise Server instance. + """ + twoFactorMethodSecurity: TwoFactorCredentialSecurityType = null + ): EnterpriseMemberConnection! + + """ + The name of the enterprise. + """ + name: String! + + """ + A list of organizations that belong to this enterprise. + """ + organizations( + """ + 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 + + """ + Ordering options for organizations returned from the connection. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The search string to look for. + """ + query: String + + """ + The viewer's role in an organization. + """ + viewerOrganizationRole: RoleInOrganization + ): OrganizationConnection! + + """ + Enterprise information visible to enterprise owners or enterprise owners' + personal access tokens (classic) with read:enterprise or admin:enterprise scope. + """ + ownerInfo: EnterpriseOwnerInfo + + """ + The raw content of the enterprise README. + """ + readme: String + + """ + The content of the enterprise README as HTML. + """ + readmeHTML: HTML! + + """ + A list of repository custom properties for this enterprise. + """ + repositoryCustomProperties( + """ + 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 + ): RepositoryCustomPropertyConnection + + """ + Returns a single repository custom property for the current enterprise by name. + """ + repositoryCustomProperty( + """ + The name of the repository custom property to be returned. + """ + propertyName: String! + ): RepositoryCustomProperty + + """ + The HTTP path for this enterprise. + """ + resourcePath: URI! + + """ + Returns a single ruleset from the current enterprise by ID. + """ + ruleset( + """ + The ID of the ruleset to be returned. + """ + databaseId: Int! + ): RepositoryRuleset + + """ + A list of rulesets for this enterprise. + """ + rulesets( + """ + 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 + ): RepositoryRulesetConnection + + """ + The enterprise's security contact email address. + """ + securityContactEmail: String + + """ + The URL-friendly identifier for the enterprise. + """ + slug: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this enterprise. + """ + url: URI! + + """ + A list of repositories that belong to users. Only available for enterprises with Enterprise Managed Users. + """ + userNamespaceRepositories( + """ + 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 + + """ + Ordering options for repositories returned from the connection. + """ + orderBy: RepositoryOrder = {field: NAME, direction: ASC} + + """ + The search string to look for. + """ + query: String + ): UserNamespaceRepositoryConnection! + + """ + Is the current viewer an admin of this enterprise? + """ + viewerIsAdmin: Boolean! + + """ + The URL of the enterprise website. + """ + websiteUrl: URI +} + +""" +The connection type for User. +""" +type EnterpriseAdministratorConnection { + """ + A list of edges. + """ + edges: [EnterpriseAdministratorEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +A User who is an administrator of an enterprise. +""" +type EnterpriseAdministratorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: User + + """ + The role of the administrator. + """ + role: EnterpriseAdministratorRole! +} + +""" +An invitation for a user to become an owner or billing manager of an enterprise. +""" +type EnterpriseAdministratorInvitation implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The email of the person who was invited to the enterprise. + """ + email: String + + """ + The enterprise the invitation is for. + """ + enterprise: Enterprise! + + """ + The Node ID of the EnterpriseAdministratorInvitation object + """ + id: ID! + + """ + The user who was invited to the enterprise. + """ + invitee: User + + """ + The user who created the invitation. + """ + inviter: User + + """ + The invitee's pending role in the enterprise (owner or billing_manager). + """ + role: EnterpriseAdministratorRole! +} + +""" +The connection type for EnterpriseAdministratorInvitation. +""" +type EnterpriseAdministratorInvitationConnection { + """ + A list of edges. + """ + edges: [EnterpriseAdministratorInvitationEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseAdministratorInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseAdministratorInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseAdministratorInvitation +} + +""" +Ordering options for enterprise administrator invitation connections +""" +input EnterpriseAdministratorInvitationOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise administrator invitations by. + """ + field: EnterpriseAdministratorInvitationOrderField! +} + +""" +Properties by which enterprise administrator invitation connections can be ordered. +""" +enum EnterpriseAdministratorInvitationOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise administrator member invitations by creation time + """ + CREATED_AT +} + +""" +The possible administrator roles in an enterprise account. +""" +enum EnterpriseAdministratorRole @docsCategory(name: "enterprise-admin") { + """ + Represents a billing manager of the enterprise account. + """ + BILLING_MANAGER + + """ + Represents an owner of the enterprise account. + """ + OWNER + + """ + Unaffiliated member of the enterprise account without an admin role. + """ + UNAFFILIATED +} + +""" +The possible values for the enterprise allow private repository forking policy value. +""" +enum EnterpriseAllowPrivateRepositoryForkingPolicyValue @docsCategory(name: "enterprise-admin") { + """ + Members can fork a repository to an organization within this enterprise. + """ + ENTERPRISE_ORGANIZATIONS + + """ + Members can fork a repository to their enterprise-managed user account or an organization inside this enterprise. + """ + ENTERPRISE_ORGANIZATIONS_USER_ACCOUNTS + + """ + Members can fork a repository to their user account or an organization, either + inside or outside of this enterprise. Internal repositories can only be forked + inside of this enterprise. + """ + EVERYWHERE + + """ + Members can fork a repository only within the same organization (intra-org). + """ + SAME_ORGANIZATION + + """ + Members can fork a repository to their user account or within the same organization. + """ + SAME_ORGANIZATION_USER_ACCOUNTS + + """ + Members can fork a repository to their user account. + """ + USER_ACCOUNTS +} + +""" +Metadata for an audit entry containing enterprise account information. +""" +interface EnterpriseAuditEntryData @docsCategory(name: "enterprise-admin") { + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI +} + +""" +Enterprise billing information visible to enterprise billing managers and owners. +""" +type EnterpriseBillingInfo @docsCategory(name: "enterprise-admin") { + """ + The number of licenseable users/emails across the enterprise. + """ + allLicensableUsersCount: Int! + + """ + The number of data packs used by all organizations owned by the enterprise. Data packs are deprecated, always returns 0. + """ + assetPacks: Int! @deprecated(reason: "LFS data packs have been removed. Always returns 0.") + + """ + The bandwidth quota in GB for all organizations owned by the enterprise. + """ + bandwidthQuota: Float! + + """ + The bandwidth usage in GB for all organizations owned by the enterprise. + """ + bandwidthUsage: Float! + + """ + The bandwidth usage as a percentage of the bandwidth quota. + """ + bandwidthUsagePercentage: Int! + + """ + The storage quota in GB for all organizations owned by the enterprise. + """ + storageQuota: Float! + + """ + The storage usage in GB for all organizations owned by the enterprise. + """ + storageUsage: Float! + + """ + The storage usage as a percentage of the storage quota. + """ + storageUsagePercentage: Int! + + """ + The number of available licenses across all owned organizations based on the unique number of billable users. + """ + totalAvailableLicenses: Int! + + """ + The total number of licenses allocated. + """ + totalLicenses: Int! +} + +""" +The connection type for Enterprise. +""" +type EnterpriseConnection { + """ + A list of edges. + """ + edges: [EnterpriseEdge] + + """ + A list of nodes. + """ + nodes: [Enterprise] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The possible values for the enterprise base repository permission setting. +""" +enum EnterpriseDefaultRepositoryPermissionSettingValue @docsCategory(name: "enterprise-admin") { + """ + Organization members will be able to clone, pull, push, and add new collaborators to all organization repositories. + """ + ADMIN + + """ + Organization members will only be able to clone and pull public repositories. + """ + NONE + + """ + Organizations in the enterprise choose base repository permissions for their members. + """ + NO_POLICY + + """ + Organization members will be able to clone and pull all organization repositories. + """ + READ + + """ + Organization members will be able to clone, pull, and push all organization repositories. + """ + WRITE +} + +""" +The possible values for an enabled/no policy enterprise setting. +""" +enum EnterpriseDisallowedMethodsSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting prevents insecure 2FA methods from being used by members of the enterprise. + """ + INSECURE + + """ + There is no policy set for preventing insecure 2FA methods from being used by members of the enterprise. + """ + NO_POLICY +} + +""" +An edge in a connection. +""" +type EnterpriseEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Enterprise +} + +""" +The possible values for an enabled/disabled enterprise setting. +""" +enum EnterpriseEnabledDisabledSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is disabled for organizations in the enterprise. + """ + DISABLED + + """ + The setting is enabled for organizations in the enterprise. + """ + ENABLED + + """ + There is no policy set for organizations in the enterprise. + """ + NO_POLICY +} + +""" +The possible values for an enabled/no policy enterprise setting. +""" +enum EnterpriseEnabledSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is enabled for organizations in the enterprise. + """ + ENABLED + + """ + There is no policy set for organizations in the enterprise. + """ + NO_POLICY +} + +""" +The connection type for OrganizationInvitation. +""" +type EnterpriseFailedInvitationConnection { + """ + A list of edges. + """ + edges: [EnterpriseFailedInvitationEdge] + + """ + A list of nodes. + """ + nodes: [OrganizationInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + Identifies the total count of unique users in the connection. + """ + totalUniqueUserCount: Int! +} + +""" +A failed invitation to be a member in an enterprise organization. +""" +type EnterpriseFailedInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: OrganizationInvitation +} + +""" +An identity provider configured to provision identities for an enterprise. +Visible to enterprise owners or enterprise owners' personal access tokens +(classic) with read:enterprise or admin:enterprise scope. +""" +type EnterpriseIdentityProvider implements Node @docsCategory(name: "enterprise-admin") { + """ + The digest algorithm used to sign SAML requests for the identity provider. + """ + digestMethod: SamlDigestAlgorithm + + """ + The enterprise this identity provider belongs to. + """ + enterprise: Enterprise + + """ + ExternalIdentities provisioned by this identity provider. + """ + externalIdentities( + """ + 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 + + """ + Filter to external identities with the users login + """ + login: String + + """ + Filter to external identities with valid org membership only + """ + membersOnly: Boolean + + """ + Filter to external identities with the users userName/NameID attribute + """ + userName: String + ): ExternalIdentityConnection! + + """ + The Node ID of the EnterpriseIdentityProvider object + """ + id: ID! + + """ + The x509 certificate used by the identity provider to sign assertions and responses. + """ + idpCertificate: X509Certificate + + """ + The Issuer Entity ID for the SAML identity provider. + """ + issuer: String + + """ + Recovery codes that can be used by admins to access the enterprise if the identity provider is unavailable. + """ + recoveryCodes: [String!] + + """ + The signature algorithm used to sign SAML requests for the identity provider. + """ + signatureMethod: SamlSignatureAlgorithm + + """ + The URL endpoint for the identity provider's SAML SSO. + """ + ssoUrl: URI +} + +""" +An object that is a member of an enterprise. +""" +union EnterpriseMember @docsCategory(name: "enterprise-admin") = EnterpriseUserAccount | User + +""" +The connection type for EnterpriseMember. +""" +type EnterpriseMemberConnection { + """ + A list of edges. + """ + edges: [EnterpriseMemberEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseMember] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +A User who is a member of an enterprise through one or more organizations. +""" +type EnterpriseMemberEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseMember +} + +""" +An invitation for a user to become an unaffiliated member of an enterprise. +""" +type EnterpriseMemberInvitation implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The email of the person who was invited to the enterprise. + """ + email: String + + """ + The enterprise the invitation is for. + """ + enterprise: Enterprise! + + """ + The Node ID of the EnterpriseMemberInvitation object + """ + id: ID! + + """ + The user who was invited to the enterprise. + """ + invitee: User + + """ + The user who created the invitation. + """ + inviter: User +} + +""" +The connection type for EnterpriseMemberInvitation. +""" +type EnterpriseMemberInvitationConnection { + """ + A list of edges. + """ + edges: [EnterpriseMemberInvitationEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseMemberInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseMemberInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseMemberInvitation +} + +""" +Ordering options for enterprise administrator invitation connections +""" +input EnterpriseMemberInvitationOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise member invitations by. + """ + field: EnterpriseMemberInvitationOrderField! +} + +""" +Properties by which enterprise member invitation connections can be ordered. +""" +enum EnterpriseMemberInvitationOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise member invitations by creation time + """ + CREATED_AT +} + +""" +Ordering options for enterprise member connections. +""" +input EnterpriseMemberOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise members by. + """ + field: EnterpriseMemberOrderField! +} + +""" +Properties by which enterprise member connections can be ordered. +""" +enum EnterpriseMemberOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise members by creation time + """ + CREATED_AT + + """ + Order enterprise members by login + """ + LOGIN +} + +""" +The possible values for the enterprise members can create repositories setting. +""" +enum EnterpriseMembersCanCreateRepositoriesSettingValue @docsCategory(name: "enterprise-admin") { + """ + Members will be able to create public and private repositories. + """ + ALL + + """ + Members will not be able to create public or private repositories. + """ + DISABLED + + """ + Organization owners choose whether to allow members to create repositories. + """ + NO_POLICY + + """ + Members will be able to create only private repositories. + """ + PRIVATE + + """ + Members will be able to create only public repositories. + """ + PUBLIC +} + +""" +The possible values for the members can make purchases setting. +""" +enum EnterpriseMembersCanMakePurchasesSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is disabled for organizations in the enterprise. + """ + DISABLED + + """ + The setting is enabled for organizations in the enterprise. + """ + ENABLED +} + +""" +The possible values we have for filtering Platform::Objects::User#enterprises. +""" +enum EnterpriseMembershipType @docsCategory(name: "enterprise-admin") { + """ + Returns all enterprises in which the user is an admin. + """ + ADMIN + + """ + Returns all enterprises in which the user is a member, admin, or billing manager. + """ + ALL + + """ + Returns all enterprises in which the user is a billing manager. + """ + BILLING_MANAGER + + """ + Returns all enterprises in which the user is a member of an org that is owned by the enterprise. + """ + ORG_MEMBERSHIP +} + +""" +Ordering options for enterprises. +""" +input EnterpriseOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprises by. + """ + field: EnterpriseOrderField! +} + +""" +Properties by which enterprise connections can be ordered. +""" +enum EnterpriseOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprises by name + """ + NAME +} + +""" +The connection type for Organization. +""" +type EnterpriseOrganizationMembershipConnection { + """ + A list of edges. + """ + edges: [EnterpriseOrganizationMembershipEdge] + + """ + A list of nodes. + """ + nodes: [Organization] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An enterprise organization that a user is a member of. +""" +type EnterpriseOrganizationMembershipEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Organization + + """ + The role of the user in the enterprise membership. + """ + role: EnterpriseUserAccountMembershipRole! +} + +""" +The connection type for User. +""" +type EnterpriseOutsideCollaboratorConnection { + """ + A list of edges. + """ + edges: [EnterpriseOutsideCollaboratorEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +A User who is an outside collaborator of an enterprise through one or more organizations. +""" +type EnterpriseOutsideCollaboratorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: User + + """ + The enterprise organization repositories this user is a member of. + """ + repositories( + """ + 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 + + """ + Ordering options for repositories. + """ + orderBy: RepositoryOrder = {field: NAME, direction: ASC} + ): EnterpriseRepositoryInfoConnection! +} + +""" +Enterprise information visible to enterprise owners or enterprise owners' +personal access tokens (classic) with read:enterprise or admin:enterprise scope. +""" +type EnterpriseOwnerInfo @docsCategory(name: "enterprise-admin") { + """ + A list of all of the administrators for this enterprise. + """ + admins( + """ + 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 + + """ + Only return administrators with this two-factor authentication status. + + **Upcoming Change on 2025-04-01 UTC** + **Description:** `hasTwoFactorEnabled` will be removed. Use `two_factor_method_security` instead. + **Reason:** `has_two_factor_enabled` will be removed. + """ + hasTwoFactorEnabled: Boolean = null + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for administrators returned from the connection. + """ + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + + """ + Only return members within the organizations with these logins + """ + organizationLogins: [String!] + + """ + The search string to look for. + """ + query: String + + """ + The role to filter by. + """ + role: EnterpriseAdministratorRole + + """ + Only return outside collaborators with this type of two-factor authentication method. + """ + twoFactorMethodSecurity: TwoFactorCredentialSecurityType = null + ): EnterpriseAdministratorConnection! + + """ + A list of users in the enterprise who currently have two-factor authentication disabled. + """ + affiliatedUsersWithTwoFactorDisabled( + """ + 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 + ): UserConnection! + + """ + Whether or not affiliated users with two-factor authentication disabled exist in the enterprise. + """ + affiliatedUsersWithTwoFactorDisabledExist: Boolean! + + """ + The setting value for whether private repository forking is enabled for repositories in organizations in this enterprise. + """ + allowPrivateRepositoryForkingSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided private repository forking setting value. + """ + allowPrivateRepositoryForkingSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The value for the allow private repository forking policy on the enterprise. + """ + allowPrivateRepositoryForkingSettingPolicyValue: EnterpriseAllowPrivateRepositoryForkingPolicyValue + + """ + The setting value for base repository permissions for organizations in this enterprise. + """ + defaultRepositoryPermissionSetting: EnterpriseDefaultRepositoryPermissionSettingValue! + + """ + A list of enterprise organizations configured with the provided base repository permission. + """ + defaultRepositoryPermissionSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The permission to find organizations for. + """ + value: DefaultRepositoryPermissionField! + ): OrganizationConnection! + + """ + A list of domains owned by the enterprise. Visible to enterprise owners or + enterprise owners' personal access tokens (classic) with admin:enterprise scope. + """ + domains( + """ + 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 + + """ + Filter whether or not the domain is approved. + """ + isApproved: Boolean = null + + """ + Filter whether or not the domain is verified. + """ + isVerified: Boolean = null + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for verifiable domains returned. + """ + orderBy: VerifiableDomainOrder = {field: DOMAIN, direction: ASC} + ): VerifiableDomainConnection! + + """ + Enterprise Server installations owned by the enterprise. + """ + enterpriseServerInstallations( + """ + 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 + + """ + Whether or not to only return installations discovered via GitHub Connect. + """ + connectedOnly: Boolean = false + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for Enterprise Server installations returned. + """ + orderBy: EnterpriseServerInstallationOrder = {field: HOST_NAME, direction: ASC} + ): EnterpriseServerInstallationConnection! + + """ + A list of failed invitations in the enterprise. + """ + failedInvitations( + """ + 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 + + """ + The search string to look for. + """ + query: String + ): EnterpriseFailedInvitationConnection! + + """ + The setting value for whether the enterprise has an IP allow list enabled. + """ + ipAllowListEnabledSetting: IpAllowListEnabledSettingValue! + + """ + The IP addresses that are allowed to access resources owned by the enterprise. + Visible to enterprise owners or enterprise owners' personal access tokens + (classic) with admin:enterprise scope. + """ + ipAllowListEntries( + """ + 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 + + """ + Ordering options for IP allow list entries returned. + """ + orderBy: IpAllowListEntryOrder = {field: ALLOW_LIST_VALUE, direction: ASC} + ): IpAllowListEntryConnection! + + """ + The setting value for whether the enterprise has IP allow list configuration for installed GitHub Apps enabled. + """ + ipAllowListForInstalledAppsEnabledSetting: IpAllowListForInstalledAppsEnabledSettingValue! + + """ + The setting value for whether the enterprise has IP allow list user-level enforcement enabled. + """ + ipAllowListUserLevelEnforcementEnabledSetting: IpAllowListUserLevelEnforcementEnabledSettingValue! + + """ + Whether or not the base repository permission is currently being updated. + """ + isUpdatingDefaultRepositoryPermission: Boolean! + + """ + Whether the two-factor authentication requirement is currently being enforced. + """ + isUpdatingTwoFactorRequirement: Boolean! + + """ + The setting value for whether organization members with admin permissions on a + repository can change repository visibility. + """ + membersCanChangeRepositoryVisibilitySetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided can change repository visibility setting value. + """ + membersCanChangeRepositoryVisibilitySettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The setting value for whether members of organizations in the enterprise can create internal repositories. + """ + membersCanCreateInternalRepositoriesSetting: Boolean + + """ + The setting value for whether members of organizations in the enterprise can create private repositories. + """ + membersCanCreatePrivateRepositoriesSetting: Boolean + + """ + The setting value for whether members of organizations in the enterprise can create public repositories. + """ + membersCanCreatePublicRepositoriesSetting: Boolean + + """ + The setting value for whether members of organizations in the enterprise can create repositories. + """ + membersCanCreateRepositoriesSetting: EnterpriseMembersCanCreateRepositoriesSettingValue + + """ + A list of enterprise organizations configured with the provided repository creation setting value. + """ + membersCanCreateRepositoriesSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting to find organizations for. + """ + value: OrganizationMembersCanCreateRepositoriesSettingValue! + ): OrganizationConnection! + + """ + The setting value for whether members with admin permissions for repositories can delete issues. + """ + membersCanDeleteIssuesSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided members can delete issues setting value. + """ + membersCanDeleteIssuesSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The setting value for whether members with admin permissions for repositories can delete or transfer repositories. + """ + membersCanDeleteRepositoriesSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided members can delete repositories setting value. + """ + membersCanDeleteRepositoriesSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The setting value for whether members of organizations in the enterprise can invite outside collaborators. + """ + membersCanInviteCollaboratorsSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided members can invite collaborators setting value. + """ + membersCanInviteCollaboratorsSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + Indicates whether members of this enterprise's organizations can purchase additional services for those organizations. + """ + membersCanMakePurchasesSetting: EnterpriseMembersCanMakePurchasesSettingValue! + + """ + The setting value for whether members with admin permissions for repositories can update protected branches. + """ + membersCanUpdateProtectedBranchesSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided members can update protected branches setting value. + """ + membersCanUpdateProtectedBranchesSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The setting value for whether members can view dependency insights. + """ + membersCanViewDependencyInsightsSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided members can view dependency insights setting value. + """ + membersCanViewDependencyInsightsSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + Indicates if email notification delivery for this enterprise is restricted to verified or approved domains. + """ + notificationDeliveryRestrictionEnabledSetting: NotificationRestrictionSettingValue! + + """ + The OIDC Identity Provider for the enterprise. + """ + oidcProvider: OIDCProvider + + """ + The setting value for whether organization projects are enabled for organizations in this enterprise. + """ + organizationProjectsSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided organization projects setting value. + """ + organizationProjectsSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + A list of outside collaborators across the repositories in the enterprise. + """ + outsideCollaborators( + """ + 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 + + """ + Only return outside collaborators with this two-factor authentication status. + + **Upcoming Change on 2025-04-01 UTC** + **Description:** `hasTwoFactorEnabled` will be removed. Use `two_factor_method_security` instead. + **Reason:** `has_two_factor_enabled` will be removed. + """ + hasTwoFactorEnabled: Boolean = null + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + The login of one specific outside collaborator. + """ + login: String + + """ + Ordering options for outside collaborators returned from the connection. + """ + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + + """ + Only return outside collaborators within the organizations with these logins + """ + organizationLogins: [String!] + + """ + The search string to look for. + """ + query: String + + """ + Only return outside collaborators with this type of two-factor authentication method. + """ + twoFactorMethodSecurity: TwoFactorCredentialSecurityType = null + + """ + Only return outside collaborators on repositories with this visibility. + """ + visibility: RepositoryVisibility + ): EnterpriseOutsideCollaboratorConnection! + + """ + A list of pending administrator invitations for the enterprise. + """ + pendingAdminInvitations( + """ + 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 + + """ + Ordering options for pending enterprise administrator invitations returned from the connection. + """ + orderBy: EnterpriseAdministratorInvitationOrder = {field: CREATED_AT, direction: DESC} + + """ + The search string to look for. + """ + query: String + + """ + The role to filter by. + """ + role: EnterpriseAdministratorRole + ): EnterpriseAdministratorInvitationConnection! + + """ + A list of pending collaborator invitations across the repositories in the enterprise. + """ + pendingCollaboratorInvitations( + """ + 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 + + """ + Ordering options for pending repository collaborator invitations returned from the connection. + """ + orderBy: RepositoryInvitationOrder = {field: CREATED_AT, direction: DESC} + + """ + The search string to look for. + """ + query: String + ): RepositoryInvitationConnection! + + """ + A list of pending member invitations for organizations in the enterprise. + """ + pendingMemberInvitations( + """ + 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 + + """ + Only return invitations matching this invitation source + """ + invitationSource: OrganizationInvitationSource + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Only return invitations within the organizations with these logins + """ + organizationLogins: [String!] + + """ + The search string to look for. + """ + query: String + ): EnterprisePendingMemberInvitationConnection! + + """ + A list of pending unaffiliated member invitations for the enterprise. + """ + pendingUnaffiliatedMemberInvitations( + """ + 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 + + """ + Ordering options for pending enterprise member invitations returned from the connection. + """ + orderBy: EnterpriseMemberInvitationOrder = {field: CREATED_AT, direction: DESC} + + """ + The search string to look for. + """ + query: String + ): EnterpriseMemberInvitationConnection! + + """ + The setting value for whether deploy keys are enabled for repositories in organizations in this enterprise. + """ + repositoryDeployKeySetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided deploy keys setting value. + """ + repositoryDeployKeySettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The setting value for whether repository projects are enabled in this enterprise. + """ + repositoryProjectsSetting: EnterpriseEnabledDisabledSettingValue! + + """ + A list of enterprise organizations configured with the provided repository projects setting value. + """ + repositoryProjectsSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! + + """ + The SAML Identity Provider for the enterprise. + """ + samlIdentityProvider: EnterpriseIdentityProvider + + """ + A list of enterprise organizations configured with the SAML single sign-on setting value. + """ + samlIdentityProviderSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: IdentityProviderConfigurationState! + ): OrganizationConnection! + + """ + A list of members with a support entitlement. + """ + supportEntitlements( + """ + 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 + + """ + Ordering options for support entitlement users returned from the connection. + """ + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + ): EnterpriseMemberConnection! + + """ + The setting value for whether team discussions are enabled for organizations in this enterprise. + """ + teamDiscussionsSetting: EnterpriseEnabledDisabledSettingValue! + @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 setting value for what methods of two-factor authentication the enterprise prevents its users from having. + """ + twoFactorDisallowedMethodsSetting: EnterpriseDisallowedMethodsSettingValue! + + """ + The setting value for whether the enterprise requires two-factor authentication for its organizations and users. + """ + twoFactorRequiredSetting: EnterpriseEnabledSettingValue! + + """ + A list of enterprise organizations configured with the two-factor authentication setting value. + """ + twoFactorRequiredSettingOrganizations( + """ + 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 + + """ + Ordering options for organizations with this setting. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The setting value to find organizations for. + """ + value: Boolean! + ): OrganizationConnection! +} + +""" +The connection type for OrganizationInvitation. +""" +type EnterprisePendingMemberInvitationConnection { + """ + A list of edges. + """ + edges: [EnterprisePendingMemberInvitationEdge] + + """ + A list of nodes. + """ + nodes: [OrganizationInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + Identifies the total count of unique users in the connection. + """ + totalUniqueUserCount: Int! +} + +""" +An invitation to be a member in an enterprise organization. +""" +type EnterprisePendingMemberInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: OrganizationInvitation +} + +""" +A subset of repository information queryable from an enterprise. +""" +type EnterpriseRepositoryInfo implements Node @docsCategory(name: "enterprise-admin") { + """ + The Node ID of the EnterpriseRepositoryInfo object + """ + id: ID! + + """ + Identifies if the repository is private or internal. + """ + isPrivate: Boolean! + + """ + The repository's name. + """ + name: String! + + """ + The repository's name with owner. + """ + nameWithOwner: String! +} + +""" +The connection type for EnterpriseRepositoryInfo. +""" +type EnterpriseRepositoryInfoConnection { + """ + A list of edges. + """ + edges: [EnterpriseRepositoryInfoEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseRepositoryInfo] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseRepositoryInfoEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseRepositoryInfo +} + +""" +An Enterprise Server installation. +""" +type EnterpriseServerInstallation implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The customer name to which the Enterprise Server installation belongs. + """ + customerName: String! + + """ + The host name of the Enterprise Server installation. + """ + hostName: String! + + """ + The Node ID of the EnterpriseServerInstallation object + """ + id: ID! + + """ + Whether or not the installation is connected to an Enterprise Server installation via GitHub Connect. + """ + isConnected: Boolean! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + User accounts on this Enterprise Server installation. + """ + userAccounts( + """ + 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 + + """ + Ordering options for Enterprise Server user accounts returned from the connection. + """ + orderBy: EnterpriseServerUserAccountOrder = {field: LOGIN, direction: ASC} + ): EnterpriseServerUserAccountConnection! + + """ + User accounts uploads for the Enterprise Server installation. + """ + userAccountsUploads( + """ + 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 + + """ + Ordering options for Enterprise Server user accounts uploads returned from the connection. + """ + orderBy: EnterpriseServerUserAccountsUploadOrder = {field: CREATED_AT, direction: DESC} + ): EnterpriseServerUserAccountsUploadConnection! +} + +""" +The connection type for EnterpriseServerInstallation. +""" +type EnterpriseServerInstallationConnection { + """ + A list of edges. + """ + edges: [EnterpriseServerInstallationEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseServerInstallation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseServerInstallationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseServerInstallation +} + +""" +The connection type for EnterpriseServerInstallation. +""" +type EnterpriseServerInstallationMembershipConnection { + """ + A list of edges. + """ + edges: [EnterpriseServerInstallationMembershipEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseServerInstallation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An Enterprise Server installation that a user is a member of. +""" +type EnterpriseServerInstallationMembershipEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseServerInstallation + + """ + The role of the user in the enterprise membership. + """ + role: EnterpriseUserAccountMembershipRole! +} + +""" +Ordering options for Enterprise Server installation connections. +""" +input EnterpriseServerInstallationOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order Enterprise Server installations by. + """ + field: EnterpriseServerInstallationOrderField! +} + +""" +Properties by which Enterprise Server installation connections can be ordered. +""" +enum EnterpriseServerInstallationOrderField @docsCategory(name: "enterprise-admin") { + """ + Order Enterprise Server installations by creation time + """ + CREATED_AT + + """ + Order Enterprise Server installations by customer name + """ + CUSTOMER_NAME + + """ + Order Enterprise Server installations by host name + """ + HOST_NAME +} + +""" +A user account on an Enterprise Server installation. +""" +type EnterpriseServerUserAccount implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + User emails belonging to this user account. + """ + emails( + """ + 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 + + """ + Ordering options for Enterprise Server user account emails returned from the connection. + """ + orderBy: EnterpriseServerUserAccountEmailOrder = {field: EMAIL, direction: ASC} + ): EnterpriseServerUserAccountEmailConnection! + + """ + The Enterprise Server installation on which this user account exists. + """ + enterpriseServerInstallation: EnterpriseServerInstallation! + + """ + The Node ID of the EnterpriseServerUserAccount object + """ + id: ID! + + """ + Whether the user account is a site administrator on the Enterprise Server installation. + """ + isSiteAdmin: Boolean! + + """ + The login of the user account on the Enterprise Server installation. + """ + login: String! + + """ + The profile name of the user account on the Enterprise Server installation. + """ + profileName: String + + """ + The date and time when the user account was created on the Enterprise Server installation. + """ + remoteCreatedAt: DateTime! + + """ + The ID of the user account on the Enterprise Server installation. + """ + remoteUserId: Int! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for EnterpriseServerUserAccount. +""" +type EnterpriseServerUserAccountConnection { + """ + A list of edges. + """ + edges: [EnterpriseServerUserAccountEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseServerUserAccount] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseServerUserAccountEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseServerUserAccount +} + +""" +An email belonging to a user account on an Enterprise Server installation. +""" +type EnterpriseServerUserAccountEmail implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The email address. + """ + email: String! + + """ + The Node ID of the EnterpriseServerUserAccountEmail object + """ + id: ID! + + """ + Indicates whether this is the primary email of the associated user account. + """ + isPrimary: Boolean! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The user account to which the email belongs. + """ + userAccount: EnterpriseServerUserAccount! +} + +""" +The connection type for EnterpriseServerUserAccountEmail. +""" +type EnterpriseServerUserAccountEmailConnection { + """ + A list of edges. + """ + edges: [EnterpriseServerUserAccountEmailEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseServerUserAccountEmail] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseServerUserAccountEmailEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseServerUserAccountEmail +} + +""" +Ordering options for Enterprise Server user account email connections. +""" +input EnterpriseServerUserAccountEmailOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order emails by. + """ + field: EnterpriseServerUserAccountEmailOrderField! +} + +""" +Properties by which Enterprise Server user account email connections can be ordered. +""" +enum EnterpriseServerUserAccountEmailOrderField @docsCategory(name: "enterprise-admin") { + """ + Order emails by email + """ + EMAIL +} + +""" +Ordering options for Enterprise Server user account connections. +""" +input EnterpriseServerUserAccountOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order user accounts by. + """ + field: EnterpriseServerUserAccountOrderField! +} + +""" +Properties by which Enterprise Server user account connections can be ordered. +""" +enum EnterpriseServerUserAccountOrderField @docsCategory(name: "enterprise-admin") { + """ + Order user accounts by login + """ + LOGIN + + """ + Order user accounts by creation time on the Enterprise Server installation + """ + REMOTE_CREATED_AT +} + +""" +A user accounts upload from an Enterprise Server installation. +""" +type EnterpriseServerUserAccountsUpload implements Node @docsCategory(name: "enterprise-admin") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The enterprise to which this upload belongs. + """ + enterprise: Enterprise! + + """ + The Enterprise Server installation for which this upload was generated. + """ + enterpriseServerInstallation: EnterpriseServerInstallation! + + """ + The Node ID of the EnterpriseServerUserAccountsUpload object + """ + id: ID! + + """ + The name of the file uploaded. + """ + name: String! + + """ + The synchronization state of the upload + """ + syncState: EnterpriseServerUserAccountsUploadSyncState! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for EnterpriseServerUserAccountsUpload. +""" +type EnterpriseServerUserAccountsUploadConnection { + """ + A list of edges. + """ + edges: [EnterpriseServerUserAccountsUploadEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseServerUserAccountsUpload] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseServerUserAccountsUploadEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseServerUserAccountsUpload +} + +""" +Ordering options for Enterprise Server user accounts upload connections. +""" +input EnterpriseServerUserAccountsUploadOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order user accounts uploads by. + """ + field: EnterpriseServerUserAccountsUploadOrderField! +} + +""" +Properties by which Enterprise Server user accounts upload connections can be ordered. +""" +enum EnterpriseServerUserAccountsUploadOrderField @docsCategory(name: "enterprise-admin") { + """ + Order user accounts uploads by creation time + """ + CREATED_AT +} + +""" +Synchronization state of the Enterprise Server user accounts upload +""" +enum EnterpriseServerUserAccountsUploadSyncState @docsCategory(name: "enterprise-admin") { + """ + The synchronization of the upload failed. + """ + FAILURE + + """ + The synchronization of the upload is pending. + """ + PENDING + + """ + The synchronization of the upload succeeded. + """ + SUCCESS +} + +""" +A team that belongs to an enterprise and can be assigned to multiple organizations. +""" +type EnterpriseTeam implements Node & TeamReviewRequestable @docsCategory(name: "enterprise-admin") { + """ + Organizations this team is assigned to. + """ + assignedOrganizations( + """ + 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 + + """ + Ordering options for organizations returned from the connection. + """ + orderBy: EnterpriseTeamOrganizationOrder = {field: ID, direction: ASC} + ): EnterpriseTeamAssignedOrganizationConnection! + + """ + The human-readable, unique identifier for the enterprise and team. + """ + combinedSlug: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The description of the team. + """ + description: String + + """ + The enterprise this team belongs to. + """ + enterprise: Enterprise + + """ + A list of users who are members of this enterprise team. + """ + enterpriseTeamMembers( + """ + 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 + + """ + Order for the connection. + """ + orderBy: EnterpriseTeamMemberOrder = {field: ID, direction: ASC} + + """ + The search string to look for. + """ + query: String + ): EnterpriseTeamMemberConnection! + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the EnterpriseTeam object + """ + id: ID! + + """ + Whether the viewer is a member of this team. + """ + isViewerMember: Boolean! + + """ + The name of the team. + """ + name: String! + + """ + Whether the team will receive notifications when mentioned. + """ + notificationSetting: TeamNotificationSetting! + + """ + How this team selects its associated organizations. + """ + organizationSelectionType: EnterpriseTeamOrganizationSelectionType! + + """ + The level of privacy the team has. + """ + privacy: TeamPrivacy! + + """ + The slug corresponding to the team. + """ + slug: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + Whether the viewer can administer this team. + """ + viewerCanAdminister: Boolean! +} + +""" +The connection type for Organization. +""" +type EnterpriseTeamAssignedOrganizationConnection { + """ + A list of edges. + """ + edges: [EnterpriseTeamAssignedOrganizationEdge] + + """ + A list of nodes. + """ + nodes: [Organization] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents an organization that an enterprise team is assigned to. +""" +type EnterpriseTeamAssignedOrganizationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: Organization +} + +""" +A list of enterprise teams owned by the enterprise. +""" +type EnterpriseTeamConnection { + """ + A list of edges. + """ + edges: [EnterpriseTeamEdge] + + """ + A list of nodes. + """ + nodes: [EnterpriseTeam] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnterpriseTeamEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: EnterpriseTeam +} + +""" +The connection type for User. +""" +type EnterpriseTeamMemberConnection { + """ + A list of edges. + """ + edges: [EnterpriseTeamMemberEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user who is a member of an enterprise team. +""" +type EnterpriseTeamMemberEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: User +} + +""" +Ordering options for enterprise team member connections. +""" +input EnterpriseTeamMemberOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise team members by. + """ + field: EnterpriseTeamMemberOrderField! +} + +""" +Properties by which enterprise team member connections can be ordered. +""" +enum EnterpriseTeamMemberOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise team members by creation time. + """ + CREATED_AT + + """ + Order enterprise team members by ID. + """ + ID + + """ + Order enterprise team members by login. + """ + LOGIN +} + +""" +Ordering options for enterprise team connections. +""" +input EnterpriseTeamOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise teams by. + """ + field: EnterpriseTeamOrderField! +} + +""" +Properties by which enterprise team connections can be ordered. +""" +enum EnterpriseTeamOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise teams by creation time. + """ + CREATED_AT + + """ + Order enterprise teams by ID. + """ + ID + + """ + Order enterprise teams by name. + """ + NAME +} + +""" +Ordering options for enterprise team organization connections. +""" +input EnterpriseTeamOrganizationOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order organizations by. + """ + field: EnterpriseTeamOrganizationOrderField! +} + +""" +Properties by which enterprise team organization connections can be ordered. +""" +enum EnterpriseTeamOrganizationOrderField @docsCategory(name: "enterprise-admin") { + """ + Order enterprise team organizations by creation time. + """ + CREATED_AT + + """ + Order enterprise team organizations by ID. + """ + ID + + """ + Order enterprise team organizations by login. + """ + LOGIN +} + +""" +The possible organization selection types for an enterprise team. +""" +enum EnterpriseTeamOrganizationSelectionType @docsCategory(name: "enterprise-admin") { + """ + The team is associated with all organizations in the enterprise. + """ + ALL + + """ + The team is not associated with any organizations. + """ + DISABLED + + """ + The team is associated with selected organizations. + """ + SELECTED +} + +""" +An account for a user who is an admin of an enterprise or a member of an enterprise through one or more organizations. +""" +type EnterpriseUserAccount implements Actor & Node @docsCategory(name: "enterprise-admin") { + """ + A URL pointing to the enterprise user account's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The enterprise in which this user account exists. + """ + enterprise: Enterprise! + + """ + A list of Enterprise Server installations this user is a member of. + """ + enterpriseInstallations( + """ + 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 + + """ + Ordering options for installations returned from the connection. + """ + orderBy: EnterpriseServerInstallationOrder = {field: HOST_NAME, direction: ASC} + + """ + The search string to look for. + """ + query: String + + """ + The role of the user in the installation. + """ + role: EnterpriseUserAccountMembershipRole + ): EnterpriseServerInstallationMembershipConnection! + + """ + The Node ID of the EnterpriseUserAccount object + """ + id: ID! + + """ + An identifier for the enterprise user account, a login or email address + """ + login: String! + + """ + The name of the enterprise user account + """ + name: String + + """ + A list of enterprise organizations this user is a member of. + """ + organizations( + """ + 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 + + """ + Ordering options for organizations returned from the connection. + """ + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + + """ + The search string to look for. + """ + query: String + + """ + The role of the user in the enterprise organization. + """ + role: EnterpriseUserAccountMembershipRole + ): EnterpriseOrganizationMembershipConnection! + + """ + The HTTP path for this user. + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this user. + """ + url: URI! + + """ + The user within the enterprise. + """ + user: User +} + +""" +The possible roles for enterprise membership. +""" +enum EnterpriseUserAccountMembershipRole @docsCategory(name: "enterprise-admin") { + """ + The user is a member of an organization in the enterprise. + """ + MEMBER + + """ + The user is an owner of an organization in the enterprise. + """ + OWNER + + """ + The user is not an owner of the enterprise, and not a member or owner of any + organizations in the enterprise; only for EMU-enabled enterprises. + """ + UNAFFILIATED +} + +""" +The possible GitHub Enterprise deployments where this user can exist. +""" +enum EnterpriseUserDeployment @docsCategory(name: "enterprise-admin") { + """ + The user is part of a GitHub Enterprise Cloud deployment. + """ + CLOUD + + """ + The user is part of a GitHub Enterprise Server deployment. + """ + SERVER +} + +""" +An environment. +""" +type Environment implements Node @docsCategory(name: "deployments") { + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the Environment object + """ + id: ID! + + """ + Indicates whether or not this environment is currently pinned to the repository + """ + isPinned: Boolean + + """ + The latest completed deployment with status success, failure, or error if it exists + """ + latestCompletedDeployment: Deployment + + """ + The name of the environment + """ + name: String! + + """ + The position of the environment if it is pinned, null if it is not pinned + """ + pinnedPosition: Int + + """ + The protection rules defined for this environment + """ + protectionRules( + """ + 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 + ): DeploymentProtectionRuleConnection! +} + +""" +The connection type for Environment. +""" +type EnvironmentConnection { + """ + A list of edges. + """ + edges: [EnvironmentEdge] + + """ + A list of nodes. + """ + nodes: [Environment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type EnvironmentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Environment +} + +""" +Properties by which environments connections can be ordered +""" +enum EnvironmentOrderField @docsCategory(name: "deployments") { + """ + Order environments by name. + """ + NAME +} + +""" +Properties by which environments connections can be ordered +""" +enum EnvironmentPinnedFilterField @docsCategory(name: "deployments") { + """ + All environments will be returned. + """ + ALL + + """ + Environments exclude pinned will be returned + """ + NONE + + """ + Only pinned environment will be returned + """ + ONLY +} + +""" +Ordering options for environments +""" +input Environments @docsCategory(name: "deployments") { + """ + The direction in which to order environments by the specified field. + """ + direction: OrderDirection! + + """ + The field to order environments by. + """ + field: EnvironmentOrderField! +} + +""" +An external identity provisioned by SAML SSO or SCIM. If SAML is configured on +the organization, the external identity is visible to (1) organization owners, +(2) organization owners' personal access tokens (classic) with read:org or +admin:org scope, (3) GitHub App with an installation token with read or write +access to members. If SAML is configured on the enterprise, the external +identity is visible to (1) enterprise owners, (2) enterprise owners' personal +access tokens (classic) with read:enterprise or admin:enterprise scope. +""" +type ExternalIdentity implements Node @docsCategory(name: "enterprise-admin") { + """ + The GUID for this identity + """ + guid: String! + + """ + The Node ID of the ExternalIdentity object + """ + id: ID! + + """ + Organization invitation for this SCIM-provisioned external identity + """ + organizationInvitation: OrganizationInvitation + + """ + SAML Identity attributes + """ + samlIdentity: ExternalIdentitySamlAttributes + + """ + SCIM Identity attributes + """ + scimIdentity: ExternalIdentityScimAttributes + + """ + User linked to this external identity. Will be NULL if this identity has not been claimed by an organization member. + """ + user: User +} + +""" +An attribute for the External Identity attributes collection +""" +type ExternalIdentityAttribute @docsCategory(name: "enterprise-admin") { + """ + The attribute metadata as JSON + """ + metadata: String + + """ + The attribute name + """ + name: String! + + """ + The attribute value + """ + value: String! +} + +""" +The connection type for ExternalIdentity. +""" +type ExternalIdentityConnection { + """ + A list of edges. + """ + edges: [ExternalIdentityEdge] + + """ + A list of nodes. + """ + nodes: [ExternalIdentity] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ExternalIdentityEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ExternalIdentity +} + +""" +SAML attributes for the External Identity +""" +type ExternalIdentitySamlAttributes @docsCategory(name: "enterprise-admin") { + """ + SAML Identity attributes + """ + attributes: [ExternalIdentityAttribute!]! + + """ + The emails associated with the SAML identity + """ + emails: [UserEmailMetadata!] + + """ + Family name of the SAML identity + """ + familyName: String + + """ + Given name of the SAML identity + """ + givenName: String + + """ + The groups linked to this identity in IDP + """ + groups: [String!] + + """ + The NameID of the SAML identity + """ + nameId: String + + """ + The userName of the SAML identity + """ + username: String +} + +""" +SCIM attributes for the External Identity +""" +type ExternalIdentityScimAttributes @docsCategory(name: "enterprise-admin") { + """ + The emails associated with the SCIM identity + """ + emails: [UserEmailMetadata!] + + """ + Family name of the SCIM identity + """ + familyName: String + + """ + Given name of the SCIM identity + """ + givenName: String + + """ + The groups linked to this identity in IDP + """ + groups: [String!] + + """ + The userName of the SCIM identity + """ + username: String +} + +""" +A command to add a file at the given path with the given contents as part of a +commit. Any existing file at that that path will be replaced. +""" +input FileAddition @docsCategory(name: "git") { + """ + The base64 encoded contents of the file + """ + contents: Base64String! + + """ + The path in the repository where the file will be located + """ + path: String! +} + +""" +A description of a set of changes to a file tree to be made as part of +a git commit, modeled as zero or more file `additions` and zero or more +file `deletions`. + +Both fields are optional; omitting both will produce a commit with no +file changes. + +`deletions` and `additions` describe changes to files identified +by their path in the git tree using unix-style path separators, i.e. +`/`. The root of a git tree is an empty string, so paths are not +slash-prefixed. + +`path` values must be unique across all `additions` and `deletions` +provided. Any duplication will result in a validation error. + +### Encoding + +File contents must be provided in full for each `FileAddition`. + +The `contents` of a `FileAddition` must be encoded using RFC 4648 +compliant base64, i.e. correct padding is required and no characters +outside the standard alphabet may be used. Invalid base64 +encoding will be rejected with a validation error. + +The encoded contents may be binary. + +For text files, no assumptions are made about the character encoding of +the file contents (after base64 decoding). No charset transcoding or +line-ending normalization will be performed; it is the client's +responsibility to manage the character encoding of files they provide. +However, for maximum compatibility we recommend using UTF-8 encoding +and ensuring that all files in a repository use a consistent +line-ending convention (`\n` or `\r\n`), and that all files end +with a newline. + +### Modeling file changes + +Each of the the five types of conceptual changes that can be made in a +git commit can be described using the `FileChanges` type as follows: + +1. New file addition: create file `hello world\n` at path `docs/README.txt`: + + { + "additions" [ + { + "path": "docs/README.txt", + "contents": base64encode("hello world\n") + } + ] + } + +2. Existing file modification: change existing `docs/README.txt` to have new + content `new content here\n`: + + { + "additions" [ + { + "path": "docs/README.txt", + "contents": base64encode("new content here\n") + } + ] + } + +3. Existing file deletion: remove existing file `docs/README.txt`. + Note that the path is required to exist -- specifying a + path that does not exist on the given branch will abort the + commit and return an error. + + { + "deletions" [ + { + "path": "docs/README.txt" + } + ] + } + + +4. File rename with no changes: rename `docs/README.txt` with + previous content `hello world\n` to the same content at + `newdocs/README.txt`: + + { + "deletions" [ + { + "path": "docs/README.txt", + } + ], + "additions" [ + { + "path": "newdocs/README.txt", + "contents": base64encode("hello world\n") + } + ] + } + + +5. File rename with changes: rename `docs/README.txt` with + previous content `hello world\n` to a file at path + `newdocs/README.txt` with content `new contents\n`: + + { + "deletions" [ + { + "path": "docs/README.txt", + } + ], + "additions" [ + { + "path": "newdocs/README.txt", + "contents": base64encode("new contents\n") + } + ] + } +""" +input FileChanges @docsCategory(name: "git") { + """ + File to add or change. + """ + additions: [FileAddition!] = [] + + """ + Files to delete. + """ + deletions: [FileDeletion!] = [] +} + +""" +A command to delete the file at the given path as part of a commit. +""" +input FileDeletion @docsCategory(name: "git") { + """ + The path to delete + """ + path: String! +} + +""" +Prevent commits that include files with specified file extensions from being pushed to the commit graph. +""" +type FileExtensionRestrictionParameters @docsCategory(name: "repos") { + """ + The file extensions that are restricted from being pushed to the commit graph. + """ + restrictedFileExtensions: [String!]! +} + +""" +Prevent commits that include files with specified file extensions from being pushed to the commit graph. +""" +input FileExtensionRestrictionParametersInput @docsCategory(name: "repos") { + """ + The file extensions that are restricted from being pushed to the commit graph. + """ + restrictedFileExtensions: [String!]! +} + +""" +Prevent commits that include changes in specified file and folder paths from +being pushed to the commit graph. This includes absolute paths that contain file names. +""" +type FilePathRestrictionParameters @docsCategory(name: "repos") { + """ + The file paths that are restricted from being pushed to the commit graph. + """ + restrictedFilePaths: [String!]! +} + +""" +Prevent commits that include changes in specified file and folder paths from +being pushed to the commit graph. This includes absolute paths that contain file names. +""" +input FilePathRestrictionParametersInput @docsCategory(name: "repos") { + """ + The file paths that are restricted from being pushed to the commit graph. + """ + restrictedFilePaths: [String!]! +} + +""" +The possible viewed states of a file . +""" +enum FileViewedState @docsCategory(name: "pulls") { + """ + The file has new changes since last viewed. + """ + DISMISSED + + """ + The file has not been marked as viewed. + """ + UNVIEWED + + """ + The file has been marked as viewed. + """ + VIEWED +} + +""" +Autogenerated input type of FollowOrganization +""" +input FollowOrganizationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the organization to follow. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of FollowOrganization. +""" +type FollowOrganizationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organization that was followed. + """ + organization: Organization +} + +""" +Autogenerated input type of FollowUser +""" +input FollowUserInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the user to follow. + """ + userId: ID! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of FollowUser. +""" +type FollowUserPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The user that was followed. + """ + user: User +} + +""" +The connection type for User. +""" +type FollowerConnection { + """ + A list of edges. + """ + edges: [UserEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The connection type for User. +""" +type FollowingConnection { + """ + A list of edges. + """ + edges: [UserEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +A funding platform link for a repository. +""" +type FundingLink @docsCategory(name: "repos") { + """ + The funding platform this link is for. + """ + platform: FundingPlatform! + + """ + The configured URL for this funding link. + """ + url: URI! +} + +""" +The possible funding platforms for repository funding links. +""" +enum FundingPlatform @docsCategory(name: "repos") { + """ + Buy Me a Coffee funding platform. + """ + BUY_ME_A_COFFEE + + """ + Community Bridge funding platform. + """ + COMMUNITY_BRIDGE + + """ + Custom funding platform. + """ + CUSTOM + + """ + GitHub funding platform. + """ + GITHUB + + """ + IssueHunt funding platform. + """ + ISSUEHUNT + + """ + Ko-fi funding platform. + """ + KO_FI + + """ + LFX Crowdfunding funding platform. + """ + LFX_CROWDFUNDING + + """ + Liberapay funding platform. + """ + LIBERAPAY + + """ + Open Collective funding platform. + """ + OPEN_COLLECTIVE + + """ + Patreon funding platform. + """ + PATREON + + """ + Polar funding platform. + """ + POLAR + + """ + thanks.dev funding platform. + """ + THANKS_DEV + + """ + Tidelift funding platform. + """ + TIDELIFT +} + +""" +A generic hovercard context with a message and icon +""" +type GenericHovercardContext implements HovercardContext @docsCategory(name: "users") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! +} + +""" +A Gist. +""" +type Gist implements Node & Starrable & UniformResourceLocatable @docsCategory(name: "gists") { + """ + A list of comments associated with the gist + """ + comments( + """ + 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 + ): GistCommentConnection! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The gist description. + """ + description: String + + """ + The files in this gist. + """ + files( + """ + The maximum number of files to return. + """ + limit: Int = 10 + + """ + The oid of the files to return + """ + oid: GitObjectID + ): [GistFile] + + """ + A list of forks associated with the gist + """ + forks( + """ + 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 + + """ + Ordering options for gists returned from the connection + """ + orderBy: GistOrder + ): GistConnection! + + """ + The Node ID of the Gist object + """ + id: ID! + + """ + Identifies if the gist is a fork. + """ + isFork: Boolean! + + """ + Whether the gist is public or not. + """ + isPublic: Boolean! + + """ + The gist name. + """ + name: String! + + """ + The gist owner. + """ + owner: RepositoryOwner + + """ + Identifies when the gist was last pushed to. + """ + pushedAt: DateTime + + """ + The HTML path to this resource. + """ + resourcePath: URI! + + """ + Returns a count of how many stargazers there are on this object + """ + stargazerCount: Int! + + """ + A list of users who have starred this starrable. + """ + stargazers( + """ + 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 + + """ + Order for connection + """ + orderBy: StarOrder + ): StargazerConnection! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this Gist. + """ + url: URI! + + """ + Returns a boolean indicating whether the viewing user has starred this starrable. + """ + viewerHasStarred: Boolean! +} + +""" +Represents a comment on an Gist. +""" +type GistComment implements Comment & Deletable & Minimizable & Node & Updatable & UpdatableComment + @docsCategory(name: "gists") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the gist. + """ + authorAssociation: CommentAuthorAssociation! + + """ + Identifies the comment body. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + 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 associated gist. + """ + gist: Gist! + + """ + The Node ID of the GistComment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + 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! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: 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! +} + +""" +The connection type for GistComment. +""" +type GistCommentConnection { + """ + A list of edges. + """ + edges: [GistCommentEdge] + + """ + A list of nodes. + """ + nodes: [GistComment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type GistCommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: GistComment +} + +""" +The connection type for Gist. +""" +type GistConnection { + """ + A list of edges. + """ + edges: [GistEdge] + + """ + A list of nodes. + """ + nodes: [Gist] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type GistEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Gist +} + +""" +A file in a gist. +""" +type GistFile @docsCategory(name: "gists") { + """ + The file name encoded to remove characters that are invalid in URL paths. + """ + encodedName: String + + """ + The gist file encoding. + """ + encoding: String + + """ + The file extension from the file name. + """ + extension: String + + """ + Indicates if this file is an image. + """ + isImage: Boolean! + + """ + Whether the file's contents were truncated. + """ + isTruncated: Boolean! + + """ + The programming language this file is written in. + """ + language: Language + + """ + The gist file name. + """ + name: String + + """ + The gist file size in bytes. + """ + size: Int + + """ + UTF8 text data or null if the file is binary + """ + text( + """ + Optionally truncate the returned file to this length. + """ + truncate: Int + ): String +} + +""" +Ordering options for gist connections +""" +input GistOrder @docsCategory(name: "gists") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order repositories by. + """ + field: GistOrderField! +} + +""" +Properties by which gist connections can be ordered. +""" +enum GistOrderField @docsCategory(name: "gists") { + """ + Order gists by creation time + """ + CREATED_AT + + """ + Order gists by push time + """ + PUSHED_AT + + """ + Order gists by update time + """ + UPDATED_AT +} + +""" +The privacy of a Gist +""" +enum GistPrivacy @docsCategory(name: "gists") { + """ + Gists that are public and secret + """ + ALL + + """ + Public + """ + PUBLIC + + """ + Secret + """ + SECRET +} + +""" +Represents an actor in a Git commit (ie. an author or committer). +""" +type GitActor @docsCategory(name: "git") { + """ + A URL pointing to the author's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The timestamp of the Git action (authoring or committing). + """ + date: GitTimestamp + + """ + The email in the Git commit. + """ + email: String + + """ + The name in the Git commit. + """ + name: String + + """ + The GitHub user corresponding to the email field. Null if no such user exists. + """ + user: User +} + +""" +The connection type for GitActor. +""" +type GitActorConnection { + """ + A list of edges. + """ + edges: [GitActorEdge] + + """ + A list of nodes. + """ + nodes: [GitActor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type GitActorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: GitActor +} + +""" +Represents information about the GitHub instance. +""" +type GitHubMetadata @docsCategory(name: "meta") { + """ + Returns a String that's a SHA of `github-services` + """ + gitHubServicesSha: GitObjectID! + + """ + IP addresses that users connect to for git operations + """ + gitIpAddresses: [String!] + + """ + IP addresses that GitHub Enterprise Importer uses for outbound connections + """ + githubEnterpriseImporterIpAddresses: [String!] + + """ + IP addresses that service hooks are sent from + """ + hookIpAddresses: [String!] + + """ + IP addresses that the importer connects from + """ + importerIpAddresses: [String!] + + """ + Whether or not users are verified + """ + isPasswordAuthenticationVerifiable: Boolean! + + """ + IP addresses for GitHub Pages' A records + """ + pagesIpAddresses: [String!] +} + +""" +Represents a Git object. +""" +interface GitObject @docsCategory(name: "git") { + """ + An abbreviated version of the Git object ID + """ + abbreviatedOid: String! + + """ + The HTTP path for this Git object + """ + commitResourcePath: URI! + + """ + The HTTP URL for this Git object + """ + commitUrl: URI! + + """ + The Node ID of the GitObject object + """ + id: ID! + + """ + The Git object ID + """ + oid: GitObjectID! + + """ + The Repository the Git object belongs to + """ + repository: Repository! +} + +""" +A Git object ID. +""" +scalar GitObjectID + +""" +A fully qualified reference name (e.g. `refs/heads/master`). +""" +scalar GitRefname + +""" +Git SSH string +""" +scalar GitSSHRemote + +""" +Information about a signature (GPG or S/MIME) on a Commit or Tag. +""" +interface GitSignature @docsCategory(name: "git") { + """ + Email used to sign this object. + """ + email: String! + + """ + True if the signature is valid and verified by GitHub. + """ + isValid: Boolean! + + """ + Payload for GPG signing object. Raw ODB object without the signature header. + """ + payload: String! + + """ + ASCII-armored signature header from object. + """ + signature: String! + + """ + GitHub user corresponding to the email signing this commit. + """ + signer: User + + """ + The state of this signature. `VALID` if signature is valid and verified by + GitHub, otherwise represents reason why signature is considered invalid. + """ + state: GitSignatureState! + + """ + The date the signature was verified, if valid + """ + verifiedAt: DateTime + + """ + True if the signature was made with GitHub's signing key. + """ + wasSignedByGitHub: Boolean! +} + +""" +The state of a Git signature. +""" +enum GitSignatureState @docsCategory(name: "git") { + """ + The signing certificate or its chain could not be verified + """ + BAD_CERT + + """ + Invalid email used for signing + """ + BAD_EMAIL + + """ + Signing key expired + """ + EXPIRED_KEY + + """ + Internal error - the GPG verification service misbehaved + """ + GPGVERIFY_ERROR + + """ + Internal error - the GPG verification service is unavailable at the moment + """ + GPGVERIFY_UNAVAILABLE + + """ + Invalid signature + """ + INVALID + + """ + Malformed signature + """ + MALFORMED_SIG + + """ + The usage flags for the key that signed this don't allow signing + """ + NOT_SIGNING_KEY + + """ + Email used for signing not known to GitHub + """ + NO_USER + + """ + Valid signature, though certificate revocation check failed + """ + OCSP_ERROR + + """ + Valid signature, pending certificate revocation checking + """ + OCSP_PENDING + + """ + One or more certificates in chain has been revoked + """ + OCSP_REVOKED + + """ + Key used for signing not known to GitHub + """ + UNKNOWN_KEY + + """ + Unknown signature type + """ + UNKNOWN_SIG_TYPE + + """ + Unsigned + """ + UNSIGNED + + """ + Email used for signing unverified on GitHub + """ + UNVERIFIED_EMAIL + + """ + Valid signature and verified by GitHub + """ + VALID +} + +""" +An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC. +""" +scalar GitTimestamp + +""" +Represents a GPG signature on a Commit or Tag. +""" +type GpgSignature implements GitSignature @docsCategory(name: "git") { + """ + Email used to sign this object. + """ + email: String! + + """ + True if the signature is valid and verified by GitHub. + """ + isValid: Boolean! + + """ + Hex-encoded ID of the key that signed this object. + """ + keyId: String + + """ + Payload for GPG signing object. Raw ODB object without the signature header. + """ + payload: String! + + """ + ASCII-armored signature header from object. + """ + signature: String! + + """ + GitHub user corresponding to the email signing this commit. + """ + signer: User + + """ + The state of this signature. `VALID` if signature is valid and verified by + GitHub, otherwise represents reason why signature is considered invalid. + """ + state: GitSignatureState! + + """ + The date the signature was verified, if valid + """ + verifiedAt: DateTime + + """ + True if the signature was made with GitHub's signing key. + """ + wasSignedByGitHub: Boolean! +} + +""" +Autogenerated input type of GrantEnterpriseOrganizationsMigratorRole +""" +input GrantEnterpriseOrganizationsMigratorRoleInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise to which all organizations managed by it will be granted the migrator role. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of the user to grant the migrator role + """ + login: String! +} + +""" +Autogenerated return type of GrantEnterpriseOrganizationsMigratorRole. +""" +type GrantEnterpriseOrganizationsMigratorRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organizations that had the migrator role applied to for the given user. + """ + organizations( + """ + 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 + ): OrganizationConnection +} + +""" +Autogenerated input type of GrantMigratorRole +""" +input GrantMigratorRoleInput { + """ + The user login or Team slug to grant the migrator role. + """ + actor: String! + + """ + Specifies the type of the actor, can be either USER or TEAM. + """ + actorType: ActorType! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the organization that the user/team belongs to. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of GrantMigratorRole. +""" +type GrantMigratorRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Did the operation succeed? + """ + success: Boolean +} + +""" +A string containing HTML code. +""" +scalar HTML + +""" +Represents a 'head_ref_deleted' event on a given pull request. +""" +type HeadRefDeletedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the Ref associated with the `head_ref_deleted` event. + """ + headRef: Ref + + """ + Identifies the name of the Ref associated with the `head_ref_deleted` event. + """ + headRefName: String! + + """ + The Node ID of the HeadRefDeletedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +Represents a 'head_ref_force_pushed' event on a given pull request. +""" +type HeadRefForcePushedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the after commit SHA for the 'head_ref_force_pushed' event. + """ + afterCommit: Commit + + """ + Identifies the before commit SHA for the 'head_ref_force_pushed' event. + """ + beforeCommit: Commit + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the HeadRefForcePushedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + Identifies the fully qualified ref name for the 'head_ref_force_pushed' event. + """ + ref: Ref +} + +""" +Represents a 'head_ref_restored' event on a given pull request. +""" +type HeadRefRestoredEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the HeadRefRestoredEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! +} + +""" +Detail needed to display a hovercard for a user +""" +type Hovercard @docsCategory(name: "users") { + """ + Each of the contexts for this hovercard + """ + contexts: [HovercardContext!]! +} + +""" +An individual line of a hovercard +""" +interface HovercardContext @docsCategory(name: "users") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! +} + +""" +The possible states in which authentication can be configured with an identity provider. +""" +enum IdentityProviderConfigurationState @docsCategory(name: "enterprise-admin") { + """ + Authentication with an identity provider is configured but not enforced. + """ + CONFIGURED + + """ + Authentication with an identity provider is configured and enforced. + """ + ENFORCED + + """ + Authentication with an identity provider is not configured. + """ + UNCONFIGURED +} + +""" +Autogenerated input type of ImportProject +""" +input ImportProjectInput { + """ + The description of Project. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A list of columns containing issues and pull requests. + """ + columnImports: [ProjectColumnImport!]! + + """ + The name of Project. + """ + name: String! + + """ + The name of the Organization or User to create the Project under. + """ + ownerName: String! + + """ + Whether the Project is public or not. + """ + public: Boolean = false +} + +""" +Autogenerated return type of ImportProject. +""" +type ImportProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new Project! + """ + project: Project +} + +""" +Autogenerated input type of InviteEnterpriseAdmin +""" +input InviteEnterpriseAdminInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The email of the person to invite as an administrator. + """ + email: String + + """ + The ID of the enterprise to which you want to invite an administrator. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of a user to invite as an administrator. + """ + invitee: String + + """ + The role of the administrator. + """ + role: EnterpriseAdministratorRole +} + +""" +Autogenerated return type of InviteEnterpriseAdmin. +""" +type InviteEnterpriseAdminPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The created enterprise administrator invitation. + """ + invitation: EnterpriseAdministratorInvitation +} + +""" +Autogenerated input type of InviteEnterpriseMember +""" +input InviteEnterpriseMemberInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The email of the person to invite as an unaffiliated member. + """ + email: String + + """ + The ID of the enterprise to which you want to invite an unaffiliated member. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of a user to invite as an unaffiliated member. + """ + invitee: String +} + +""" +Autogenerated return type of InviteEnterpriseMember. +""" +type InviteEnterpriseMemberPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The created enterprise member invitation. + """ + invitation: EnterpriseMemberInvitation +} + +""" +The possible values for the IP allow list enabled setting. +""" +enum IpAllowListEnabledSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is disabled for the owner. + """ + DISABLED + + """ + The setting is enabled for the owner. + """ + ENABLED +} + +""" +An IP address or range of addresses that is allowed to access an owner's resources. +""" +type IpAllowListEntry implements Node @docsCategory(name: "enterprise-admin") { + """ + A single IP address or range of IP addresses in CIDR notation. + """ + allowListValue: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IpAllowListEntry object + """ + id: ID! + + """ + Whether the entry is currently active. + """ + isActive: Boolean! + + """ + The name of the IP allow list entry. + """ + name: String + + """ + The owner of the IP allow list entry. + """ + owner: IpAllowListOwner! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for IpAllowListEntry. +""" +type IpAllowListEntryConnection { + """ + A list of edges. + """ + edges: [IpAllowListEntryEdge] + + """ + A list of nodes. + """ + nodes: [IpAllowListEntry] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type IpAllowListEntryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IpAllowListEntry +} + +""" +Ordering options for IP allow list entry connections. +""" +input IpAllowListEntryOrder @docsCategory(name: "enterprise-admin") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order IP allow list entries by. + """ + field: IpAllowListEntryOrderField! +} + +""" +Properties by which IP allow list entry connections can be ordered. +""" +enum IpAllowListEntryOrderField @docsCategory(name: "enterprise-admin") { + """ + Order IP allow list entries by the allow list value. + """ + ALLOW_LIST_VALUE + + """ + Order IP allow list entries by creation time. + """ + CREATED_AT +} + +""" +The possible values for the IP allow list configuration for installed GitHub Apps setting. +""" +enum IpAllowListForInstalledAppsEnabledSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is disabled for the owner. + """ + DISABLED + + """ + The setting is enabled for the owner. + """ + ENABLED +} + +""" +Types that can own an IP allow list. +""" +union IpAllowListOwner @docsCategory(name: "enterprise-admin") = App | Enterprise | Organization + +""" +The possible values for the IP allow list user-level enforcement enabled setting. +""" +enum IpAllowListUserLevelEnforcementEnabledSettingValue @docsCategory(name: "enterprise-admin") { + """ + The setting is disabled for the owner. + """ + DISABLED + + """ + The setting is enabled for the owner. + """ + ENABLED +} + +""" +An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project. +""" +type Issue implements Assignable & Closable & Comment & Deletable & Labelable & Lockable & Node & ProjectV2Owner & Reactable & RepositoryNode & Subscribable & SubscribableThread & UniformResourceLocatable & Updatable & UpdatableComment + @docsCategory(name: "issues") { + """ + Reason that the conversation was locked. + """ + activeLockReason: LockReason + + """ + A list of actors assigned to this object. + """ + assignedActors( + """ + 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 + ): AssigneeConnection! + + """ + A list of Users assigned to this object. + """ + assignees( + """ + 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 + ): UserConnection! + + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + A list of issues that are blocking this issue. + """ + blockedBy( + """ + 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 + + """ + Ordering options for dependencies + """ + orderBy: IssueDependencyOrder = {field: DEPENDENCY_ADDED_AT, direction: DESC} + ): IssueConnection! + + """ + A list of issues that this issue is blocking. + """ + blocking( + """ + 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 + + """ + Ordering options for dependencies + """ + orderBy: IssueDependencyOrder = {field: DEPENDENCY_ADDED_AT, direction: DESC} + ): IssueConnection! + + """ + Identifies the body of the issue. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The http path for this issue body + """ + bodyResourcePath: URI! + + """ + Identifies the body of the issue rendered to text. + """ + bodyText: String! + + """ + The http URL for this issue body + """ + bodyUrl: URI! + + """ + Indicates if the object is closed (definition of closed may depend on type) + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + List of open pull requests referenced from this issue + """ + closedByPullRequestsReferences( + """ + 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 + + """ + Include closed PRs in results + """ + includeClosedPrs: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Return results ordered by state + """ + orderByState: Boolean = false + + """ + Return only manually linked PRs + """ + userLinkedOnly: Boolean = false + ): PullRequestConnection + + """ + A list of comments associated with the Issue. + """ + comments( + """ + 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 + + """ + Ordering options for issue comments returned from the connection. + """ + orderBy: IssueCommentOrder + ): IssueCommentConnection! + + """ + 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 + + """ + A reference to the original issue that this issue has been marked as a duplicate of. + """ + duplicateOf: Issue + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The hovercard information for this issue + """ + hovercard( + """ + Whether or not to include notification contexts + """ + includeNotificationContexts: Boolean = true + ): Hovercard! + + """ + The Node ID of the Issue object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Indicates whether or not this issue is currently pinned to the repository issues list + """ + isPinned: Boolean + + """ + Is this issue read by the viewer + """ + isReadByViewer: Boolean + + """ + Summary of the state of an issue's dependencies + """ + issueDependenciesSummary: IssueDependenciesSummary! + + """ + Fields that are set on this issue + """ + issueFieldValues( + """ + 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 + ): IssueFieldValueConnection + + """ + The issue type for this Issue + """ + issueType: IssueType + + """ + A list of labels associated with the object. + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + ): LabelConnection + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Branches linked to this issue. + """ + linkedBranches( + """ + 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 + ): LinkedBranchConnection! + + """ + `true` if the object is locked + """ + locked: Boolean! + + """ + Identifies the milestone associated with the issue. + """ + milestone: Milestone + + """ + Identifies the issue number. + """ + number: Int! + + """ + The parent entity of the issue. + """ + parent: Issue + + """ + A list of Users that are participating in the Issue conversation. + """ + participants( + """ + 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 + ): UserConnection! + + """ + The pinned comment for this issue. + """ + pinnedIssueComment: PinnedIssueComment + + """ + List of project cards associated with this issue. + """ + projectCards( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + A list of archived states to filter the cards by + """ + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + + """ + 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 + ): ProjectCardConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + List of project items associated with this issue. + """ + projectItems( + """ + 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 + + """ + Include archived items. + """ + includeArchived: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): ProjectV2ItemConnection + + """ + Find a project by number. + """ + projectV2( + """ + The project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for under the owner. + """ + query: String + ): ProjectV2Connection! + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path for this issue + """ + resourcePath: URI! + + """ + Identifies the state of the issue. + """ + state: IssueState! + + """ + Identifies the reason for the issue state. + """ + stateReason( + """ + Whether or not to return state reason for duplicates + + **Upcoming Change on 2025-10-01 UTC** + **Description:** `enableDuplicate` will be removed. + **Reason:** The state reason for duplicate issue is now returned by default. + """ + enableDuplicate: Boolean = false + ): IssueStateReason + + """ + A list of sub-issues associated with the Issue. + """ + subIssues( + """ + 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 + ): IssueConnection! + + """ + Summary of the state of an issue's sub-issues + """ + subIssuesSummary: SubIssuesSummary! + + """ + A list of suggested actors to assign to this object + """ + suggestedActors( + """ + 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 + + """ + If provided, searches users by login or profile name + """ + query: String + ): AssigneeConnection! + + """ + A list of events, comments, commits, etc. associated with the issue. + """ + timeline( + """ + 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 + + """ + Allows filtering timeline events by a `since` timestamp. + """ + since: DateTime + ): IssueTimelineConnection! + @deprecated(reason: "`timeline` will be removed Use Issue.timelineItems instead. Removal on 2020-10-01 UTC.") + + """ + A list of events, comments, commits, etc. associated with the issue. + """ + timelineItems( + """ + 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 + + """ + Filter timeline items by type. + """ + itemTypes: [IssueTimelineItemsItemType!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter timeline items by a `since` timestamp. + """ + since: DateTime + + """ + Skips the first _n_ elements in the list. + """ + skip: Int + ): IssueTimelineItemsConnection! + + """ + Identifies the issue title. + """ + title: String! + + """ + Identifies the issue title rendered to HTML. + """ + titleHTML: String! + + """ + A list of issues that track this issue + """ + trackedInIssues( + """ + 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 + ): IssueConnection! + + """ + A list of issues tracked inside the current issue + """ + trackedIssues( + """ + 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 + ): IssueConnection! + + """ + The number of tracked issues for this issue + """ + trackedIssuesCount( + """ + Limit the count to tracked issues with the specified states. + """ + states: [TrackedIssueStates] + ): Int! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this issue + """ + url: URI! + + """ + 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 + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Check if the current viewer can delete this object. + """ + viewerCanDelete: Boolean! + + """ + Indicates if the viewer can edit labels for this object. + """ + viewerCanLabel: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: Boolean! + + """ + Check if the current viewer can set fields on the issue. + """ + viewerCanSetFields: 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 + + """ + Identifies the viewer's thread subscription form action. + """ + viewerThreadSubscriptionFormAction: ThreadSubscriptionFormAction + + """ + Identifies the viewer's thread subscription status. + """ + viewerThreadSubscriptionStatus: ThreadSubscriptionState +} + +""" +The possible state reasons of a closed issue. +""" +enum IssueClosedStateReason @docsCategory(name: "issues") { + """ + An issue that has been closed as completed + """ + COMPLETED + + """ + An issue that has been closed as a duplicate + """ + DUPLICATE + + """ + An issue that has been closed as not planned + """ + NOT_PLANNED +} + +""" +Represents a comment on an Issue. +""" +type IssueComment implements Comment & Deletable & Minimizable & Node & Pinnable & Reactable & RepositoryNode & Updatable & UpdatableComment + @docsCategory(name: "issues") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + 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 + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueComment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + Indicates whether or not this entity is currently pinned. + """ + isPinned: Boolean + + """ + Identifies the issue associated with the comment. + """ + issue: Issue! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + Identifies the date and time when this entity was pinned. + """ + pinnedAt: DateTime + + """ + The user who pinned this entity. + """ + pinnedBy: User + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + Returns the pull request associated with the comment, if this comment was made on a + pull request. + """ + pullRequest: PullRequest + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path for this issue comment + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this issue comment + """ + url: URI! + + """ + 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! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Check if the current viewer can pin this entity. + """ + viewerCanPin: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: Boolean! + + """ + Check if the current viewer can unpin this entity. + """ + viewerCanUnpin: 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! +} + +""" +The connection type for IssueComment. +""" +type IssueCommentConnection { + """ + A list of edges. + """ + edges: [IssueCommentEdge] + + """ + A list of nodes. + """ + nodes: [IssueComment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type IssueCommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueComment +} + +""" +Ways in which lists of issue comments can be ordered upon return. +""" +input IssueCommentOrder @docsCategory(name: "issues") { + """ + The direction in which to order issue comments by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order issue comments by. + """ + field: IssueCommentOrderField! +} + +""" +Properties by which issue comment connections can be ordered. +""" +enum IssueCommentOrderField @docsCategory(name: "issues") { + """ + Order issue comments by update time + """ + UPDATED_AT +} + +""" +Represents a 'issue_comment_pinned' event on a given issue. +""" +type IssueCommentPinnedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueCommentPinnedEvent object + """ + id: ID! + + """ + Identifies the issue comment associated with the 'issue_comment_pinned' event. + """ + issueComment: IssueComment +} + +""" +Represents a 'issue_comment_unpinned' event on a given issue. +""" +type IssueCommentUnpinnedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueCommentUnpinnedEvent object + """ + id: ID! + + """ + Identifies the issue comment associated with the 'issue_comment_unpinned' event. + """ + issueComment: IssueComment +} + +""" +The connection type for Issue. +""" +type IssueConnection { + """ + A list of edges. + """ + edges: [IssueEdge] + + """ + A list of nodes. + """ + nodes: [Issue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +This aggregates issues opened by a user within one repository. +""" +type IssueContributionsByRepository @docsCategory(name: "issues") { + """ + The issue contributions. + """ + contributions( + """ + 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 + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedIssueContributionConnection! + + """ + The repository in which the issues were opened. + """ + repository: Repository! +} + +""" +The policy controlling who can create issues in a repository. +""" +enum IssueCreationPolicy @docsCategory(name: "issues") { + """ + Anyone can create issues. + """ + ALL + + """ + Only collaborators can create issues. + """ + COLLABORATORS_ONLY +} + +""" +Summary of the state of an issue's dependencies +""" +type IssueDependenciesSummary @docsCategory(name: "issues") { + """ + Count of issues this issue is blocked by + """ + blockedBy: Int! + + """ + Count of issues this issue is blocking + """ + blocking: Int! + + """ + Total count of issues this issue is blocked by (open and closed) + """ + totalBlockedBy: Int! + + """ + Total count of issues this issue is blocking (open and closed) + """ + totalBlocking: Int! +} + +""" +Ordering options issue dependencies +""" +input IssueDependencyOrder @docsCategory(name: "issues") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order issue dependencies by. + """ + field: IssueDependencyOrderField! +} + +""" +Properties by which issue dependencies can be ordered. +""" +enum IssueDependencyOrderField @docsCategory(name: "issues") { + """ + Order issue dependencies by the creation time of the dependent issue + """ + CREATED_AT + + """ + Order issue dependencies by time of when the dependency relationship was added + """ + DEPENDENCY_ADDED_AT +} + +""" +An edge in a connection. +""" +type IssueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Issue +} + +""" +Represents a 'issue_field_added' event on a given issue. +""" +type IssueFieldAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The color if it is a single-select field. + """ + color: String + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueFieldAddedEvent object + """ + id: ID! + + """ + The issue field added. + """ + issueField: IssueFields + + """ + The selected options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] + + """ + The value of the added field. + """ + value: String +} + +""" +Represents a 'issue_field_changed' event on a given issue. +""" +type IssueFieldChangedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueFieldChangedEvent object + """ + id: ID! + + """ + The issue field changed. + """ + issueField: IssueFields + + """ + The new color if it is a single-select field. + """ + newColor: String + + """ + The new options for option-backed fields; single-select returns one option and multi-select returns many. + """ + newOptions: [IssueFieldTimelineOption!] + + """ + The new value of the field. + """ + newValue: String + + """ + The previous color if it was a single-select field. + """ + previousColor: String + + """ + The previous options for option-backed fields; single-select returns one option and multi-select returns many. + """ + previousOptions: [IssueFieldTimelineOption!] + + """ + The previous value of the field. + """ + previousValue: String +} + +""" +Common fields across different issue field types +""" +interface IssueFieldCommon @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The issue field's name. + """ + name: String! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +Represents an issue field value that must be set on an issue during issue creation +""" +input IssueFieldCreateOrUpdateInput @docsCategory(name: "issues") { + """ + The date value, for a date field + """ + dateValue: String + + """ + Set to true to delete the field value + """ + delete: Boolean + + """ + The ID of the issue field + """ + fieldId: ID! + + """ + The IDs of the selected options, for a multi select field + """ + multiSelectOptionIds: [ID!] + + """ + The numeric value, for a number field + """ + numberValue: Float + + """ + The ID of the selected option, for a single select field + """ + singleSelectOptionId: ID + + """ + The text value, for a text field + """ + textValue: String +} + +""" +The type of an issue field. +""" +enum IssueFieldDataType @docsCategory(name: "issues") { + """ + Date + """ + DATE + + """ + Multi Select + """ + MULTI_SELECT + + """ + Number + """ + NUMBER + + """ + Single Select + """ + SINGLE_SELECT + + """ + Text + """ + TEXT +} + +""" +Represents a date issue field. +""" +type IssueFieldDate implements IssueFieldCommon & Node @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldDate object + """ + id: ID! + + """ + The issue field's name. + """ + name: String! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +The value of a date field in an Issue item. +""" +type IssueFieldDateValue implements IssueFieldValueCommon & Node @docsCategory(name: "issues") { + """ + The issue field that contains this value. + """ + field: IssueFields + + """ + The Node ID of the IssueFieldDateValue object + """ + id: ID! + + """ + Value of the field. + """ + value: String! +} + +""" +Represents a multi select issue field. +""" +type IssueFieldMultiSelect implements IssueFieldCommon & Node @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldMultiSelect object + """ + id: ID! + + """ + The issue field's name. + """ + name: String! + + """ + Options for the multi select field + """ + options: [IssueFieldSingleSelectOption!]! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +The value of a multi select field in an Issue item. +""" +type IssueFieldMultiSelectValue implements IssueFieldValueCommon & Node @docsCategory(name: "issues") { + """ + The issue field that contains this value. + """ + field: IssueFields + + """ + The Node ID of the IssueFieldMultiSelectValue object + """ + id: ID! + + """ + The selected options. + """ + options: [IssueFieldSingleSelectOption!]! + + """ + Comma-separated names of the selected options. + """ + value: String +} + +""" +Represents a number issue field. +""" +type IssueFieldNumber implements IssueFieldCommon & Node @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldNumber object + """ + id: ID! + + """ + The issue field's name. + """ + name: String! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +The value of a number field in an Issue item. +""" +type IssueFieldNumberValue implements IssueFieldValueCommon & Node @docsCategory(name: "issues") { + """ + The issue field that contains this value. + """ + field: IssueFields + + """ + The Node ID of the IssueFieldNumberValue object + """ + id: ID! + + """ + Value of the field. + """ + value: Float! +} + +""" +Ordering options for issue field connections +""" +input IssueFieldOrder @docsCategory(name: "issues") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order issue fields by. + """ + field: IssueFieldOrderField! +} + +""" +Properties by which issue field connections can be ordered. +""" +enum IssueFieldOrderField @docsCategory(name: "issues") { + """ + Order issue fields by creation time + """ + CREATED_AT + + """ + Order issue fields by name + """ + NAME +} + +""" +Represents a 'issue_field_removed' event on a given issue. +""" +type IssueFieldRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueFieldRemovedEvent object + """ + id: ID! + + """ + The issue field removed. + """ + issueField: IssueFields + + """ + The removed options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] +} + +""" +Represents a single select issue field. +""" +type IssueFieldSingleSelect implements IssueFieldCommon & Node @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldSingleSelect object + """ + id: ID! + + """ + The issue field's name. + """ + name: String! + + """ + Options for the single select field + """ + options: [IssueFieldSingleSelectOption!]! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +Represents an option in a single-select issue field. +""" +type IssueFieldSingleSelectOption implements Node @docsCategory(name: "issues") { + """ + The option's display color. + """ + color: IssueFieldSingleSelectOptionColor! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The option's plain-text description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldSingleSelectOption object + """ + id: ID! + + """ + The option's name. + """ + name: String! + + """ + The option's priority order. + """ + priority: Int +} + +""" +The display color of a single-select field option. +""" +enum IssueFieldSingleSelectOptionColor @docsCategory(name: "issues") { + """ + blue + """ + BLUE + + """ + gray + """ + GRAY + + """ + green + """ + GREEN + + """ + orange + """ + ORANGE + + """ + pink + """ + PINK + + """ + purple + """ + PURPLE + + """ + red + """ + RED + + """ + yellow + """ + YELLOW +} + +""" +A single selection option for an issue field. +""" +input IssueFieldSingleSelectOptionInput @docsCategory(name: "issues") { + """ + The color associated with the option. + """ + color: IssueFieldSingleSelectOptionColor! + + """ + A description of the option. + """ + description: String + + """ + The name of the option. + """ + name: String! + + """ + The priority of the option in the list. + """ + priority: Int! +} + +""" +The value of a single select field in an Issue item. +""" +type IssueFieldSingleSelectValue implements IssueFieldValueCommon & Node @docsCategory(name: "issues") { + """ + The option's display color. + """ + color: IssueFieldSingleSelectOptionColor! + + """ + The option's plain-text description. + """ + description: String + + """ + The issue field that contains this value. + """ + field: IssueFields + + """ + The Node ID of the IssueFieldSingleSelectValue object + """ + id: ID! + + """ + The option's name. + """ + name: String! + + """ + The selected option's global relay ID. + """ + optionId: String + + """ + The option's name text (alias for `name`, for consistency with other field value types). + """ + value: String! +} + +""" +Represents a text issue field. +""" +type IssueFieldText implements IssueFieldCommon & Node @docsCategory(name: "issues") { + """ + The issue field's creation timestamp. + """ + createdAt: DateTime! + + """ + The issue field's data type. + """ + dataType: IssueFieldDataType! + + """ + The issue field's description. + """ + description: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the IssueFieldText object + """ + id: ID! + + """ + The issue field's name. + """ + name: String! + + """ + The issue field's visibility. + """ + visibility: IssueFieldVisibility! +} + +""" +The value of a text field in an Issue item. +""" +type IssueFieldTextValue implements IssueFieldValueCommon & Node @docsCategory(name: "issues") { + """ + The issue field that contains this value. + """ + field: IssueFields + + """ + The Node ID of the IssueFieldTextValue object + """ + id: ID! + + """ + Value of the field. + """ + value: String! +} + +""" +Represents a selected option for a timeline issue field event. +""" +type IssueFieldTimelineOption @docsCategory(name: "issues") { + """ + The option color. + """ + color: String + + """ + The option name. + """ + name: String! +} + +""" +Issue field values +""" +union IssueFieldValue @docsCategory(name: "issues") = + | IssueFieldDateValue + | IssueFieldMultiSelectValue + | IssueFieldNumberValue + | IssueFieldSingleSelectValue + | IssueFieldTextValue + +""" +Common fields across different issue field value types +""" +interface IssueFieldValueCommon @docsCategory(name: "issues") { + """ + The issue field that contains this value. + """ + field: IssueFields +} + +""" +The connection type for IssueFieldValue. +""" +type IssueFieldValueConnection { + """ + A list of edges. + """ + edges: [IssueFieldValueEdge] + + """ + A list of nodes. + """ + nodes: [IssueFieldValue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type IssueFieldValueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueFieldValue +} + +""" +The visibility of an issue field. +""" +enum IssueFieldVisibility @docsCategory(name: "issues") { + """ + All + """ + ALL + + """ + Org Only + """ + ORG_ONLY +} + +""" +Possible issue fields. +""" +union IssueFields @docsCategory(name: "issues") = + | IssueFieldDate + | IssueFieldMultiSelect + | IssueFieldNumber + | IssueFieldSingleSelect + | IssueFieldText + +""" +The connection type for IssueFields. +""" +type IssueFieldsConnection { + """ + A list of edges. + """ + edges: [IssueFieldsEdge] + + """ + A list of nodes. + """ + nodes: [IssueFields] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type IssueFieldsEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueFields +} + +""" +Ways in which to filter lists of issues. +""" +input IssueFilters @docsCategory(name: "issues") { + """ + List issues assigned to given name. Pass in `null` for issues with no assigned + user, and `*` for issues assigned to any user. + """ + assignee: String + + """ + List issues created by given name. + """ + createdBy: String + + """ + List issues where the list of label names exist on the issue. + """ + labels: [String!] + + """ + List issues where the given name is mentioned in the issue. + """ + mentioned: String + + """ + List issues by given milestone argument. If an string representation of an + integer is passed, it should refer to a milestone by its database ID. Pass in + `null` for issues with no milestone, and `*` for issues that are assigned to any milestone. + """ + milestone: String + + """ + List issues by given milestone argument. If an string representation of an + integer is passed, it should refer to a milestone by its number field. Pass in + `null` for issues with no milestone, and `*` for issues that are assigned to any milestone. + """ + milestoneNumber: String + + """ + List issues that have been updated at or after the given date. + """ + since: DateTime + + """ + List issues filtered by the list of states given. + """ + states: [IssueState!] + + """ + List issues filtered by the type given, only supported by searches on repositories. + """ + type: String + + """ + List issues subscribed to by viewer. + """ + viewerSubscribed: Boolean = false +} + +""" +Used for return value of Repository.issueOrPullRequest. +""" +union IssueOrPullRequest @docsCategory(name: "issues") = Issue | PullRequest + +""" +Ways in which lists of issues can be ordered upon return. +""" +input IssueOrder @docsCategory(name: "issues") { + """ + The direction in which to order issues by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order issues by. + """ + field: IssueOrderField! +} + +""" +Properties by which issue connections can be ordered. +""" +enum IssueOrderField @docsCategory(name: "issues") { + """ + Order issues by comment count + """ + COMMENTS + + """ + Order issues by creation time + """ + CREATED_AT + + """ + Order issues by update time + """ + UPDATED_AT +} + +""" +Type of issue search performed +""" +enum IssueSearchType @docsCategory(name: "issues") { + """ + Hybrid search combining lexical and semantic approaches + """ + HYBRID + + """ + Lexical (keyword-based) search + """ + LEXICAL + + """ + Semantic (meaning-based) search using embeddings + """ + SEMANTIC +} + +""" +The possible states of an issue. +""" +enum IssueState @docsCategory(name: "issues") { + """ + An issue that has been closed + """ + CLOSED + + """ + An issue that is still open + """ + OPEN +} + +""" +The possible state reasons of an issue. +""" +enum IssueStateReason @docsCategory(name: "issues") { + """ + An issue that has been closed as completed + """ + COMPLETED + + """ + An issue that has been closed as a duplicate. + """ + DUPLICATE + + """ + An issue that has been closed as not planned + """ + NOT_PLANNED + + """ + An issue that has been reopened + """ + REOPENED +} + +""" +A repository issue template. +""" +type IssueTemplate @docsCategory(name: "issues") { + """ + The template purpose. + """ + about: String + + """ + The suggested assignees. + """ + assignees( + """ + 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 + ): UserConnection! + + """ + The suggested issue body. + """ + body: String + + """ + The template filename. + """ + filename: String! + + """ + The suggested issue labels + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + ): LabelConnection + + """ + The template name. + """ + name: String! + + """ + The suggested issue title. + """ + title: String + + """ + The suggested issue type + """ + type: IssueType +} + +""" +The connection type for IssueTimelineItem. +""" +type IssueTimelineConnection { + """ + A list of edges. + """ + edges: [IssueTimelineItemEdge] + + """ + A list of nodes. + """ + nodes: [IssueTimelineItem] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An item in an issue timeline +""" +union IssueTimelineItem @docsCategory(name: "issues") = + | AssignedEvent + | ClosedEvent + | Commit + | CrossReferencedEvent + | DemilestonedEvent + | IssueComment + | LabeledEvent + | LockedEvent + | MilestonedEvent + | ReferencedEvent + | RenamedTitleEvent + | ReopenedEvent + | SubscribedEvent + | TransferredEvent + | UnassignedEvent + | UnlabeledEvent + | UnlockedEvent + | UnsubscribedEvent + | UserBlockedEvent + +""" +An edge in a connection. +""" +type IssueTimelineItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueTimelineItem +} + +""" +An item in an issue timeline +""" +union IssueTimelineItems @docsCategory(name: "issues") = + | AddedToProjectEvent + | AddedToProjectV2Event + | AssignedEvent + | BlockedByAddedEvent + | BlockedByRemovedEvent + | BlockingAddedEvent + | BlockingRemovedEvent + | ClosedEvent + | CommentDeletedEvent + | ConnectedEvent + | ConvertedFromDraftEvent + | ConvertedNoteToIssueEvent + | ConvertedToDiscussionEvent + | CrossReferencedEvent + | DemilestonedEvent + | DisconnectedEvent + | IssueComment + | IssueCommentPinnedEvent + | IssueCommentUnpinnedEvent + | IssueFieldAddedEvent + | IssueFieldChangedEvent + | IssueFieldRemovedEvent + | IssueTypeAddedEvent + | IssueTypeChangedEvent + | IssueTypeRemovedEvent + | LabeledEvent + | LockedEvent + | MarkedAsDuplicateEvent + | MentionedEvent + | MilestonedEvent + | MovedColumnsInProjectEvent + | ParentIssueAddedEvent + | ParentIssueRemovedEvent + | PinnedEvent + | ProjectV2ItemStatusChangedEvent + | ReferencedEvent + | RemovedFromProjectEvent + | RemovedFromProjectV2Event + | RenamedTitleEvent + | ReopenedEvent + | SubIssueAddedEvent + | SubIssueRemovedEvent + | SubscribedEvent + | TransferredEvent + | UnassignedEvent + | UnlabeledEvent + | UnlockedEvent + | UnmarkedAsDuplicateEvent + | UnpinnedEvent + | UnsubscribedEvent + | UserBlockedEvent + +""" +The connection type for IssueTimelineItems. +""" +type IssueTimelineItemsConnection { + """ + A list of edges. + """ + edges: [IssueTimelineItemsEdge] + + """ + Identifies the count of items after applying `before` and `after` filters. + """ + filteredCount: Int! + + """ + A list of nodes. + """ + nodes: [IssueTimelineItems] + + """ + Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing. + """ + pageCount: Int! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + Identifies the date and time when the timeline was last updated. + """ + updatedAt: DateTime! +} + +""" +An edge in a connection. +""" +type IssueTimelineItemsEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueTimelineItems +} + +""" +The possible item types found in a timeline. +""" +enum IssueTimelineItemsItemType { + """ + Represents a 'added_to_project' event on a given issue or pull request. + """ + ADDED_TO_PROJECT_EVENT + + """ + Represents a 'added_to_project_v2' event on a given issue or pull request. + """ + ADDED_TO_PROJECT_V2_EVENT + + """ + Represents an 'assigned' event on any assignable object. + """ + ASSIGNED_EVENT + + """ + Represents a 'blocked_by_added' event on a given issue. + """ + BLOCKED_BY_ADDED_EVENT + + """ + Represents a 'blocked_by_removed' event on a given issue. + """ + BLOCKED_BY_REMOVED_EVENT + + """ + Represents a 'blocking_added' event on a given issue. + """ + BLOCKING_ADDED_EVENT + + """ + Represents a 'blocking_removed' event on a given issue. + """ + BLOCKING_REMOVED_EVENT + + """ + Represents a 'closed' event on any `Closable`. + """ + CLOSED_EVENT + + """ + Represents a 'comment_deleted' event on a given issue or pull request. + """ + COMMENT_DELETED_EVENT + + """ + Represents a 'connected' event on a given issue or pull request. + """ + CONNECTED_EVENT + + """ + Represents a 'converted_from_draft' event on a given issue or pull request. + """ + CONVERTED_FROM_DRAFT_EVENT + + """ + Represents a 'converted_note_to_issue' event on a given issue or pull request. + """ + CONVERTED_NOTE_TO_ISSUE_EVENT + + """ + Represents a 'converted_to_discussion' event on a given issue. + """ + CONVERTED_TO_DISCUSSION_EVENT + + """ + Represents a mention made by one issue or pull request to another. + """ + CROSS_REFERENCED_EVENT + + """ + Represents a 'demilestoned' event on a given issue or pull request. + """ + DEMILESTONED_EVENT + + """ + Represents a 'disconnected' event on a given issue or pull request. + """ + DISCONNECTED_EVENT + + """ + Represents a comment on an Issue. + """ + ISSUE_COMMENT + + """ + Represents a 'issue_comment_pinned' event on a given issue. + """ + ISSUE_COMMENT_PINNED_EVENT + + """ + Represents a 'issue_comment_unpinned' event on a given issue. + """ + ISSUE_COMMENT_UNPINNED_EVENT + + """ + Represents a 'issue_field_added' event on a given issue. + """ + ISSUE_FIELD_ADDED_EVENT + + """ + Represents a 'issue_field_changed' event on a given issue. + """ + ISSUE_FIELD_CHANGED_EVENT + + """ + Represents a 'issue_field_removed' event on a given issue. + """ + ISSUE_FIELD_REMOVED_EVENT + + """ + Represents a 'issue_type_added' event on a given issue. + """ + ISSUE_TYPE_ADDED_EVENT + + """ + Represents a 'issue_type_changed' event on a given issue. + """ + ISSUE_TYPE_CHANGED_EVENT + + """ + Represents a 'issue_type_removed' event on a given issue. + """ + ISSUE_TYPE_REMOVED_EVENT + + """ + Represents a 'labeled' event on a given issue or pull request. + """ + LABELED_EVENT + + """ + Represents a 'locked' event on a given issue or pull request. + """ + LOCKED_EVENT + + """ + Represents a 'marked_as_duplicate' event on a given issue or pull request. + """ + MARKED_AS_DUPLICATE_EVENT + + """ + Represents a 'mentioned' event on a given issue or pull request. + """ + MENTIONED_EVENT + + """ + Represents a 'milestoned' event on a given issue or pull request. + """ + MILESTONED_EVENT + + """ + Represents a 'moved_columns_in_project' event on a given issue or pull request. + """ + MOVED_COLUMNS_IN_PROJECT_EVENT + + """ + Represents a 'parent_issue_added' event on a given issue. + """ + PARENT_ISSUE_ADDED_EVENT + + """ + Represents a 'parent_issue_removed' event on a given issue. + """ + PARENT_ISSUE_REMOVED_EVENT + + """ + Represents a 'pinned' event on a given issue or pull request. + """ + PINNED_EVENT + + """ + Represents a 'project_v2_item_status_changed' event on a given issue or pull request. + """ + PROJECT_V2_ITEM_STATUS_CHANGED_EVENT + + """ + Represents a 'referenced' event on a given `ReferencedSubject`. + """ + REFERENCED_EVENT + + """ + Represents a 'removed_from_project' event on a given issue or pull request. + """ + REMOVED_FROM_PROJECT_EVENT + + """ + Represents a 'removed_from_project_v2' event on a given issue or pull request. + """ + REMOVED_FROM_PROJECT_V2_EVENT + + """ + Represents a 'renamed' event on a given issue or pull request + """ + RENAMED_TITLE_EVENT + + """ + Represents a 'reopened' event on any `Closable`. + """ + REOPENED_EVENT + + """ + Represents a 'subscribed' event on a given `Subscribable`. + """ + SUBSCRIBED_EVENT + + """ + Represents a 'sub_issue_added' event on a given issue. + """ + SUB_ISSUE_ADDED_EVENT + + """ + Represents a 'sub_issue_removed' event on a given issue. + """ + SUB_ISSUE_REMOVED_EVENT + + """ + Represents a 'transferred' event on a given issue or pull request. + """ + TRANSFERRED_EVENT + + """ + Represents an 'unassigned' event on any assignable object. + """ + UNASSIGNED_EVENT + + """ + Represents an 'unlabeled' event on a given issue or pull request. + """ + UNLABELED_EVENT + + """ + Represents an 'unlocked' event on a given issue or pull request. + """ + UNLOCKED_EVENT + + """ + Represents an 'unmarked_as_duplicate' event on a given issue or pull request. + """ + UNMARKED_AS_DUPLICATE_EVENT + + """ + Represents an 'unpinned' event on a given issue or pull request. + """ + UNPINNED_EVENT + + """ + Represents an 'unsubscribed' event on a given `Subscribable`. + """ + UNSUBSCRIBED_EVENT + + """ + Represents a 'user_blocked' event on a given user. + """ + USER_BLOCKED_EVENT +} + +""" +Represents the type of Issue. +""" +type IssueType implements Node @docsCategory(name: "issues") { + """ + The issue type's color. + """ + color: IssueTypeColor! + + """ + The issue type's description. + """ + description: String + + """ + The Node ID of the IssueType object + """ + id: ID! + + """ + The issue type's enabled state. + """ + isEnabled: Boolean! + + """ + Whether the issue type is publicly visible. + """ + isPrivate: Boolean! + @deprecated( + reason: "Private issue types are being deprecated and can no longer be created. Removal on 2025-04-01 UTC." + ) + + """ + The issues with this issue type in the given repository. + """ + issues( + """ + 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 + + """ + Filtering options for issues returned from the connection. + """ + filterBy: IssueFilters + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for issues returned from the connection. + """ + orderBy: IssueOrder + + """ + Target repository to load the issues from. + """ + repositoryId: ID! + + """ + A list of states to filter the issues by. + """ + states: [IssueState!] + ): IssueConnection! + + """ + The issue type's name. + """ + name: String! + + """ + An ordered list of issue fields pinned to this type. + """ + pinnedFields: [IssueFields!] +} + +""" +Represents a 'issue_type_added' event on a given issue. +""" +type IssueTypeAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueTypeAddedEvent object + """ + id: ID! + + """ + The issue type added. + """ + issueType: IssueType +} + +""" +Represents a 'issue_type_changed' event on a given issue. +""" +type IssueTypeChangedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueTypeChangedEvent object + """ + id: ID! + + """ + The issue type added. + """ + issueType: IssueType + + """ + The issue type removed. + """ + prevIssueType: IssueType +} + +""" +The possible color for an issue type +""" +enum IssueTypeColor @docsCategory(name: "issues") { + """ + blue + """ + BLUE + + """ + gray + """ + GRAY + + """ + green + """ + GREEN + + """ + orange + """ + ORANGE + + """ + pink + """ + PINK + + """ + purple + """ + PURPLE + + """ + red + """ + RED + + """ + yellow + """ + YELLOW +} + +""" +The connection type for IssueType. +""" +type IssueTypeConnection { + """ + A list of edges. + """ + edges: [IssueTypeEdge] + + """ + A list of nodes. + """ + nodes: [IssueType] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type IssueTypeEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: IssueType +} + +""" +Ordering options for issue types connections +""" +input IssueTypeOrder @docsCategory(name: "issues") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order issue types by. + """ + field: IssueTypeOrderField! +} + +""" +Properties by which issue type connections can be ordered. +""" +enum IssueTypeOrderField @docsCategory(name: "issues") { + """ + Order issue types by creation time + """ + CREATED_AT + + """ + Order issue types by name + """ + NAME +} + +""" +Represents a 'issue_type_removed' event on a given issue. +""" +type IssueTypeRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the IssueTypeRemovedEvent object + """ + id: ID! + + """ + The issue type removed. + """ + issueType: IssueType +} + +""" +Represents a user signing up for a GitHub account. +""" +type JoinedGitHubContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +A label for categorizing Issues, Pull Requests, Milestones, or Discussions with a given Repository. +""" +type Label implements Node @docsCategory(name: "issues") { + """ + Identifies the label color. + """ + color: String! + + """ + Identifies the date and time when the label was created. + """ + createdAt: DateTime + + """ + A brief description of this label. + """ + description: String + + """ + The Node ID of the Label object + """ + id: ID! + + """ + Indicates whether or not this is a default label. + """ + isDefault: Boolean! + + """ + A list of issues associated with this label. + """ + issues( + """ + 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 + + """ + Filtering options for issues returned from the connection. + """ + filterBy: IssueFilters + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for issues returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the issues by. + """ + states: [IssueState!] + ): IssueConnection! + + """ + Identifies the label name. + """ + name: String! + + """ + A list of pull requests associated with this label. + """ + pullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection! + + """ + The repository associated with this label. + """ + repository: Repository! + + """ + The HTTP path for this label. + """ + resourcePath: URI! + + """ + Identifies the date and time when the label was last updated. + """ + updatedAt: DateTime + + """ + The HTTP URL for this label. + """ + url: URI! +} + +""" +The connection type for Label. +""" +type LabelConnection { + """ + A list of edges. + """ + edges: [LabelEdge] + + """ + A list of nodes. + """ + nodes: [Label] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type LabelEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Label +} + +""" +Ways in which lists of labels can be ordered upon return. +""" +input LabelOrder @docsCategory(name: "issues") { + """ + The direction in which to order labels by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order labels by. + """ + field: LabelOrderField! +} + +""" +Properties by which label connections can be ordered. +""" +enum LabelOrderField @docsCategory(name: "issues") { + """ + Order labels by creation time + """ + CREATED_AT + + """ + Order labels by issue count + """ + ISSUE_COUNT + + """ + Order labels by name + """ + NAME +} + +""" +An object that can have labels assigned to it. +""" +interface Labelable @docsCategory(name: "issues") { + """ + A list of labels associated with the object. + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + ): LabelConnection + + """ + Indicates if the viewer can edit labels for this object. + """ + viewerCanLabel: Boolean! +} + +""" +Represents a 'labeled' event on a given issue or pull request. +""" +type LabeledEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the LabeledEvent object + """ + id: ID! + + """ + Identifies the label associated with the 'labeled' event. + """ + label: Label! + + """ + Identifies the `Labelable` associated with the event. + """ + labelable: Labelable! +} + +""" +Represents a given language found in repositories. +""" +type Language implements Node @docsCategory(name: "repos") { + """ + The color defined for the current language. + """ + color: String + + """ + The Node ID of the Language object + """ + id: ID! + + """ + The name of the current language. + """ + name: String! +} + +""" +A list of languages associated with the parent. +""" +type LanguageConnection { + """ + A list of edges. + """ + edges: [LanguageEdge] + + """ + A list of nodes. + """ + nodes: [Language] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + The total size in bytes of files written in that language. + """ + totalSize: Int! +} + +""" +Represents the language of a repository. +""" +type LanguageEdge { + cursor: String! + node: Language! + + """ + The number of bytes of code written in the language. + """ + size: Int! +} + +""" +Ordering options for language connections. +""" +input LanguageOrder @docsCategory(name: "repos") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order languages by. + """ + field: LanguageOrderField! +} + +""" +Properties by which language connections can be ordered. +""" +enum LanguageOrderField @docsCategory(name: "repos") { + """ + Order languages by the size of all files containing the language + """ + SIZE +} + +""" +Reason why a semantic or hybrid issue search fell back to lexical search +""" +enum LexicalFallbackReason @docsCategory(name: "search") { + """ + Query targets non-issue types (e.g., pull requests) + """ + NON_ISSUE_TARGET + + """ + Scoped query resolved to zero accessible repositories + """ + NO_ACCESSIBLE_REPOS + + """ + Query has only qualifiers and no free text terms + """ + NO_TEXT_TERMS + + """ + Query uses an in: qualifier targeting non-semantic fields + """ + ONLY_NON_SEMANTIC_FIELDS_REQUESTED + + """ + Query contains OR operators (nested boolean qualifiers) + """ + OR_BOOLEAN_NOT_SUPPORTED + + """ + Query contains quoted text requiring exact matches + """ + QUOTED_TEXT + + """ + Embedding generation failed or timed out + """ + SERVER_ERROR +} + +""" +A repository's open source license +""" +type License implements Node @docsCategory(name: "licenses") { + """ + The full text of the license + """ + body: String! + + """ + The conditions set by the license + """ + conditions: [LicenseRule]! + + """ + A human-readable description of the license + """ + description: String + + """ + Whether the license should be featured + """ + featured: Boolean! + + """ + Whether the license should be displayed in license pickers + """ + hidden: Boolean! + + """ + The Node ID of the License object + """ + id: ID! + + """ + Instructions on how to implement the license + """ + implementation: String + + """ + The lowercased SPDX ID of the license + """ + key: String! + + """ + The limitations set by the license + """ + limitations: [LicenseRule]! + + """ + The license full name specified by + """ + name: String! + + """ + Customary short name if applicable (e.g, GPLv3) + """ + nickname: String + + """ + The permissions set by the license + """ + permissions: [LicenseRule]! + + """ + Whether the license is a pseudo-license placeholder (e.g., other, no-license) + """ + pseudoLicense: Boolean! + + """ + Short identifier specified by + """ + spdxId: String + + """ + URL to the license on + """ + url: URI +} + +""" +Describes a License's conditions, permissions, and limitations +""" +type LicenseRule @docsCategory(name: "licenses") { + """ + A description of the rule + """ + description: String! + + """ + The machine-readable rule key + """ + key: String! + + """ + The human-readable rule label + """ + label: String! +} + +""" +Autogenerated input type of LinkProjectV2ToRepository +""" +input LinkProjectV2ToRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the project to link to the repository. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The ID of the repository to link to the project. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of LinkProjectV2ToRepository. +""" +type LinkProjectV2ToRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository the project is linked to. + """ + repository: Repository +} + +""" +Autogenerated input type of LinkProjectV2ToTeam +""" +input LinkProjectV2ToTeamInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the project to link to the team. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The ID of the team to link to the project. + """ + teamId: ID! @possibleTypes(concreteTypes: ["Team"]) +} + +""" +Autogenerated return type of LinkProjectV2ToTeam. +""" +type LinkProjectV2ToTeamPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The team the project is linked to + """ + team: Team +} + +""" +Autogenerated input type of LinkRepositoryToProject +""" +input LinkRepositoryToProjectInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to link to a Repository + """ + projectId: ID! @possibleTypes(concreteTypes: ["Project"]) + + """ + The ID of the Repository to link to a Project. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of LinkRepositoryToProject. +""" +type LinkRepositoryToProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The linked Project. + """ + project: Project + + """ + The linked Repository. + """ + repository: Repository +} + +""" +A branch linked to an issue. +""" +type LinkedBranch implements Node @docsCategory(name: "issues") { + """ + The Node ID of the LinkedBranch object + """ + id: ID! + + """ + The branch's ref. + """ + ref: Ref +} + +""" +A list of branches linked to an issue. +""" +type LinkedBranchConnection { + """ + A list of edges. + """ + edges: [LinkedBranchEdge] + + """ + A list of nodes. + """ + nodes: [LinkedBranch] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type LinkedBranchEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: LinkedBranch +} + +""" +Autogenerated input type of LockLockable +""" +input LockLockableInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A reason for why the item will be locked. + """ + lockReason: LockReason + + """ + ID of the item to be locked. + """ + lockableId: ID! @possibleTypes(concreteTypes: ["Discussion", "Issue", "PullRequest"], abstractType: "Lockable") +} + +""" +Autogenerated return type of LockLockable. +""" +type LockLockablePayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item that was locked. + """ + lockedRecord: Lockable +} + +""" +The possible reasons that an issue or pull request was locked. +""" +enum LockReason @docsCategory(name: "issues") { + """ + The issue or pull request was locked because the conversation was off-topic. + """ + OFF_TOPIC + + """ + The issue or pull request was locked because the conversation was resolved. + """ + RESOLVED + + """ + The issue or pull request was locked because the conversation was spam. + """ + SPAM + + """ + The issue or pull request was locked because the conversation was too heated. + """ + TOO_HEATED +} + +""" +An object that can be locked. +""" +interface Lockable @docsCategory(name: "issues") { + """ + Reason that the conversation was locked. + """ + activeLockReason: LockReason + + """ + `true` if the object is locked + """ + locked: Boolean! +} + +""" +Represents a 'locked' event on a given issue or pull request. +""" +type LockedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the LockedEvent object + """ + id: ID! + + """ + Reason that the conversation was locked (optional). + """ + lockReason: LockReason + + """ + Object that was locked. + """ + lockable: Lockable! +} + +""" +A placeholder user for attribution of imported data on GitHub. +""" +type Mannequin implements Actor & Node & UniformResourceLocatable @docsCategory(name: "migrations") { + """ + A URL pointing to the GitHub App's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The user that has claimed the data attributed to this mannequin. + """ + claimant: User + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The mannequin's email on the source instance. + """ + email: String + + """ + The Node ID of the Mannequin object + """ + id: ID! + + """ + The username of the actor. + """ + login: String! + + """ + The display name of the imported mannequin. + """ + name: String + + """ + The HTML path to this resource. + """ + resourcePath: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The URL to this resource. + """ + url: URI! +} + +""" +A list of mannequins. +""" +type MannequinConnection { + """ + A list of edges. + """ + edges: [MannequinEdge] + + """ + A list of nodes. + """ + nodes: [Mannequin] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a mannequin. +""" +type MannequinEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Mannequin +} + +""" +Ordering options for mannequins. +""" +input MannequinOrder @docsCategory(name: "migrations") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order mannequins by. + """ + field: MannequinOrderField! +} + +""" +Properties by which mannequins can be ordered. +""" +enum MannequinOrderField @docsCategory(name: "migrations") { + """ + Order mannequins why when they were created. + """ + CREATED_AT + + """ + Order mannequins alphabetically by their source login. + """ + LOGIN +} + +""" +Autogenerated input type of MarkDiscussionCommentAsAnswer +""" +input MarkDiscussionCommentAsAnswerInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion comment to mark as an answer. + """ + id: ID! @possibleTypes(concreteTypes: ["DiscussionComment"]) +} + +""" +Autogenerated return type of MarkDiscussionCommentAsAnswer. +""" +type MarkDiscussionCommentAsAnswerPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that includes the chosen comment. + """ + discussion: Discussion +} + +""" +Autogenerated input type of MarkFileAsViewed +""" +input MarkFileAsViewedInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The path of the file to mark as viewed + """ + path: String! + + """ + The Node ID of the pull request. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of MarkFileAsViewed. +""" +type MarkFileAsViewedPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated pull request. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of MarkProjectV2AsTemplate +""" +input MarkProjectV2AsTemplateInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to mark as a template. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of MarkProjectV2AsTemplate. +""" +type MarkProjectV2AsTemplatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The project. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of MarkPullRequestReadyForReview +""" +input MarkPullRequestReadyForReviewInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the pull request to be marked as ready for review. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of MarkPullRequestReadyForReview. +""" +type MarkPullRequestReadyForReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is ready for review. + """ + pullRequest: PullRequest +} + +""" +Represents a 'marked_as_duplicate' event on a given issue or pull request. +""" +type MarkedAsDuplicateEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The authoritative issue or pull request which has been duplicated by another. + """ + canonical: IssueOrPullRequest + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The issue or pull request which has been marked as a duplicate of another. + """ + duplicate: IssueOrPullRequest + + """ + The Node ID of the MarkedAsDuplicateEvent object + """ + id: ID! + + """ + Canonical and duplicate belong to different repositories. + """ + isCrossRepository: Boolean! +} + +""" +A public description of a Marketplace category. +""" +type MarketplaceCategory implements Node @docsCategory(name: "apps") { + """ + The category's description. + """ + description: String + + """ + The technical description of how apps listed in this category work with GitHub. + """ + howItWorks: String + + """ + The Node ID of the MarketplaceCategory object + """ + id: ID! + + """ + The category's name. + """ + name: String! + + """ + How many Marketplace listings have this as their primary category. + """ + primaryListingCount: Int! + + """ + The HTTP path for this Marketplace category. + """ + resourcePath: URI! + + """ + How many Marketplace listings have this as their secondary category. + """ + secondaryListingCount: Int! + + """ + The short name of the category used in its URL. + """ + slug: String! + + """ + The HTTP URL for this Marketplace category. + """ + url: URI! +} + +""" +A listing in the GitHub integration marketplace. +""" +type MarketplaceListing implements Node @docsCategory(name: "apps") { + """ + The GitHub App this listing represents. + """ + app: App + + """ + URL to the listing owner's company site. + """ + companyUrl: URI + + """ + The HTTP path for configuring access to the listing's integration or OAuth app + """ + configurationResourcePath: URI! + + """ + The HTTP URL for configuring access to the listing's integration or OAuth app + """ + configurationUrl: URI! + + """ + URL to the listing's documentation. + """ + documentationUrl: URI + + """ + The listing's detailed description. + """ + extendedDescription: String + + """ + The listing's detailed description rendered to HTML. + """ + extendedDescriptionHTML: HTML! + + """ + The listing's introductory description. + """ + fullDescription: String! + + """ + The listing's introductory description rendered to HTML. + """ + fullDescriptionHTML: HTML! + + """ + Does this listing have any plans with a free trial? + """ + hasPublishedFreeTrialPlans: Boolean! + + """ + Does this listing have a terms of service link? + """ + hasTermsOfService: Boolean! + + """ + Whether the creator of the app is a verified org + """ + hasVerifiedOwner: Boolean! + + """ + A technical description of how this app works with GitHub. + """ + howItWorks: String + + """ + The listing's technical description rendered to HTML. + """ + howItWorksHTML: HTML! + + """ + The Node ID of the MarketplaceListing object + """ + id: ID! + + """ + URL to install the product to the viewer's account or organization. + """ + installationUrl: URI + + """ + Whether this listing's app has been installed for the current viewer + """ + installedForViewer: Boolean! + + """ + Whether this listing has been removed from the Marketplace. + """ + isArchived: Boolean! + + """ + Whether this listing is still an editable draft that has not been submitted + for review and is not publicly visible in the Marketplace. + """ + isDraft: Boolean! + + """ + Whether the product this listing represents is available as part of a paid plan. + """ + isPaid: Boolean! + + """ + Whether this listing has been approved for display in the Marketplace. + """ + isPublic: Boolean! + + """ + Whether this listing has been rejected by GitHub for display in the Marketplace. + """ + isRejected: Boolean! + + """ + Whether this listing has been approved for unverified display in the Marketplace. + """ + isUnverified: Boolean! + + """ + Whether this draft listing has been submitted for review for approval to be unverified in the Marketplace. + """ + isUnverifiedPending: Boolean! + + """ + Whether this draft listing has been submitted for review from GitHub for approval to be verified in the Marketplace. + """ + isVerificationPendingFromDraft: Boolean! + + """ + Whether this unverified listing has been submitted for review from GitHub for approval to be verified in the Marketplace. + """ + isVerificationPendingFromUnverified: Boolean! + + """ + Whether this listing has been approved for verified display in the Marketplace. + """ + isVerified: Boolean! + + """ + The hex color code, without the leading '#', for the logo background. + """ + logoBackgroundColor: String! + + """ + URL for the listing's logo image. + """ + logoUrl( + """ + The size in pixels of the resulting square image. + """ + size: Int = 400 + ): URI + + """ + The listing's full name. + """ + name: String! + + """ + The listing's very short description without a trailing period or ampersands. + """ + normalizedShortDescription: String! + + """ + URL to the listing's detailed pricing. + """ + pricingUrl: URI + + """ + The category that best describes the listing. + """ + primaryCategory: MarketplaceCategory! + + """ + URL to the listing's privacy policy, may return an empty string for listings that do not require a privacy policy URL. + """ + privacyPolicyUrl: URI! + + """ + The HTTP path for the Marketplace listing. + """ + resourcePath: URI! + + """ + The URLs for the listing's screenshots. + """ + screenshotUrls: [String]! + + """ + An alternate category that describes the listing. + """ + secondaryCategory: MarketplaceCategory + + """ + The listing's very short description. + """ + shortDescription: String! + + """ + The short name of the listing used in its URL. + """ + slug: String! + + """ + URL to the listing's status page. + """ + statusUrl: URI + + """ + An email address for support for this listing's app. + """ + supportEmail: String + + """ + Either a URL or an email address for support for this listing's app, may + return an empty string for listings that do not require a support URL. + """ + supportUrl: URI! + + """ + URL to the listing's terms of service. + """ + termsOfServiceUrl: URI + + """ + The HTTP URL for the Marketplace listing. + """ + url: URI! + + """ + Can the current viewer add plans for this Marketplace listing. + """ + viewerCanAddPlans: Boolean! + + """ + Can the current viewer approve this Marketplace listing. + """ + viewerCanApprove: Boolean! + + """ + Can the current viewer delist this Marketplace listing. + """ + viewerCanDelist: Boolean! + + """ + Can the current viewer edit this Marketplace listing. + """ + viewerCanEdit: Boolean! + + """ + Can the current viewer edit the primary and secondary category of this + Marketplace listing. + """ + viewerCanEditCategories: Boolean! + + """ + Can the current viewer edit the plans for this Marketplace listing. + """ + viewerCanEditPlans: Boolean! + + """ + Can the current viewer return this Marketplace listing to draft state + so it becomes editable again. + """ + viewerCanRedraft: Boolean! + + """ + Can the current viewer reject this Marketplace listing by returning it to + an editable draft state or rejecting it entirely. + """ + viewerCanReject: Boolean! + + """ + Can the current viewer request this listing be reviewed for display in + the Marketplace as verified. + """ + viewerCanRequestApproval: Boolean! + + """ + Indicates whether the current user has an active subscription to this Marketplace listing. + """ + viewerHasPurchased: Boolean! + + """ + Indicates if the current user has purchased a subscription to this Marketplace listing + for all of the organizations the user owns. + """ + viewerHasPurchasedForAllOrganizations: Boolean! + + """ + Does the current viewer role allow them to administer this Marketplace listing. + """ + viewerIsListingAdmin: Boolean! +} + +""" +Look up Marketplace Listings +""" +type MarketplaceListingConnection { + """ + A list of edges. + """ + edges: [MarketplaceListingEdge] + + """ + A list of nodes. + """ + nodes: [MarketplaceListing] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type MarketplaceListingEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: MarketplaceListing +} + +""" +Prevent commits that include file paths that exceed the specified character limit from being pushed to the commit graph. +""" +type MaxFilePathLengthParameters @docsCategory(name: "repos") { + """ + The maximum amount of characters allowed in file paths. + """ + maxFilePathLength: Int! +} + +""" +Prevent commits that include file paths that exceed the specified character limit from being pushed to the commit graph. +""" +input MaxFilePathLengthParametersInput @docsCategory(name: "repos") { + """ + The maximum amount of characters allowed in file paths. + """ + maxFilePathLength: Int! +} + +""" +Prevent commits with individual files that exceed the specified limit from being pushed to the commit graph. +""" +type MaxFileSizeParameters @docsCategory(name: "repos") { + """ + The maximum file size allowed in megabytes. This limit does not apply to Git Large File Storage (Git LFS). + """ + maxFileSize: Int! +} + +""" +Prevent commits with individual files that exceed the specified limit from being pushed to the commit graph. +""" +input MaxFileSizeParametersInput @docsCategory(name: "repos") { + """ + The maximum file size allowed in megabytes. This limit does not apply to Git Large File Storage (Git LFS). + """ + maxFileSize: Int! +} + +""" +Represents a member feature request notification +""" +type MemberFeatureRequestNotification implements Node @docsCategory(name: "orgs") { + """ + Represents member feature request body containing entity name and the number of feature requests + """ + body: String! + + """ + The Node ID of the MemberFeatureRequestNotification object + """ + id: ID! + + """ + Represents member feature request notification title + """ + title: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Entities that have members who can set status messages. +""" +interface MemberStatusable @docsCategory(name: "users") { + """ + Get the status messages members of this entity have set that are either public or visible only to the organization. + """ + memberStatuses( + """ + 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 + + """ + Ordering options for user statuses returned from the connection. + """ + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! +} + +""" +Audit log entry for a members_can_delete_repos.clear event. +""" +type MembersCanDeleteReposClearAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the MembersCanDeleteReposClearAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a members_can_delete_repos.disable event. +""" +type MembersCanDeleteReposDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the MembersCanDeleteReposDisableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a members_can_delete_repos.enable event. +""" +type MembersCanDeleteReposEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the MembersCanDeleteReposEnableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Represents a 'mentioned' event on a given issue or pull request. +""" +type MentionedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the MentionedEvent object + """ + id: ID! +} + +""" +Autogenerated input type of MergeBranch +""" +input MergeBranchInput { + """ + The email address to associate with this commit. + """ + authorEmail: String + + """ + The name of the base branch that the provided head will be merged into. + """ + base: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Message to use for the merge commit. If omitted, a default will be used. + """ + commitMessage: String + + """ + The head to merge into the base branch. This can be a branch name or a commit GitObjectID. + """ + head: String! + + """ + The Node ID of the Repository containing the base branch that will be modified. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of MergeBranch. +""" +type MergeBranchPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The resulting merge Commit. + """ + mergeCommit: Commit +} + +""" +The possible default commit messages for merges. +""" +enum MergeCommitMessage @docsCategory(name: "repos") { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the pull request's body. + """ + PR_BODY + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +The possible default commit titles for merges. +""" +enum MergeCommitTitle @docsCategory(name: "repos") { + """ + Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name). + """ + MERGE_MESSAGE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +Autogenerated input type of MergePullRequest +""" +input MergePullRequestInput { + """ + The email address to associate with this merge. + """ + authorEmail: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Commit body to use for the merge commit; if omitted, a default message will be used + """ + commitBody: String + + """ + Commit headline to use for the merge commit; if omitted, a default message will be used. + """ + commitHeadline: String + + """ + OID that the pull request head ref must match to allow merge; if omitted, no check is performed. + """ + expectedHeadOid: GitObjectID + + """ + The merge method to use. If omitted, defaults to 'MERGE' + """ + mergeMethod: PullRequestMergeMethod = MERGE + + """ + ID of the pull request to be merged. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of MergePullRequest. +""" +type MergePullRequestPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was merged. + """ + pullRequest: PullRequest +} + +""" +The queue of pull request entries to be merged into a protected branch in a repository. +""" +type MergeQueue implements Node @docsCategory(name: "pulls") { + """ + The configuration for this merge queue + """ + configuration: MergeQueueConfiguration + + """ + The entries in the queue + """ + entries( + """ + 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 + ): MergeQueueEntryConnection + + """ + The Node ID of the MergeQueue object + """ + id: ID! + + """ + The estimated time in seconds until a newly added entry would be merged + """ + nextEntryEstimatedTimeToMerge: Int + + """ + The repository this merge queue belongs to + """ + repository: Repository + + """ + The HTTP path for this merge queue + """ + resourcePath: URI! + + """ + The HTTP URL for this merge queue + """ + url: URI! +} + +""" +Configuration for a MergeQueue +""" +type MergeQueueConfiguration @docsCategory(name: "pulls") { + """ + The amount of time in minutes to wait for a check response before considering it a failure. + """ + checkResponseTimeout: Int + + """ + The maximum number of entries to build at once. + """ + maximumEntriesToBuild: Int + + """ + The maximum number of entries to merge at once. + """ + maximumEntriesToMerge: Int + + """ + The merge method to use for this queue. + """ + mergeMethod: PullRequestMergeMethod + + """ + The strategy to use when merging entries. + """ + mergingStrategy: MergeQueueMergingStrategy + + """ + The minimum number of entries required to merge at once. + """ + minimumEntriesToMerge: Int + + """ + The amount of time in minutes to wait before ignoring the minumum number of + entries in the queue requirement and merging a collection of entries + """ + minimumEntriesToMergeWaitTime: Int +} + +""" +Entries in a MergeQueue +""" +type MergeQueueEntry implements Node @docsCategory(name: "pulls") { + """ + The base commit for this entry + """ + baseCommit: Commit + + """ + The date and time this entry was added to the merge queue + """ + enqueuedAt: DateTime! + + """ + The actor that enqueued this entry + """ + enqueuer: Actor! + + """ + The estimated time in seconds until this entry will be merged + """ + estimatedTimeToMerge: Int + + """ + The head commit for this entry + """ + headCommit: Commit + + """ + The Node ID of the MergeQueueEntry object + """ + id: ID! + + """ + Whether this pull request should jump the queue + """ + jump: Boolean! + + """ + The merge queue that this entry belongs to + """ + mergeQueue: MergeQueue + + """ + The position of this entry in the queue + """ + position: Int! + + """ + The pull request that will be added to a merge group + """ + pullRequest: PullRequest + + """ + Does this pull request need to be deployed on its own + """ + solo: Boolean! + + """ + The state of this entry in the queue + """ + state: MergeQueueEntryState! +} + +""" +The connection type for MergeQueueEntry. +""" +type MergeQueueEntryConnection { + """ + A list of edges. + """ + edges: [MergeQueueEntryEdge] + + """ + A list of nodes. + """ + nodes: [MergeQueueEntry] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type MergeQueueEntryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: MergeQueueEntry +} + +""" +The possible states for a merge queue entry. +""" +enum MergeQueueEntryState @docsCategory(name: "pulls") { + """ + The entry is currently waiting for checks to pass. + """ + AWAITING_CHECKS + + """ + The entry is currently locked. + """ + LOCKED + + """ + The entry is currently mergeable. + """ + MERGEABLE + + """ + The entry is currently queued. + """ + QUEUED + + """ + The entry is currently unmergeable. + """ + UNMERGEABLE +} + +""" +When set to ALLGREEN, the merge commit created by merge queue for each PR in the +group must pass all required checks to merge. When set to HEADGREEN, only the +commit at the head of the merge group, i.e. the commit containing changes from +all of the PRs in the group, must pass its required checks to merge. +""" +enum MergeQueueGroupingStrategy @docsCategory(name: "pulls") { + """ + The merge commit created by merge queue for each PR in the group must pass all required checks to merge + """ + ALLGREEN + + """ + Only the commit at the head of the merge group must pass its required checks to merge. + """ + HEADGREEN +} + +""" +Method to use when merging changes from queued pull requests. +""" +enum MergeQueueMergeMethod @docsCategory(name: "pulls") { + """ + Merge commit + """ + MERGE + + """ + Rebase and merge + """ + REBASE + + """ + Squash and merge + """ + SQUASH +} + +""" +The possible merging strategies for a merge queue. +""" +enum MergeQueueMergingStrategy @docsCategory(name: "pulls") { + """ + Entries only allowed to merge if they are passing. + """ + ALLGREEN + + """ + Failing Entires are allowed to merge if they are with a passing entry. + """ + HEADGREEN +} + +""" +Merges must be performed via a merge queue. +""" +type MergeQueueParameters @docsCategory(name: "pulls") { + """ + Maximum time for a required status check to report a conclusion. After this + much time has elapsed, checks that have not reported a conclusion will be + assumed to have failed + """ + checkResponseTimeoutMinutes: Int! + + """ + When set to ALLGREEN, the merge commit created by merge queue for each PR in + the group must pass all required checks to merge. When set to HEADGREEN, only + the commit at the head of the merge group, i.e. the commit containing changes + from all of the PRs in the group, must pass its required checks to merge. + """ + groupingStrategy: MergeQueueGroupingStrategy! + + """ + Limit the number of queued pull requests requesting checks and workflow runs at the same time. + """ + maxEntriesToBuild: Int! + + """ + The maximum number of PRs that will be merged together in a group. + """ + maxEntriesToMerge: Int! + + """ + Method to use when merging changes from queued pull requests. + """ + mergeMethod: MergeQueueMergeMethod! + + """ + The minimum number of PRs that will be merged together in a group. + """ + minEntriesToMerge: Int! + + """ + The time merge queue should wait after the first PR is added to the queue for + the minimum group size to be met. After this time has elapsed, the minimum + group size will be ignored and a smaller group will be merged. + """ + minEntriesToMergeWaitMinutes: Int! +} + +""" +Merges must be performed via a merge queue. +""" +input MergeQueueParametersInput @docsCategory(name: "pulls") { + """ + Maximum time for a required status check to report a conclusion. After this + much time has elapsed, checks that have not reported a conclusion will be + assumed to have failed + """ + checkResponseTimeoutMinutes: Int! + + """ + When set to ALLGREEN, the merge commit created by merge queue for each PR in + the group must pass all required checks to merge. When set to HEADGREEN, only + the commit at the head of the merge group, i.e. the commit containing changes + from all of the PRs in the group, must pass its required checks to merge. + """ + groupingStrategy: MergeQueueGroupingStrategy! + + """ + Limit the number of queued pull requests requesting checks and workflow runs at the same time. + """ + maxEntriesToBuild: Int! + + """ + The maximum number of PRs that will be merged together in a group. + """ + maxEntriesToMerge: Int! + + """ + Method to use when merging changes from queued pull requests. + """ + mergeMethod: MergeQueueMergeMethod! + + """ + The minimum number of PRs that will be merged together in a group. + """ + minEntriesToMerge: Int! + + """ + The time merge queue should wait after the first PR is added to the queue for + the minimum group size to be met. After this time has elapsed, the minimum + group size will be ignored and a smaller group will be merged. + """ + minEntriesToMergeWaitMinutes: Int! +} + +""" +Detailed status information about a pull request merge. +""" +enum MergeStateStatus @docsCategory(name: "pulls") { + """ + The head ref is out of date. + """ + BEHIND + + """ + The merge is blocked. + """ + BLOCKED + + """ + Mergeable and passing commit status. + """ + CLEAN + + """ + The merge commit cannot be cleanly created. + """ + DIRTY + + """ + The merge is blocked due to the pull request being a draft. + """ + DRAFT + @deprecated( + reason: "DRAFT state will be removed from this enum and `isDraft` should be used instead Use PullRequest.isDraft instead. Removal on 2021-01-01 UTC." + ) + + """ + Mergeable with passing commit status and pre-receive hooks. + """ + HAS_HOOKS + + """ + The state cannot currently be determined. + """ + UNKNOWN + + """ + Mergeable with non-passing commit status. + """ + UNSTABLE +} + +""" +Whether or not a PullRequest can be merged. +""" +enum MergeableState @docsCategory(name: "pulls") { + """ + The pull request cannot be merged due to merge conflicts. + """ + CONFLICTING + + """ + The pull request can be merged. + """ + MERGEABLE + + """ + The mergeability of the pull request is still being calculated. + """ + UNKNOWN +} + +""" +Represents a 'merged' event on a given pull request. +""" +type MergedEvent implements Node & UniformResourceLocatable @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the commit associated with the `merge` event. + """ + commit: Commit + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the MergedEvent object + """ + id: ID! + + """ + Identifies the Ref associated with the `merge` event. + """ + mergeRef: Ref + + """ + Identifies the name of the Ref associated with the `merge` event. + """ + mergeRefName: String! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + The HTTP path for this merged event. + """ + resourcePath: URI! + + """ + The HTTP URL for this merged event. + """ + url: URI! +} + +""" +Represents a GitHub Enterprise Importer (GEI) migration. +""" +interface Migration @docsCategory(name: "migrations") { + """ + The migration flag to continue on error. + """ + continueOnError: Boolean! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the migration failed. + """ + failureReason: String + + """ + The Node ID of the Migration object + """ + id: ID! + + """ + The URL for the migration log (expires 1 day after migration completes). + """ + migrationLogUrl: URI + + """ + The migration source. + """ + migrationSource: MigrationSource! + + """ + The target repository name. + """ + repositoryName: String! + + """ + The migration source URL, for example `https://github.com` or `https://monalisa.ghe.com`. + """ + sourceUrl: URI! + + """ + The migration state. + """ + state: MigrationState! + + """ + The number of warnings encountered for this migration. To review the warnings, + check the [Migration Log](https://docs.github.com/migrations/using-github-enterprise-importer/completing-your-migration-with-github-enterprise-importer/accessing-your-migration-logs-for-github-enterprise-importer). + """ + warningsCount: Int! +} + +""" +A GitHub Enterprise Importer (GEI) migration source. +""" +type MigrationSource implements Node @docsCategory(name: "migrations") { + """ + The Node ID of the MigrationSource object + """ + id: ID! + + """ + The migration source name. + """ + name: String! + + """ + The migration source type. + """ + type: MigrationSourceType! + + """ + The migration source URL, for example `https://github.com` or `https://monalisa.ghe.com`. + """ + url: URI! +} + +""" +Represents the different GitHub Enterprise Importer (GEI) migration sources. +""" +enum MigrationSourceType @docsCategory(name: "migrations") { + """ + An Azure DevOps migration source. + """ + AZURE_DEVOPS + + """ + A Bitbucket Server migration source. + """ + BITBUCKET_SERVER + + """ + A GitHub Migration API source. + """ + GITHUB_ARCHIVE +} + +""" +The GitHub Enterprise Importer (GEI) migration state. +""" +enum MigrationState @docsCategory(name: "migrations") { + """ + The migration has failed. + """ + FAILED + + """ + The migration has invalid credentials. + """ + FAILED_VALIDATION + + """ + The migration is in progress. + """ + IN_PROGRESS + + """ + The migration has not started. + """ + NOT_STARTED + + """ + The migration needs to have its credentials validated. + """ + PENDING_VALIDATION + + """ + The migration has been queued. + """ + QUEUED + + """ + The migration has succeeded. + """ + SUCCEEDED +} + +""" +Represents a Milestone object on a given repository. +""" +type Milestone implements Closable & Node & UniformResourceLocatable @docsCategory(name: "issues") { + """ + Indicates if the object is closed (definition of closed may depend on type) + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + Identifies the number of closed issues associated with the milestone. + """ + closedIssueCount: Int! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the actor who created the milestone. + """ + creator: Actor + + """ + Identifies the description of the milestone. + """ + description: String + + """ + The HTML rendered description of the milestone using GitHub Flavored Markdown. + """ + descriptionHTML: String + + """ + Identifies the due date of the milestone. + """ + dueOn: DateTime + + """ + The Node ID of the Milestone object + """ + id: ID! + + """ + A list of issues associated with the milestone. + """ + issues( + """ + 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 + + """ + Filtering options for issues returned from the connection. + """ + filterBy: IssueFilters + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for issues returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the issues by. + """ + states: [IssueState!] + ): IssueConnection! + + """ + Identifies the number of the milestone. + """ + number: Int! + + """ + Identifies the number of open issues associated with the milestone. + """ + openIssueCount: Int! + + """ + Identifies the percentage complete for the milestone + """ + progressPercentage: Float! + + """ + A list of pull requests associated with the milestone. + """ + pullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection! + + """ + The repository associated with this milestone. + """ + repository: Repository! + + """ + The HTTP path for this milestone + """ + resourcePath: URI! + + """ + Identifies the state of the milestone. + """ + state: MilestoneState! + + """ + Identifies the title of the milestone. + """ + title: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this milestone + """ + url: URI! + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: Boolean! +} + +""" +The connection type for Milestone. +""" +type MilestoneConnection { + """ + A list of edges. + """ + edges: [MilestoneEdge] + + """ + A list of nodes. + """ + nodes: [Milestone] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type MilestoneEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Milestone +} + +""" +Types that can be inside a Milestone. +""" +union MilestoneItem @docsCategory(name: "issues") = Issue | PullRequest + +""" +Ordering options for milestone connections. +""" +input MilestoneOrder @docsCategory(name: "issues") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order milestones by. + """ + field: MilestoneOrderField! +} + +""" +Properties by which milestone connections can be ordered. +""" +enum MilestoneOrderField @docsCategory(name: "issues") { + """ + Order milestones by when they were created. + """ + CREATED_AT + + """ + Order milestones by when they are due. + """ + DUE_DATE + + """ + Order milestones by their number. + """ + NUMBER + + """ + Order milestones by when they were last updated. + """ + UPDATED_AT +} + +""" +The possible states of a milestone. +""" +enum MilestoneState @docsCategory(name: "issues") { + """ + A milestone that has been closed. + """ + CLOSED + + """ + A milestone that is still open. + """ + OPEN +} + +""" +Represents a 'milestoned' event on a given issue or pull request. +""" +type MilestonedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the MilestonedEvent object + """ + id: ID! + + """ + Identifies the milestone title associated with the 'milestoned' event. + """ + milestoneTitle: String! + + """ + Object referenced by event. + """ + subject: MilestoneItem! +} + +""" +Entities that can be minimized. +""" +interface Minimizable @docsCategory(name: "issues") { + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: Boolean! +} + +""" +Autogenerated input type of MinimizeComment +""" +input MinimizeCommentInput { + """ + The classification of comment + """ + classifier: ReportedContentClassifiers! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the subject to modify. + """ + subjectId: ID! + @possibleTypes( + concreteTypes: [ + "CommitComment" + "DiscussionComment" + "GistComment" + "IssueComment" + "PullRequestReview" + "PullRequestReviewComment" + ] + abstractType: "Minimizable" + ) +} + +""" +Autogenerated return type of MinimizeComment. +""" +type MinimizeCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The comment that was minimized. + """ + minimizedComment: Minimizable +} + +""" +Autogenerated input type of MoveProjectCard +""" +input MoveProjectCardInput { + """ + Place the new card after the card with this id. Pass null to place it at the top. + """ + afterCardId: ID @possibleTypes(concreteTypes: ["ProjectCard"]) + + """ + The id of the card to move. + """ + cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the column to move it into. + """ + columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"]) +} + +""" +Autogenerated return type of MoveProjectCard. +""" +type MoveProjectCardPayload { + """ + The new edge of the moved card. + """ + cardEdge: ProjectCardEdge + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of MoveProjectColumn +""" +input MoveProjectColumnInput { + """ + Place the new column after the column with this id. Pass null to place it at the front. + """ + afterColumnId: ID @possibleTypes(concreteTypes: ["ProjectColumn"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the column to move. + """ + columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"]) +} + +""" +Autogenerated return type of MoveProjectColumn. +""" +type MoveProjectColumnPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new edge of the moved column. + """ + columnEdge: ProjectColumnEdge +} + +""" +Represents a 'moved_columns_in_project' event on a given issue or pull request. +""" +type MovedColumnsInProjectEvent implements Node @docsCategory(name: "projects-classic") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the MovedColumnsInProjectEvent object + """ + id: ID! + + """ + Column name the issue or pull request was moved from. + """ + previousProjectColumnName: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Project referenced by event. + """ + project: Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Project card referenced by this project event. + """ + projectCard: ProjectCard + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Column name the issue or pull request was moved to. + """ + projectColumnName: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +The root query for implementing GraphQL mutations. +""" +type Mutation @docsCategory(name: "meta") { + """ + Clear all of a customer's queued migrations + """ + abortQueuedMigrations( + """ + Parameters for AbortQueuedMigrations + """ + input: AbortQueuedMigrationsInput! + ): AbortQueuedMigrationsPayload @docsCategory(name: "migrations") + + """ + Abort a repository migration queued or in progress. + """ + abortRepositoryMigration( + """ + Parameters for AbortRepositoryMigration + """ + input: AbortRepositoryMigrationInput! + ): AbortRepositoryMigrationPayload @docsCategory(name: "migrations") + + """ + Accepts a pending invitation for a user to become an administrator of an enterprise. + """ + acceptEnterpriseAdministratorInvitation( + """ + Parameters for AcceptEnterpriseAdministratorInvitation + """ + input: AcceptEnterpriseAdministratorInvitationInput! + ): AcceptEnterpriseAdministratorInvitationPayload @docsCategory(name: "enterprise-admin") + + """ + Accepts a pending invitation for a user to become an unaffiliated member of an enterprise. + """ + acceptEnterpriseMemberInvitation( + """ + Parameters for AcceptEnterpriseMemberInvitation + """ + input: AcceptEnterpriseMemberInvitationInput! + ): AcceptEnterpriseMemberInvitationPayload @docsCategory(name: "enterprise-admin") + + """ + Applies a suggested topic to the repository. + """ + acceptTopicSuggestion( + """ + Parameters for AcceptTopicSuggestion + """ + input: AcceptTopicSuggestionInput! + ): AcceptTopicSuggestionPayload @docsCategory(name: "repos") + + """ + Access user namespace repository for a temporary duration. + """ + accessUserNamespaceRepository( + """ + Parameters for AccessUserNamespaceRepository + """ + input: AccessUserNamespaceRepositoryInput! + ): AccessUserNamespaceRepositoryPayload @docsCategory(name: "enterprise-admin") + + """ + Adds assignees to an assignable object. + """ + addAssigneesToAssignable( + """ + Parameters for AddAssigneesToAssignable + """ + input: AddAssigneesToAssignableInput! + ): AddAssigneesToAssignablePayload @docsCategory(name: "issues") + + """ + Adds a 'blocked by' relationship to an issue. + """ + addBlockedBy( + """ + Parameters for AddBlockedBy + """ + input: AddBlockedByInput! + ): AddBlockedByPayload @docsCategory(name: "issues") + + """ + Adds a comment to an Issue or Pull Request. + """ + addComment( + """ + Parameters for AddComment + """ + input: AddCommentInput! + ): AddCommentPayload @docsCategory(name: "issues") + + """ + Adds a comment to a Discussion, possibly as a reply to another comment. + """ + addDiscussionComment( + """ + Parameters for AddDiscussionComment + """ + input: AddDiscussionCommentInput! + ): AddDiscussionCommentPayload @docsCategory(name: "discussions") + + """ + Vote for an option in a discussion poll. + """ + addDiscussionPollVote( + """ + Parameters for AddDiscussionPollVote + """ + input: AddDiscussionPollVoteInput! + ): AddDiscussionPollVotePayload @docsCategory(name: "discussions") + + """ + Adds enterprise members to an organization within the enterprise. + """ + addEnterpriseOrganizationMember( + """ + Parameters for AddEnterpriseOrganizationMember + """ + input: AddEnterpriseOrganizationMemberInput! + ): AddEnterpriseOrganizationMemberPayload @docsCategory(name: "enterprise-admin") + + """ + Adds a support entitlement to an enterprise member. + """ + addEnterpriseSupportEntitlement( + """ + Parameters for AddEnterpriseSupportEntitlement + """ + input: AddEnterpriseSupportEntitlementInput! + ): AddEnterpriseSupportEntitlementPayload @docsCategory(name: "enterprise-admin") + + """ + Adds labels to a labelable object. + """ + addLabelsToLabelable( + """ + Parameters for AddLabelsToLabelable + """ + input: AddLabelsToLabelableInput! + ): AddLabelsToLabelablePayload @docsCategory(name: "issues") + + """ + Adds a card to a ProjectColumn. Either `contentId` or `note` must be provided but **not** both. + """ + addProjectCard( + """ + Parameters for AddProjectCard + """ + input: AddProjectCardInput! + ): AddProjectCardPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Adds a column to a Project. + """ + addProjectColumn( + """ + Parameters for AddProjectColumn + """ + input: AddProjectColumnInput! + ): AddProjectColumnPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Creates a new draft issue and add it to a Project. + """ + addProjectV2DraftIssue( + """ + Parameters for AddProjectV2DraftIssue + """ + input: AddProjectV2DraftIssueInput! + ): AddProjectV2DraftIssuePayload @docsCategory(name: "projects") + + """ + Links an existing content instance to a Project. + """ + addProjectV2ItemById( + """ + Parameters for AddProjectV2ItemById + """ + input: AddProjectV2ItemByIdInput! + ): AddProjectV2ItemByIdPayload @docsCategory(name: "projects") + + """ + Add users to the pull request creation cap bypass list. Bypassed users can + create pull requests regardless of the configured cap. Only users with + maintainer permissions can manage the bypass list. You can add a maximum of + 100 users per request. The bypass list can only hold a maximum of 100 users. + """ + addPullRequestCreationCapBypassUsers( + """ + Parameters for AddPullRequestCreationCapBypassUsers + """ + input: AddPullRequestCreationCapBypassUsersInput! + ): AddPullRequestCreationCapBypassUsersPayload @docsCategory(name: "pulls") + + """ + Adds a review to a Pull Request. + """ + addPullRequestReview( + """ + Parameters for AddPullRequestReview + """ + input: AddPullRequestReviewInput! + ): AddPullRequestReviewPayload @docsCategory(name: "pulls") + + """ + Adds a comment to a review. + """ + addPullRequestReviewComment( + """ + Parameters for AddPullRequestReviewComment + """ + input: AddPullRequestReviewCommentInput! + ): AddPullRequestReviewCommentPayload @docsCategory(name: "pulls") + + """ + Adds a new thread to a pending Pull Request Review. + """ + addPullRequestReviewThread( + """ + Parameters for AddPullRequestReviewThread + """ + input: AddPullRequestReviewThreadInput! + ): AddPullRequestReviewThreadPayload @docsCategory(name: "pulls") + + """ + Adds a reply to an existing Pull Request Review Thread. + """ + addPullRequestReviewThreadReply( + """ + Parameters for AddPullRequestReviewThreadReply + """ + input: AddPullRequestReviewThreadReplyInput! + ): AddPullRequestReviewThreadReplyPayload @docsCategory(name: "pulls") + + """ + Adds a reaction to a subject. + """ + addReaction( + """ + Parameters for AddReaction + """ + input: AddReactionInput! + ): AddReactionPayload @docsCategory(name: "reactions") + + """ + Adds a star to a Starrable. + """ + addStar( + """ + Parameters for AddStar + """ + input: AddStarInput! + ): AddStarPayload @docsCategory(name: "activity") + + """ + Adds a sub-issue to a given issue + """ + addSubIssue( + """ + Parameters for AddSubIssue + """ + input: AddSubIssueInput! + ): AddSubIssuePayload @docsCategory(name: "issues") + + """ + Add an upvote to a discussion or discussion comment. + """ + addUpvote( + """ + Parameters for AddUpvote + """ + input: AddUpvoteInput! + ): AddUpvotePayload @docsCategory(name: "discussions") + + """ + Adds a verifiable domain to an owning account. + """ + addVerifiableDomain( + """ + Parameters for AddVerifiableDomain + """ + input: AddVerifiableDomainInput! + ): AddVerifiableDomainPayload @docsCategory(name: "orgs") + + """ + Approve all pending deployments under one or more environments + """ + approveDeployments( + """ + Parameters for ApproveDeployments + """ + input: ApproveDeploymentsInput! + ): ApproveDeploymentsPayload @docsCategory(name: "deployments") + + """ + Approve a verifiable domain for notification delivery. + """ + approveVerifiableDomain( + """ + Parameters for ApproveVerifiableDomain + """ + input: ApproveVerifiableDomainInput! + ): ApproveVerifiableDomainPayload @docsCategory(name: "orgs") + + """ + Archives a ProjectV2Item + """ + archiveProjectV2Item( + """ + Parameters for ArchiveProjectV2Item + """ + input: ArchiveProjectV2ItemInput! + ): ArchiveProjectV2ItemPayload @docsCategory(name: "projects") + + """ + Archive a pull request. Closes, locks, and marks the pull request as archived. + Only repository admins can archive pull requests. + """ + archivePullRequest( + """ + Parameters for ArchivePullRequest + """ + input: ArchivePullRequestInput! + ): ArchivePullRequestPayload @docsCategory(name: "pulls") + + """ + Marks a repository as archived. + """ + archiveRepository( + """ + Parameters for ArchiveRepository + """ + input: ArchiveRepositoryInput! + ): ArchiveRepositoryPayload @docsCategory(name: "repos") + + """ + Cancels a pending invitation for an administrator to join an enterprise. + """ + cancelEnterpriseAdminInvitation( + """ + Parameters for CancelEnterpriseAdminInvitation + """ + input: CancelEnterpriseAdminInvitationInput! + ): CancelEnterpriseAdminInvitationPayload @docsCategory(name: "enterprise-admin") + + """ + Cancels a pending invitation for an unaffiliated member to join an enterprise. + """ + cancelEnterpriseMemberInvitation( + """ + Parameters for CancelEnterpriseMemberInvitation + """ + input: CancelEnterpriseMemberInvitationInput! + ): CancelEnterpriseMemberInvitationPayload @docsCategory(name: "enterprise-admin") + + """ + Cancel an active sponsorship. + """ + cancelSponsorship( + """ + Parameters for CancelSponsorship + """ + input: CancelSponsorshipInput! + ): CancelSponsorshipPayload @docsCategory(name: "sponsors") + + """ + Update your status on GitHub. + """ + changeUserStatus( + """ + Parameters for ChangeUserStatus + """ + input: ChangeUserStatusInput! + ): ChangeUserStatusPayload @docsCategory(name: "users") + + """ + Clears all labels from a labelable object. + """ + clearLabelsFromLabelable( + """ + Parameters for ClearLabelsFromLabelable + """ + input: ClearLabelsFromLabelableInput! + ): ClearLabelsFromLabelablePayload @docsCategory(name: "issues") + + """ + This mutation clears the value of a field for an item in a Project. Currently + only text, number, date, assignees, labels, single-select, iteration and + milestone fields are supported. + """ + clearProjectV2ItemFieldValue( + """ + Parameters for ClearProjectV2ItemFieldValue + """ + input: ClearProjectV2ItemFieldValueInput! + ): ClearProjectV2ItemFieldValuePayload @docsCategory(name: "projects") + + """ + Creates a new project by cloning configuration from an existing project. + """ + cloneProject( + """ + Parameters for CloneProject + """ + input: CloneProjectInput! + ): CloneProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Create a new repository with the same files and directory structure as a template repository. + """ + cloneTemplateRepository( + """ + Parameters for CloneTemplateRepository + """ + input: CloneTemplateRepositoryInput! + ): CloneTemplateRepositoryPayload @docsCategory(name: "repos") + + """ + Close a discussion. + """ + closeDiscussion( + """ + Parameters for CloseDiscussion + """ + input: CloseDiscussionInput! + ): CloseDiscussionPayload @docsCategory(name: "discussions") + + """ + Close an issue. + """ + closeIssue( + """ + Parameters for CloseIssue + """ + input: CloseIssueInput! + ): CloseIssuePayload @docsCategory(name: "issues") + + """ + Close a pull request. + """ + closePullRequest( + """ + Parameters for ClosePullRequest + """ + input: ClosePullRequestInput! + ): ClosePullRequestPayload @docsCategory(name: "pulls") + + """ + Convert a project note card to one associated with a newly created issue. + """ + convertProjectCardNoteToIssue( + """ + Parameters for ConvertProjectCardNoteToIssue + """ + input: ConvertProjectCardNoteToIssueInput! + ): ConvertProjectCardNoteToIssuePayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Converts a projectV2 draft issue item to an issue. + """ + convertProjectV2DraftIssueItemToIssue( + """ + Parameters for ConvertProjectV2DraftIssueItemToIssue + """ + input: ConvertProjectV2DraftIssueItemToIssueInput! + ): ConvertProjectV2DraftIssueItemToIssuePayload @docsCategory(name: "projects") + + """ + Converts a pull request to draft + """ + convertPullRequestToDraft( + """ + Parameters for ConvertPullRequestToDraft + """ + input: ConvertPullRequestToDraftInput! + ): ConvertPullRequestToDraftPayload @docsCategory(name: "pulls") + + """ + Copy a project. + """ + copyProjectV2( + """ + Parameters for CopyProjectV2 + """ + input: CopyProjectV2Input! + ): CopyProjectV2Payload @docsCategory(name: "projects") + + """ + Invites a user to claim reattributable data + """ + createAttributionInvitation( + """ + Parameters for CreateAttributionInvitation + """ + input: CreateAttributionInvitationInput! + ): CreateAttributionInvitationPayload @docsCategory(name: "migrations") + + """ + Create a new branch protection rule + """ + createBranchProtectionRule( + """ + Parameters for CreateBranchProtectionRule + """ + input: CreateBranchProtectionRuleInput! + ): CreateBranchProtectionRulePayload @docsCategory(name: "branches") + + """ + Create a check run. + """ + createCheckRun( + """ + Parameters for CreateCheckRun + """ + input: CreateCheckRunInput! + ): CreateCheckRunPayload @docsCategory(name: "checks") + + """ + Create a check suite + """ + createCheckSuite( + """ + Parameters for CreateCheckSuite + """ + input: CreateCheckSuiteInput! + ): CreateCheckSuitePayload @docsCategory(name: "checks") + + """ + Appends a commit to the given branch as the authenticated user. + + This mutation creates a commit whose parent is the HEAD of the provided + branch and also updates that branch to point to the new commit. + It can be thought of as similar to `git commit`. + + ### Locating a Branch + + Commits are appended to a `branch` of type `Ref`. + This must refer to a git branch (i.e. the fully qualified path must + begin with `refs/heads/`, although including this prefix is optional. + + Callers may specify the `branch` to commit to either by its global node + ID or by passing both of `repositoryNameWithOwner` and `refName`. For + more details see the documentation for `CommittableBranch`. + + ### Describing Changes + + `fileChanges` are specified as a `FilesChanges` object describing + `FileAdditions` and `FileDeletions`. + + Please see the documentation for `FileChanges` for more information on + how to use this argument to describe any set of file changes. + + ### Authorship + + Similar to the web commit interface, this mutation does not support + specifying the author or committer of the commit and will not add + support for this in the future. + + A commit created by a successful execution of this mutation will be + authored by the owner of the credential which authenticates the API + request. The committer will be identical to that of commits authored + using the web interface. + + If you need full control over author and committer information, please + use the Git Database REST API instead. + + ### Commit Signing + + Commits made using this mutation are automatically signed by GitHub if + supported and will be marked as verified in the user interface. + """ + createCommitOnBranch( + """ + Parameters for CreateCommitOnBranch + """ + input: CreateCommitOnBranchInput! + ): CreateCommitOnBranchPayload @docsCategory(name: "commits") + + """ + Creates a new deployment event. + """ + createDeployment( + """ + Parameters for CreateDeployment + """ + input: CreateDeploymentInput! + ): CreateDeploymentPayload @docsCategory(name: "deployments") + + """ + Create a deployment status. + """ + createDeploymentStatus( + """ + Parameters for CreateDeploymentStatus + """ + input: CreateDeploymentStatusInput! + ): CreateDeploymentStatusPayload @docsCategory(name: "deployments") + + """ + Create a discussion. + """ + createDiscussion( + """ + Parameters for CreateDiscussion + """ + input: CreateDiscussionInput! + ): CreateDiscussionPayload @docsCategory(name: "discussions") + + """ + Creates an organization as part of an enterprise account. A personal access + token used to create an organization is implicitly permitted to update the + organization it created, if the organization is part of an enterprise that has + SAML enabled or uses Enterprise Managed Users. If the organization is not part + of such an enterprise, and instead has SAML enabled for it individually, the + token will then require SAML authorization to continue working against that organization. + """ + createEnterpriseOrganization( + """ + Parameters for CreateEnterpriseOrganization + """ + input: CreateEnterpriseOrganizationInput! + ): CreateEnterpriseOrganizationPayload @docsCategory(name: "enterprise-admin") + + """ + Creates an environment or simply returns it if already exists. + """ + createEnvironment( + """ + Parameters for CreateEnvironment + """ + input: CreateEnvironmentInput! + ): CreateEnvironmentPayload @docsCategory(name: "deployments") + + """ + Creates a new IP allow list entry. + """ + createIpAllowListEntry( + """ + Parameters for CreateIpAllowListEntry + """ + input: CreateIpAllowListEntryInput! + ): CreateIpAllowListEntryPayload @docsCategory(name: "enterprise-admin") + + """ + Creates a new issue. + """ + createIssue( + """ + Parameters for CreateIssue + """ + input: CreateIssueInput! + ): CreateIssuePayload @docsCategory(name: "issues") + + """ + Creates a new issue field. + """ + createIssueField( + """ + Parameters for CreateIssueField + """ + input: CreateIssueFieldInput! + ): CreateIssueFieldPayload @docsCategory(name: "issues") + + """ + Creates a new issue field value for an issue. + """ + createIssueFieldValue( + """ + Parameters for CreateIssueFieldValue + """ + input: CreateIssueFieldValueInput! + ): CreateIssueFieldValuePayload @docsCategory(name: "issues") + + """ + Creates a new issue type + """ + createIssueType( + """ + Parameters for CreateIssueType + """ + input: CreateIssueTypeInput! + ): CreateIssueTypePayload @docsCategory(name: "issues") + + """ + Creates a new label. + """ + createLabel( + """ + Parameters for CreateLabel + """ + input: CreateLabelInput! + ): CreateLabelPayload @docsCategory(name: "issues") + + """ + Create a branch linked to an issue. + """ + createLinkedBranch( + """ + Parameters for CreateLinkedBranch + """ + input: CreateLinkedBranchInput! + ): CreateLinkedBranchPayload @docsCategory(name: "issues") + + """ + Creates a GitHub Enterprise Importer (GEI) migration source. + """ + createMigrationSource( + """ + Parameters for CreateMigrationSource + """ + input: CreateMigrationSourceInput! + ): CreateMigrationSourcePayload @docsCategory(name: "migrations") + + """ + Creates a new project. + """ + createProject( + """ + Parameters for CreateProject + """ + input: CreateProjectInput! + ): CreateProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Creates a new project. + """ + createProjectV2( + """ + Parameters for CreateProjectV2 + """ + input: CreateProjectV2Input! + ): CreateProjectV2Payload @docsCategory(name: "projects") + + """ + Create a new project field. + """ + createProjectV2Field( + """ + Parameters for CreateProjectV2Field + """ + input: CreateProjectV2FieldInput! + ): CreateProjectV2FieldPayload @docsCategory(name: "projects") + + """ + Create a new project issue field. + """ + createProjectV2IssueField( + """ + Parameters for CreateProjectV2IssueField + """ + input: CreateProjectV2IssueFieldInput! + ): CreateProjectV2IssueFieldPayload @docsCategory(name: "projects") + + """ + Creates a status update within a Project. + """ + createProjectV2StatusUpdate( + """ + Parameters for CreateProjectV2StatusUpdate + """ + input: CreateProjectV2StatusUpdateInput! + ): CreateProjectV2StatusUpdatePayload @docsCategory(name: "projects") + + """ + Create a new pull request + """ + createPullRequest( + """ + Parameters for CreatePullRequest + """ + input: CreatePullRequestInput! + ): CreatePullRequestPayload @docsCategory(name: "pulls") + + """ + Create a new Git Ref. + """ + createRef( + """ + Parameters for CreateRef + """ + input: CreateRefInput! + ): CreateRefPayload @docsCategory(name: "git") + + """ + Create a new repository. + """ + createRepository( + """ + Parameters for CreateRepository + """ + input: CreateRepositoryInput! + ): CreateRepositoryPayload @docsCategory(name: "repos") + + """ + Create a repository custom property. + """ + createRepositoryCustomProperty( + """ + Parameters for CreateRepositoryCustomProperty + """ + input: CreateRepositoryCustomPropertyInput! + ): CreateRepositoryCustomPropertyPayload @docsCategory(name: "repos") + + """ + Create a repository ruleset + """ + createRepositoryRuleset( + """ + Parameters for CreateRepositoryRuleset + """ + input: CreateRepositoryRulesetInput! + ): CreateRepositoryRulesetPayload @docsCategory(name: "repos") + + """ + Create a GitHub Sponsors profile to allow others to sponsor you or your organization. + """ + createSponsorsListing( + """ + Parameters for CreateSponsorsListing + """ + input: CreateSponsorsListingInput! + ): CreateSponsorsListingPayload @docsCategory(name: "sponsors") + + """ + Create a new payment tier for your GitHub Sponsors profile. + """ + createSponsorsTier( + """ + Parameters for CreateSponsorsTier + """ + input: CreateSponsorsTierInput! + ): CreateSponsorsTierPayload @docsCategory(name: "sponsors") + + """ + Start a new sponsorship of a maintainer in GitHub Sponsors, or reactivate a past sponsorship. + """ + createSponsorship( + """ + Parameters for CreateSponsorship + """ + input: CreateSponsorshipInput! + ): CreateSponsorshipPayload @docsCategory(name: "sponsors") + + """ + Make many sponsorships for different sponsorable users or organizations at + once. Can only sponsor those who have a public GitHub Sponsors profile. + """ + createSponsorships( + """ + Parameters for CreateSponsorships + """ + input: CreateSponsorshipsInput! + ): CreateSponsorshipsPayload @docsCategory(name: "sponsors") + + """ + Creates a new user list. + """ + createUserList( + """ + Parameters for CreateUserList + """ + input: CreateUserListInput! + ): CreateUserListPayload @docsCategory(name: "users") + + """ + Rejects a suggested topic for the repository. + """ + declineTopicSuggestion( + """ + Parameters for DeclineTopicSuggestion + """ + input: DeclineTopicSuggestionInput! + ): DeclineTopicSuggestionPayload @docsCategory(name: "repos") + + """ + Delete a branch protection rule + """ + deleteBranchProtectionRule( + """ + Parameters for DeleteBranchProtectionRule + """ + input: DeleteBranchProtectionRuleInput! + ): DeleteBranchProtectionRulePayload @docsCategory(name: "branches") + + """ + Deletes a deployment. + """ + deleteDeployment( + """ + Parameters for DeleteDeployment + """ + input: DeleteDeploymentInput! + ): DeleteDeploymentPayload @docsCategory(name: "deployments") + + """ + Delete a discussion and all of its replies. + """ + deleteDiscussion( + """ + Parameters for DeleteDiscussion + """ + input: DeleteDiscussionInput! + ): DeleteDiscussionPayload @docsCategory(name: "discussions") + + """ + Delete a discussion comment. If it has replies, wipe it instead. + """ + deleteDiscussionComment( + """ + Parameters for DeleteDiscussionComment + """ + input: DeleteDiscussionCommentInput! + ): DeleteDiscussionCommentPayload @docsCategory(name: "discussions") + + """ + Deletes an environment + """ + deleteEnvironment( + """ + Parameters for DeleteEnvironment + """ + input: DeleteEnvironmentInput! + ): DeleteEnvironmentPayload @docsCategory(name: "deployments") + + """ + Deletes an IP allow list entry. + """ + deleteIpAllowListEntry( + """ + Parameters for DeleteIpAllowListEntry + """ + input: DeleteIpAllowListEntryInput! + ): DeleteIpAllowListEntryPayload @docsCategory(name: "enterprise-admin") + + """ + Deletes an Issue object. + """ + deleteIssue( + """ + Parameters for DeleteIssue + """ + input: DeleteIssueInput! + ): DeleteIssuePayload @docsCategory(name: "issues") + + """ + Deletes an IssueComment object. + """ + deleteIssueComment( + """ + Parameters for DeleteIssueComment + """ + input: DeleteIssueCommentInput! + ): DeleteIssueCommentPayload @docsCategory(name: "issues") + + """ + Deletes an issue field. + """ + deleteIssueField( + """ + Parameters for DeleteIssueField + """ + input: DeleteIssueFieldInput! + ): DeleteIssueFieldPayload @docsCategory(name: "issues") + + """ + Deletes an issue field value from an issue. + """ + deleteIssueFieldValue( + """ + Parameters for DeleteIssueFieldValue + """ + input: DeleteIssueFieldValueInput! + ): DeleteIssueFieldValuePayload @docsCategory(name: "issues") + + """ + Delete an issue type + """ + deleteIssueType( + """ + Parameters for DeleteIssueType + """ + input: DeleteIssueTypeInput! + ): DeleteIssueTypePayload @docsCategory(name: "issues") + + """ + Deletes a label. + """ + deleteLabel( + """ + Parameters for DeleteLabel + """ + input: DeleteLabelInput! + ): DeleteLabelPayload @docsCategory(name: "issues") + + """ + Unlink a branch from an issue. + """ + deleteLinkedBranch( + """ + Parameters for DeleteLinkedBranch + """ + input: DeleteLinkedBranchInput! + ): DeleteLinkedBranchPayload @docsCategory(name: "issues") + + """ + Delete a package version. + """ + deletePackageVersion( + """ + Parameters for DeletePackageVersion + """ + input: DeletePackageVersionInput! + ): DeletePackageVersionPayload @docsCategory(name: "packages") + + """ + Deletes a project. + """ + deleteProject( + """ + Parameters for DeleteProject + """ + input: DeleteProjectInput! + ): DeleteProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Deletes a project card. + """ + deleteProjectCard( + """ + Parameters for DeleteProjectCard + """ + input: DeleteProjectCardInput! + ): DeleteProjectCardPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Deletes a project column. + """ + deleteProjectColumn( + """ + Parameters for DeleteProjectColumn + """ + input: DeleteProjectColumnInput! + ): DeleteProjectColumnPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Delete a project. + """ + deleteProjectV2( + """ + Parameters for DeleteProjectV2 + """ + input: DeleteProjectV2Input! + ): DeleteProjectV2Payload @docsCategory(name: "projects") + + """ + Delete a project field. + """ + deleteProjectV2Field( + """ + Parameters for DeleteProjectV2Field + """ + input: DeleteProjectV2FieldInput! + ): DeleteProjectV2FieldPayload @docsCategory(name: "projects") + + """ + Deletes an item from a Project. + """ + deleteProjectV2Item( + """ + Parameters for DeleteProjectV2Item + """ + input: DeleteProjectV2ItemInput! + ): DeleteProjectV2ItemPayload @docsCategory(name: "projects") + + """ + Deletes a project status update. + """ + deleteProjectV2StatusUpdate( + """ + Parameters for DeleteProjectV2StatusUpdate + """ + input: DeleteProjectV2StatusUpdateInput! + ): DeleteProjectV2StatusUpdatePayload @docsCategory(name: "projects") + + """ + Deletes a project workflow. + """ + deleteProjectV2Workflow( + """ + Parameters for DeleteProjectV2Workflow + """ + input: DeleteProjectV2WorkflowInput! + ): DeleteProjectV2WorkflowPayload @docsCategory(name: "projects") + + """ + Deletes a pull request review. + """ + deletePullRequestReview( + """ + Parameters for DeletePullRequestReview + """ + input: DeletePullRequestReviewInput! + ): DeletePullRequestReviewPayload @docsCategory(name: "pulls") + + """ + Deletes a pull request review comment. + """ + deletePullRequestReviewComment( + """ + Parameters for DeletePullRequestReviewComment + """ + input: DeletePullRequestReviewCommentInput! + ): DeletePullRequestReviewCommentPayload @docsCategory(name: "pulls") + + """ + Delete a Git Ref. + """ + deleteRef( + """ + Parameters for DeleteRef + """ + input: DeleteRefInput! + ): DeleteRefPayload @docsCategory(name: "git") + + """ + Delete a repository custom property. + """ + deleteRepositoryCustomProperty( + """ + Parameters for DeleteRepositoryCustomProperty + """ + input: DeleteRepositoryCustomPropertyInput! + ): DeleteRepositoryCustomPropertyPayload @docsCategory(name: "repos") + + """ + Delete a repository ruleset + """ + deleteRepositoryRuleset( + """ + Parameters for DeleteRepositoryRuleset + """ + input: DeleteRepositoryRulesetInput! + ): DeleteRepositoryRulesetPayload @docsCategory(name: "repos") + + """ + Deletes a user list. + """ + deleteUserList( + """ + Parameters for DeleteUserList + """ + input: DeleteUserListInput! + ): DeleteUserListPayload @docsCategory(name: "users") + + """ + Deletes a verifiable domain. + """ + deleteVerifiableDomain( + """ + Parameters for DeleteVerifiableDomain + """ + input: DeleteVerifiableDomainInput! + ): DeleteVerifiableDomainPayload @docsCategory(name: "orgs") + + """ + Remove a pull request from the merge queue. + """ + dequeuePullRequest( + """ + Parameters for DequeuePullRequest + """ + input: DequeuePullRequestInput! + ): DequeuePullRequestPayload @docsCategory(name: "pulls") + + """ + Disable auto merge on the given pull request + """ + disablePullRequestAutoMerge( + """ + Parameters for DisablePullRequestAutoMerge + """ + input: DisablePullRequestAutoMergeInput! + ): DisablePullRequestAutoMergePayload @docsCategory(name: "pulls") + + """ + Dismisses an approved or rejected pull request review. + """ + dismissPullRequestReview( + """ + Parameters for DismissPullRequestReview + """ + input: DismissPullRequestReviewInput! + ): DismissPullRequestReviewPayload @docsCategory(name: "pulls") + + """ + Dismisses the Dependabot alert. + """ + dismissRepositoryVulnerabilityAlert( + """ + Parameters for DismissRepositoryVulnerabilityAlert + """ + input: DismissRepositoryVulnerabilityAlertInput! + ): DismissRepositoryVulnerabilityAlertPayload @docsCategory(name: "dependabot") + + """ + Enable the default auto-merge on a pull request. + """ + enablePullRequestAutoMerge( + """ + Parameters for EnablePullRequestAutoMerge + """ + input: EnablePullRequestAutoMergeInput! + ): EnablePullRequestAutoMergePayload @docsCategory(name: "pulls") + + """ + Add a pull request to the merge queue. + """ + enqueuePullRequest( + """ + Parameters for EnqueuePullRequest + """ + input: EnqueuePullRequestInput! + ): EnqueuePullRequestPayload @docsCategory(name: "pulls") + + """ + Follow an organization. + """ + followOrganization( + """ + Parameters for FollowOrganization + """ + input: FollowOrganizationInput! + ): FollowOrganizationPayload @docsCategory(name: "orgs") + + """ + Follow a user. + """ + followUser( + """ + Parameters for FollowUser + """ + input: FollowUserInput! + ): FollowUserPayload @docsCategory(name: "users") + + """ + Grant the migrator role to a user for all organizations under an enterprise account. + """ + grantEnterpriseOrganizationsMigratorRole( + """ + Parameters for GrantEnterpriseOrganizationsMigratorRole + """ + input: GrantEnterpriseOrganizationsMigratorRoleInput! + ): GrantEnterpriseOrganizationsMigratorRolePayload @docsCategory(name: "enterprise-admin") + + """ + Grant the migrator role to a user or a team. + """ + grantMigratorRole( + """ + Parameters for GrantMigratorRole + """ + input: GrantMigratorRoleInput! + ): GrantMigratorRolePayload @docsCategory(name: "migrations") + + """ + Creates a new project by importing columns and a list of issues/PRs. + """ + importProject( + """ + Parameters for ImportProject + """ + input: ImportProjectInput! + ): ImportProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "migrations") + + """ + Invite someone to become an administrator of the enterprise. + """ + inviteEnterpriseAdmin( + """ + Parameters for InviteEnterpriseAdmin + """ + input: InviteEnterpriseAdminInput! + ): InviteEnterpriseAdminPayload @docsCategory(name: "enterprise-admin") + + """ + Invite someone to become an unaffiliated member of the enterprise. + """ + inviteEnterpriseMember( + """ + Parameters for InviteEnterpriseMember + """ + input: InviteEnterpriseMemberInput! + ): InviteEnterpriseMemberPayload @docsCategory(name: "enterprise-admin") + + """ + Links a project to a repository. + """ + linkProjectV2ToRepository( + """ + Parameters for LinkProjectV2ToRepository + """ + input: LinkProjectV2ToRepositoryInput! + ): LinkProjectV2ToRepositoryPayload @docsCategory(name: "projects") + + """ + Links a project to a team. + """ + linkProjectV2ToTeam( + """ + Parameters for LinkProjectV2ToTeam + """ + input: LinkProjectV2ToTeamInput! + ): LinkProjectV2ToTeamPayload @docsCategory(name: "projects") + + """ + Creates a repository link for a project. + """ + linkRepositoryToProject( + """ + Parameters for LinkRepositoryToProject + """ + input: LinkRepositoryToProjectInput! + ): LinkRepositoryToProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Lock a lockable object + """ + lockLockable( + """ + Parameters for LockLockable + """ + input: LockLockableInput! + ): LockLockablePayload @docsCategory(name: "issues") + + """ + Mark a discussion comment as the chosen answer for discussions in an answerable category. + """ + markDiscussionCommentAsAnswer( + """ + Parameters for MarkDiscussionCommentAsAnswer + """ + input: MarkDiscussionCommentAsAnswerInput! + ): MarkDiscussionCommentAsAnswerPayload @docsCategory(name: "discussions") + + """ + Mark a pull request file as viewed + """ + markFileAsViewed( + """ + Parameters for MarkFileAsViewed + """ + input: MarkFileAsViewedInput! + ): MarkFileAsViewedPayload @docsCategory(name: "pulls") + + """ + Mark a project as a template. Note that only projects which are owned by an Organization can be marked as a template. + """ + markProjectV2AsTemplate( + """ + Parameters for MarkProjectV2AsTemplate + """ + input: MarkProjectV2AsTemplateInput! + ): MarkProjectV2AsTemplatePayload @docsCategory(name: "projects") + + """ + Marks a pull request ready for review. + """ + markPullRequestReadyForReview( + """ + Parameters for MarkPullRequestReadyForReview + """ + input: MarkPullRequestReadyForReviewInput! + ): MarkPullRequestReadyForReviewPayload @docsCategory(name: "pulls") + + """ + Merge a head into a branch. + """ + mergeBranch( + """ + Parameters for MergeBranch + """ + input: MergeBranchInput! + ): MergeBranchPayload @docsCategory(name: "branches") + + """ + Merge a pull request. + """ + mergePullRequest( + """ + Parameters for MergePullRequest + """ + input: MergePullRequestInput! + ): MergePullRequestPayload @docsCategory(name: "pulls") + + """ + Minimizes a comment on an Issue, Commit, Pull Request, or Gist + """ + minimizeComment( + """ + Parameters for MinimizeComment + """ + input: MinimizeCommentInput! + ): MinimizeCommentPayload @docsCategory(name: "issues") + + """ + Moves a project card to another place. + """ + moveProjectCard( + """ + Parameters for MoveProjectCard + """ + input: MoveProjectCardInput! + ): MoveProjectCardPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Moves a project column to another place. + """ + moveProjectColumn( + """ + Parameters for MoveProjectColumn + """ + input: MoveProjectColumnInput! + ): MoveProjectColumnPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Pin an environment to a repository + """ + pinEnvironment( + """ + Parameters for PinEnvironment + """ + input: PinEnvironmentInput! + ): PinEnvironmentPayload @docsCategory(name: "deployments") + + """ + Pin an issue to a repository + """ + pinIssue( + """ + Parameters for PinIssue + """ + input: PinIssueInput! + ): PinIssuePayload @docsCategory(name: "issues") + + """ + Pins an Issue Comment. + """ + pinIssueComment( + """ + Parameters for PinIssueComment + """ + input: PinIssueCommentInput! + ): PinIssueCommentPayload @docsCategory(name: "issues") + + """ + Promote a repository custom property to the enterprise level. + """ + promoteRepositoryCustomProperty( + """ + Parameters for PromoteRepositoryCustomProperty + """ + input: PromoteRepositoryCustomPropertyInput! + ): PromoteRepositoryCustomPropertyPayload @docsCategory(name: "repos") + + """ + Publish an existing sponsorship tier that is currently still a draft to a GitHub Sponsors profile. + """ + publishSponsorsTier( + """ + Parameters for PublishSponsorsTier + """ + input: PublishSponsorsTierInput! + ): PublishSponsorsTierPayload @docsCategory(name: "sponsors") + + """ + Regenerates the identity provider recovery codes for an enterprise + """ + regenerateEnterpriseIdentityProviderRecoveryCodes( + """ + Parameters for RegenerateEnterpriseIdentityProviderRecoveryCodes + """ + input: RegenerateEnterpriseIdentityProviderRecoveryCodesInput! + ): RegenerateEnterpriseIdentityProviderRecoveryCodesPayload @docsCategory(name: "enterprise-admin") + + """ + Regenerates a verifiable domain's verification token. + """ + regenerateVerifiableDomainToken( + """ + Parameters for RegenerateVerifiableDomainToken + """ + input: RegenerateVerifiableDomainTokenInput! + ): RegenerateVerifiableDomainTokenPayload @docsCategory(name: "orgs") + + """ + Reject all pending deployments under one or more environments + """ + rejectDeployments( + """ + Parameters for RejectDeployments + """ + input: RejectDeploymentsInput! + ): RejectDeploymentsPayload @docsCategory(name: "deployments") + + """ + Removes assignees from an assignable object. + """ + removeAssigneesFromAssignable( + """ + Parameters for RemoveAssigneesFromAssignable + """ + input: RemoveAssigneesFromAssignableInput! + ): RemoveAssigneesFromAssignablePayload @docsCategory(name: "issues") + + """ + Removes a 'blocked by' relationship from an issue. + """ + removeBlockedBy( + """ + Parameters for RemoveBlockedBy + """ + input: RemoveBlockedByInput! + ): RemoveBlockedByPayload @docsCategory(name: "issues") + + """ + Removes an administrator from the enterprise. + """ + removeEnterpriseAdmin( + """ + Parameters for RemoveEnterpriseAdmin + """ + input: RemoveEnterpriseAdminInput! + ): RemoveEnterpriseAdminPayload @docsCategory(name: "enterprise-admin") + + """ + Removes the identity provider from an enterprise. Owners of enterprises both + with and without Enterprise Managed Users may use this mutation. + """ + removeEnterpriseIdentityProvider( + """ + Parameters for RemoveEnterpriseIdentityProvider + """ + input: RemoveEnterpriseIdentityProviderInput! + ): RemoveEnterpriseIdentityProviderPayload @docsCategory(name: "enterprise-admin") + + """ + Completely removes a user from the enterprise + """ + removeEnterpriseMember( + """ + Parameters for RemoveEnterpriseMember + """ + input: RemoveEnterpriseMemberInput! + ): RemoveEnterpriseMemberPayload @docsCategory(name: "enterprise-admin") + + """ + Removes an organization from the enterprise + """ + removeEnterpriseOrganization( + """ + Parameters for RemoveEnterpriseOrganization + """ + input: RemoveEnterpriseOrganizationInput! + ): RemoveEnterpriseOrganizationPayload @docsCategory(name: "enterprise-admin") + + """ + Removes a support entitlement from an enterprise member. + """ + removeEnterpriseSupportEntitlement( + """ + Parameters for RemoveEnterpriseSupportEntitlement + """ + input: RemoveEnterpriseSupportEntitlementInput! + ): RemoveEnterpriseSupportEntitlementPayload @docsCategory(name: "enterprise-admin") + + """ + Removes labels from a Labelable object. + """ + removeLabelsFromLabelable( + """ + Parameters for RemoveLabelsFromLabelable + """ + input: RemoveLabelsFromLabelableInput! + ): RemoveLabelsFromLabelablePayload @docsCategory(name: "issues") + + """ + Removes outside collaborator from all repositories in an organization. + """ + removeOutsideCollaborator( + """ + Parameters for RemoveOutsideCollaborator + """ + input: RemoveOutsideCollaboratorInput! + ): RemoveOutsideCollaboratorPayload @docsCategory(name: "orgs") + + """ + Remove users from the pull request creation cap bypass list. Only users with + maintainer permissions can manage the bypass list. + """ + removePullRequestCreationCapBypassUsers( + """ + Parameters for RemovePullRequestCreationCapBypassUsers + """ + input: RemovePullRequestCreationCapBypassUsersInput! + ): RemovePullRequestCreationCapBypassUsersPayload @docsCategory(name: "pulls") + + """ + Removes a reaction from a subject. + """ + removeReaction( + """ + Parameters for RemoveReaction + """ + input: RemoveReactionInput! + ): RemoveReactionPayload @docsCategory(name: "reactions") + + """ + Removes a star from a Starrable. + """ + removeStar( + """ + Parameters for RemoveStar + """ + input: RemoveStarInput! + ): RemoveStarPayload @docsCategory(name: "activity") + + """ + Removes a sub-issue from a given issue + """ + removeSubIssue( + """ + Parameters for RemoveSubIssue + """ + input: RemoveSubIssueInput! + ): RemoveSubIssuePayload @docsCategory(name: "issues") + + """ + Remove an upvote to a discussion or discussion comment. + """ + removeUpvote( + """ + Parameters for RemoveUpvote + """ + input: RemoveUpvoteInput! + ): RemoveUpvotePayload @docsCategory(name: "discussions") + + """ + Reopen a discussion. + """ + reopenDiscussion( + """ + Parameters for ReopenDiscussion + """ + input: ReopenDiscussionInput! + ): ReopenDiscussionPayload @docsCategory(name: "discussions") + + """ + Reopen a issue. + """ + reopenIssue( + """ + Parameters for ReopenIssue + """ + input: ReopenIssueInput! + ): ReopenIssuePayload @docsCategory(name: "issues") + + """ + Reopen a pull request. + """ + reopenPullRequest( + """ + Parameters for ReopenPullRequest + """ + input: ReopenPullRequestInput! + ): ReopenPullRequestPayload @docsCategory(name: "pulls") + + """ + Reorder a pinned repository environment + """ + reorderEnvironment( + """ + Parameters for ReorderEnvironment + """ + input: ReorderEnvironmentInput! + ): ReorderEnvironmentPayload @docsCategory(name: "deployments") + + """ + Replaces all actors for assignable object. + """ + replaceActorsForAssignable( + """ + Parameters for ReplaceActorsForAssignable + """ + input: ReplaceActorsForAssignableInput! + ): ReplaceActorsForAssignablePayload @docsCategory(name: "issues") + + """ + Reprioritizes a sub-issue to a different position in the parent list. + """ + reprioritizeSubIssue( + """ + Parameters for ReprioritizeSubIssue + """ + input: ReprioritizeSubIssueInput! + ): ReprioritizeSubIssuePayload @docsCategory(name: "issues") + + """ + Set review requests on a pull request. + """ + requestReviews( + """ + Parameters for RequestReviews + """ + input: RequestReviewsInput! + ): RequestReviewsPayload @docsCategory(name: "pulls") + + """ + Set review requests on a pull request using login strings instead of IDs. + """ + requestReviewsByLogin( + """ + Parameters for RequestReviewsByLogin + """ + input: RequestReviewsByLoginInput! + ): RequestReviewsByLoginPayload @docsCategory(name: "pulls") + + """ + Rerequests an existing check suite. + """ + rerequestCheckSuite( + """ + Parameters for RerequestCheckSuite + """ + input: RerequestCheckSuiteInput! + ): RerequestCheckSuitePayload @docsCategory(name: "checks") + + """ + Marks a review thread as resolved. + """ + resolveReviewThread( + """ + Parameters for ResolveReviewThread + """ + input: ResolveReviewThreadInput! + ): ResolveReviewThreadPayload @docsCategory(name: "pulls") + + """ + Retire a published payment tier from your GitHub Sponsors profile so it cannot be used to start new sponsorships. + """ + retireSponsorsTier( + """ + Parameters for RetireSponsorsTier + """ + input: RetireSponsorsTierInput! + ): RetireSponsorsTierPayload @docsCategory(name: "sponsors") + + """ + Create a pull request that reverts the changes from a merged pull request. + """ + revertPullRequest( + """ + Parameters for RevertPullRequest + """ + input: RevertPullRequestInput! + ): RevertPullRequestPayload @docsCategory(name: "pulls") + + """ + Revoke the migrator role to a user for all organizations under an enterprise account. + """ + revokeEnterpriseOrganizationsMigratorRole( + """ + Parameters for RevokeEnterpriseOrganizationsMigratorRole + """ + input: RevokeEnterpriseOrganizationsMigratorRoleInput! + ): RevokeEnterpriseOrganizationsMigratorRolePayload @docsCategory(name: "enterprise-admin") + + """ + Revoke the migrator role from a user or a team. + """ + revokeMigratorRole( + """ + Parameters for RevokeMigratorRole + """ + input: RevokeMigratorRoleInput! + ): RevokeMigratorRolePayload @docsCategory(name: "migrations") + + """ + Creates or updates the identity provider for an enterprise. + """ + setEnterpriseIdentityProvider( + """ + Parameters for SetEnterpriseIdentityProvider + """ + input: SetEnterpriseIdentityProviderInput! + ): SetEnterpriseIdentityProviderPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the value of an IssueFieldValue. + """ + setIssueFieldValue( + """ + Parameters for SetIssueFieldValue + """ + input: SetIssueFieldValueInput! + ): SetIssueFieldValuePayload @docsCategory(name: "issues") + + """ + Set an organization level interaction limit for an organization's public repositories. + """ + setOrganizationInteractionLimit( + """ + Parameters for SetOrganizationInteractionLimit + """ + input: SetOrganizationInteractionLimitInput! + ): SetOrganizationInteractionLimitPayload @docsCategory(name: "orgs") + + """ + Set repository custom property values for a repository. + """ + setRepositoryCustomPropertyValues( + """ + Parameters for SetRepositoryCustomPropertyValues + """ + input: SetRepositoryCustomPropertyValuesInput! + ): SetRepositoryCustomPropertyValuesPayload @docsCategory(name: "repos") + + """ + Sets an interaction limit setting for a repository. + """ + setRepositoryInteractionLimit( + """ + Parameters for SetRepositoryInteractionLimit + """ + input: SetRepositoryInteractionLimitInput! + ): SetRepositoryInteractionLimitPayload @docsCategory(name: "repos") + + """ + Set a user level interaction limit for an user's public repositories. + """ + setUserInteractionLimit( + """ + Parameters for SetUserInteractionLimit + """ + input: SetUserInteractionLimitInput! + ): SetUserInteractionLimitPayload @docsCategory(name: "users") + + """ + Starts a GitHub Enterprise Importer organization migration. + """ + startOrganizationMigration( + """ + Parameters for StartOrganizationMigration + """ + input: StartOrganizationMigrationInput! + ): StartOrganizationMigrationPayload @docsCategory(name: "migrations") + + """ + Starts a GitHub Enterprise Importer (GEI) repository migration. + """ + startRepositoryMigration( + """ + Parameters for StartRepositoryMigration + """ + input: StartRepositoryMigrationInput! + ): StartRepositoryMigrationPayload @docsCategory(name: "migrations") + + """ + Submits a pending pull request review. + """ + submitPullRequestReview( + """ + Parameters for SubmitPullRequestReview + """ + input: SubmitPullRequestReviewInput! + ): SubmitPullRequestReviewPayload @docsCategory(name: "pulls") + + """ + Transfer an organization from one enterprise to another enterprise. + """ + transferEnterpriseOrganization( + """ + Parameters for TransferEnterpriseOrganization + """ + input: TransferEnterpriseOrganizationInput! + ): TransferEnterpriseOrganizationPayload @docsCategory(name: "enterprise-admin") + + """ + Transfer an issue to a different repository + """ + transferIssue( + """ + Parameters for TransferIssue + """ + input: TransferIssueInput! + ): TransferIssuePayload @docsCategory(name: "issues") + + """ + Unarchives a ProjectV2Item + """ + unarchiveProjectV2Item( + """ + Parameters for UnarchiveProjectV2Item + """ + input: UnarchiveProjectV2ItemInput! + ): UnarchiveProjectV2ItemPayload @docsCategory(name: "projects") + + """ + Unarchive a pull request. Removes the archived flag from the pull request. + Does not automatically reopen or unlock the pull request. Only repository + admins can unarchive pull requests. + """ + unarchivePullRequest( + """ + Parameters for UnarchivePullRequest + """ + input: UnarchivePullRequestInput! + ): UnarchivePullRequestPayload @docsCategory(name: "pulls") + + """ + Unarchives a repository. + """ + unarchiveRepository( + """ + Parameters for UnarchiveRepository + """ + input: UnarchiveRepositoryInput! + ): UnarchiveRepositoryPayload @docsCategory(name: "repos") + + """ + Unfollow an organization. + """ + unfollowOrganization( + """ + Parameters for UnfollowOrganization + """ + input: UnfollowOrganizationInput! + ): UnfollowOrganizationPayload @docsCategory(name: "orgs") + + """ + Unfollow a user. + """ + unfollowUser( + """ + Parameters for UnfollowUser + """ + input: UnfollowUserInput! + ): UnfollowUserPayload @docsCategory(name: "users") + + """ + Unlinks a project from a repository. + """ + unlinkProjectV2FromRepository( + """ + Parameters for UnlinkProjectV2FromRepository + """ + input: UnlinkProjectV2FromRepositoryInput! + ): UnlinkProjectV2FromRepositoryPayload @docsCategory(name: "projects") + + """ + Unlinks a project to a team. + """ + unlinkProjectV2FromTeam( + """ + Parameters for UnlinkProjectV2FromTeam + """ + input: UnlinkProjectV2FromTeamInput! + ): UnlinkProjectV2FromTeamPayload @docsCategory(name: "projects") + + """ + Deletes a repository link from a project. + """ + unlinkRepositoryFromProject( + """ + Parameters for UnlinkRepositoryFromProject + """ + input: UnlinkRepositoryFromProjectInput! + ): UnlinkRepositoryFromProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Unlock a lockable object + """ + unlockLockable( + """ + Parameters for UnlockLockable + """ + input: UnlockLockableInput! + ): UnlockLockablePayload @docsCategory(name: "issues") + + """ + Unmark a discussion comment as the chosen answer for discussions in an answerable category. + """ + unmarkDiscussionCommentAsAnswer( + """ + Parameters for UnmarkDiscussionCommentAsAnswer + """ + input: UnmarkDiscussionCommentAsAnswerInput! + ): UnmarkDiscussionCommentAsAnswerPayload @docsCategory(name: "discussions") + + """ + Unmark a pull request file as viewed + """ + unmarkFileAsViewed( + """ + Parameters for UnmarkFileAsViewed + """ + input: UnmarkFileAsViewedInput! + ): UnmarkFileAsViewedPayload @docsCategory(name: "pulls") + + """ + Unmark an issue as a duplicate of another issue. + """ + unmarkIssueAsDuplicate( + """ + Parameters for UnmarkIssueAsDuplicate + """ + input: UnmarkIssueAsDuplicateInput! + ): UnmarkIssueAsDuplicatePayload @docsCategory(name: "issues") + + """ + Unmark a project as a template. + """ + unmarkProjectV2AsTemplate( + """ + Parameters for UnmarkProjectV2AsTemplate + """ + input: UnmarkProjectV2AsTemplateInput! + ): UnmarkProjectV2AsTemplatePayload @docsCategory(name: "projects") + + """ + Unminimizes a comment on an Issue, Commit, Pull Request, or Gist + """ + unminimizeComment( + """ + Parameters for UnminimizeComment + """ + input: UnminimizeCommentInput! + ): UnminimizeCommentPayload @docsCategory(name: "issues") + + """ + Unpin a pinned issue from a repository + """ + unpinIssue( + """ + Parameters for UnpinIssue + """ + input: UnpinIssueInput! + ): UnpinIssuePayload @docsCategory(name: "issues") + + """ + Unpins an Issue Comment. + """ + unpinIssueComment( + """ + Parameters for UnpinIssueComment + """ + input: UnpinIssueCommentInput! + ): UnpinIssueCommentPayload @docsCategory(name: "issues") + + """ + Marks a review thread as unresolved. + """ + unresolveReviewThread( + """ + Parameters for UnresolveReviewThread + """ + input: UnresolveReviewThreadInput! + ): UnresolveReviewThreadPayload @docsCategory(name: "pulls") + + """ + Update a branch protection rule + """ + updateBranchProtectionRule( + """ + Parameters for UpdateBranchProtectionRule + """ + input: UpdateBranchProtectionRuleInput! + ): UpdateBranchProtectionRulePayload @docsCategory(name: "branches") + + """ + Update a check run + """ + updateCheckRun( + """ + Parameters for UpdateCheckRun + """ + input: UpdateCheckRunInput! + ): UpdateCheckRunPayload @docsCategory(name: "checks") + + """ + Modifies the settings of an existing check suite + """ + updateCheckSuitePreferences( + """ + Parameters for UpdateCheckSuitePreferences + """ + input: UpdateCheckSuitePreferencesInput! + ): UpdateCheckSuitePreferencesPayload @docsCategory(name: "checks") + + """ + Update a discussion + """ + updateDiscussion( + """ + Parameters for UpdateDiscussion + """ + input: UpdateDiscussionInput! + ): UpdateDiscussionPayload @docsCategory(name: "discussions") + + """ + Update the contents of a comment on a Discussion + """ + updateDiscussionComment( + """ + Parameters for UpdateDiscussionComment + """ + input: UpdateDiscussionCommentInput! + ): UpdateDiscussionCommentPayload @docsCategory(name: "discussions") + + """ + Updates the role of an enterprise administrator. + """ + updateEnterpriseAdministratorRole( + """ + Parameters for UpdateEnterpriseAdministratorRole + """ + input: UpdateEnterpriseAdministratorRoleInput! + ): UpdateEnterpriseAdministratorRolePayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether private repository forks are enabled for an enterprise. + """ + updateEnterpriseAllowPrivateRepositoryForkingSetting( + """ + Parameters for UpdateEnterpriseAllowPrivateRepositoryForkingSetting + """ + input: UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput! + ): UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the base repository permission for organizations in an enterprise. + """ + updateEnterpriseDefaultRepositoryPermissionSetting( + """ + Parameters for UpdateEnterpriseDefaultRepositoryPermissionSetting + """ + input: UpdateEnterpriseDefaultRepositoryPermissionSettingInput! + ): UpdateEnterpriseDefaultRepositoryPermissionSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether deploy keys are allowed to be created and used for an enterprise. + """ + updateEnterpriseDeployKeySetting( + """ + Parameters for UpdateEnterpriseDeployKeySetting + """ + input: UpdateEnterpriseDeployKeySettingInput! + ): UpdateEnterpriseDeployKeySettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether organization members with admin permissions on a repository can change repository visibility. + """ + updateEnterpriseMembersCanChangeRepositoryVisibilitySetting( + """ + Parameters for UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting + """ + input: UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput! + ): UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the members can create repositories setting for an enterprise. + """ + updateEnterpriseMembersCanCreateRepositoriesSetting( + """ + Parameters for UpdateEnterpriseMembersCanCreateRepositoriesSetting + """ + input: UpdateEnterpriseMembersCanCreateRepositoriesSettingInput! + ): UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the members can delete issues setting for an enterprise. + """ + updateEnterpriseMembersCanDeleteIssuesSetting( + """ + Parameters for UpdateEnterpriseMembersCanDeleteIssuesSetting + """ + input: UpdateEnterpriseMembersCanDeleteIssuesSettingInput! + ): UpdateEnterpriseMembersCanDeleteIssuesSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the members can delete repositories setting for an enterprise. + """ + updateEnterpriseMembersCanDeleteRepositoriesSetting( + """ + Parameters for UpdateEnterpriseMembersCanDeleteRepositoriesSetting + """ + input: UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput! + ): UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether members can invite collaborators are enabled for an enterprise. + """ + updateEnterpriseMembersCanInviteCollaboratorsSetting( + """ + Parameters for UpdateEnterpriseMembersCanInviteCollaboratorsSetting + """ + input: UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput! + ): UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether or not an organization owner can make purchases. + """ + updateEnterpriseMembersCanMakePurchasesSetting( + """ + Parameters for UpdateEnterpriseMembersCanMakePurchasesSetting + """ + input: UpdateEnterpriseMembersCanMakePurchasesSettingInput! + ): UpdateEnterpriseMembersCanMakePurchasesSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the members can update protected branches setting for an enterprise. + """ + updateEnterpriseMembersCanUpdateProtectedBranchesSetting( + """ + Parameters for UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting + """ + input: UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput! + ): UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the members can view dependency insights for an enterprise. + """ + updateEnterpriseMembersCanViewDependencyInsightsSetting( + """ + Parameters for UpdateEnterpriseMembersCanViewDependencyInsightsSetting + """ + input: UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput! + ): UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether organization projects are enabled for an enterprise. + """ + updateEnterpriseOrganizationProjectsSetting( + """ + Parameters for UpdateEnterpriseOrganizationProjectsSetting + """ + input: UpdateEnterpriseOrganizationProjectsSettingInput! + ): UpdateEnterpriseOrganizationProjectsSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Updates the role of an enterprise owner with an organization. + """ + updateEnterpriseOwnerOrganizationRole( + """ + Parameters for UpdateEnterpriseOwnerOrganizationRole + """ + input: UpdateEnterpriseOwnerOrganizationRoleInput! + ): UpdateEnterpriseOwnerOrganizationRolePayload @docsCategory(name: "enterprise-admin") + + """ + Updates an enterprise's profile. + """ + updateEnterpriseProfile( + """ + Parameters for UpdateEnterpriseProfile + """ + input: UpdateEnterpriseProfileInput! + ): UpdateEnterpriseProfilePayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether repository projects are enabled for a enterprise. + """ + updateEnterpriseRepositoryProjectsSetting( + """ + Parameters for UpdateEnterpriseRepositoryProjectsSetting + """ + input: UpdateEnterpriseRepositoryProjectsSettingInput! + ): UpdateEnterpriseRepositoryProjectsSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets the two-factor authentication methods that users of an enterprise may not use. + """ + updateEnterpriseTwoFactorAuthenticationDisallowedMethodsSetting( + """ + Parameters for UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSetting + """ + input: UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSettingInput! + ): UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether two factor authentication is required for all users in an enterprise. + """ + updateEnterpriseTwoFactorAuthenticationRequiredSetting( + """ + Parameters for UpdateEnterpriseTwoFactorAuthenticationRequiredSetting + """ + input: UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput! + ): UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Updates an environment. + """ + updateEnvironment( + """ + Parameters for UpdateEnvironment + """ + input: UpdateEnvironmentInput! + ): UpdateEnvironmentPayload @docsCategory(name: "deployments") + + """ + Sets whether an IP allow list is enabled on an owner. + """ + updateIpAllowListEnabledSetting( + """ + Parameters for UpdateIpAllowListEnabledSetting + """ + input: UpdateIpAllowListEnabledSettingInput! + ): UpdateIpAllowListEnabledSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Updates an IP allow list entry. + """ + updateIpAllowListEntry( + """ + Parameters for UpdateIpAllowListEntry + """ + input: UpdateIpAllowListEntryInput! + ): UpdateIpAllowListEntryPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether IP allow list configuration for installed GitHub Apps is enabled on an owner. + """ + updateIpAllowListForInstalledAppsEnabledSetting( + """ + Parameters for UpdateIpAllowListForInstalledAppsEnabledSetting + """ + input: UpdateIpAllowListForInstalledAppsEnabledSettingInput! + ): UpdateIpAllowListForInstalledAppsEnabledSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Sets whether IP allow list user-level enforcement is enabled on an enterprise. + """ + updateIpAllowListUserLevelEnforcementEnabledSetting( + """ + Parameters for UpdateIpAllowListUserLevelEnforcementEnabledSetting + """ + input: UpdateIpAllowListUserLevelEnforcementEnabledSettingInput! + ): UpdateIpAllowListUserLevelEnforcementEnabledSettingPayload @docsCategory(name: "enterprise-admin") + + """ + Updates an Issue. + """ + updateIssue( + """ + Parameters for UpdateIssue + """ + input: UpdateIssueInput! + ): UpdateIssuePayload @docsCategory(name: "issues") + + """ + Updates an IssueComment object. + """ + updateIssueComment( + """ + Parameters for UpdateIssueComment + """ + input: UpdateIssueCommentInput! + ): UpdateIssueCommentPayload @docsCategory(name: "issues") + + """ + Updates an issue field. + """ + updateIssueField( + """ + Parameters for UpdateIssueField + """ + input: UpdateIssueFieldInput! + ): UpdateIssueFieldPayload @docsCategory(name: "issues") + + """ + Updates an existing issue field value for an issue. + """ + updateIssueFieldValue( + """ + Parameters for UpdateIssueFieldValue + """ + input: UpdateIssueFieldValueInput! + ): UpdateIssueFieldValuePayload @docsCategory(name: "issues") + + """ + Updates the issue type on an issue + """ + updateIssueIssueType( + """ + Parameters for UpdateIssueIssueType + """ + input: UpdateIssueIssueTypeInput! + ): UpdateIssueIssueTypePayload @docsCategory(name: "issues") + + """ + Update an issue type + """ + updateIssueType( + """ + Parameters for UpdateIssueType + """ + input: UpdateIssueTypeInput! + ): UpdateIssueTypePayload @docsCategory(name: "issues") + + """ + Updates an existing label. + """ + updateLabel( + """ + Parameters for UpdateLabel + """ + input: UpdateLabelInput! + ): UpdateLabelPayload @docsCategory(name: "issues") + + """ + Update the setting to restrict notifications to only verified or approved domains available to an owner. + """ + updateNotificationRestrictionSetting( + """ + Parameters for UpdateNotificationRestrictionSetting + """ + input: UpdateNotificationRestrictionSettingInput! + ): UpdateNotificationRestrictionSettingPayload @docsCategory(name: "activity") + + """ + Sets whether private repository forks are enabled for an organization. + """ + updateOrganizationAllowPrivateRepositoryForkingSetting( + """ + Parameters for UpdateOrganizationAllowPrivateRepositoryForkingSetting + """ + input: UpdateOrganizationAllowPrivateRepositoryForkingSettingInput! + ): UpdateOrganizationAllowPrivateRepositoryForkingSettingPayload @docsCategory(name: "orgs") + + """ + Sets whether contributors are required to sign off on web-based commits for repositories in an organization. + """ + updateOrganizationWebCommitSignoffSetting( + """ + Parameters for UpdateOrganizationWebCommitSignoffSetting + """ + input: UpdateOrganizationWebCommitSignoffSettingInput! + ): UpdateOrganizationWebCommitSignoffSettingPayload @docsCategory(name: "orgs") + + """ + Toggle the setting for your GitHub Sponsors profile that allows other GitHub + accounts to sponsor you on GitHub while paying for the sponsorship on Patreon. + Only applicable when you have a GitHub Sponsors profile and have connected + your GitHub account with Patreon. + """ + updatePatreonSponsorability( + """ + Parameters for UpdatePatreonSponsorability + """ + input: UpdatePatreonSponsorabilityInput! + ): UpdatePatreonSponsorabilityPayload @docsCategory(name: "sponsors") + + """ + Updates an existing project. + """ + updateProject( + """ + Parameters for UpdateProject + """ + input: UpdateProjectInput! + ): UpdateProjectPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Updates an existing project card. + """ + updateProjectCard( + """ + Parameters for UpdateProjectCard + """ + input: UpdateProjectCardInput! + ): UpdateProjectCardPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Updates an existing project column. + """ + updateProjectColumn( + """ + Parameters for UpdateProjectColumn + """ + input: UpdateProjectColumnInput! + ): UpdateProjectColumnPayload + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + @docsCategory(name: "projects-classic") + + """ + Updates an existing project. + """ + updateProjectV2( + """ + Parameters for UpdateProjectV2 + """ + input: UpdateProjectV2Input! + ): UpdateProjectV2Payload @docsCategory(name: "projects") + + """ + Update the collaborators on a team or a project + """ + updateProjectV2Collaborators( + """ + Parameters for UpdateProjectV2Collaborators + """ + input: UpdateProjectV2CollaboratorsInput! + ): UpdateProjectV2CollaboratorsPayload @docsCategory(name: "projects") + + """ + Updates a draft issue within a Project. + """ + updateProjectV2DraftIssue( + """ + Parameters for UpdateProjectV2DraftIssue + """ + input: UpdateProjectV2DraftIssueInput! + ): UpdateProjectV2DraftIssuePayload @docsCategory(name: "projects") + + """ + Update a project field. + """ + updateProjectV2Field( + """ + Parameters for UpdateProjectV2Field + """ + input: UpdateProjectV2FieldInput! + ): UpdateProjectV2FieldPayload @docsCategory(name: "projects") + + """ + This mutation updates the value of a field for an item in a Project. Currently + only single-select, text, number, date, and iteration fields are supported. + """ + updateProjectV2ItemFieldValue( + """ + Parameters for UpdateProjectV2ItemFieldValue + """ + input: UpdateProjectV2ItemFieldValueInput! + ): UpdateProjectV2ItemFieldValuePayload @docsCategory(name: "projects") + + """ + This mutation updates the position of the item in the project, where the position represents the priority of an item. + """ + updateProjectV2ItemPosition( + """ + Parameters for UpdateProjectV2ItemPosition + """ + input: UpdateProjectV2ItemPositionInput! + ): UpdateProjectV2ItemPositionPayload @docsCategory(name: "projects") + + """ + Updates a status update within a Project. + """ + updateProjectV2StatusUpdate( + """ + Parameters for UpdateProjectV2StatusUpdate + """ + input: UpdateProjectV2StatusUpdateInput! + ): UpdateProjectV2StatusUpdatePayload @docsCategory(name: "projects") + + """ + Update a pull request + """ + updatePullRequest( + """ + Parameters for UpdatePullRequest + """ + input: UpdatePullRequestInput! + ): UpdatePullRequestPayload @docsCategory(name: "pulls") + + """ + Merge or Rebase HEAD from upstream branch into pull request branch + """ + updatePullRequestBranch( + """ + Parameters for UpdatePullRequestBranch + """ + input: UpdatePullRequestBranchInput! + ): UpdatePullRequestBranchPayload @docsCategory(name: "pulls") + + """ + Updates the body of a pull request review. + """ + updatePullRequestReview( + """ + Parameters for UpdatePullRequestReview + """ + input: UpdatePullRequestReviewInput! + ): UpdatePullRequestReviewPayload @docsCategory(name: "pulls") + + """ + Updates a pull request review comment. + """ + updatePullRequestReviewComment( + """ + Parameters for UpdatePullRequestReviewComment + """ + input: UpdatePullRequestReviewCommentInput! + ): UpdatePullRequestReviewCommentPayload @docsCategory(name: "pulls") + + """ + Update a Git Ref. + """ + updateRef( + """ + Parameters for UpdateRef + """ + input: UpdateRefInput! + ): UpdateRefPayload @docsCategory(name: "git") + + """ + Creates, updates and/or deletes multiple refs in a repository. + + This mutation takes a list of `RefUpdate`s and performs these updates + on the repository. All updates are performed atomically, meaning that + if one of them is rejected, no other ref will be modified. + + `RefUpdate.beforeOid` specifies that the given reference needs to point + to the given value before performing any updates. A value of + `0000000000000000000000000000000000000000` can be used to verify that + the references should not exist. + + `RefUpdate.afterOid` specifies the value that the given reference + will point to after performing all updates. A value of + `0000000000000000000000000000000000000000` can be used to delete a + reference. + + If `RefUpdate.force` is set to `true`, a non-fast-forward updates + for the given reference will be allowed. + """ + updateRefs( + """ + Parameters for UpdateRefs + """ + input: UpdateRefsInput! + ): UpdateRefsPayload @docsCategory(name: "git") + + """ + Update information about a repository. + """ + updateRepository( + """ + Parameters for UpdateRepository + """ + input: UpdateRepositoryInput! + ): UpdateRepositoryPayload @docsCategory(name: "repos") + + """ + Update a repository custom property. + """ + updateRepositoryCustomProperty( + """ + Parameters for UpdateRepositoryCustomProperty + """ + input: UpdateRepositoryCustomPropertyInput! + ): UpdateRepositoryCustomPropertyPayload @docsCategory(name: "repos") + + """ + Update a repository ruleset + """ + updateRepositoryRuleset( + """ + Parameters for UpdateRepositoryRuleset + """ + input: UpdateRepositoryRulesetInput! + ): UpdateRepositoryRulesetPayload @docsCategory(name: "repos") + + """ + Sets whether contributors are required to sign off on web-based commits for a repository. + """ + updateRepositoryWebCommitSignoffSetting( + """ + Parameters for UpdateRepositoryWebCommitSignoffSetting + """ + input: UpdateRepositoryWebCommitSignoffSettingInput! + ): UpdateRepositoryWebCommitSignoffSettingPayload @docsCategory(name: "repos") + + """ + Change visibility of your sponsorship and opt in or out of email updates from the maintainer. + """ + updateSponsorshipPreferences( + """ + Parameters for UpdateSponsorshipPreferences + """ + input: UpdateSponsorshipPreferencesInput! + ): UpdateSponsorshipPreferencesPayload @docsCategory(name: "sponsors") + + """ + Updates the state for subscribable subjects. + """ + updateSubscription( + """ + Parameters for UpdateSubscription + """ + input: UpdateSubscriptionInput! + ): UpdateSubscriptionPayload @docsCategory(name: "activity") + + """ + Updates team review assignment. + """ + updateTeamReviewAssignment( + """ + Parameters for UpdateTeamReviewAssignment + """ + input: UpdateTeamReviewAssignmentInput! + ): UpdateTeamReviewAssignmentPayload @docsCategory(name: "pulls") + + """ + Update team repository. + """ + updateTeamsRepository( + """ + Parameters for UpdateTeamsRepository + """ + input: UpdateTeamsRepositoryInput! + ): UpdateTeamsRepositoryPayload @docsCategory(name: "teams") + + """ + Replaces the repository's topics with the given topics. + """ + updateTopics( + """ + Parameters for UpdateTopics + """ + input: UpdateTopicsInput! + ): UpdateTopicsPayload @docsCategory(name: "repos") + + """ + Updates an existing user list. + """ + updateUserList( + """ + Parameters for UpdateUserList + """ + input: UpdateUserListInput! + ): UpdateUserListPayload @docsCategory(name: "users") + + """ + Updates which of the viewer's lists an item belongs to + """ + updateUserListsForItem( + """ + Parameters for UpdateUserListsForItem + """ + input: UpdateUserListsForItemInput! + ): UpdateUserListsForItemPayload @docsCategory(name: "users") + + """ + Verify that a verifiable domain has the expected DNS record. + """ + verifyVerifiableDomain( + """ + Parameters for VerifyVerifiableDomain + """ + input: VerifyVerifiableDomainInput! + ): VerifyVerifiableDomainPayload @docsCategory(name: "orgs") +} + +""" +An object with an ID. +""" +interface Node @docsCategory(name: "meta") { + """ + ID of the object. + """ + id: ID! +} + +""" +The possible values for the notification restriction setting. +""" +enum NotificationRestrictionSettingValue @docsCategory(name: "activity") { + """ + The setting is disabled for the owner. + """ + DISABLED + + """ + The setting is enabled for the owner. + """ + ENABLED +} + +""" +An OIDC identity provider configured to provision identities for an enterprise. +Visible to enterprise owners or enterprise owners' personal access tokens +(classic) with read:enterprise or admin:enterprise scope. +""" +type OIDCProvider implements Node @docsCategory(name: "enterprise-admin") { + """ + The enterprise this identity provider belongs to. + """ + enterprise: Enterprise + + """ + ExternalIdentities provisioned by this identity provider. + """ + externalIdentities( + """ + 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 + + """ + Filter to external identities with the users login + """ + login: String + + """ + Filter to external identities with valid org membership only + """ + membersOnly: Boolean + + """ + Filter to external identities with the users userName/NameID attribute + """ + userName: String + ): ExternalIdentityConnection! + + """ + The Node ID of the OIDCProvider object + """ + id: ID! + + """ + The OIDC identity provider type + """ + providerType: OIDCProviderType! + + """ + The id of the tenant this provider is attached to + """ + tenantId: String! +} + +""" +The OIDC identity provider type +""" +enum OIDCProviderType @docsCategory(name: "enterprise-admin") { + """ + Azure Active Directory + """ + AAD +} + +""" +Metadata for an audit entry with action oauth_application.* +""" +interface OauthApplicationAuditEntryData @docsCategory(name: "apps") { + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI +} + +""" +Audit log entry for a oauth_application.create event. +""" +type OauthApplicationCreateAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The application URL of the OAuth application. + """ + applicationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The callback URL of the OAuth application. + """ + callbackUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OauthApplicationCreateAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The rate limit of the OAuth application. + """ + rateLimit: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The state of the OAuth application. + """ + state: OauthApplicationCreateAuditEntryState + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The state of an OAuth application when it was created. +""" +enum OauthApplicationCreateAuditEntryState @docsCategory(name: "apps") { + """ + The OAuth application was active and allowed to have OAuth Accesses. + """ + ACTIVE + + """ + The OAuth application was in the process of being deleted. + """ + PENDING_DELETION + + """ + The OAuth application was suspended from generating OAuth Accesses due to abuse or security concerns. + """ + SUSPENDED +} + +""" +The corresponding operation type for the action +""" +enum OperationType @docsCategory(name: "meta") { + """ + An existing resource was accessed + """ + ACCESS + + """ + A resource performed an authentication event + """ + AUTHENTICATION + + """ + A new resource was created + """ + CREATE + + """ + An existing resource was modified + """ + MODIFY + + """ + An existing resource was removed + """ + REMOVE + + """ + An existing resource was restored + """ + RESTORE + + """ + An existing resource was transferred between multiple resources + """ + TRANSFER +} + +""" +Possible directions in which to order a list of items when provided an `orderBy` argument. +""" +enum OrderDirection @docsCategory(name: "meta") { + """ + Specifies an ascending order for a given `orderBy` argument. + """ + ASC + + """ + Specifies a descending order for a given `orderBy` argument. + """ + DESC +} + +""" +Audit log entry for a org.add_billing_manager +""" +type OrgAddBillingManagerAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgAddBillingManagerAuditEntry object + """ + id: ID! + + """ + The email address used to invite a billing manager for the organization. + """ + invitationEmail: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.add_member +""" +type OrgAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgAddMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The permission level of the member added to the organization. + """ + permission: OrgAddMemberAuditEntryPermission + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The permissions available to members on an Organization. +""" +enum OrgAddMemberAuditEntryPermission @docsCategory(name: "orgs") { + """ + Can read, clone, push, and add collaborators to repositories. + """ + ADMIN + + """ + Can read and clone repositories. + """ + READ +} + +""" +Audit log entry for a org.block_user +""" +type OrgBlockUserAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The blocked user. + """ + blockedUser: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the blocked user. + """ + blockedUserName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the blocked user. + """ + blockedUserResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the blocked user. + """ + blockedUserUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgBlockUserAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.config.disable_collaborators_only event. +""" +type OrgConfigDisableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgConfigDisableCollaboratorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.config.enable_collaborators_only event. +""" +type OrgConfigEnableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgConfigEnableCollaboratorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.create event. +""" +type OrgCreateAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The billing plan for the Organization. + """ + billingPlan: OrgCreateAuditEntryBillingPlan + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgCreateAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The billing plans available for organizations. +""" +enum OrgCreateAuditEntryBillingPlan @docsCategory(name: "orgs") { + """ + Team Plan + """ + BUSINESS + + """ + Enterprise Cloud Plan + """ + BUSINESS_PLUS + + """ + Free Plan + """ + FREE + + """ + Tiered Per Seat Plan + """ + TIERED_PER_SEAT + + """ + Legacy Unlimited Plan + """ + UNLIMITED +} + +""" +Audit log entry for a org.disable_oauth_app_restrictions event. +""" +type OrgDisableOauthAppRestrictionsAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgDisableOauthAppRestrictionsAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.disable_saml event. +""" +type OrgDisableSamlAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's digest algorithm URL. + """ + digestMethodUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgDisableSamlAuditEntry object + """ + id: ID! + + """ + The SAML provider's issuer URL. + """ + issuerUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's signature algorithm URL. + """ + signatureMethodUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's single sign-on URL. + """ + singleSignOnUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.disable_two_factor_requirement event. +""" +type OrgDisableTwoFactorRequirementAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgDisableTwoFactorRequirementAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.enable_oauth_app_restrictions event. +""" +type OrgEnableOauthAppRestrictionsAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgEnableOauthAppRestrictionsAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.enable_saml event. +""" +type OrgEnableSamlAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's digest algorithm URL. + """ + digestMethodUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgEnableSamlAuditEntry object + """ + id: ID! + + """ + The SAML provider's issuer URL. + """ + issuerUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's signature algorithm URL. + """ + signatureMethodUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The SAML provider's single sign-on URL. + """ + singleSignOnUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.enable_two_factor_requirement event. +""" +type OrgEnableTwoFactorRequirementAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgEnableTwoFactorRequirementAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Ordering options for an organization's enterprise owner connections. +""" +input OrgEnterpriseOwnerOrder @docsCategory(name: "orgs") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprise owners by. + """ + field: OrgEnterpriseOwnerOrderField! +} + +""" +Properties by which enterprise owners can be ordered. +""" +enum OrgEnterpriseOwnerOrderField @docsCategory(name: "orgs") { + """ + Order enterprise owners by login. + """ + LOGIN +} + +""" +Audit log entry for a org.invite_member event. +""" +type OrgInviteMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The email address of the organization invitation. + """ + email: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgInviteMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The organization invitation. + """ + organizationInvitation: OrganizationInvitation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.invite_to_business event. +""" +type OrgInviteToBusinessAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the OrgInviteToBusinessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.oauth_app_access_approved event. +""" +type OrgOauthAppAccessApprovedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgOauthAppAccessApprovedAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.oauth_app_access_blocked event. +""" +type OrgOauthAppAccessBlockedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgOauthAppAccessBlockedAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.oauth_app_access_denied event. +""" +type OrgOauthAppAccessDeniedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgOauthAppAccessDeniedAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.oauth_app_access_requested event. +""" +type OrgOauthAppAccessRequestedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgOauthAppAccessRequestedAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.oauth_app_access_unblocked event. +""" +type OrgOauthAppAccessUnblockedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgOauthAppAccessUnblockedAuditEntry object + """ + id: ID! + + """ + The name of the OAuth application. + """ + oauthApplicationName: String + + """ + The HTTP path for the OAuth application + """ + oauthApplicationResourcePath: URI + + """ + The HTTP URL for the OAuth application + """ + oauthApplicationUrl: URI + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.remove_billing_manager event. +""" +type OrgRemoveBillingManagerAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgRemoveBillingManagerAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The reason for the billing manager being removed. + """ + reason: OrgRemoveBillingManagerAuditEntryReason + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The reason a billing manager was removed from an Organization. +""" +enum OrgRemoveBillingManagerAuditEntryReason @docsCategory(name: "orgs") { + """ + SAML external identity missing + """ + SAML_EXTERNAL_IDENTITY_MISSING + + """ + SAML SSO enforcement requires an external identity + """ + SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY + + """ + The organization required 2FA of its billing managers and this user did not have 2FA enabled. + """ + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE +} + +""" +Audit log entry for a org.remove_member event. +""" +type OrgRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgRemoveMemberAuditEntry object + """ + id: ID! + + """ + The types of membership the member has with the organization. + """ + membershipTypes: [OrgRemoveMemberAuditEntryMembershipType!] + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The reason for the member being removed. + """ + reason: OrgRemoveMemberAuditEntryReason + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The type of membership a user has with an Organization. +""" +enum OrgRemoveMemberAuditEntryMembershipType @docsCategory(name: "orgs") { + """ + Organization owners have full access and can change several settings, + including the names of repositories that belong to the Organization and Owners + team membership. In addition, organization owners can delete the organization + and all of its repositories. + """ + ADMIN + + """ + A billing manager is a user who manages the billing settings for the Organization, such as updating payment information. + """ + BILLING_MANAGER + + """ + A direct member is a user that is a member of the Organization. + """ + DIRECT_MEMBER + + """ + An outside collaborator is a person who isn't explicitly a member of the + Organization, but who has Read, Write, or Admin permissions to one or more + repositories in the organization. + """ + OUTSIDE_COLLABORATOR + + """ + A suspended member. + """ + SUSPENDED + + """ + An unaffiliated collaborator is a person who is not a member of the + Organization and does not have access to any repositories in the Organization. + """ + UNAFFILIATED +} + +""" +The reason a member was removed from an Organization. +""" +enum OrgRemoveMemberAuditEntryReason @docsCategory(name: "orgs") { + """ + SAML external identity missing + """ + SAML_EXTERNAL_IDENTITY_MISSING + + """ + SAML SSO enforcement requires an external identity + """ + SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY + + """ + User was removed from organization during account recovery + """ + TWO_FACTOR_ACCOUNT_RECOVERY + + """ + The organization required 2FA of its billing managers and this user did not have 2FA enabled. + """ + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE + + """ + User account has been deleted + """ + USER_ACCOUNT_DELETED +} + +""" +Audit log entry for a org.remove_outside_collaborator event. +""" +type OrgRemoveOutsideCollaboratorAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgRemoveOutsideCollaboratorAuditEntry object + """ + id: ID! + + """ + The types of membership the outside collaborator has with the organization. + """ + membershipTypes: [OrgRemoveOutsideCollaboratorAuditEntryMembershipType!] + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The reason for the outside collaborator being removed from the Organization. + """ + reason: OrgRemoveOutsideCollaboratorAuditEntryReason + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The type of membership a user has with an Organization. +""" +enum OrgRemoveOutsideCollaboratorAuditEntryMembershipType @docsCategory(name: "orgs") { + """ + A billing manager is a user who manages the billing settings for the Organization, such as updating payment information. + """ + BILLING_MANAGER + + """ + An outside collaborator is a person who isn't explicitly a member of the + Organization, but who has Read, Write, or Admin permissions to one or more + repositories in the organization. + """ + OUTSIDE_COLLABORATOR + + """ + An unaffiliated collaborator is a person who is not a member of the + Organization and does not have access to any repositories in the organization. + """ + UNAFFILIATED +} + +""" +The reason an outside collaborator was removed from an Organization. +""" +enum OrgRemoveOutsideCollaboratorAuditEntryReason @docsCategory(name: "orgs") { + """ + SAML external identity missing + """ + SAML_EXTERNAL_IDENTITY_MISSING + + """ + The organization required 2FA of its billing managers and this user did not have 2FA enabled. + """ + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE +} + +""" +Audit log entry for a org.restore_member event. +""" +type OrgRestoreMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgRestoreMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of custom email routings for the restored member. + """ + restoredCustomEmailRoutingsCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of issue assignments for the restored member. + """ + restoredIssueAssignmentsCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + Restored organization membership objects. + """ + restoredMemberships: [OrgRestoreMemberAuditEntryMembership!] + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of restored memberships. + """ + restoredMembershipsCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of repositories of the restored member. + """ + restoredRepositoriesCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of starred repositories for the restored member. + """ + restoredRepositoryStarsCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The number of watched repositories for the restored member. + """ + restoredRepositoryWatchesCount: Int + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Types of memberships that can be restored for an Organization member. +""" +union OrgRestoreMemberAuditEntryMembership @docsCategory(name: "orgs") = + | OrgRestoreMemberMembershipOrganizationAuditEntryData + | OrgRestoreMemberMembershipRepositoryAuditEntryData + | OrgRestoreMemberMembershipTeamAuditEntryData + +""" +Metadata for an organization membership for org.restore_member actions +""" +type OrgRestoreMemberMembershipOrganizationAuditEntryData implements OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Metadata for a repository membership for org.restore_member actions +""" +type OrgRestoreMemberMembershipRepositoryAuditEntryData implements RepositoryAuditEntryData + @docsCategory(name: "orgs") { + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI +} + +""" +Metadata for a team membership for org.restore_member actions +""" +type OrgRestoreMemberMembershipTeamAuditEntryData implements TeamAuditEntryData @docsCategory(name: "orgs") { + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI +} + +""" +Audit log entry for a org.unblock_user +""" +type OrgUnblockUserAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user being unblocked by the organization. + """ + blockedUser: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the blocked user. + """ + blockedUserName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the blocked user. + """ + blockedUserResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the blocked user. + """ + blockedUserUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgUnblockUserAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a org.update_default_repository_permission +""" +type OrgUpdateDefaultRepositoryPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgUpdateDefaultRepositoryPermissionAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The new base repository permission level for the organization. + """ + permission: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The former base repository permission level for the organization. + """ + permissionWas: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The default permission a repository can have in an Organization. +""" +enum OrgUpdateDefaultRepositoryPermissionAuditEntryPermission @docsCategory(name: "orgs") { + """ + Can read, clone, push, and add collaborators to repositories. + """ + ADMIN + + """ + No default permission value. + """ + NONE + + """ + Can read and clone repositories. + """ + READ + + """ + Can read, clone and push to repositories. + """ + WRITE +} + +""" +Audit log entry for a org.update_member event. +""" +type OrgUpdateMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgUpdateMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The new member permission level for the organization. + """ + permission: OrgUpdateMemberAuditEntryPermission + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The former member permission level for the organization. + """ + permissionWas: OrgUpdateMemberAuditEntryPermission + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The permissions available to members on an Organization. +""" +enum OrgUpdateMemberAuditEntryPermission @docsCategory(name: "orgs") { + """ + Can read, clone, push, and add collaborators to repositories. + """ + ADMIN + + """ + Can read and clone repositories. + """ + READ +} + +""" +Audit log entry for a org.update_member_repository_creation_permission event. +""" +type OrgUpdateMemberRepositoryCreationPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + Can members create repositories in the organization. + """ + canCreateRepositories: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgUpdateMemberRepositoryCreationPermissionAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The permission for visibility level of repositories for this organization. + """ + visibility: OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The permissions available for repository creation on an Organization. +""" +enum OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility @docsCategory(name: "orgs") { + """ + All organization members are restricted from creating any repositories. + """ + ALL + + """ + All organization members are restricted from creating internal repositories. + """ + INTERNAL + + """ + All organization members are allowed to create any repositories. + """ + NONE + + """ + All organization members are restricted from creating private repositories. + """ + PRIVATE + + """ + All organization members are restricted from creating private or internal repositories. + """ + PRIVATE_INTERNAL + + """ + All organization members are restricted from creating public repositories. + """ + PUBLIC + + """ + All organization members are restricted from creating public or internal repositories. + """ + PUBLIC_INTERNAL + + """ + All organization members are restricted from creating public or private repositories. + """ + PUBLIC_PRIVATE +} + +""" +Audit log entry for a org.update_member_repository_invitation_permission event. +""" +type OrgUpdateMemberRepositoryInvitationPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData + @docsCategory(name: "orgs") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + Can outside collaborators be invited to repositories in the organization. + """ + canInviteOutsideCollaboratorsToRepositories: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the OrgUpdateMemberRepositoryInvitationPermissionAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +An account on GitHub, with one or more owners, that has repositories, members and teams. +""" +type Organization implements Actor & MemberStatusable & Node & PackageOwner & ProfileOwner & ProjectOwner & ProjectV2Owner & ProjectV2Recent & RepositoryDiscussionAuthor & RepositoryDiscussionCommentAuthor & RepositoryOwner & Sponsorable & UniformResourceLocatable + @docsCategory(name: "orgs") { + """ + The announcement banner set on this organization, if any. Only visible to members of the organization's enterprise. + """ + announcementBanner: AnnouncementBanner + + """ + Determine if this repository owner has any items that can be pinned to their profile. + """ + anyPinnableItems( + """ + Filter to only a particular kind of pinnable item. + """ + type: PinnableItemType + ): Boolean! + + """ + Identifies the date and time when the organization was archived. + """ + archivedAt: DateTime + + """ + Audit log entries of the organization + """ + auditLog( + """ + 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 + + """ + Ordering options for the returned audit log entries. + """ + orderBy: AuditLogOrder = {field: CREATED_AT, direction: DESC} + + """ + The query string to filter audit entries + """ + query: String + ): OrganizationAuditEntryConnection! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A URL pointing to the organization's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The organization's public profile description. + """ + description: String + + """ + The organization's public profile description rendered to HTML. + """ + descriptionHTML: String + + """ + A list of domains owned by the organization. + """ + domains( + """ + 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 + + """ + Filter by if the domain is approved. + """ + isApproved: Boolean = null + + """ + Filter by if the domain is verified. + """ + isVerified: Boolean = null + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for verifiable domains returned. + """ + orderBy: VerifiableDomainOrder = {field: DOMAIN, direction: ASC} + ): VerifiableDomainConnection + + """ + The organization's public email. + """ + email: String + + """ + A list of owners of the organization's enterprise account. + """ + enterpriseOwners( + """ + 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 + + """ + Ordering options for enterprise owners returned from the connection. + """ + orderBy: OrgEnterpriseOwnerOrder = {field: LOGIN, direction: ASC} + + """ + The organization role to filter by. + """ + organizationRole: RoleInOrganization + + """ + The search string to look for. + """ + query: String + ): OrganizationEnterpriseOwnerConnection! + + """ + The estimated next GitHub Sponsors payout for this user/organization in cents (USD). + """ + estimatedNextSponsorsPayoutInCents: Int! + + """ + True if this user/organization has a GitHub Sponsors listing. + """ + hasSponsorsListing: Boolean! + + """ + The Node ID of the Organization object + """ + id: ID! + + """ + The interaction ability settings for this organization. + """ + interactionAbility: RepositoryInteractionAbility + + """ + The setting value for whether the organization has an IP allow list enabled. + """ + ipAllowListEnabledSetting: IpAllowListEnabledSettingValue! + + """ + The IP addresses that are allowed to access resources owned by the organization. + """ + ipAllowListEntries( + """ + 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 + + """ + Ordering options for IP allow list entries returned. + """ + orderBy: IpAllowListEntryOrder = {field: ALLOW_LIST_VALUE, direction: ASC} + ): IpAllowListEntryConnection! + + """ + The setting value for whether the organization has IP allow list configuration for installed GitHub Apps enabled. + """ + ipAllowListForInstalledAppsEnabledSetting: IpAllowListForInstalledAppsEnabledSettingValue! + + """ + Whether the given account is sponsoring this user/organization. + """ + isSponsoredBy( + """ + The target account's login. + """ + accountLogin: String! + ): Boolean! + + """ + True if the viewer is sponsored by this user/organization. + """ + isSponsoringViewer: Boolean! + + """ + Whether the organization has verified its profile email and website. + """ + isVerified: Boolean! + + """ + A list of the organization's issue fields + """ + issueFields( + """ + 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 + + """ + Ordering options for issue fields returned from the connection. + """ + orderBy: IssueFieldOrder = {field: CREATED_AT, direction: ASC} + ): IssueFieldsConnection + + """ + A list of the organization's issue types + """ + issueTypes( + """ + 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 + + """ + Ordering options for issue types returned from the connection. + """ + orderBy: IssueTypeOrder = {field: CREATED_AT, direction: ASC} + ): IssueTypeConnection + + """ + Showcases a selection of repositories and gists that the profile owner has + either curated or that have been selected automatically based on popularity. + """ + itemShowcase: ProfileItemShowcase! + + """ + Calculate how much each sponsor has ever paid total to this maintainer via + GitHub Sponsors. Does not include sponsorships paid via Patreon. + """ + lifetimeReceivedSponsorshipValues( + """ + 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 + + """ + Ordering options for results returned from the connection. + """ + orderBy: SponsorAndLifetimeValueOrder = {field: SPONSOR_LOGIN, direction: ASC} + ): SponsorAndLifetimeValueConnection! + + """ + The organization's public profile location. + """ + location: String + + """ + The organization's login name. + """ + login: String! + + """ + A list of all mannequins for this organization. + """ + mannequins( + """ + 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 + + """ + Filter mannequins by login. + """ + login: String + + """ + Ordering options for mannequins returned from the connection. + """ + orderBy: MannequinOrder = {field: CREATED_AT, direction: ASC} + ): MannequinConnection! + + """ + Get the status messages members of this entity have set that are either public or visible only to the organization. + """ + memberStatuses( + """ + 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 + + """ + Ordering options for user statuses returned from the connection. + """ + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! + + """ + Members can fork private repositories in this organization + """ + membersCanForkPrivateRepositories: Boolean! + + """ + A list of users who are members of this organization. + """ + membersWithRole( + """ + 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 + ): OrganizationMemberConnection! + + """ + The estimated monthly GitHub Sponsors income for this user/organization in cents (USD). + """ + monthlyEstimatedSponsorsIncomeInCents: Int! + + """ + The organization's public profile name. + """ + name: String + + """ + The HTTP path creating a new team + """ + newTeamResourcePath: URI! + + """ + The HTTP URL creating a new team + """ + newTeamUrl: URI! + + """ + Indicates if email notification delivery for this organization is restricted to verified or approved domains. + """ + notificationDeliveryRestrictionEnabledSetting: NotificationRestrictionSettingValue! + + """ + The billing email for the organization. + """ + organizationBillingEmail: String + + """ + A list of packages under the owner. + """ + packages( + """ + 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 + + """ + Find packages by their names. + """ + names: [String] + + """ + Ordering of the returned packages. + """ + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter registry package by type. + """ + packageType: PackageType + + """ + Find packages in a repository by ID. + """ + repositoryId: ID + ): PackageConnection! + + """ + A list of users who have been invited to join this organization. + """ + pendingMembers( + """ + 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 + ): UserConnection! + + """ + A list of repositories and gists this profile owner can pin to their profile. + """ + pinnableItems( + """ + 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 + + """ + Filter the types of pinnable items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + A list of repositories and gists this profile owner has pinned to their profile + """ + pinnedItems( + """ + 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 + + """ + Filter the types of pinned items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + Returns how many more items this profile owner can pin to their profile. + """ + pinnedItemsRemaining: Int! + + """ + Find project by number. + """ + project( + """ + The project number to find. + """ + number: Int! + ): Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Find a project by number. + """ + projectV2( + """ + The project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projects( + """ + 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 + + """ + Ordering options for projects returned from the connection + """ + orderBy: ProjectOrder + + """ + Query to search projects by, currently only searching by name. + """ + search: String + + """ + A list of states to filter the projects by. + """ + states: [ProjectState!] + ): ProjectConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path listing organization's projects + """ + projectsResourcePath: URI! + + """ + The HTTP URL listing organization's projects + """ + projectsUrl: URI! + + """ + A list of projects under the owner. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for under the owner. + """ + query: String + ): ProjectV2Connection! + + """ + Recent projects that this user has modified in the context of the owner. + """ + recentProjects( + """ + 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 + ): ProjectV2Connection! + + """ + A list of repositories that the user owns. + """ + repositories( + """ + Array of viewer's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + current viewer owns. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they are archived and not maintained + """ + isArchived: Boolean + + """ + If non-null, filters repositories according to whether they are forks of another repository + """ + isFork: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + Find Repository. + """ + repository( + """ + Follow repository renames. If disabled, a repository referenced by its old name will return an error. + """ + followRenames: Boolean = true + + """ + Name of Repository to find. + """ + name: String! + ): Repository + + """ + A list of custom properties for this organization. + """ + repositoryCustomProperties( + """ + 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 + ): RepositoryCustomPropertyConnection + + """ + Returns a single custom property from the current organization by name. + """ + repositoryCustomProperty( + """ + The name of the custom property to be returned. + """ + propertyName: String! + ): RepositoryCustomProperty + + """ + Discussion comments this user has authored. + """ + repositoryDiscussionComments( + """ + 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 + + """ + Filter discussion comments to only those that were marked as the answer + """ + onlyAnswers: Boolean = false + + """ + Filter discussion comments to only those in a specific repository. + """ + repositoryId: ID + ): DiscussionCommentConnection! + + """ + Discussions this user has started. + """ + repositoryDiscussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Filter discussions to only those that have been answered or not. Defaults to + including both answered and unanswered discussions. + """ + answered: Boolean = null + + """ + 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 + + """ + Ordering options for discussions returned from the connection. + """ + orderBy: DiscussionOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter discussions to only those in a specific repository. + """ + repositoryId: ID + + """ + A list of states to filter the discussions by. + """ + states: [DiscussionState!] = [] + ): DiscussionConnection! + + """ + A list of all repository migrations for this organization. + """ + repositoryMigrations( + """ + 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 + + """ + Ordering options for repository migrations returned. + """ + orderBy: RepositoryMigrationOrder = {field: CREATED_AT, direction: ASC} + + """ + Filter repository migrations by repository name. + """ + repositoryName: String + + """ + Filter repository migrations by state. + """ + state: MigrationState + ): RepositoryMigrationConnection! + + """ + When true the organization requires all members, billing managers, and outside + collaborators to enable two-factor authentication. + """ + requiresTwoFactorAuthentication: Boolean + + """ + The HTTP path for this organization. + """ + resourcePath: URI! + + """ + Returns a single ruleset from the current organization by ID. + """ + ruleset( + """ + The ID of the ruleset to be returned. + """ + databaseId: Int! + + """ + Include rulesets configured at higher levels that apply to this organization. + """ + includeParents: Boolean = true + ): RepositoryRuleset + + """ + A list of rulesets for this organization. + """ + rulesets( + """ + 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 + + """ + Return rulesets configured at higher levels that apply to this organization + """ + includeParents: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Return rulesets that apply to the specified target + """ + targets: [RepositoryRulesetTarget!] = null + ): RepositoryRulesetConnection + + """ + The Organization's SAML identity provider. Visible to (1) organization owners, + (2) organization owners' personal access tokens (classic) with read:org or + admin:org scope, (3) GitHub App with an installation token with read or write + access to members. + """ + samlIdentityProvider: OrganizationIdentityProvider + + """ + List of users and organizations this entity is sponsoring. + """ + sponsoring( + """ + 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 + + """ + Ordering options for the users and organizations returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + ): SponsorConnection! + + """ + List of sponsors for this user or organization. + """ + sponsors( + """ + 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 + + """ + Ordering options for sponsors returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + + """ + If given, will filter for sponsors at the given tier. Will only return + sponsors whose tier the viewer is permitted to see. + """ + tierId: ID + ): SponsorConnection! + + """ + Events involving this sponsorable, such as new sponsorships. + """ + sponsorsActivities( + """ + Filter activities to only the specified actions. + """ + actions: [SponsorsActivityAction!] = [] + + """ + 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 + + """ + Whether to include those events where this sponsorable acted as the sponsor. + Defaults to only including events where this sponsorable was the recipient + of a sponsorship. + """ + includeAsSponsor: Boolean = false + + """ + Whether or not to include private activities in the result set. Defaults to including public and private activities. + """ + includePrivate: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for activity returned from the connection. + """ + orderBy: SponsorsActivityOrder = {field: TIMESTAMP, direction: DESC} + + """ + Filter activities returned to only those that occurred in the most recent + specified time period. Set to ALL to avoid filtering by when the activity + occurred. Will be ignored if `since` or `until` is given. + """ + period: SponsorsActivityPeriod = MONTH + + """ + Filter activities to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter activities to those that occurred before this time. + """ + until: DateTime + ): SponsorsActivityConnection! + + """ + The GitHub Sponsors listing for this user or organization. + """ + sponsorsListing: SponsorsListing + + """ + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. + """ + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. + """ + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + List of sponsorship updates sent from this sponsorable to sponsors. + """ + sponsorshipNewsletters( + """ + 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 + + """ + Ordering options for sponsorship updates returned from the connection. + """ + orderBy: SponsorshipNewsletterOrder = {field: CREATED_AT, direction: DESC} + ): SponsorshipNewsletterConnection! + + """ + The sponsorships where this user or organization is the maintainer receiving the funds. + """ + sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Whether or not to include private sponsorships in the result set + """ + includePrivate: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + The sponsorships where this user or organization is the funder. + """ + sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Filter sponsorships returned to those for the specified maintainers. That + is, the recipient of the sponsorship is a user or organization with one of + the given logins. + """ + maintainerLogins: [String!] + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + Find an organization's team by its slug. + """ + team( + """ + The name or slug of the team to find. + """ + slug: String! + ): Team + + """ + A list of teams in this organization. + """ + teams( + """ + 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 + + """ + If true, filters teams that are mapped to an LDAP Group (Enterprise only) + """ + ldapMapped: Boolean + + """ + If non-null, filters teams according to notification setting + """ + notificationSetting: TeamNotificationSetting + + """ + Ordering options for teams returned from the connection + """ + orderBy: TeamOrder + + """ + If non-null, filters teams according to privacy + """ + privacy: TeamPrivacy + + """ + If non-null, filters teams with query on team name and team slug + """ + query: String + + """ + If non-null, filters teams according to whether the viewer is an admin or member on team + """ + role: TeamRole + + """ + If true, restrict to only root teams + """ + rootTeamsOnly: Boolean = false + + """ + User logins to filter by + """ + userLogins: [String!] + ): TeamConnection! + + """ + The HTTP path listing organization's teams + """ + teamsResourcePath: URI! + + """ + The HTTP URL listing organization's teams + """ + teamsUrl: URI! + + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + + """ + The organization's Twitter username. + """ + twitterUsername: String + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this organization. + """ + url: URI! + + """ + Organization is adminable by the viewer. + """ + viewerCanAdminister: Boolean! + + """ + Can the viewer pin repositories and gists to the profile? + """ + viewerCanChangePinnedItems: Boolean! + + """ + Can the current viewer create new projects on this owner. + """ + viewerCanCreateProjects: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Viewer can create repositories on this organization + """ + viewerCanCreateRepositories: Boolean! + + """ + Viewer can create teams on this organization. + """ + viewerCanCreateTeams: Boolean! + + """ + Whether or not the viewer is able to sponsor this user/organization. + """ + viewerCanSponsor: Boolean! + + """ + Viewer is an active member of this organization. + """ + viewerIsAMember: Boolean! + + """ + Whether or not this Organization is followed by the viewer. + """ + viewerIsFollowing: Boolean! + + """ + True if the viewer is sponsoring this user/organization. + """ + viewerIsSponsoring: Boolean! + + """ + Whether contributors are required to sign off on web-based commits for repositories in this organization. + """ + webCommitSignoffRequired: Boolean! + + """ + The organization's public profile URL. + """ + websiteUrl: URI +} + +""" +An audit entry in an organization audit log. +""" +union OrganizationAuditEntry @docsCategory(name: "orgs") = + | MembersCanDeleteReposClearAuditEntry + | MembersCanDeleteReposDisableAuditEntry + | MembersCanDeleteReposEnableAuditEntry + | OauthApplicationCreateAuditEntry + | OrgAddBillingManagerAuditEntry + | OrgAddMemberAuditEntry + | OrgBlockUserAuditEntry + | OrgConfigDisableCollaboratorsOnlyAuditEntry + | OrgConfigEnableCollaboratorsOnlyAuditEntry + | OrgCreateAuditEntry + | OrgDisableOauthAppRestrictionsAuditEntry + | OrgDisableSamlAuditEntry + | OrgDisableTwoFactorRequirementAuditEntry + | OrgEnableOauthAppRestrictionsAuditEntry + | OrgEnableSamlAuditEntry + | OrgEnableTwoFactorRequirementAuditEntry + | OrgInviteMemberAuditEntry + | OrgInviteToBusinessAuditEntry + | OrgOauthAppAccessApprovedAuditEntry + | OrgOauthAppAccessBlockedAuditEntry + | OrgOauthAppAccessDeniedAuditEntry + | OrgOauthAppAccessRequestedAuditEntry + | OrgOauthAppAccessUnblockedAuditEntry + | OrgRemoveBillingManagerAuditEntry + | OrgRemoveMemberAuditEntry + | OrgRemoveOutsideCollaboratorAuditEntry + | OrgRestoreMemberAuditEntry + | OrgUnblockUserAuditEntry + | OrgUpdateDefaultRepositoryPermissionAuditEntry + | OrgUpdateMemberAuditEntry + | OrgUpdateMemberRepositoryCreationPermissionAuditEntry + | OrgUpdateMemberRepositoryInvitationPermissionAuditEntry + | PrivateRepositoryForkingDisableAuditEntry + | PrivateRepositoryForkingEnableAuditEntry + | RepoAccessAuditEntry + | RepoAddMemberAuditEntry + | RepoAddTopicAuditEntry + | RepoArchivedAuditEntry + | RepoChangeMergeSettingAuditEntry + | RepoConfigDisableAnonymousGitAccessAuditEntry + | RepoConfigDisableCollaboratorsOnlyAuditEntry + | RepoConfigDisableContributorsOnlyAuditEntry + | RepoConfigDisableSockpuppetDisallowedAuditEntry + | RepoConfigEnableAnonymousGitAccessAuditEntry + | RepoConfigEnableCollaboratorsOnlyAuditEntry + | RepoConfigEnableContributorsOnlyAuditEntry + | RepoConfigEnableSockpuppetDisallowedAuditEntry + | RepoConfigLockAnonymousGitAccessAuditEntry + | RepoConfigUnlockAnonymousGitAccessAuditEntry + | RepoCreateAuditEntry + | RepoDestroyAuditEntry + | RepoRemoveMemberAuditEntry + | RepoRemoveTopicAuditEntry + | RepositoryVisibilityChangeDisableAuditEntry + | RepositoryVisibilityChangeEnableAuditEntry + | TeamAddMemberAuditEntry + | TeamAddRepositoryAuditEntry + | TeamChangeParentTeamAuditEntry + | TeamRemoveMemberAuditEntry + | TeamRemoveRepositoryAuditEntry + +""" +The connection type for OrganizationAuditEntry. +""" +type OrganizationAuditEntryConnection { + """ + A list of edges. + """ + edges: [OrganizationAuditEntryEdge] + + """ + A list of nodes. + """ + nodes: [OrganizationAuditEntry] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Metadata for an audit entry with action org.* +""" +interface OrganizationAuditEntryData @docsCategory(name: "orgs") { + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +An edge in a connection. +""" +type OrganizationAuditEntryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: OrganizationAuditEntry +} + +""" +A list of organizations managed by an enterprise. +""" +type OrganizationConnection { + """ + A list of edges. + """ + edges: [OrganizationEdge] + + """ + A list of nodes. + """ + nodes: [Organization] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type OrganizationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Organization +} + +""" +The connection type for User. +""" +type OrganizationEnterpriseOwnerConnection { + """ + A list of edges. + """ + edges: [OrganizationEnterpriseOwnerEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An enterprise owner in the context of an organization that is part of the enterprise. +""" +type OrganizationEnterpriseOwnerEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: User + + """ + The role of the owner with respect to the organization. + """ + organizationRole: RoleInOrganization! +} + +""" +An Identity Provider configured to provision SAML and SCIM identities for +Organizations. Visible to (1) organization owners, (2) organization owners' +personal access tokens (classic) with read:org or admin:org scope, (3) GitHub +App with an installation token with read or write access to members. +""" +type OrganizationIdentityProvider implements Node @docsCategory(name: "orgs") { + """ + The digest algorithm used to sign SAML requests for the Identity Provider. + """ + digestMethod: URI + + """ + External Identities provisioned by this Identity Provider + """ + externalIdentities( + """ + 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 + + """ + Filter to external identities with the users login + """ + login: String + + """ + Filter to external identities with valid org membership only + """ + membersOnly: Boolean + + """ + Filter to external identities with the users userName/NameID attribute + """ + userName: String + ): ExternalIdentityConnection! + + """ + The Node ID of the OrganizationIdentityProvider object + """ + id: ID! + + """ + The x509 certificate used by the Identity Provider to sign assertions and responses. + """ + idpCertificate: X509Certificate + + """ + The Issuer Entity ID for the SAML Identity Provider + """ + issuer: String + + """ + Organization this Identity Provider belongs to + """ + organization: Organization + + """ + The signature algorithm used to sign SAML requests for the Identity Provider. + """ + signatureMethod: URI + + """ + The URL endpoint for the Identity Provider's SAML SSO. + """ + ssoUrl: URI +} + +""" +An Invitation for a user to an organization. +""" +type OrganizationInvitation implements Node @docsCategory(name: "orgs") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The email address of the user invited to the organization. + """ + email: String + + """ + The Node ID of the OrganizationInvitation object + """ + id: ID! + + """ + The source of the invitation. + """ + invitationSource: OrganizationInvitationSource! + + """ + The type of invitation that was sent (e.g. email, user). + """ + invitationType: OrganizationInvitationType! + + """ + The user who was invited to the organization. + """ + invitee: User + + """ + The user who created the invitation. + """ + inviter: User! + @deprecated( + reason: "`inviter` will be removed. `inviter` will be replaced by `inviterActor`. Removal on 2024-07-01 UTC." + ) + + """ + The user who created the invitation. + """ + inviterActor: User + + """ + The organization the invite is for + """ + organization: Organization! + + """ + The user's pending role in the organization (e.g. member, owner). + """ + role: OrganizationInvitationRole! +} + +""" +The connection type for OrganizationInvitation. +""" +type OrganizationInvitationConnection { + """ + A list of edges. + """ + edges: [OrganizationInvitationEdge] + + """ + A list of nodes. + """ + nodes: [OrganizationInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type OrganizationInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: OrganizationInvitation +} + +""" +The possible organization invitation roles. +""" +enum OrganizationInvitationRole @docsCategory(name: "orgs") { + """ + The user is invited to be an admin of the organization. + """ + ADMIN + + """ + The user is invited to be a billing manager of the organization. + """ + BILLING_MANAGER + + """ + The user is invited to be a direct member of the organization. + """ + DIRECT_MEMBER + + """ + The user's previous role will be reinstated. + """ + REINSTATE +} + +""" +The possible organization invitation sources. +""" +enum OrganizationInvitationSource @docsCategory(name: "orgs") { + """ + The invitation was created from the web interface or from API + """ + MEMBER + + """ + The invitation was created from SCIM + """ + SCIM + + """ + The invitation was sent before this feature was added + """ + UNKNOWN +} + +""" +The possible organization invitation types. +""" +enum OrganizationInvitationType @docsCategory(name: "orgs") { + """ + The invitation was to an email address. + """ + EMAIL + + """ + The invitation was to an existing user. + """ + USER +} + +""" +A list of users who belong to the organization. +""" +type OrganizationMemberConnection { + """ + A list of edges. + """ + edges: [OrganizationMemberEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user within an organization. +""" +type OrganizationMemberEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + Whether the organization member has two factor enabled or not. Returns null if information is not available to viewer. + """ + hasTwoFactorEnabled: Boolean + + """ + The item at the end of the edge. + """ + node: User + + """ + The role this user has in the organization. + """ + role: OrganizationMemberRole +} + +""" +The possible roles within an organization for its members. +""" +enum OrganizationMemberRole @docsCategory(name: "orgs") { + """ + The user is an administrator of the organization. + """ + ADMIN + + """ + The user is a member of the organization. + """ + MEMBER +} + +""" +The possible values for the members can create repositories setting on an organization. +""" +enum OrganizationMembersCanCreateRepositoriesSettingValue @docsCategory(name: "orgs") { + """ + Members will be able to create public and private repositories. + """ + ALL + + """ + Members will not be able to create public or private repositories. + """ + DISABLED + + """ + Members will be able to create only internal repositories. + """ + INTERNAL + + """ + Members will be able to create only private repositories. + """ + PRIVATE +} + +""" +A GitHub Enterprise Importer (GEI) organization migration. +""" +type OrganizationMigration implements Node @docsCategory(name: "migrations") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the organization migration failed. + """ + failureReason: String + + """ + The Node ID of the OrganizationMigration object + """ + id: ID! + + """ + The remaining amount of repos to be migrated. + """ + remainingRepositoriesCount: Int + + """ + The name of the source organization to be migrated. + """ + sourceOrgName: String! + + """ + The URL of the source organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The migration state. + """ + state: OrganizationMigrationState! + + """ + The name of the target organization. + """ + targetOrgName: String! + + """ + The total amount of repositories to be migrated. + """ + totalRepositoriesCount: Int +} + +""" +The Octoshift Organization migration state. +""" +enum OrganizationMigrationState @docsCategory(name: "migrations") { + """ + The Octoshift migration has failed. + """ + FAILED + + """ + The Octoshift migration has invalid credentials. + """ + FAILED_VALIDATION + + """ + The Octoshift migration is in progress. + """ + IN_PROGRESS + + """ + The Octoshift migration has not started. + """ + NOT_STARTED + + """ + The Octoshift migration needs to have its credentials validated. + """ + PENDING_VALIDATION + + """ + The Octoshift migration is performing post repository migrations. + """ + POST_REPO_MIGRATION + + """ + The Octoshift migration is performing pre repository migrations. + """ + PRE_REPO_MIGRATION + + """ + The Octoshift migration has been queued. + """ + QUEUED + + """ + The Octoshift org migration is performing repository migrations. + """ + REPO_MIGRATION + + """ + The Octoshift migration has succeeded. + """ + SUCCEEDED +} + +""" +Used for argument of CreateProjectV2 mutation. +""" +union OrganizationOrUser @docsCategory(name: "projects") = Organization | User + +""" +Ordering options for organization connections. +""" +input OrganizationOrder @docsCategory(name: "orgs") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order organizations by. + """ + field: OrganizationOrderField! +} + +""" +Properties by which organization connections can be ordered. +""" +enum OrganizationOrderField @docsCategory(name: "orgs") { + """ + Order organizations by creation time + """ + CREATED_AT + + """ + Order organizations by login + """ + LOGIN +} + +""" +Parameters to be used for the organization_property condition +""" +type OrganizationPropertyConditionTarget @docsCategory(name: "orgs") { + """ + Array of organization properties that must not match. + """ + exclude: [OrganizationPropertyTargetDefinition!]! + + """ + Array of organization properties that must match + """ + include: [OrganizationPropertyTargetDefinition!]! +} + +""" +Parameters to be used for the organization_property condition +""" +input OrganizationPropertyConditionTargetInput @docsCategory(name: "orgs") { + """ + Array of organization properties that must not match. + """ + exclude: [OrganizationPropertyTargetDefinitionInput!]! + + """ + Array of organization properties that must match + """ + include: [OrganizationPropertyTargetDefinitionInput!]! +} + +""" +A property that must match +""" +type OrganizationPropertyTargetDefinition @docsCategory(name: "orgs") { + """ + The name of the property + """ + name: String! + + """ + The values to match for + """ + propertyValues: [String!]! +} + +""" +A property that must match +""" +input OrganizationPropertyTargetDefinitionInput @docsCategory(name: "orgs") { + """ + The name of the property + """ + name: String! + + """ + The values to match for + """ + propertyValues: [String!]! +} + +""" +An organization teams hovercard context +""" +type OrganizationTeamsHovercardContext implements HovercardContext @docsCategory(name: "teams") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! + + """ + Teams in this organization the user is a member of that are relevant + """ + relevantTeams( + """ + 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 + ): TeamConnection! + + """ + The path for the full team list for this user + """ + teamsResourcePath: URI! + + """ + The URL for the full team list for this user + """ + teamsUrl: URI! + + """ + The total number of teams the user is on in the organization + """ + totalTeamCount: Int! +} + +""" +An organization list hovercard context +""" +type OrganizationsHovercardContext implements HovercardContext @docsCategory(name: "orgs") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! + + """ + Organizations this user is a member of that are relevant + """ + relevantOrganizations( + """ + 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 + + """ + Ordering options for the User's organizations. + """ + orderBy: OrganizationOrder = null + ): OrganizationConnection! + + """ + The total number of organizations this user is in + """ + totalOrganizationCount: Int! +} + +""" +Information for an uploaded package. +""" +type Package implements Node @docsCategory(name: "packages") { + """ + The Node ID of the Package object + """ + id: ID! + + """ + Find the latest version for the package. + """ + latestVersion: PackageVersion + + """ + Identifies the name of the package. + """ + name: String! + + """ + Identifies the type of the package. + """ + packageType: PackageType! + + """ + The repository this package belongs to. + """ + repository: Repository + + """ + Statistics about package activity. + """ + statistics: PackageStatistics + + """ + Find package version by version string. + """ + version( + """ + The package version. + """ + version: String! + ): PackageVersion + + """ + list of versions for this package + """ + versions( + """ + 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 + + """ + Ordering of the returned packages. + """ + orderBy: PackageVersionOrder = {field: CREATED_AT, direction: DESC} + ): PackageVersionConnection! +} + +""" +The connection type for Package. +""" +type PackageConnection { + """ + A list of edges. + """ + edges: [PackageEdge] + + """ + A list of nodes. + """ + nodes: [Package] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PackageEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Package +} + +""" +A file in a package version. +""" +type PackageFile implements Node @docsCategory(name: "packages") { + """ + The Node ID of the PackageFile object + """ + id: ID! + + """ + MD5 hash of the file. + """ + md5: String + + """ + Name of the file. + """ + name: String! + + """ + The package version this file belongs to. + """ + packageVersion: PackageVersion + + """ + SHA1 hash of the file. + """ + sha1: String + + """ + SHA256 hash of the file. + """ + sha256: String + + """ + Size of the file in bytes. + """ + size: Int + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + URL to download the asset. + """ + url: URI +} + +""" +The connection type for PackageFile. +""" +type PackageFileConnection { + """ + A list of edges. + """ + edges: [PackageFileEdge] + + """ + A list of nodes. + """ + nodes: [PackageFile] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PackageFileEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PackageFile +} + +""" +Ways in which lists of package files can be ordered upon return. +""" +input PackageFileOrder @docsCategory(name: "packages") { + """ + The direction in which to order package files by the specified field. + """ + direction: OrderDirection + + """ + The field in which to order package files by. + """ + field: PackageFileOrderField +} + +""" +Properties by which package file connections can be ordered. +""" +enum PackageFileOrderField @docsCategory(name: "packages") { + """ + Order package files by creation time + """ + CREATED_AT +} + +""" +Ways in which lists of packages can be ordered upon return. +""" +input PackageOrder @docsCategory(name: "packages") { + """ + The direction in which to order packages by the specified field. + """ + direction: OrderDirection + + """ + The field in which to order packages by. + """ + field: PackageOrderField +} + +""" +Properties by which package connections can be ordered. +""" +enum PackageOrderField @docsCategory(name: "packages") { + """ + Order packages by creation time + """ + CREATED_AT +} + +""" +Represents an owner of a package. +""" +interface PackageOwner @docsCategory(name: "packages") { + """ + The Node ID of the PackageOwner object + """ + id: ID! + + """ + A list of packages under the owner. + """ + packages( + """ + 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 + + """ + Find packages by their names. + """ + names: [String] + + """ + Ordering of the returned packages. + """ + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter registry package by type. + """ + packageType: PackageType + + """ + Find packages in a repository by ID. + """ + repositoryId: ID + ): PackageConnection! +} + +""" +Represents a object that contains package activity statistics such as downloads. +""" +type PackageStatistics @docsCategory(name: "packages") { + """ + Number of times the package was downloaded since it was created. + """ + downloadsTotalCount: Int! +} + +""" +A version tag contains the mapping between a tag name and a version. +""" +type PackageTag implements Node @docsCategory(name: "packages") { + """ + The Node ID of the PackageTag object + """ + id: ID! + + """ + Identifies the tag name of the version. + """ + name: String! + + """ + Version that the tag is associated with. + """ + version: PackageVersion +} + +""" +The possible types of a package. +""" +enum PackageType @docsCategory(name: "packages") { + """ + A debian package. + """ + DEBIAN + + """ + A docker image. + """ + DOCKER + @deprecated( + reason: "DOCKER will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2021-06-21 UTC." + ) + + """ + A maven package. + """ + MAVEN + @deprecated( + reason: "MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2023-02-10 UTC." + ) + + """ + An npm package. + """ + NPM + @deprecated( + reason: "NPM will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2022-11-21 UTC." + ) + + """ + A nuget package. + """ + NUGET + @deprecated( + reason: "NUGET will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2022-11-21 UTC." + ) + + """ + A python package. + """ + PYPI + + """ + A rubygems package. + """ + RUBYGEMS + @deprecated( + reason: "RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2022-12-28 UTC." + ) +} + +""" +Information about a specific package version. +""" +type PackageVersion implements Node @docsCategory(name: "packages") { + """ + List of files associated with this package version + """ + files( + """ + 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 + + """ + Ordering of the returned package files. + """ + orderBy: PackageFileOrder = {field: CREATED_AT, direction: ASC} + ): PackageFileConnection! + + """ + The Node ID of the PackageVersion object + """ + id: ID! + + """ + The package associated with this version. + """ + package: Package + + """ + The platform this version was built for. + """ + platform: String + + """ + Whether or not this version is a pre-release. + """ + preRelease: Boolean! + + """ + The README of this package version. + """ + readme: String + + """ + The release associated with this package version. + """ + release: Release + + """ + Statistics about package activity. + """ + statistics: PackageVersionStatistics + + """ + The package version summary. + """ + summary: String + + """ + The version string. + """ + version: String! +} + +""" +The connection type for PackageVersion. +""" +type PackageVersionConnection { + """ + A list of edges. + """ + edges: [PackageVersionEdge] + + """ + A list of nodes. + """ + nodes: [PackageVersion] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PackageVersionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PackageVersion +} + +""" +Ways in which lists of package versions can be ordered upon return. +""" +input PackageVersionOrder @docsCategory(name: "packages") { + """ + The direction in which to order package versions by the specified field. + """ + direction: OrderDirection + + """ + The field in which to order package versions by. + """ + field: PackageVersionOrderField +} + +""" +Properties by which package version connections can be ordered. +""" +enum PackageVersionOrderField @docsCategory(name: "packages") { + """ + Order package versions by creation time + """ + CREATED_AT +} + +""" +Represents a object that contains package version activity statistics such as downloads. +""" +type PackageVersionStatistics @docsCategory(name: "packages") { + """ + Number of times the package was downloaded since it was created. + """ + downloadsTotalCount: Int! +} + +""" +Information about pagination in a connection. +""" +type PageInfo { + """ + When paginating forwards, the cursor to continue. + """ + endCursor: String + + """ + When paginating forwards, are there more items? + """ + hasNextPage: Boolean! + + """ + When paginating backwards, are there more items? + """ + hasPreviousPage: Boolean! + + """ + When paginating backwards, the cursor to continue. + """ + startCursor: String +} + +""" +Represents a 'parent_issue_added' event on a given issue. +""" +type ParentIssueAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ParentIssueAddedEvent object + """ + id: ID! + + """ + The parent issue added. + """ + parent: Issue +} + +""" +Represents a 'parent_issue_removed' event on a given issue. +""" +type ParentIssueRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ParentIssueRemovedEvent object + """ + id: ID! + + """ + The parent issue removed. + """ + parent: Issue +} + +""" +The possible types of patch statuses. +""" +enum PatchStatus @docsCategory(name: "pulls") { + """ + The file was added. Git status 'A'. + """ + ADDED + + """ + The file's type was changed. Git status 'T'. + """ + CHANGED + + """ + The file was copied. Git status 'C'. + """ + COPIED + + """ + The file was deleted. Git status 'D'. + """ + DELETED + + """ + The file's contents were changed. Git status 'M'. + """ + MODIFIED + + """ + The file was renamed. Git status 'R'. + """ + RENAMED +} + +""" +Types that can grant permissions on a repository to a user +""" +union PermissionGranter @docsCategory(name: "orgs") = EnterpriseTeam | Organization | Repository | Team + +""" +A level of permission and source for a user's access to a repository. +""" +type PermissionSource @docsCategory(name: "repos") { + """ + The organization the repository belongs to. + """ + organization: Organization! + + """ + The level of access this source has granted to the user. + """ + permission: DefaultRepositoryPermissionField! + + """ + The name of the role this source has granted to the user. + """ + roleName: String + + """ + The source of this permission. + """ + source: PermissionGranter! +} + +""" +Autogenerated input type of PinEnvironment +""" +input PinEnvironmentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the environment to modify + """ + environmentId: ID! @possibleTypes(concreteTypes: ["Environment"]) + + """ + The desired state of the environment. If true, environment will be pinned. If false, it will be unpinned. + """ + pinned: Boolean! +} + +""" +Autogenerated return type of PinEnvironment. +""" +type PinEnvironmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The environment that was pinned + """ + environment: Environment + + """ + The pinned environment if we pinned + """ + pinnedEnvironment: PinnedEnvironment +} + +""" +Autogenerated input type of PinIssueComment +""" +input PinIssueCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Issue Comment to pin. Comment pinning is not supported on Pull Requests. + """ + issueCommentId: ID! @possibleTypes(concreteTypes: ["IssueComment"]) +} + +""" +Autogenerated return type of PinIssueComment. +""" +type PinIssueCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Issue Comment that was pinned + """ + issueComment: IssueComment +} + +""" +Autogenerated input type of PinIssue +""" +input PinIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue to be pinned + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of PinIssue. +""" +type PinIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that was pinned + """ + issue: Issue +} + +""" +Entities that can be pinned. +""" +interface Pinnable @docsCategory(name: "users") { + """ + Indicates whether or not this entity is currently pinned. + """ + isPinned: Boolean + + """ + Identifies the date and time when this entity was pinned. + """ + pinnedAt: DateTime + + """ + The user who pinned this entity. + """ + pinnedBy: User + + """ + Check if the current viewer can pin this entity. + """ + viewerCanPin: Boolean! + + """ + Check if the current viewer can unpin this entity. + """ + viewerCanUnpin: Boolean! +} + +""" +Types that can be pinned to a profile page. +""" +union PinnableItem @docsCategory(name: "users") = Gist | Repository + +""" +The connection type for PinnableItem. +""" +type PinnableItemConnection { + """ + A list of edges. + """ + edges: [PinnableItemEdge] + + """ + A list of nodes. + """ + nodes: [PinnableItem] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PinnableItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PinnableItem +} + +""" +Represents items that can be pinned to a profile page or dashboard. +""" +enum PinnableItemType @docsCategory(name: "users") { + """ + A gist. + """ + GIST + + """ + An issue. + """ + ISSUE + + """ + An organization. + """ + ORGANIZATION + + """ + A project. + """ + PROJECT + + """ + A pull request. + """ + PULL_REQUEST + + """ + A repository. + """ + REPOSITORY + + """ + A team. + """ + TEAM + + """ + A user. + """ + USER +} + +""" +A Pinned Discussion is a discussion pinned to a repository's index page. +""" +type PinnedDiscussion implements Node & RepositoryNode @docsCategory(name: "discussions") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The discussion that was pinned. + """ + discussion: Discussion! + + """ + Color stops of the chosen gradient + """ + gradientStopColors: [String!]! + + """ + The Node ID of the PinnedDiscussion object + """ + id: ID! + + """ + Background texture pattern + """ + pattern: PinnedDiscussionPattern! + + """ + The actor that pinned this discussion. + """ + pinnedBy: Actor! + + """ + Preconfigured background gradient option + """ + preconfiguredGradient: PinnedDiscussionGradient + + """ + The repository associated with this node. + """ + repository: Repository! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for PinnedDiscussion. +""" +type PinnedDiscussionConnection { + """ + A list of edges. + """ + edges: [PinnedDiscussionEdge] + + """ + A list of nodes. + """ + nodes: [PinnedDiscussion] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PinnedDiscussionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PinnedDiscussion +} + +""" +Preconfigured gradients that may be used to style discussions pinned within a repository. +""" +enum PinnedDiscussionGradient @docsCategory(name: "discussions") { + """ + A gradient of blue to mint + """ + BLUE_MINT + + """ + A gradient of blue to purple + """ + BLUE_PURPLE + + """ + A gradient of pink to blue + """ + PINK_BLUE + + """ + A gradient of purple to coral + """ + PURPLE_CORAL + + """ + A gradient of red to orange + """ + RED_ORANGE +} + +""" +Preconfigured background patterns that may be used to style discussions pinned within a repository. +""" +enum PinnedDiscussionPattern @docsCategory(name: "discussions") { + """ + An upward-facing chevron pattern + """ + CHEVRON_UP + + """ + A hollow dot pattern + """ + DOT + + """ + A solid dot pattern + """ + DOT_FILL + + """ + A heart pattern + """ + HEART_FILL + + """ + A plus sign pattern + """ + PLUS + + """ + A lightning bolt pattern + """ + ZAP +} + +""" +Represents a pinned environment on a given repository +""" +type PinnedEnvironment implements Node @docsCategory(name: "deployments") { + """ + Identifies the date and time when the pinned environment was created + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Identifies the environment associated. + """ + environment: Environment! + + """ + The Node ID of the PinnedEnvironment object + """ + id: ID! + + """ + Identifies the position of the pinned environment. + """ + position: Int! + + """ + The repository that this environment was pinned to. + """ + repository: Repository! +} + +""" +The connection type for PinnedEnvironment. +""" +type PinnedEnvironmentConnection { + """ + A list of edges. + """ + edges: [PinnedEnvironmentEdge] + + """ + A list of nodes. + """ + nodes: [PinnedEnvironment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PinnedEnvironmentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PinnedEnvironment +} + +""" +Ordering options for pinned environments +""" +input PinnedEnvironmentOrder @docsCategory(name: "deployments") { + """ + The direction in which to order pinned environments by the specified field. + """ + direction: OrderDirection! + + """ + The field to order pinned environments by. + """ + field: PinnedEnvironmentOrderField! +} + +""" +Properties by which pinned environments connections can be ordered +""" +enum PinnedEnvironmentOrderField @docsCategory(name: "deployments") { + """ + Order pinned environments by position + """ + POSITION +} + +""" +Represents a 'pinned' event on a given issue or pull request. +""" +type PinnedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the PinnedEvent object + """ + id: ID! + + """ + Identifies the issue associated with the event. + """ + issue: Issue! +} + +""" +A Pinned Issue is a issue pinned to a repository's index page. +""" +type PinnedIssue implements Node @docsCategory(name: "issues") { + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the PinnedIssue object + """ + id: ID! + + """ + The issue that was pinned. + """ + issue: Issue! + + """ + The actor that pinned this issue. + """ + pinnedBy: Actor! + + """ + The repository that this issue was pinned to. + """ + repository: Repository! +} + +""" +A comment pinned to an Issue. +""" +type PinnedIssueComment implements Node @docsCategory(name: "issues") { + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the PinnedIssueComment object + """ + id: ID! + + """ + The issue that this comment belongs to. + """ + issue: Issue! + + """ + The comment that was pinned. + """ + issueComment: IssueComment! + + """ + Identifies when the comment was pinned. + """ + pinnedAt: DateTime! + + """ + The actor that pinned this comment. + """ + pinnedBy: Actor! +} + +""" +The connection type for PinnedIssue. +""" +type PinnedIssueConnection { + """ + A list of edges. + """ + edges: [PinnedIssueEdge] + + """ + A list of nodes. + """ + nodes: [PinnedIssue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PinnedIssueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PinnedIssue +} + +""" +An ISO-8601 encoded UTC date string with millisecond precision. +""" +scalar PreciseDateTime + +""" +Audit log entry for a private_repository_forking.disable event. +""" +type PrivateRepositoryForkingDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the PrivateRepositoryForkingDisableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a private_repository_forking.enable event. +""" +type PrivateRepositoryForkingEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the PrivateRepositoryForkingEnableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +A curatable list of repositories relating to a repository owner, which defaults +to showing the most popular repositories they own. +""" +type ProfileItemShowcase @docsCategory(name: "users") { + """ + Whether or not the owner has pinned any repositories or gists. + """ + hasPinnedItems: Boolean! + + """ + The repositories and gists in the showcase. If the profile owner has any + pinned items, those will be returned. Otherwise, the profile owner's popular + repositories will be returned. + """ + items( + """ + 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 + ): PinnableItemConnection! +} + +""" +Represents any entity on GitHub that has a profile page. +""" +interface ProfileOwner @docsCategory(name: "users") { + """ + Determine if this repository owner has any items that can be pinned to their profile. + """ + anyPinnableItems( + """ + Filter to only a particular kind of pinnable item. + """ + type: PinnableItemType + ): Boolean! + + """ + The public profile email. + """ + email: String + + """ + The Node ID of the ProfileOwner object + """ + id: ID! + + """ + Showcases a selection of repositories and gists that the profile owner has + either curated or that have been selected automatically based on popularity. + """ + itemShowcase: ProfileItemShowcase! + + """ + The public profile location. + """ + location: String + + """ + The username used to login. + """ + login: String! + + """ + The public profile name. + """ + name: String + + """ + A list of repositories and gists this profile owner can pin to their profile. + """ + pinnableItems( + """ + 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 + + """ + Filter the types of pinnable items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + A list of repositories and gists this profile owner has pinned to their profile + """ + pinnedItems( + """ + 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 + + """ + Filter the types of pinned items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + Returns how many more items this profile owner can pin to their profile. + """ + pinnedItemsRemaining: Int! + + """ + Can the viewer pin repositories and gists to the profile? + """ + viewerCanChangePinnedItems: Boolean! + + """ + The public profile website URL. + """ + websiteUrl: URI +} + +""" +Projects manage issues, pull requests and notes within a project owner. +""" +type Project implements Closable & Node & Updatable @docsCategory(name: "projects-classic") { + """ + The project's description body. + """ + body: String + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The projects description body rendered to HTML. + """ + bodyHTML: HTML! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Indicates if the object is closed (definition of closed may depend on type) + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + List of columns in the project + """ + columns( + """ + 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 + ): ProjectColumnConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The actor who originally created the project. + """ + creator: Actor + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the Project object + """ + id: ID! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project's name. + """ + name: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project's number. + """ + number: Int! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project's owner. Currently limited to repositories, organizations, and users. + """ + owner: ProjectOwner! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + List of pending cards in this project + """ + pendingCards( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + A list of archived states to filter the cards by + """ + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + + """ + 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 + ): ProjectCardConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Project progress details. + """ + progress: ProjectProgress! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path for this project + """ + resourcePath: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Whether the project is open or closed. + """ + state: ProjectState! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP URL for this project + """ + url: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: Boolean! + + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! +} + +""" +A card in a project. +""" +type ProjectCard implements Node @docsCategory(name: "projects-classic") { + """ + The project column this card is associated under. A card may only belong to one + project column at a time. The column field will be null if the card is created + in a pending state and has yet to be associated with a column. Once cards are + associated with a column, they will not become pending in the future. + """ + column: ProjectColumn + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The card content item + """ + content: ProjectCardItem + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The actor who created this card + """ + creator: Actor + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the ProjectCard object + """ + id: ID! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Whether the card is archived + """ + isArchived: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The card note + """ + note: String + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project that contains this card. + """ + project: Project! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path for this card + """ + resourcePath: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The state of ProjectCard + """ + state: ProjectCardState + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP URL for this card + """ + url: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +The possible archived states of a project card. +""" +enum ProjectCardArchivedState @docsCategory(name: "projects-classic") { + """ + A project card that is archived + """ + ARCHIVED + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + A project card that is not archived + """ + NOT_ARCHIVED + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +The connection type for ProjectCard. +""" +type ProjectCardConnection { + """ + A list of edges. + """ + edges: [ProjectCardEdge] + + """ + A list of nodes. + """ + nodes: [ProjectCard] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectCardEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectCard +} + +""" +An issue or PR and its owning repository to be used in a project card. +""" +input ProjectCardImport @docsCategory(name: "projects-classic") { + """ + The issue or pull request number. + """ + number: Int! + + """ + Repository name with owner (owner/repository). + """ + repository: String! +} + +""" +Types that can be inside Project Cards. +""" +union ProjectCardItem @docsCategory(name: "projects-classic") = Issue | PullRequest + +""" +Various content states of a ProjectCard +""" +enum ProjectCardState @docsCategory(name: "projects-classic") { + """ + The card has content only. + """ + CONTENT_ONLY + + """ + The card has a note only. + """ + NOTE_ONLY + + """ + The card is redacted. + """ + REDACTED +} + +""" +A column inside a project. +""" +type ProjectColumn implements Node @docsCategory(name: "projects-classic") { + """ + List of cards in the column + """ + cards( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + A list of archived states to filter the cards by + """ + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + + """ + 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 + ): ProjectCardConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the ProjectColumn object + """ + id: ID! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project column's name. + """ + name: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The project that contains this column. + """ + project: Project! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The semantic purpose of the column + """ + purpose: ProjectColumnPurpose + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path for this project column + """ + resourcePath: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP URL for this project column + """ + url: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +The connection type for ProjectColumn. +""" +type ProjectColumnConnection { + """ + A list of edges. + """ + edges: [ProjectColumnEdge] + + """ + A list of nodes. + """ + nodes: [ProjectColumn] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectColumnEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectColumn +} + +""" +A project column and a list of its issues and PRs. +""" +input ProjectColumnImport @docsCategory(name: "projects-classic") { + """ + The name of the column. + """ + columnName: String! + + """ + A list of issues and pull requests in the column. + """ + issues: [ProjectCardImport!] + + """ + The position of the column, starting from 0. + """ + position: Int! +} + +""" +The semantic purpose of the column - todo, in progress, or done. +""" +enum ProjectColumnPurpose @docsCategory(name: "projects-classic") { + """ + The column contains cards which are complete + """ + DONE + + """ + The column contains cards which are currently being worked on + """ + IN_PROGRESS + + """ + The column contains cards still to be worked on + """ + TODO +} + +""" +A list of projects associated with the owner. +""" +type ProjectConnection { + """ + A list of edges. + """ + edges: [ProjectEdge] + + """ + A list of nodes. + """ + nodes: [Project] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Project +} + +""" +Ways in which lists of projects can be ordered upon return. +""" +input ProjectOrder @docsCategory(name: "projects-classic") { + """ + The direction in which to order projects by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order projects by. + """ + field: ProjectOrderField! +} + +""" +Properties by which project connections can be ordered. +""" +enum ProjectOrderField @docsCategory(name: "projects-classic") { + """ + Order projects by creation time + """ + CREATED_AT + + """ + Order projects by name + """ + NAME + + """ + Order projects by update time + """ + UPDATED_AT +} + +""" +Represents an owner of a Project. +""" +interface ProjectOwner @docsCategory(name: "projects-classic") { + """ + The Node ID of the ProjectOwner object + """ + id: ID! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Find project by number. + """ + project( + """ + The project number to find. + """ + number: Int! + ): Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + A list of projects under the owner. + """ + projects( + """ + 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 + + """ + Ordering options for projects returned from the connection + """ + orderBy: ProjectOrder + + """ + Query to search projects by, currently only searching by name. + """ + search: String + + """ + A list of states to filter the projects by. + """ + states: [ProjectState!] + ): ProjectConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path listing owners projects + """ + projectsResourcePath: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP URL listing owners projects + """ + projectsUrl: URI! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Can the current viewer create new projects on this owner. + """ + viewerCanCreateProjects: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +Project progress stats. +""" +type ProjectProgress @docsCategory(name: "projects-classic") { + """ + The number of done cards. + """ + doneCount: Int! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The percentage of done cards. + """ + donePercentage: Float! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Whether progress tracking is enabled and cards with purpose exist for this project + """ + enabled: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The number of in-progress cards. + """ + inProgressCount: Int! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The percentage of in-progress cards. + """ + inProgressPercentage: Float! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The number of to do cards. + """ + todoCount: Int! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The percentage of to do cards. + """ + todoPercentage: Float! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +State of the project; either 'open' or 'closed' +""" +enum ProjectState @docsCategory(name: "projects-classic") { + """ + The project is closed. + """ + CLOSED + + """ + The project is open. + """ + OPEN +} + +""" +GitHub-provided templates for Projects +""" +enum ProjectTemplate @docsCategory(name: "projects-classic") { + """ + Create a board with v2 triggers to automatically move cards across To do, In progress and Done columns. + """ + AUTOMATED_KANBAN_V2 + + """ + Create a board with triggers to automatically move cards across columns with review automation. + """ + AUTOMATED_REVIEWS_KANBAN + + """ + Create a board with columns for To do, In progress and Done. + """ + BASIC_KANBAN + + """ + Create a board to triage and prioritize bugs with To do, priority, and Done columns. + """ + BUG_TRIAGE +} + +""" +New projects that manage issues, pull requests and drafts using tables and boards. +""" +type ProjectV2 implements Closable & Node & Updatable @docsCategory(name: "projects") { + """ + Returns true if the project is closed. + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who originally created the project. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2025-04-01 UTC." + ) + + """ + A field of the project + """ + field( + """ + The name of the field + """ + name: String! + ): ProjectV2FieldConfiguration + + """ + List of fields and their constraints in the project + """ + fields( + """ + 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 + + """ + Ordering options for project v2 fields returned from the connection + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConfigurationConnection! + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the ProjectV2 object + """ + id: ID! + + """ + List of items in the project + """ + items( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Filter items by their archived state. Defaults to only returning items that are not archived. + """ + archivedStates: [ProjectV2ItemArchivedState!] = [NOT_ARCHIVED] + + """ + 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 + + """ + Ordering options for project v2 items returned from the connection + """ + orderBy: ProjectV2ItemOrder = {field: POSITION, direction: ASC} + + """ + Search query for filtering items + """ + query: String = "" + ): ProjectV2ItemConnection! + + """ + The project's number. + """ + number: Int! + + """ + The project's owner. Currently limited to organizations and users. + """ + owner: ProjectV2Owner! + + """ + Returns true if the project is public. + """ + public: Boolean! + + """ + The project's readme. + """ + readme: String + + """ + The repositories the project is linked to. + """ + repositories( + """ + 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 + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder = {field: CREATED_AT, direction: DESC} + ): RepositoryConnection! + + """ + The HTTP path for this project + """ + resourcePath: URI! + + """ + The project's short description. + """ + shortDescription: String + + """ + List of the status updates in the project. + """ + statusUpdates( + """ + 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 + + """ + Order for connection + """ + orderBy: ProjectV2StatusOrder = {field: CREATED_AT, direction: DESC} + ): ProjectV2StatusUpdateConnection! + + """ + The teams the project is linked to. + """ + teams( + """ + 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 + + """ + Ordering options for teams returned from this connection. + """ + orderBy: TeamOrder = {field: NAME, direction: ASC} + ): TeamConnection! + + """ + Returns true if this project is a template. + """ + template: Boolean! + + """ + The project's name. + """ + title: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this project + """ + url: URI! + + """ + A view of the project + """ + view( + """ + The number of a view belonging to the project + """ + number: Int! + ): ProjectV2View + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: Boolean! + + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! + + """ + List of views in the project + """ + views( + """ + 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 + + """ + Ordering options for project v2 views returned from the connection + """ + orderBy: ProjectV2ViewOrder = {field: POSITION, direction: ASC} + ): ProjectV2ViewConnection! + + """ + A workflow of the project + """ + workflow( + """ + The number of a workflow belonging to the project + """ + number: Int! + ): ProjectV2Workflow + + """ + List of the workflows in the project + """ + workflows( + """ + 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 + + """ + Ordering options for project v2 workflows returned from the connection + """ + orderBy: ProjectV2WorkflowOrder = {field: NAME, direction: ASC} + ): ProjectV2WorkflowConnection! +} + +""" +Possible collaborators for a project. +""" +union ProjectV2Actor @docsCategory(name: "projects") = Team | User + +""" +The connection type for ProjectV2Actor. +""" +type ProjectV2ActorConnection { + """ + A list of edges. + """ + edges: [ProjectV2ActorEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2Actor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2ActorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2Actor +} + +""" +A collaborator to update on a project. Only one of the userId or teamId should be provided. +""" +input ProjectV2Collaborator @docsCategory(name: "projects") { + """ + The role to grant the collaborator + """ + role: ProjectV2Roles! + + """ + The ID of the team as a collaborator. + """ + teamId: ID @possibleTypes(concreteTypes: ["Team"]) + + """ + The ID of the user as a collaborator. + """ + userId: ID @possibleTypes(concreteTypes: ["User"]) +} + +""" +The connection type for ProjectV2. +""" +type ProjectV2Connection { + """ + A list of edges. + """ + edges: [ProjectV2Edge] + + """ + A list of nodes. + """ + nodes: [ProjectV2] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The type of a project field. +""" +enum ProjectV2CustomFieldType @docsCategory(name: "projects") { + """ + Date + """ + DATE + + """ + Iteration + """ + ITERATION + + """ + Number + """ + NUMBER + + """ + Single Select + """ + SINGLE_SELECT + + """ + Text + """ + TEXT +} + +""" +An edge in a connection. +""" +type ProjectV2Edge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2 +} + +""" +Represents an event related to a project on the timeline of an issue or pull request. +""" +interface ProjectV2Event @docsCategory(name: "projects") { + """ + Project referenced by event. + """ + project: ProjectV2 + + """ + Did this event result from workflow automation? + """ + wasAutomated: Boolean! +} + +""" +A field inside a project. +""" +type ProjectV2Field implements Node & ProjectV2FieldCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The field's type. + """ + dataType: ProjectV2FieldType! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ProjectV2Field object + """ + id: ID! + + """ + The project field's name. + """ + name: String! + + """ + The project that contains this field. + """ + project: ProjectV2! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Common fields across different project field types +""" +interface ProjectV2FieldCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The field's type. + """ + dataType: ProjectV2FieldType! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ProjectV2FieldCommon object + """ + id: ID! + + """ + The project field's name. + """ + name: String! + + """ + The project that contains this field. + """ + project: ProjectV2! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Configurations for project fields. +""" +union ProjectV2FieldConfiguration @docsCategory(name: "projects") = + | ProjectV2Field + | ProjectV2IterationField + | ProjectV2SingleSelectField + +""" +The connection type for ProjectV2FieldConfiguration. +""" +type ProjectV2FieldConfigurationConnection { + """ + A list of edges. + """ + edges: [ProjectV2FieldConfigurationEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2FieldConfiguration] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2FieldConfigurationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2FieldConfiguration +} + +""" +The connection type for ProjectV2Field. +""" +type ProjectV2FieldConnection { + """ + A list of edges. + """ + edges: [ProjectV2FieldEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2Field] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2FieldEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2Field +} + +""" +Ordering options for project v2 field connections +""" +input ProjectV2FieldOrder @docsCategory(name: "projects") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order the project v2 fields by. + """ + field: ProjectV2FieldOrderField! +} + +""" +Properties by which project v2 field connections can be ordered. +""" +enum ProjectV2FieldOrderField @docsCategory(name: "projects") { + """ + Order project v2 fields by creation time + """ + CREATED_AT + + """ + Order project v2 fields by name + """ + NAME + + """ + Order project v2 fields by position + """ + POSITION +} + +""" +The type of a project field. +""" +enum ProjectV2FieldType @docsCategory(name: "projects") { + """ + Assignees + """ + ASSIGNEES + + """ + Closed + """ + CLOSED + + """ + Created + """ + CREATED + + """ + Date + """ + DATE + + """ + Issue type + """ + ISSUE_TYPE + + """ + Iteration + """ + ITERATION + + """ + Labels + """ + LABELS + + """ + Linked Pull Requests + """ + LINKED_PULL_REQUESTS + + """ + Milestone + """ + MILESTONE + + """ + Number + """ + NUMBER + + """ + Parent issue + """ + PARENT_ISSUE + + """ + Repository + """ + REPOSITORY + + """ + Reviewers + """ + REVIEWERS + + """ + Single Select + """ + SINGLE_SELECT + + """ + Sub-issues progress + """ + SUB_ISSUES_PROGRESS + + """ + Text + """ + TEXT + + """ + Title + """ + TITLE + + """ + Tracked by + """ + TRACKED_BY + + """ + Tracks + """ + TRACKS + + """ + Updated + """ + UPDATED +} + +""" +The values that can be used to update a field of an item inside a Project. Only 1 value can be updated at a time. +""" +input ProjectV2FieldValue @docsCategory(name: "projects") { + """ + The ISO 8601 date to set on the field. + """ + date: Date + + """ + The id of the iteration to set on the field. + """ + iterationId: String + + """ + The number to set on the field. + """ + number: Float + + """ + The id of the single select option to set on the field. + """ + singleSelectOptionId: String + + """ + The text to set on the field. + """ + text: String +} + +""" +Ways in which to filter lists of projects. +""" +input ProjectV2Filters @docsCategory(name: "projects") { + """ + List project v2 filtered by the state given. + """ + state: ProjectV2State +} + +""" +Possible issue field values for a Project item. +""" +union ProjectV2IssueFieldValues @docsCategory(name: "projects") = + | IssueFieldDateValue + | IssueFieldMultiSelectValue + | IssueFieldNumberValue + | IssueFieldSingleSelectValue + | IssueFieldTextValue + +""" +An item within a Project. +""" +type ProjectV2Item implements Node @docsCategory(name: "projects") { + """ + The content of the referenced draft issue, issue, pull request + """ + content: ProjectV2ItemContent + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2025-04-01 UTC." + ) + + """ + The field value of the first project field which matches the 'name' argument that is set on the item. + """ + fieldValueByName( + """ + The name of the field to return the field value of + """ + name: String! + ): ProjectV2ItemFieldValue + + """ + The field values that are set on the item. + """ + fieldValues( + """ + 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 + + """ + Ordering options for project v2 item field values returned from the connection + """ + orderBy: ProjectV2ItemFieldValueOrder = {field: POSITION, direction: ASC} + ): ProjectV2ItemFieldValueConnection! + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the ProjectV2Item object + """ + id: ID! + + """ + Whether the item is archived. + """ + isArchived: Boolean! + + """ + The project that contains this item. + """ + project: ProjectV2! + + """ + The type of the item. + """ + type: ProjectV2ItemType! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The possible archived states of a `ProjectV2Item`. +""" +enum ProjectV2ItemArchivedState @docsCategory(name: "projects") { + """ + A project item that is archived + """ + ARCHIVED + + """ + A project item that is not archived + """ + NOT_ARCHIVED +} + +""" +The connection type for ProjectV2Item. +""" +type ProjectV2ItemConnection { + """ + A list of edges. + """ + edges: [ProjectV2ItemEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2Item] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Types that can be inside Project Items. +""" +union ProjectV2ItemContent @docsCategory(name: "projects") = DraftIssue | Issue | PullRequest + +""" +An edge in a connection. +""" +type ProjectV2ItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2Item +} + +""" +The value of a date field in a Project item. +""" +type ProjectV2ItemFieldDateValue implements Node & ProjectV2ItemFieldValueCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Date value for the field + """ + date: Date + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldDateValue object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The value of an iteration field in a Project item. +""" +type ProjectV2ItemFieldIterationValue implements Node & ProjectV2ItemFieldValueCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The duration of the iteration in days. + """ + duration: Int! + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldIterationValue object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + The ID of the iteration. + """ + iterationId: String! + + """ + The start date of the iteration. + """ + startDate: Date! + + """ + The title of the iteration. + """ + title: String! + + """ + The title of the iteration, with HTML. + """ + titleHTML: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The value of the labels field in a Project item. +""" +type ProjectV2ItemFieldLabelValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + Labels value of a field + """ + labels( + """ + 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 + ): LabelConnection +} + +""" +The value of a milestone field in a Project item. +""" +type ProjectV2ItemFieldMilestoneValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + Milestone value of a field + """ + milestone: Milestone +} + +""" +The value of a number field in a Project item. +""" +type ProjectV2ItemFieldNumberValue implements Node & ProjectV2ItemFieldValueCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldNumberValue object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + Number as a float(8) + """ + number: Float + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The value of a pull request field in a Project item. +""" +type ProjectV2ItemFieldPullRequestValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The pull requests for this field + """ + pullRequests( + """ + 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 + + """ + Ordering options for pull requests. + """ + orderBy: PullRequestOrder = {field: CREATED_AT, direction: ASC} + ): PullRequestConnection +} + +""" +The value of a repository field in a Project item. +""" +type ProjectV2ItemFieldRepositoryValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The repository for this field. + """ + repository: Repository +} + +""" +The value of a reviewers field in a Project item. +""" +type ProjectV2ItemFieldReviewerValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The reviewers for this field. + """ + reviewers( + """ + 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 + ): RequestedReviewerConnection +} + +""" +The value of a single select field in a Project item. +""" +type ProjectV2ItemFieldSingleSelectValue implements Node & ProjectV2ItemFieldValueCommon + @docsCategory(name: "projects") { + """ + The color applied to the selected single-select option. + """ + color: ProjectV2SingleSelectFieldOptionColor! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + A plain-text description of the selected single-select option, such as what the option means. + """ + description: String + + """ + The description of the selected single-select option, including HTML tags. + """ + descriptionHTML: String + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldSingleSelectValue object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + The name of the selected single select option. + """ + name: String + + """ + The html name of the selected single select option. + """ + nameHTML: String + + """ + The id of the selected single select option. + """ + optionId: String + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The value of a text field in a Project item. +""" +type ProjectV2ItemFieldTextValue implements Node & ProjectV2ItemFieldValueCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldTextValue object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + Text value of a field + """ + text: String + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The value of a user field in a Project item. +""" +type ProjectV2ItemFieldUserValue @docsCategory(name: "projects") { + """ + The field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The users for this field + """ + users( + """ + 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 + ): UserConnection +} + +""" +Project field values +""" +union ProjectV2ItemFieldValue @docsCategory(name: "projects") = + | ProjectV2ItemFieldDateValue + | ProjectV2ItemFieldIterationValue + | ProjectV2ItemFieldLabelValue + | ProjectV2ItemFieldMilestoneValue + | ProjectV2ItemFieldNumberValue + | ProjectV2ItemFieldPullRequestValue + | ProjectV2ItemFieldRepositoryValue + | ProjectV2ItemFieldReviewerValue + | ProjectV2ItemFieldSingleSelectValue + | ProjectV2ItemFieldTextValue + | ProjectV2ItemFieldUserValue + | ProjectV2ItemIssueFieldValue + +""" +Common fields across different project field value types +""" +interface ProjectV2ItemFieldValueCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the item. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The project field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + The Node ID of the ProjectV2ItemFieldValueCommon object + """ + id: ID! + + """ + The project item that contains this value. + """ + item: ProjectV2Item! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for ProjectV2ItemFieldValue. +""" +type ProjectV2ItemFieldValueConnection { + """ + A list of edges. + """ + edges: [ProjectV2ItemFieldValueEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2ItemFieldValue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2ItemFieldValueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2ItemFieldValue +} + +""" +Ordering options for project v2 item field value connections +""" +input ProjectV2ItemFieldValueOrder @docsCategory(name: "projects") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order the project v2 item field values by. + """ + field: ProjectV2ItemFieldValueOrderField! +} + +""" +Properties by which project v2 item field value connections can be ordered. +""" +enum ProjectV2ItemFieldValueOrderField @docsCategory(name: "projects") { + """ + Order project v2 item field values by the their position in the project + """ + POSITION +} + +""" +The value of an issue field in a Project item. +""" +type ProjectV2ItemIssueFieldValue @docsCategory(name: "projects") { + """ + Field that contains this value. + """ + field: ProjectV2FieldConfiguration! + + """ + Value of the Issue Field + """ + issueFieldValue: ProjectV2IssueFieldValues +} + +""" +Ordering options for project v2 item connections +""" +input ProjectV2ItemOrder @docsCategory(name: "projects") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order the project v2 items by. + """ + field: ProjectV2ItemOrderField! +} + +""" +Properties by which project v2 item connections can be ordered. +""" +enum ProjectV2ItemOrderField @docsCategory(name: "projects") { + """ + Order project v2 items by the their position in the project + """ + POSITION +} + +""" +Represents a 'project_v2_item_status_changed' event on a given issue or pull request. +""" +type ProjectV2ItemStatusChangedEvent implements Node & ProjectV2Event @docsCategory(name: "projects") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ProjectV2ItemStatusChangedEvent object + """ + id: ID! + + """ + The previous status of the project item. + """ + previousStatus: String! + + """ + Project referenced by event. + """ + project: ProjectV2 + + """ + The new status of the project item. + """ + status: String! + + """ + Did this event result from workflow automation? + """ + wasAutomated: Boolean! +} + +""" +The type of a project item. +""" +enum ProjectV2ItemType @docsCategory(name: "projects") { + """ + Draft Issue + """ + DRAFT_ISSUE + + """ + Issue + """ + ISSUE + + """ + Pull Request + """ + PULL_REQUEST + + """ + Redacted Item + """ + REDACTED +} + +""" +Represents an iteration +""" +input ProjectV2Iteration @docsCategory(name: "projects") { + """ + The duration of the iteration, in days. + """ + duration: Int! + + """ + The start date for the iteration. + """ + startDate: Date! + + """ + The title for the iteration. + """ + title: String! +} + +""" +An iteration field inside a project. +""" +type ProjectV2IterationField implements Node & ProjectV2FieldCommon @docsCategory(name: "projects") { + """ + Iteration configuration settings + """ + configuration: ProjectV2IterationFieldConfiguration! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The field's type. + """ + dataType: ProjectV2FieldType! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ProjectV2IterationField object + """ + id: ID! + + """ + The project field's name. + """ + name: String! + + """ + The project that contains this field. + """ + project: ProjectV2! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Iteration field configuration for a project. +""" +type ProjectV2IterationFieldConfiguration @docsCategory(name: "projects") { + """ + The iteration's completed iterations + """ + completedIterations: [ProjectV2IterationFieldIteration!]! + + """ + The iteration's duration in days + """ + duration: Int! + + """ + The iteration's iterations + """ + iterations: [ProjectV2IterationFieldIteration!]! + + """ + The iteration's start day of the week + """ + startDay: Int! +} + +""" +Represents an iteration field configuration. +""" +input ProjectV2IterationFieldConfigurationInput @docsCategory(name: "projects") { + """ + The duration of each iteration, in days. + """ + duration: Int! + + """ + Zero or more iterations for the field. + """ + iterations: [ProjectV2Iteration!]! + + """ + The start date for the first iteration. + """ + startDate: Date! +} + +""" +Iteration field iteration settings for a project. +""" +type ProjectV2IterationFieldIteration @docsCategory(name: "projects") { + """ + The iteration's duration in days + """ + duration: Int! + + """ + The iteration's ID. + """ + id: String! + + """ + The iteration's start date + """ + startDate: Date! + + """ + The iteration's title. + """ + title: String! + + """ + The iteration's html title. + """ + titleHTML: String! +} + +""" +Ways in which lists of projects can be ordered upon return. +""" +input ProjectV2Order @docsCategory(name: "projects") { + """ + The direction in which to order projects by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order projects by. + """ + field: ProjectV2OrderField! +} + +""" +Properties by which projects can be ordered. +""" +enum ProjectV2OrderField @docsCategory(name: "projects") { + """ + The project's date and time of creation + """ + CREATED_AT + + """ + The project's number + """ + NUMBER + + """ + The project's title + """ + TITLE + + """ + The project's date and time of update + """ + UPDATED_AT +} + +""" +Represents an owner of a project. +""" +interface ProjectV2Owner @docsCategory(name: "projects") { + """ + The Node ID of the ProjectV2Owner object + """ + id: ID! + + """ + Find a project by number. + """ + projectV2( + """ + The project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for under the owner. + """ + query: String + ): ProjectV2Connection! +} + +""" +The possible roles of a collaborator on a project. +""" +enum ProjectV2PermissionLevel @docsCategory(name: "projects") { + """ + The collaborator can view, edit, and maange the settings of the project + """ + ADMIN + + """ + The collaborator can view the project + """ + READ + + """ + The collaborator can view and edit the project + """ + WRITE +} + +""" +Recent projects for the owner. +""" +interface ProjectV2Recent @docsCategory(name: "projects") { + """ + Recent projects that this user has modified in the context of the owner. + """ + recentProjects( + """ + 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 + ): ProjectV2Connection! +} + +""" +The possible roles of a collaborator on a project. +""" +enum ProjectV2Roles @docsCategory(name: "projects") { + """ + The collaborator can view, edit, and maange the settings of the project + """ + ADMIN + + """ + The collaborator has no direct access to the project + """ + NONE + + """ + The collaborator can view the project + """ + READER + + """ + The collaborator can view and edit the project + """ + WRITER +} + +""" +A single select field inside a project. +""" +type ProjectV2SingleSelectField implements Node & ProjectV2FieldCommon @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The field's type. + """ + dataType: ProjectV2FieldType! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ProjectV2SingleSelectField object + """ + id: ID! + + """ + The project field's name. + """ + name: String! + + """ + Options for the single select field + """ + options( + """ + Filter returned options to only those matching these names, case insensitive. + """ + names: [String!] + ): [ProjectV2SingleSelectFieldOption!]! + + """ + The project that contains this field. + """ + project: ProjectV2! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Single select field option for a configuration for a project. +""" +type ProjectV2SingleSelectFieldOption @docsCategory(name: "projects") { + """ + The option's display color. + """ + color: ProjectV2SingleSelectFieldOptionColor! + + """ + The option's plain-text description. + """ + description: String! + + """ + The option's description, possibly containing HTML. + """ + descriptionHTML: String! + + """ + The option's ID. + """ + id: String! + + """ + The option's name. + """ + name: String! + + """ + The option's html name. + """ + nameHTML: String! +} + +""" +The display color of a single-select field option. +""" +enum ProjectV2SingleSelectFieldOptionColor @docsCategory(name: "projects") { + """ + BLUE + """ + BLUE + + """ + GRAY + """ + GRAY + + """ + GREEN + """ + GREEN + + """ + ORANGE + """ + ORANGE + + """ + PINK + """ + PINK + + """ + PURPLE + """ + PURPLE + + """ + RED + """ + RED + + """ + YELLOW + """ + YELLOW +} + +""" +Represents a single select field option +""" +input ProjectV2SingleSelectFieldOptionInput @docsCategory(name: "projects") { + """ + The display color of the option + """ + color: ProjectV2SingleSelectFieldOptionColor! + + """ + The description text of the option + """ + description: String! + + """ + The ID of an existing single select option. Include this to preserve the + option's identity during updates, preventing item field values from being cleared. + """ + id: String + + """ + The name of the option + """ + name: String! +} + +""" +Represents a sort by field and direction. +""" +type ProjectV2SortBy @docsCategory(name: "projects") { + """ + The direction of the sorting. Possible values are ASC and DESC. + """ + direction: OrderDirection! + + """ + The field by which items are sorted. + """ + field: ProjectV2Field! +} + +""" +The connection type for ProjectV2SortBy. +""" +type ProjectV2SortByConnection { + """ + A list of edges. + """ + edges: [ProjectV2SortByEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2SortBy] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2SortByEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2SortBy +} + +""" +Represents a sort by field and direction. +""" +type ProjectV2SortByField @docsCategory(name: "projects") { + """ + The direction of the sorting. Possible values are ASC and DESC. + """ + direction: OrderDirection! + + """ + The field by which items are sorted. + """ + field: ProjectV2FieldConfiguration! +} + +""" +The connection type for ProjectV2SortByField. +""" +type ProjectV2SortByFieldConnection { + """ + A list of edges. + """ + edges: [ProjectV2SortByFieldEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2SortByField] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2SortByFieldEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2SortByField +} + +""" +The possible states of a project v2. +""" +enum ProjectV2State @docsCategory(name: "projects") { + """ + A project v2 that has been closed + """ + CLOSED + + """ + A project v2 that is still open + """ + OPEN +} + +""" +Ways in which project v2 status updates can be ordered. +""" +input ProjectV2StatusOrder @docsCategory(name: "projects") { + """ + The direction in which to order nodes. + """ + direction: OrderDirection! + + """ + The field by which to order nodes. + """ + field: ProjectV2StatusUpdateOrderField! +} + +""" +A status update within a project. +""" +type ProjectV2StatusUpdate implements Node @docsCategory(name: "projects") { + """ + The body of the status update. + """ + body: String + + """ + The body of the status update rendered to HTML. + """ + bodyHTML: HTML + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created the status update. + """ + creator: Actor + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2025-04-01 UTC." + ) + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the ProjectV2StatusUpdate object + """ + id: ID! + + """ + The project that contains this status update. + """ + project: ProjectV2! + + """ + The start date of the status update. + """ + startDate: Date + + """ + The status of the status update. + """ + status: ProjectV2StatusUpdateStatus + + """ + The target date of the status update. + """ + targetDate: Date + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for ProjectV2StatusUpdate. +""" +type ProjectV2StatusUpdateConnection { + """ + A list of edges. + """ + edges: [ProjectV2StatusUpdateEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2StatusUpdate] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2StatusUpdateEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2StatusUpdate +} + +""" +Properties by which project v2 status updates can be ordered. +""" +enum ProjectV2StatusUpdateOrderField @docsCategory(name: "projects") { + """ + Allows chronological ordering of project v2 status updates. + """ + CREATED_AT +} + +""" +The possible statuses of a project v2. +""" +enum ProjectV2StatusUpdateStatus @docsCategory(name: "projects") { + """ + A project v2 that is at risk and encountering some challenges. + """ + AT_RISK + + """ + A project v2 that is complete. + """ + COMPLETE + + """ + A project v2 that is inactive. + """ + INACTIVE + + """ + A project v2 that is off track and needs attention. + """ + OFF_TRACK + + """ + A project v2 that is on track with no risks. + """ + ON_TRACK +} + +""" +A view within a ProjectV2. +""" +type ProjectV2View implements Node @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2025-04-01 UTC." + ) + + """ + The view's visible fields. + """ + fields( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConfigurationConnection + + """ + The project view's filter. + """ + filter: String + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The view's group-by field. + """ + groupBy( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConnection + @deprecated( + reason: "The `ProjectV2View#order_by` API is deprecated in favour of the more capable `ProjectV2View#group_by_field` API. Check out the `ProjectV2View#group_by_fields` API as an example for the more capable alternative. Removal on 2023-04-01 UTC." + ) + + """ + The view's group-by field. + """ + groupByFields( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConfigurationConnection + + """ + The Node ID of the ProjectV2View object + """ + id: ID! + + """ + The project view's layout. + """ + layout: ProjectV2ViewLayout! + + """ + The project view's name. + """ + name: String! + + """ + The project view's number. + """ + number: Int! + + """ + The project that contains this view. + """ + project: ProjectV2! + + """ + The view's sort-by config. + """ + sortBy( + """ + 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 + ): ProjectV2SortByConnection + @deprecated( + reason: "The `ProjectV2View#sort_by` API is deprecated in favour of the more capable `ProjectV2View#sort_by_fields` API. Check out the `ProjectV2View#sort_by_fields` API as an example for the more capable alternative. Removal on 2023-04-01 UTC." + ) + + """ + The view's sort-by config. + """ + sortByFields( + """ + 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 + ): ProjectV2SortByFieldConnection + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The view's vertical-group-by field. + """ + verticalGroupBy( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConnection + @deprecated( + reason: "The `ProjectV2View#vertical_group_by` API is deprecated in favour of the more capable `ProjectV2View#vertical_group_by_fields` API. Check out the `ProjectV2View#vertical_group_by_fields` API as an example for the more capable alternative. Removal on 2023-04-01 UTC." + ) + + """ + The view's vertical-group-by field. + """ + verticalGroupByFields( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConfigurationConnection + + """ + The view's visible fields. + """ + visibleFields( + """ + 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 + + """ + Ordering options for the project v2 fields returned from the connection. + """ + orderBy: ProjectV2FieldOrder = {field: POSITION, direction: ASC} + ): ProjectV2FieldConnection + @deprecated( + reason: "The `ProjectV2View#visibleFields` API is deprecated in favour of the more capable `ProjectV2View#fields` API. Check out the `ProjectV2View#fields` API as an example for the more capable alternative. Removal on 2023-01-01 UTC." + ) +} + +""" +The connection type for ProjectV2View. +""" +type ProjectV2ViewConnection { + """ + A list of edges. + """ + edges: [ProjectV2ViewEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2View] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2ViewEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2View +} + +""" +The layout of a project v2 view. +""" +enum ProjectV2ViewLayout @docsCategory(name: "projects") { + """ + Board layout + """ + BOARD_LAYOUT + + """ + Roadmap layout + """ + ROADMAP_LAYOUT + + """ + Table layout + """ + TABLE_LAYOUT +} + +""" +Ordering options for project v2 view connections +""" +input ProjectV2ViewOrder @docsCategory(name: "projects") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order the project v2 views by. + """ + field: ProjectV2ViewOrderField! +} + +""" +Properties by which project v2 view connections can be ordered. +""" +enum ProjectV2ViewOrderField @docsCategory(name: "projects") { + """ + Order project v2 views by creation time + """ + CREATED_AT + + """ + Order project v2 views by name + """ + NAME + + """ + Order project v2 views by position + """ + POSITION +} + +""" +A workflow inside a project. +""" +type ProjectV2Workflow implements Node @docsCategory(name: "projects") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2025-04-01 UTC." + ) + + """ + Whether the workflow is enabled. + """ + enabled: Boolean! + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the ProjectV2Workflow object + """ + id: ID! + + """ + The name of the workflow. + """ + name: String! + + """ + The number of the workflow. + """ + number: Int! + + """ + The project that contains this workflow. + """ + project: ProjectV2! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for ProjectV2Workflow. +""" +type ProjectV2WorkflowConnection { + """ + A list of edges. + """ + edges: [ProjectV2WorkflowEdge] + + """ + A list of nodes. + """ + nodes: [ProjectV2Workflow] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectV2WorkflowEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectV2Workflow +} + +""" +Ordering options for project v2 workflows connections +""" +input ProjectV2WorkflowOrder @docsCategory(name: "projects") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order the project v2 workflows by. + """ + field: ProjectV2WorkflowsOrderField! +} + +""" +Properties by which project workflows can be ordered. +""" +enum ProjectV2WorkflowsOrderField @docsCategory(name: "projects") { + """ + The date and time of the workflow creation + """ + CREATED_AT + + """ + The name of the workflow + """ + NAME + + """ + The number of the workflow + """ + NUMBER + + """ + The date and time of the workflow update + """ + UPDATED_AT +} + +""" +Autogenerated input type of PromoteRepositoryCustomProperty +""" +input PromoteRepositoryCustomPropertyInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the repository custom property to be promoted. + """ + repositoryCustomPropertyId: ID! @possibleTypes(concreteTypes: ["RepositoryCustomProperty"]) +} + +""" +Autogenerated return type of PromoteRepositoryCustomProperty. +""" +type PromoteRepositoryCustomPropertyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository custom property that has been promoted. + """ + repositoryCustomProperty: RepositoryCustomProperty +} + +""" +A property that must match +""" +type PropertyTargetDefinition @docsCategory(name: "repos") { + """ + The name of the property + """ + name: String! + + """ + The values to match for + """ + propertyValues: [String!]! + + """ + The source of the property. Choose 'custom' or 'system'. Defaults to 'custom' if not specified + """ + source: String +} + +""" +A property that must match +""" +input PropertyTargetDefinitionInput @docsCategory(name: "repos") { + """ + The name of the property + """ + name: String! + + """ + The values to match for + """ + propertyValues: [String!]! + + """ + The source of the property. Choose 'custom' or 'system'. Defaults to 'custom' if not specified + """ + source: String +} + +""" +A user's public key. +""" +type PublicKey implements Node @docsCategory(name: "users") { + """ + The last time this authorization was used to perform an action. Values will be null for keys not owned by the user. + """ + accessedAt: DateTime + + """ + Identifies the date and time when the key was created. Keys created before + March 5th, 2014 have inaccurate values. Values will be null for keys not owned by the user. + """ + createdAt: DateTime + + """ + The fingerprint for this PublicKey. + """ + fingerprint: String! + + """ + The Node ID of the PublicKey object + """ + id: ID! + + """ + Whether this PublicKey is read-only or not. Values will be null for keys not owned by the user. + """ + isReadOnly: Boolean + + """ + The public key string. + """ + key: String! + + """ + Identifies the date and time when the key was updated. Keys created before + March 5th, 2014 may have inaccurate values. Values will be null for keys not + owned by the user. + """ + updatedAt: DateTime +} + +""" +The connection type for PublicKey. +""" +type PublicKeyConnection { + """ + A list of edges. + """ + edges: [PublicKeyEdge] + + """ + A list of nodes. + """ + nodes: [PublicKey] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PublicKeyEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PublicKey +} + +""" +Autogenerated input type of PublishSponsorsTier +""" +input PublishSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the draft tier to publish. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of PublishSponsorsTier. +""" +type PublishSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was published. + """ + sponsorsTier: SponsorsTier +} + +""" +A repository pull request. +""" +type PullRequest implements Assignable & Closable & Comment & Labelable & Lockable & Node & ProjectV2Owner & Reactable & RepositoryNode & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment + @docsCategory(name: "pulls") { + """ + Reason that the conversation was locked. + """ + activeLockReason: LockReason + + """ + The number of additions in this pull request. + """ + additions: Int! + + """ + A list of actors assigned to this object. + """ + assignedActors( + """ + 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 + ): AssigneeConnection! + + """ + A list of Users assigned to this object. + """ + assignees( + """ + 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 + ): UserConnection! + + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + Returns the auto-merge request object if one exists for this pull request. + """ + autoMergeRequest: AutoMergeRequest + + """ + Identifies the base Ref associated with the pull request. + """ + baseRef: Ref + + """ + Identifies the name of the base Ref associated with the pull request, even if the ref has been deleted. + """ + baseRefName: String! + + """ + Identifies the oid of the base ref associated with the pull request, even if the ref has been deleted. + """ + baseRefOid: GitObjectID! + + """ + The repository associated with this pull request's base Ref. + """ + baseRepository: Repository + + """ + The body as Markdown. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body rendered to text. + """ + bodyText: String! + + """ + Whether or not the pull request is rebaseable. + """ + canBeRebased: Boolean! + + """ + The number of changed files in this pull request. + """ + changedFiles: Int! + + """ + The HTTP path for the checks of this pull request. + """ + checksResourcePath: URI! + + """ + The HTTP URL for the checks of this pull request. + """ + checksUrl: URI! + + """ + `true` if the pull request is closed + """ + closed: Boolean! + + """ + Identifies the date and time when the object was closed. + """ + closedAt: DateTime + + """ + List of issues that may be closed by this pull request + """ + closingIssuesReferences( + """ + 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 + + """ + Ordering options for issues returned from the connection + """ + orderBy: IssueOrder + + """ + Return only manually linked Issues + """ + userLinkedOnly: Boolean = false + ): IssueConnection + + """ + A list of comments associated with the pull request. + """ + comments( + """ + 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 + + """ + Ordering options for issue comments returned from the connection. + """ + orderBy: IssueCommentOrder + ): IssueCommentConnection! + + """ + A list of commits present in this pull request's head branch not present in the base branch. + """ + commits( + """ + 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 + ): PullRequestCommitConnection! + + """ + 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 + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2024-07-01 UTC." + ) + + """ + The number of deletions in this pull request. + """ + deletions: Int! + + """ + The actor who edited this pull request's body. + """ + editor: Actor + + """ + Lists the files changed within this pull request. + """ + files( + """ + 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 + ): PullRequestChangedFileConnection + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + Identifies the head Ref associated with the pull request. + """ + headRef: Ref + + """ + Identifies the name of the head Ref associated with the pull request, even if the ref has been deleted. + """ + headRefName: String! + + """ + Identifies the oid of the head ref associated with the pull request, even if the ref has been deleted. + """ + headRefOid: GitObjectID! + + """ + The repository associated with this pull request's head Ref. + """ + headRepository: Repository + + """ + The owner of the repository associated with this pull request's head Ref. + """ + headRepositoryOwner: RepositoryOwner + + """ + The hovercard information for this issue + """ + hovercard( + """ + Whether or not to include notification contexts + """ + includeNotificationContexts: Boolean = true + ): Hovercard! + + """ + The Node ID of the PullRequest object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + The head and base repositories are different. + """ + isCrossRepository: Boolean! + + """ + Identifies if the pull request is a draft. + """ + isDraft: Boolean! + + """ + Indicates whether the pull request is in a merge queue + """ + isInMergeQueue: Boolean! + + """ + Indicates whether the pull request's base ref has a merge queue enabled. + """ + isMergeQueueEnabled: Boolean! + + """ + Is this pull request read by the viewer + """ + isReadByViewer: Boolean + + """ + A list of labels associated with the object. + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + ): LabelConnection + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + A list of latest reviews per user associated with the pull request. + """ + latestOpinionatedReviews( + """ + 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 + + """ + Only return reviews from user who have write access to the repository + """ + writersOnly: Boolean = false + ): PullRequestReviewConnection + + """ + A list of latest reviews per user associated with the pull request that are not also pending review. + """ + latestReviews( + """ + 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 + ): PullRequestReviewConnection + + """ + `true` if the pull request is locked + """ + locked: Boolean! + + """ + Indicates whether maintainers can modify the pull request. + """ + maintainerCanModify: Boolean! + + """ + The commit that was created when this pull request was merged. + """ + mergeCommit: Commit + + """ + The merge queue for the pull request's base branch + """ + mergeQueue: MergeQueue + + """ + The merge queue entry of the pull request in the base branch's merge queue + """ + mergeQueueEntry: MergeQueueEntry + + """ + Detailed information about the current pull request merge state status. + """ + mergeStateStatus: MergeStateStatus! + + """ + Whether or not the pull request can be merged based on the existence of merge conflicts. + """ + mergeable: MergeableState! + + """ + Whether or not the pull request was merged. + """ + merged: Boolean! + + """ + The date and time that the pull request was merged. + """ + mergedAt: DateTime + + """ + The actor who merged the pull request. + """ + mergedBy: Actor + + """ + Identifies the milestone associated with the pull request. + """ + milestone: Milestone + + """ + Identifies the pull request number. + """ + number: Int! + + """ + A list of Users that are participating in the Pull Request conversation. + """ + participants( + """ + 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 + ): UserConnection! + + """ + The permalink to the pull request. + """ + permalink: URI! + + """ + The commit that GitHub automatically generated to test if this pull request + could be merged. This field will not return a value if the pull request is + merged, or if the test merge commit is still being generated. See the + `mergeable` field for more details on the mergeability of the pull request. + """ + potentialMergeCommit: Commit + + """ + List of project cards associated with this pull request. + """ + projectCards( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + A list of archived states to filter the cards by + """ + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + + """ + 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 + ): ProjectCardConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + List of project items associated with this pull request. + """ + projectItems( + """ + 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 + + """ + Include archived items. + """ + includeArchived: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): ProjectV2ItemConnection + + """ + Find a project by number. + """ + projectV2( + """ + The project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for under the owner. + """ + query: String + ): ProjectV2Connection! + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path for this pull request. + """ + resourcePath: URI! + + """ + The HTTP path for reverting this pull request. + """ + revertResourcePath: URI! + + """ + The HTTP URL for reverting this pull request. + """ + revertUrl: URI! + + """ + The current status of this pull request with respect to code review. + """ + reviewDecision: PullRequestReviewDecision + + """ + A list of review requests associated with the pull request. + """ + reviewRequests( + """ + 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 + ): ReviewRequestConnection + + """ + The list of all review threads for this pull request. + """ + reviewThreads( + """ + 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 + ): PullRequestReviewThreadConnection! + + """ + A list of reviews associated with the pull request. + """ + reviews( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Filter by author of the review. + """ + author: 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 + + """ + A list of states to filter the reviews. + """ + states: [PullRequestReviewState!] + ): PullRequestReviewConnection + + """ + Identifies the state of the pull request. + """ + state: PullRequestState! + + """ + Check and Status rollup information for the PR's head ref. + """ + statusCheckRollup: StatusCheckRollup + + """ + A list of suggested actors to assign to this object + """ + suggestedActors( + """ + 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 + + """ + If provided, searches users by login or profile name + """ + query: String + ): AssigneeConnection! + + """ + Reviewer actor suggestions based on commit history, past review comments, and integrations. + """ + suggestedReviewerActors( + """ + 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 + + """ + Search actors with query on user name and login. + """ + query: String + ): SuggestedReviewerActorConnection! + + """ + A list of reviewer suggestions based on commit history and past review comments. + """ + suggestedReviewers: [SuggestedReviewer]! + + """ + A list of events, comments, commits, etc. associated with the pull request. + """ + timeline( + """ + 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 + + """ + Allows filtering timeline events by a `since` timestamp. + """ + since: DateTime + ): PullRequestTimelineConnection! + @deprecated(reason: "`timeline` will be removed Use PullRequest.timelineItems instead. Removal on 2020-10-01 UTC.") + + """ + A list of events, comments, commits, etc. associated with the pull request. + """ + timelineItems( + """ + 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 + + """ + Filter timeline items by type. + """ + itemTypes: [PullRequestTimelineItemsItemType!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter timeline items by a `since` timestamp. + """ + since: DateTime + + """ + Skips the first _n_ elements in the list. + """ + skip: Int + ): PullRequestTimelineItemsConnection! + + """ + Identifies the pull request title. + """ + title: String! + + """ + Identifies the pull request title rendered to HTML. + """ + titleHTML: HTML! + + """ + Returns a count of how many comments this pull request has received. + """ + totalCommentsCount: Int + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this pull request. + """ + url: URI! + + """ + 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 + + """ + Whether or not the viewer can apply suggestion. + """ + viewerCanApplySuggestion: Boolean! + + """ + Indicates if the object can be closed by the viewer. + """ + viewerCanClose: Boolean! + + """ + Check if the viewer can restore the deleted head ref. + """ + viewerCanDeleteHeadRef: Boolean! + + """ + Whether or not the viewer can disable auto-merge + """ + viewerCanDisableAutoMerge: Boolean! + + """ + Can the viewer edit files within this pull request. + """ + viewerCanEditFiles: Boolean! + + """ + Whether or not the viewer can enable auto-merge + """ + viewerCanEnableAutoMerge: Boolean! + + """ + Indicates if the viewer can edit labels for this object. + """ + viewerCanLabel: Boolean! + + """ + Indicates whether the viewer can bypass branch protections and merge the pull request immediately + """ + viewerCanMergeAsAdmin: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Indicates if the object can be reopened by the viewer. + """ + viewerCanReopen: 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! + + """ + Whether or not the viewer can update the head ref of this PR, by merging or rebasing the base ref. + If the head ref is up to date or unable to be updated by this user, this will return false. + """ + viewerCanUpdateBranch: Boolean! + + """ + Reasons why the current viewer can not update this comment. + """ + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + + """ + Did the viewer author this comment. + """ + viewerDidAuthor: Boolean! + + """ + The latest review given from the viewer. + """ + viewerLatestReview: PullRequestReview + + """ + The person who has requested the viewer for review on this pull request. + """ + viewerLatestReviewRequest: ReviewRequest + + """ + The merge body text for the viewer and method. + """ + viewerMergeBodyText( + """ + The merge method for the message. + """ + mergeType: PullRequestMergeMethod + ): String! + + """ + The merge headline text for the viewer and method. + """ + viewerMergeHeadlineText( + """ + The merge method for the message. + """ + mergeType: PullRequestMergeMethod + ): String! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState +} + +""" +Array of allowed merge methods. Allowed values include `merge`, `squash`, and `rebase`. At least one option must be enabled. +""" +enum PullRequestAllowedMergeMethods @docsCategory(name: "pulls") { + """ + Add all commits from the head branch to the base branch with a merge commit. + """ + MERGE + + """ + Add all commits from the head branch onto the base branch individually. + """ + REBASE + + """ + Combine all commits from the head branch into a single commit in the base branch. + """ + SQUASH +} + +""" +The possible methods for updating a pull request's head branch with the base branch. +""" +enum PullRequestBranchUpdateMethod @docsCategory(name: "pulls") { + """ + Update branch via merge + """ + MERGE + + """ + Update branch via rebase + """ + REBASE +} + +""" +A file changed in a pull request. +""" +type PullRequestChangedFile @docsCategory(name: "pulls") { + """ + The number of additions to the file. + """ + additions: Int! + + """ + How the file was changed in this PullRequest + """ + changeType: PatchStatus! + + """ + The number of deletions to the file. + """ + deletions: Int! + + """ + The path of the file. + """ + path: String! + + """ + The state of the file for the viewer. + """ + viewerViewedState: FileViewedState! +} + +""" +The connection type for PullRequestChangedFile. +""" +type PullRequestChangedFileConnection { + """ + A list of edges. + """ + edges: [PullRequestChangedFileEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestChangedFile] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PullRequestChangedFileEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestChangedFile +} + +""" +Represents a Git commit part of a pull request. +""" +type PullRequestCommit implements Node & UniformResourceLocatable @docsCategory(name: "pulls") { + """ + The Git commit object + """ + commit: Commit! + + """ + The Node ID of the PullRequestCommit object + """ + id: ID! + + """ + The pull request this commit belongs to + """ + pullRequest: PullRequest! + + """ + The HTTP path for this pull request commit + """ + resourcePath: URI! + + """ + The HTTP URL for this pull request commit + """ + url: URI! +} + +""" +Represents a commit comment thread part of a pull request. +""" +type PullRequestCommitCommentThread implements Node & RepositoryNode @docsCategory(name: "pulls") { + """ + The comments that exist in this thread. + """ + comments( + """ + 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 + ): CommitCommentConnection! + + """ + The commit the comments were made on. + """ + commit: Commit! + + """ + The Node ID of the PullRequestCommitCommentThread object + """ + id: ID! + + """ + The file the comments were made on. + """ + path: String + + """ + The position in the diff for the commit that the comment was made on. + """ + position: Int + + """ + The pull request this commit comment thread belongs to + """ + pullRequest: PullRequest! + + """ + The repository associated with this node. + """ + repository: Repository! +} + +""" +The connection type for PullRequestCommit. +""" +type PullRequestCommitConnection { + """ + A list of edges. + """ + edges: [PullRequestCommitEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestCommit] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PullRequestCommitEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestCommit +} + +""" +The connection type for PullRequest. +""" +type PullRequestConnection { + """ + A list of edges. + """ + edges: [PullRequestEdge] + + """ + A list of nodes. + """ + nodes: [PullRequest] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +This aggregates pull requests opened by a user within one repository. +""" +type PullRequestContributionsByRepository @docsCategory(name: "pulls") { + """ + The pull request contributions. + """ + contributions( + """ + 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 + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedPullRequestContributionConnection! + + """ + The repository in which the pull requests were opened. + """ + repository: Repository! +} + +""" +Users who are exempt from the pull request creation cap on a repository. +""" +type PullRequestCreationCapConfig @docsCategory(name: "pulls") { + """ + Users who are exempt from the pull request creation cap. + """ + bypassedUsers( + """ + 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 + ): UserConnection! +} + +""" +The policy controlling who can create pull requests in a repository. +""" +enum PullRequestCreationPolicy @docsCategory(name: "pulls") { + """ + Anyone can create pull requests. + """ + ALL + + """ + Only collaborators can create pull requests. + """ + COLLABORATORS_ONLY +} + +""" +An edge in a connection. +""" +type PullRequestEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequest +} + +""" +Represents available types of methods to use when merging a pull request. +""" +enum PullRequestMergeMethod @docsCategory(name: "pulls") { + """ + Add all commits from the head branch to the base branch with a merge commit. + """ + MERGE + + """ + Add all commits from the head branch onto the base branch individually. + """ + REBASE + + """ + Combine all commits from the head branch into a single commit in the base branch. + """ + SQUASH +} + +""" +Ways in which lists of issues can be ordered upon return. +""" +input PullRequestOrder @docsCategory(name: "pulls") { + """ + The direction in which to order pull requests by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order pull requests by. + """ + field: PullRequestOrderField! +} + +""" +Properties by which pull_requests connections can be ordered. +""" +enum PullRequestOrderField @docsCategory(name: "pulls") { + """ + Order pull_requests by creation time + """ + CREATED_AT + + """ + Order pull_requests by update time + """ + UPDATED_AT +} + +""" +Require all commits be made to a non-target branch and submitted via a pull request before they can be merged. +""" +type PullRequestParameters @docsCategory(name: "pulls") { + """ + Array of allowed merge methods. Allowed values include `merge`, `squash`, and + `rebase`. At least one option must be enabled. + """ + allowedMergeMethods: [PullRequestAllowedMergeMethods!] + + """ + New, reviewable commits pushed will dismiss previous pull request review approvals. + """ + dismissStaleReviewsOnPush: Boolean! + + """ + Specify people, teams, or apps allowed to dismiss pull request reviews. + """ + dismissalRestriction: DismissalRestriction + + """ + Require an approving review in pull requests that modify files that have a designated code owner. + """ + requireCodeOwnerReview: Boolean! + + """ + Whether the most recent reviewable push must be approved by someone other than the person who pushed it. + """ + requireLastPushApproval: Boolean! + + """ + The number of approving reviews that are required before a pull request can be merged. + """ + requiredApprovingReviewCount: Int! + + """ + All conversations on code must be resolved before a pull request can be merged. + """ + requiredReviewThreadResolution: Boolean! + + """ + This field is in beta and subject to change. A collection of reviewers and + associated file patterns. Each reviewer has a list of file patterns which + determine the files that reviewer is required to review. + """ + requiredReviewers: [RequiredReviewerConfiguration!] +} + +""" +Require all commits be made to a non-target branch and submitted via a pull request before they can be merged. +""" +input PullRequestParametersInput @docsCategory(name: "pulls") { + """ + Array of allowed merge methods. Allowed values include `merge`, `squash`, and + `rebase`. At least one option must be enabled. + """ + allowedMergeMethods: [PullRequestAllowedMergeMethods!] + + """ + New, reviewable commits pushed will dismiss previous pull request review approvals. + """ + dismissStaleReviewsOnPush: Boolean! + + """ + Specify people, teams, or apps allowed to dismiss pull request reviews. + """ + dismissalRestriction: DismissalRestrictionInput + + """ + Require an approving review in pull requests that modify files that have a designated code owner. + """ + requireCodeOwnerReview: Boolean! + + """ + Whether the most recent reviewable push must be approved by someone other than the person who pushed it. + """ + requireLastPushApproval: Boolean! + + """ + The number of approving reviews that are required before a pull request can be merged. + """ + requiredApprovingReviewCount: Int! + + """ + All conversations on code must be resolved before a pull request can be merged. + """ + requiredReviewThreadResolution: Boolean! + + """ + This argument is in beta and subject to change. A collection of reviewers and + associated file patterns. Each reviewer has a list of file patterns which + determine the files that reviewer is required to review. + """ + requiredReviewers: [RequiredReviewerConfigurationInput!] +} + +""" +A review object for a given pull request. +""" +type PullRequestReview implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment + @docsCategory(name: "pulls") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + Indicates whether the author of this review has push access to the repository. + """ + authorCanPushToRepository: Boolean! + + """ + Identifies the pull request review body. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The body of this review rendered as plain text. + """ + bodyText: String! + + """ + A list of review comments for the current pull request review. + """ + comments( + """ + 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 + ): PullRequestReviewCommentConnection! + + """ + Identifies the commit associated with this pull request review. + """ + commit: Commit + + """ + 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 + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2024-07-01 UTC." + ) + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the PullRequestReview object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + A list of teams that this review was made on behalf of. + """ + onBehalfOf( + """ + 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 + ): TeamConnection! + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + Identifies the pull request associated with this pull request review. + """ + pullRequest: PullRequest! + + """ + 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 repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path permalink for this PullRequestReview. + """ + resourcePath: URI! + + """ + Identifies the current state of the pull request review. + """ + state: PullRequestReviewState! + + """ + Identifies when the Pull Request Review was submitted + """ + submittedAt: DateTime + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL permalink for this PullRequestReview. + """ + url: URI! + + """ + 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! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: 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! +} + +""" +A review comment associated with a given repository pull request. +""" +type PullRequestReviewComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment + @docsCategory(name: "pulls") { + """ + The actor who authored the comment. + """ + author: Actor + + """ + Author's association with the subject of the comment. + """ + authorAssociation: CommentAuthorAssociation! + + """ + The comment body of this review comment. + """ + body: String! + + """ + The body rendered to HTML. + """ + bodyHTML: HTML! + + """ + The comment body of this review comment rendered as plain text. + """ + bodyText: String! + + """ + Identifies the commit associated with the comment. + """ + commit: Commit + + """ + Identifies when the comment 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 + @deprecated( + reason: "`databaseId` will be removed because it does not support 64-bit signed integer identifiers. Use `fullDatabaseId` instead. Removal on 2024-07-01 UTC." + ) + + """ + The diff hunk to which the comment applies. + """ + diffHunk: String! + + """ + Identifies when the comment was created in a draft state. + """ + draftedAt: DateTime! + + """ + The actor who edited the comment. + """ + editor: Actor + + """ + Identifies the primary key from the database as a BigInt. + """ + fullDatabaseId: BigInt + + """ + The Node ID of the PullRequestReviewComment object + """ + id: ID! + + """ + Check if this comment was edited and includes an edit with the creation data + """ + includesCreatedEdit: Boolean! + + """ + Returns whether or not a comment has been minimized. + """ + isMinimized: Boolean! + + """ + The moment the editor made the last edit + """ + lastEditedAt: DateTime + + """ + The end line number on the file to which the comment applies + """ + line: Int + + """ + Returns why the comment was minimized. One of `abuse`, `off-topic`, + `outdated`, `resolved`, `duplicate`, `spam`, and `low-quality`. Note that the + case and formatting of these values differs from the inputs to the + `MinimizeComment` mutation. + """ + minimizedReason: String + + """ + Identifies the original commit associated with the comment. + """ + originalCommit: Commit + + """ + The end line number on the file to which the comment applied when it was first created + """ + originalLine: Int + + """ + The original line index in the diff to which the comment applies. + """ + originalPosition: Int! + @deprecated(reason: "We are phasing out diff-relative positioning for PR comments Removal on 2023-10-01 UTC.") + + """ + The start line number on the file to which the comment applied when it was first created + """ + originalStartLine: Int + + """ + Identifies when the comment body is outdated + """ + outdated: Boolean! + + """ + The path to which the comment applies. + """ + path: String! + + """ + The line index in the diff to which the comment applies. + """ + position: Int + @deprecated( + reason: "We are phasing out diff-relative positioning for PR comments Use the `line` and `startLine` fields instead, which are file line numbers instead of diff line numbers Removal on 2023-10-01 UTC." + ) + + """ + Identifies when the comment was published at. + """ + publishedAt: DateTime + + """ + The pull request associated with this review comment. + """ + pullRequest: PullRequest! + + """ + The pull request review associated with this review comment. + """ + pullRequestReview: PullRequestReview + + """ + 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 comment this is a reply to. + """ + replyTo: PullRequestReviewComment + + """ + The repository associated with this node. + """ + repository: Repository! + + """ + The HTTP path permalink for this review comment. + """ + resourcePath: URI! + + """ + The start line number on the file to which the comment applies + """ + startLine: Int + + """ + Identifies the state of the comment. + """ + state: PullRequestReviewCommentState! + + """ + The level at which the comments in the corresponding thread are targeted, can be a diff line or a file + """ + subjectType: PullRequestReviewThreadSubjectType! + + """ + Identifies when the comment was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL permalink for this review comment. + """ + url: URI! + + """ + 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! + + """ + Check if the current viewer can minimize this object. + """ + viewerCanMinimize: Boolean! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! + + """ + Check if the current viewer can unminimize this object. + """ + viewerCanUnminimize: 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! +} + +""" +The connection type for PullRequestReviewComment. +""" +type PullRequestReviewCommentConnection { + """ + A list of edges. + """ + edges: [PullRequestReviewCommentEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestReviewComment] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PullRequestReviewCommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestReviewComment +} + +""" +The possible states of a pull request review comment. +""" +enum PullRequestReviewCommentState @docsCategory(name: "pulls") { + """ + A comment that is part of a pending review + """ + PENDING + + """ + A comment that is part of a submitted review + """ + SUBMITTED +} + +""" +The connection type for PullRequestReview. +""" +type PullRequestReviewConnection { + """ + A list of edges. + """ + edges: [PullRequestReviewEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestReview] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +This aggregates pull request reviews made by a user within one repository. +""" +type PullRequestReviewContributionsByRepository @docsCategory(name: "pulls") { + """ + The pull request review contributions. + """ + contributions( + """ + 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 + + """ + Ordering options for contributions returned from the connection. + """ + orderBy: ContributionOrder = {direction: DESC} + ): CreatedPullRequestReviewContributionConnection! + + """ + The repository in which the pull request reviews were made. + """ + repository: Repository! +} + +""" +The review status of a pull request. +""" +enum PullRequestReviewDecision @docsCategory(name: "pulls") { + """ + The pull request has received an approving review. + """ + APPROVED + + """ + Changes have been requested on the pull request. + """ + CHANGES_REQUESTED + + """ + A review is required before the pull request can be merged. + """ + REVIEW_REQUIRED +} + +""" +An edge in a connection. +""" +type PullRequestReviewEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestReview +} + +""" +The possible events to perform on a pull request review. +""" +enum PullRequestReviewEvent @docsCategory(name: "pulls") { + """ + Submit feedback and approve merging these changes. + """ + APPROVE + + """ + Submit general feedback without explicit approval. + """ + COMMENT + + """ + Dismiss review so it now longer effects merging. + """ + DISMISS + + """ + Submit feedback that must be addressed before merging. + """ + REQUEST_CHANGES +} + +""" +The possible states of a pull request review. +""" +enum PullRequestReviewState @docsCategory(name: "pulls") { + """ + A review allowing the pull request to merge. + """ + APPROVED + + """ + A review blocking the pull request from merging. + """ + CHANGES_REQUESTED + + """ + An informational review. + """ + COMMENTED + + """ + A review that has been dismissed. + """ + DISMISSED + + """ + A review that has not yet been submitted. + """ + PENDING +} + +""" +A threaded list of comments for a given pull request. +""" +type PullRequestReviewThread implements Node @docsCategory(name: "pulls") { + """ + A list of pull request comments associated with the thread. + """ + comments( + """ + 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 + + """ + Skips the first _n_ elements in the list. + """ + skip: Int + ): PullRequestReviewCommentConnection! + + """ + The side of the diff on which this thread was placed. + """ + diffSide: DiffSide! + + """ + The Node ID of the PullRequestReviewThread object + """ + id: ID! + + """ + Whether or not the thread has been collapsed (resolved) + """ + isCollapsed: Boolean! + + """ + Indicates whether this thread was outdated by newer changes. + """ + isOutdated: Boolean! + + """ + Whether this thread has been resolved + """ + isResolved: Boolean! + + """ + The line in the file to which this thread refers + """ + line: Int + + """ + The original line in the file to which this thread refers. + """ + originalLine: Int + + """ + The original start line in the file to which this thread refers (multi-line only). + """ + originalStartLine: Int + + """ + Identifies the file path of this thread. + """ + path: String! + + """ + Identifies the pull request associated with this thread. + """ + pullRequest: PullRequest! + + """ + Identifies the repository associated with this thread. + """ + repository: Repository! + + """ + The user who resolved this thread + """ + resolvedBy: User + + """ + The side of the diff that the first line of the thread starts on (multi-line only) + """ + startDiffSide: DiffSide + + """ + The start line in the file to which this thread refers (multi-line only) + """ + startLine: Int + + """ + The level at which the comments in the corresponding thread are targeted, can be a diff line or a file + """ + subjectType: PullRequestReviewThreadSubjectType! + + """ + Indicates whether the current viewer can reply to this thread. + """ + viewerCanReply: Boolean! + + """ + Whether or not the viewer can resolve this thread + """ + viewerCanResolve: Boolean! + + """ + Whether or not the viewer can unresolve this thread + """ + viewerCanUnresolve: Boolean! +} + +""" +Review comment threads for a pull request review. +""" +type PullRequestReviewThreadConnection { + """ + A list of edges. + """ + edges: [PullRequestReviewThreadEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestReviewThread] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PullRequestReviewThreadEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestReviewThread +} + +""" +The possible subject types of a pull request review comment. +""" +enum PullRequestReviewThreadSubjectType @docsCategory(name: "pulls") { + """ + A comment that has been made against the file of a pull request + """ + FILE + + """ + A comment that has been made against the line of a pull request + """ + LINE +} + +""" +Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits. +""" +type PullRequestRevisionMarker @docsCategory(name: "pulls") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The last commit the viewer has seen. + """ + lastSeenCommit: Commit! + + """ + The pull request to which the marker belongs. + """ + pullRequest: PullRequest! +} + +""" +The possible states of a pull request. +""" +enum PullRequestState @docsCategory(name: "pulls") { + """ + A pull request that has been closed without being merged. + """ + CLOSED + + """ + A pull request that has been closed by being merged. + """ + MERGED + + """ + A pull request that is still open. + """ + OPEN +} + +""" +A repository pull request template. +""" +type PullRequestTemplate @docsCategory(name: "pulls") { + """ + The body of the template + """ + body: String + + """ + The filename of the template + """ + filename: String + + """ + The repository the template belongs to + """ + repository: Repository! +} + +""" +A threaded list of comments for a given pull request. +""" +type PullRequestThread implements Node @docsCategory(name: "pulls") { + """ + A list of pull request comments associated with the thread. + """ + comments( + """ + 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 + + """ + Skips the first _n_ elements in the list. + """ + skip: Int + ): PullRequestReviewCommentConnection! + + """ + The side of the diff on which this thread was placed. + """ + diffSide: DiffSide! + + """ + The Node ID of the PullRequestThread object + """ + id: ID! + + """ + Whether or not the thread has been collapsed (resolved) + """ + isCollapsed: Boolean! + + """ + Indicates whether this thread was outdated by newer changes. + """ + isOutdated: Boolean! + + """ + Whether this thread has been resolved + """ + isResolved: Boolean! + + """ + The line in the file to which this thread refers + """ + line: Int + + """ + Identifies the file path of this thread. + """ + path: String! + + """ + Identifies the pull request associated with this thread. + """ + pullRequest: PullRequest! + + """ + Identifies the repository associated with this thread. + """ + repository: Repository! + + """ + The user who resolved this thread + """ + resolvedBy: User + + """ + The side of the diff that the first line of the thread starts on (multi-line only) + """ + startDiffSide: DiffSide + + """ + The line of the first file diff in the thread. + """ + startLine: Int + + """ + The level at which the comments in the corresponding thread are targeted, can be a diff line or a file + """ + subjectType: PullRequestReviewThreadSubjectType! + + """ + Indicates whether the current viewer can reply to this thread. + """ + viewerCanReply: Boolean! + + """ + Whether or not the viewer can resolve this thread + """ + viewerCanResolve: Boolean! + + """ + Whether or not the viewer can unresolve this thread + """ + viewerCanUnresolve: Boolean! +} + +""" +The connection type for PullRequestTimelineItem. +""" +type PullRequestTimelineConnection { + """ + A list of edges. + """ + edges: [PullRequestTimelineItemEdge] + + """ + A list of nodes. + """ + nodes: [PullRequestTimelineItem] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An item in a pull request timeline +""" +union PullRequestTimelineItem @docsCategory(name: "pulls") = + | AssignedEvent + | BaseRefDeletedEvent + | BaseRefForcePushedEvent + | ClosedEvent + | Commit + | CommitCommentThread + | CrossReferencedEvent + | DemilestonedEvent + | DeployedEvent + | DeploymentEnvironmentChangedEvent + | HeadRefDeletedEvent + | HeadRefForcePushedEvent + | HeadRefRestoredEvent + | IssueComment + | LabeledEvent + | LockedEvent + | MergedEvent + | MilestonedEvent + | PullRequestReview + | PullRequestReviewComment + | PullRequestReviewThread + | ReferencedEvent + | RenamedTitleEvent + | ReopenedEvent + | ReviewDismissedEvent + | ReviewRequestRemovedEvent + | ReviewRequestedEvent + | SubscribedEvent + | UnassignedEvent + | UnlabeledEvent + | UnlockedEvent + | UnsubscribedEvent + | UserBlockedEvent + +""" +An edge in a connection. +""" +type PullRequestTimelineItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestTimelineItem +} + +""" +An item in a pull request timeline +""" +union PullRequestTimelineItems @docsCategory(name: "pulls") = + | AddedToMergeQueueEvent + | AddedToProjectEvent + | AddedToProjectV2Event + | AssignedEvent + | AutoMergeDisabledEvent + | AutoMergeEnabledEvent + | AutoRebaseEnabledEvent + | AutoSquashEnabledEvent + | AutomaticBaseChangeFailedEvent + | AutomaticBaseChangeSucceededEvent + | BaseRefChangedEvent + | BaseRefDeletedEvent + | BaseRefForcePushedEvent + | BlockedByAddedEvent + | BlockedByRemovedEvent + | BlockingAddedEvent + | BlockingRemovedEvent + | ClosedEvent + | CommentDeletedEvent + | ConnectedEvent + | ConvertToDraftEvent + | ConvertedFromDraftEvent + | ConvertedNoteToIssueEvent + | ConvertedToDiscussionEvent + | CrossReferencedEvent + | DemilestonedEvent + | DeployedEvent + | DeploymentEnvironmentChangedEvent + | DisconnectedEvent + | HeadRefDeletedEvent + | HeadRefForcePushedEvent + | HeadRefRestoredEvent + | IssueComment + | IssueCommentPinnedEvent + | IssueCommentUnpinnedEvent + | IssueFieldAddedEvent + | IssueFieldChangedEvent + | IssueFieldRemovedEvent + | IssueTypeAddedEvent + | IssueTypeChangedEvent + | IssueTypeRemovedEvent + | LabeledEvent + | LockedEvent + | MarkedAsDuplicateEvent + | MentionedEvent + | MergedEvent + | MilestonedEvent + | MovedColumnsInProjectEvent + | ParentIssueAddedEvent + | ParentIssueRemovedEvent + | PinnedEvent + | ProjectV2ItemStatusChangedEvent + | PullRequestCommit + | PullRequestCommitCommentThread + | PullRequestReview + | PullRequestReviewThread + | PullRequestRevisionMarker + | ReadyForReviewEvent + | ReferencedEvent + | RemovedFromMergeQueueEvent + | RemovedFromProjectEvent + | RemovedFromProjectV2Event + | RenamedTitleEvent + | ReopenedEvent + | ReviewDismissedEvent + | ReviewRequestRemovedEvent + | ReviewRequestedEvent + | SubIssueAddedEvent + | SubIssueRemovedEvent + | SubscribedEvent + | TransferredEvent + | UnassignedEvent + | UnlabeledEvent + | UnlockedEvent + | UnmarkedAsDuplicateEvent + | UnpinnedEvent + | UnsubscribedEvent + | UserBlockedEvent + +""" +The connection type for PullRequestTimelineItems. +""" +type PullRequestTimelineItemsConnection { + """ + A list of edges. + """ + edges: [PullRequestTimelineItemsEdge] + + """ + Identifies the count of items after applying `before` and `after` filters. + """ + filteredCount: Int! + + """ + A list of nodes. + """ + nodes: [PullRequestTimelineItems] + + """ + Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing. + """ + pageCount: Int! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + Identifies the date and time when the timeline was last updated. + """ + updatedAt: DateTime! +} + +""" +An edge in a connection. +""" +type PullRequestTimelineItemsEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PullRequestTimelineItems +} + +""" +The possible item types found in a timeline. +""" +enum PullRequestTimelineItemsItemType { + """ + Represents an 'added_to_merge_queue' event on a given pull request. + """ + ADDED_TO_MERGE_QUEUE_EVENT + + """ + Represents a 'added_to_project' event on a given issue or pull request. + """ + ADDED_TO_PROJECT_EVENT + + """ + Represents a 'added_to_project_v2' event on a given issue or pull request. + """ + ADDED_TO_PROJECT_V2_EVENT + + """ + Represents an 'assigned' event on any assignable object. + """ + ASSIGNED_EVENT + + """ + Represents a 'automatic_base_change_failed' event on a given pull request. + """ + AUTOMATIC_BASE_CHANGE_FAILED_EVENT + + """ + Represents a 'automatic_base_change_succeeded' event on a given pull request. + """ + AUTOMATIC_BASE_CHANGE_SUCCEEDED_EVENT + + """ + Represents a 'auto_merge_disabled' event on a given pull request. + """ + AUTO_MERGE_DISABLED_EVENT + + """ + Represents a 'auto_merge_enabled' event on a given pull request. + """ + AUTO_MERGE_ENABLED_EVENT + + """ + Represents a 'auto_rebase_enabled' event on a given pull request. + """ + AUTO_REBASE_ENABLED_EVENT + + """ + Represents a 'auto_squash_enabled' event on a given pull request. + """ + AUTO_SQUASH_ENABLED_EVENT + + """ + Represents a 'base_ref_changed' event on a given issue or pull request. + """ + BASE_REF_CHANGED_EVENT + + """ + Represents a 'base_ref_deleted' event on a given pull request. + """ + BASE_REF_DELETED_EVENT + + """ + Represents a 'base_ref_force_pushed' event on a given pull request. + """ + BASE_REF_FORCE_PUSHED_EVENT + + """ + Represents a 'blocked_by_added' event on a given issue. + """ + BLOCKED_BY_ADDED_EVENT + + """ + Represents a 'blocked_by_removed' event on a given issue. + """ + BLOCKED_BY_REMOVED_EVENT + + """ + Represents a 'blocking_added' event on a given issue. + """ + BLOCKING_ADDED_EVENT + + """ + Represents a 'blocking_removed' event on a given issue. + """ + BLOCKING_REMOVED_EVENT + + """ + Represents a 'closed' event on any `Closable`. + """ + CLOSED_EVENT + + """ + Represents a 'comment_deleted' event on a given issue or pull request. + """ + COMMENT_DELETED_EVENT + + """ + Represents a 'connected' event on a given issue or pull request. + """ + CONNECTED_EVENT + + """ + Represents a 'converted_from_draft' event on a given issue or pull request. + """ + CONVERTED_FROM_DRAFT_EVENT + + """ + Represents a 'converted_note_to_issue' event on a given issue or pull request. + """ + CONVERTED_NOTE_TO_ISSUE_EVENT + + """ + Represents a 'converted_to_discussion' event on a given issue. + """ + CONVERTED_TO_DISCUSSION_EVENT + + """ + Represents a 'convert_to_draft' event on a given pull request. + """ + CONVERT_TO_DRAFT_EVENT + + """ + Represents a mention made by one issue or pull request to another. + """ + CROSS_REFERENCED_EVENT + + """ + Represents a 'demilestoned' event on a given issue or pull request. + """ + DEMILESTONED_EVENT + + """ + Represents a 'deployed' event on a given pull request. + """ + DEPLOYED_EVENT + + """ + Represents a 'deployment_environment_changed' event on a given pull request. + """ + DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT + + """ + Represents a 'disconnected' event on a given issue or pull request. + """ + DISCONNECTED_EVENT + + """ + Represents a 'head_ref_deleted' event on a given pull request. + """ + HEAD_REF_DELETED_EVENT + + """ + Represents a 'head_ref_force_pushed' event on a given pull request. + """ + HEAD_REF_FORCE_PUSHED_EVENT + + """ + Represents a 'head_ref_restored' event on a given pull request. + """ + HEAD_REF_RESTORED_EVENT + + """ + Represents a comment on an Issue. + """ + ISSUE_COMMENT + + """ + Represents a 'issue_comment_pinned' event on a given issue. + """ + ISSUE_COMMENT_PINNED_EVENT + + """ + Represents a 'issue_comment_unpinned' event on a given issue. + """ + ISSUE_COMMENT_UNPINNED_EVENT + + """ + Represents a 'issue_field_added' event on a given issue. + """ + ISSUE_FIELD_ADDED_EVENT + + """ + Represents a 'issue_field_changed' event on a given issue. + """ + ISSUE_FIELD_CHANGED_EVENT + + """ + Represents a 'issue_field_removed' event on a given issue. + """ + ISSUE_FIELD_REMOVED_EVENT + + """ + Represents a 'issue_type_added' event on a given issue. + """ + ISSUE_TYPE_ADDED_EVENT + + """ + Represents a 'issue_type_changed' event on a given issue. + """ + ISSUE_TYPE_CHANGED_EVENT + + """ + Represents a 'issue_type_removed' event on a given issue. + """ + ISSUE_TYPE_REMOVED_EVENT + + """ + Represents a 'labeled' event on a given issue or pull request. + """ + LABELED_EVENT + + """ + Represents a 'locked' event on a given issue or pull request. + """ + LOCKED_EVENT + + """ + Represents a 'marked_as_duplicate' event on a given issue or pull request. + """ + MARKED_AS_DUPLICATE_EVENT + + """ + Represents a 'mentioned' event on a given issue or pull request. + """ + MENTIONED_EVENT + + """ + Represents a 'merged' event on a given pull request. + """ + MERGED_EVENT + + """ + Represents a 'milestoned' event on a given issue or pull request. + """ + MILESTONED_EVENT + + """ + Represents a 'moved_columns_in_project' event on a given issue or pull request. + """ + MOVED_COLUMNS_IN_PROJECT_EVENT + + """ + Represents a 'parent_issue_added' event on a given issue. + """ + PARENT_ISSUE_ADDED_EVENT + + """ + Represents a 'parent_issue_removed' event on a given issue. + """ + PARENT_ISSUE_REMOVED_EVENT + + """ + Represents a 'pinned' event on a given issue or pull request. + """ + PINNED_EVENT + + """ + Represents a 'project_v2_item_status_changed' event on a given issue or pull request. + """ + PROJECT_V2_ITEM_STATUS_CHANGED_EVENT + + """ + Represents a Git commit part of a pull request. + """ + PULL_REQUEST_COMMIT + + """ + Represents a commit comment thread part of a pull request. + """ + PULL_REQUEST_COMMIT_COMMENT_THREAD + + """ + A review object for a given pull request. + """ + PULL_REQUEST_REVIEW + + """ + A threaded list of comments for a given pull request. + """ + PULL_REQUEST_REVIEW_THREAD + + """ + Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits. + """ + PULL_REQUEST_REVISION_MARKER + + """ + Represents a 'ready_for_review' event on a given pull request. + """ + READY_FOR_REVIEW_EVENT + + """ + Represents a 'referenced' event on a given `ReferencedSubject`. + """ + REFERENCED_EVENT + + """ + Represents a 'removed_from_merge_queue' event on a given pull request. + """ + REMOVED_FROM_MERGE_QUEUE_EVENT + + """ + Represents a 'removed_from_project' event on a given issue or pull request. + """ + REMOVED_FROM_PROJECT_EVENT + + """ + Represents a 'removed_from_project_v2' event on a given issue or pull request. + """ + REMOVED_FROM_PROJECT_V2_EVENT + + """ + Represents a 'renamed' event on a given issue or pull request + """ + RENAMED_TITLE_EVENT + + """ + Represents a 'reopened' event on any `Closable`. + """ + REOPENED_EVENT + + """ + Represents a 'review_dismissed' event on a given issue or pull request. + """ + REVIEW_DISMISSED_EVENT + + """ + Represents an 'review_requested' event on a given pull request. + """ + REVIEW_REQUESTED_EVENT + + """ + Represents an 'review_request_removed' event on a given pull request. + """ + REVIEW_REQUEST_REMOVED_EVENT + + """ + Represents a 'subscribed' event on a given `Subscribable`. + """ + SUBSCRIBED_EVENT + + """ + Represents a 'sub_issue_added' event on a given issue. + """ + SUB_ISSUE_ADDED_EVENT + + """ + Represents a 'sub_issue_removed' event on a given issue. + """ + SUB_ISSUE_REMOVED_EVENT + + """ + Represents a 'transferred' event on a given issue or pull request. + """ + TRANSFERRED_EVENT + + """ + Represents an 'unassigned' event on any assignable object. + """ + UNASSIGNED_EVENT + + """ + Represents an 'unlabeled' event on a given issue or pull request. + """ + UNLABELED_EVENT + + """ + Represents an 'unlocked' event on a given issue or pull request. + """ + UNLOCKED_EVENT + + """ + Represents an 'unmarked_as_duplicate' event on a given issue or pull request. + """ + UNMARKED_AS_DUPLICATE_EVENT + + """ + Represents an 'unpinned' event on a given issue or pull request. + """ + UNPINNED_EVENT + + """ + Represents an 'unsubscribed' event on a given `Subscribable`. + """ + UNSUBSCRIBED_EVENT + + """ + Represents a 'user_blocked' event on a given user. + """ + USER_BLOCKED_EVENT +} + +""" +The possible target states when updating a pull request. +""" +enum PullRequestUpdateState @docsCategory(name: "pulls") { + """ + A pull request that has been closed without being merged. + """ + CLOSED + + """ + A pull request that is still open. + """ + OPEN +} + +""" +A Git push. +""" +type Push implements Node @docsCategory(name: "git") { + """ + The Node ID of the Push object + """ + id: ID! + + """ + The SHA after the push + """ + nextSha: GitObjectID + + """ + The permalink for this push. + """ + permalink: URI! + + """ + The SHA before the push + """ + previousSha: GitObjectID + + """ + The actor who pushed + """ + pusher: Actor! + + """ + The repository that was pushed to + """ + repository: Repository! +} + +""" +A team, user, or app who has the ability to push to a protected branch. +""" +type PushAllowance implements Node @docsCategory(name: "branches") { + """ + The actor that can push. + """ + actor: PushAllowanceActor + + """ + Identifies the branch protection rule associated with the allowed user, team, or app. + """ + branchProtectionRule: BranchProtectionRule + + """ + The Node ID of the PushAllowance object + """ + id: ID! +} + +""" +Types that can be an actor. +""" +union PushAllowanceActor @docsCategory(name: "branches") = App | Team | User + +""" +The connection type for PushAllowance. +""" +type PushAllowanceConnection { + """ + A list of edges. + """ + edges: [PushAllowanceEdge] + + """ + A list of nodes. + """ + nodes: [PushAllowance] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type PushAllowanceEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: PushAllowance +} + +""" +The query root of GitHub's GraphQL interface. +""" +type Query implements Node @docsCategory(name: "meta") { + """ + Look up a code of conduct by its key + """ + codeOfConduct( + """ + The code of conduct's key + """ + key: String! + ): CodeOfConduct + + """ + Look up a code of conduct by its key + """ + codesOfConduct: [CodeOfConduct] + + """ + Look up an enterprise by URL slug. + """ + enterprise( + """ + The enterprise invitation token. + """ + invitationToken: String + + """ + The enterprise URL slug. + """ + slug: String! + ): Enterprise + + """ + Look up a pending enterprise administrator invitation by invitee, enterprise and role. + """ + enterpriseAdministratorInvitation( + """ + The slug of the enterprise the user was invited to join. + """ + enterpriseSlug: String! + + """ + The role for the enterprise member invitation. + """ + role: EnterpriseAdministratorRole! + + """ + The login of the user invited to join the enterprise. + """ + userLogin: String! + ): EnterpriseAdministratorInvitation + + """ + Look up a pending enterprise administrator invitation by invitation token. + """ + enterpriseAdministratorInvitationByToken( + """ + The invitation token sent with the invitation email. + """ + invitationToken: String! + ): EnterpriseAdministratorInvitation + + """ + Look up a pending enterprise unaffiliated member invitation by invitee and enterprise. + """ + enterpriseMemberInvitation( + """ + The slug of the enterprise the user was invited to join. + """ + enterpriseSlug: String! + + """ + The login of the user invited to join the enterprise. + """ + userLogin: String! + ): EnterpriseMemberInvitation + + """ + Look up a pending enterprise unaffiliated member invitation by invitation token. + """ + enterpriseMemberInvitationByToken( + """ + The invitation token sent with the invitation email. + """ + invitationToken: String! + ): EnterpriseMemberInvitation + + """ + ID of the object. + """ + id: ID! + + """ + Look up an open source license by its key + """ + license( + """ + The license's downcased SPDX ID + """ + key: String! + ): License + + """ + Return a list of known open source licenses + """ + licenses: [License]! + + """ + Get alphabetically sorted list of Marketplace categories + """ + marketplaceCategories( + """ + Exclude categories with no listings. + """ + excludeEmpty: Boolean + + """ + Returns top level categories only, excluding any subcategories. + """ + excludeSubcategories: Boolean + + """ + Return only the specified categories. + """ + includeCategories: [String!] + ): [MarketplaceCategory!]! + + """ + Look up a Marketplace category by its slug. + """ + marketplaceCategory( + """ + The URL slug of the category. + """ + slug: String! + + """ + Also check topic aliases for the category slug + """ + useTopicAliases: Boolean + ): MarketplaceCategory + + """ + Look up a single Marketplace listing + """ + marketplaceListing( + """ + Select the listing that matches this slug. It's the short name of the listing used in its URL. + """ + slug: String! + ): MarketplaceListing + + """ + Look up Marketplace listings + """ + marketplaceListings( + """ + Select listings that can be administered by the specified user. + """ + adminId: ID + + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Select listings visible to the viewer even if they are not approved. If omitted or + false, only approved listings will be returned. + """ + allStates: Boolean + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Select only listings with the given category. + """ + categorySlug: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Select listings for products owned by the specified organization. + """ + organizationId: ID + + """ + Select only listings where the primary category matches the given category slug. + """ + primaryCategoryOnly: Boolean = false + + """ + Select the listings with these slugs, if they are visible to the viewer. + """ + slugs: [String] + + """ + Also check topic aliases for the category slug + """ + useTopicAliases: Boolean + + """ + Select listings to which user has admin access. If omitted, listings visible to the + viewer are returned. + """ + viewerCanAdmin: Boolean + + """ + Select only listings that offer a free trial. + """ + withFreeTrialsOnly: Boolean = false + ): MarketplaceListingConnection! + + """ + Return information about the GitHub instance + """ + meta: GitHubMetadata! + + """ + Fetches an object given its ID. + """ + node( + """ + ID of the object. + """ + id: ID! + ): Node + + """ + Lookup nodes by a list of IDs. + """ + nodes( + """ + The list of node IDs. + """ + ids: [ID!]! + ): [Node]! + + """ + Lookup a organization by login. + """ + organization( + """ + The organization's login. + """ + login: String! + ): Organization + + """ + The client's rate limit information. + """ + rateLimit( + """ + If true, calculate the cost for the query without evaluating it + """ + dryRun: Boolean = false + ): RateLimit + + """ + Workaround for re-exposing the root query object. (Refer to + https://github.com/facebook/relay/issues/112 for more information.) + """ + relay: Query! + + """ + Lookup a given repository by the owner and repository name. + """ + repository( + """ + Follow repository renames. If disabled, a repository referenced by its old name will return an error. + """ + followRenames: Boolean = true + + """ + The name of the repository + """ + name: String! + + """ + The login field of a user or organization + """ + owner: String! + ): Repository + + """ + Lookup a repository owner (ie. either a User or an Organization) by login. + """ + repositoryOwner( + """ + The username to lookup the owner by. + """ + login: String! + ): RepositoryOwner + + """ + Lookup resource by a URL. + """ + resource( + """ + The URL. + """ + url: URI! + ): UniformResourceLocatable + + """ + Perform a search across resources, returning a maximum of 1,000 results. + """ + search( + """ + 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 + + """ + The search string to look for. GitHub search syntax is supported. For more + information, see "[Searching on + GitHub](https://docs.github.com/search-github/searching-on-github)," + "[Understanding the search syntax](https://docs.github.com/search-github/getting-started-with-searching-on-github/understanding-the-search-syntax)," + and "[Sorting search results](https://docs.github.com/search-github/getting-started-with-searching-on-github/sorting-search-results)." + """ + query: String! + + """ + The types of search items to search within. + """ + type: SearchType! + ): SearchResultItemConnection! + + """ + GitHub Security Advisories + """ + securityAdvisories( + """ + 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 + + """ + A list of classifications to filter advisories by. + """ + classifications: [SecurityAdvisoryClassification!] + + """ + The EPSS percentage to filter advisories by. + """ + epssPercentage: Float + + """ + The EPSS percentile to filter advisories by. + """ + epssPercentile: Float + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Filter advisories by identifier, e.g. GHSA or CVE. + """ + identifier: SecurityAdvisoryIdentifierFilter + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for the returned topics. + """ + orderBy: SecurityAdvisoryOrder = {field: UPDATED_AT, direction: DESC} + + """ + Filter advisories to those published since a time in the past. + """ + publishedSince: DateTime + + """ + Filter advisories to those updated since a time in the past. + """ + updatedSince: DateTime + ): SecurityAdvisoryConnection! + + """ + Fetch a Security Advisory by its GHSA ID + """ + securityAdvisory( + """ + GitHub Security Advisory ID. + """ + ghsaId: String! + ): SecurityAdvisory + + """ + Software Vulnerabilities documented by GitHub Security Advisories + """ + securityVulnerabilities( + """ + 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 + + """ + A list of advisory classifications to filter vulnerabilities by. + """ + classifications: [SecurityAdvisoryClassification!] + + """ + An ecosystem to filter vulnerabilities by. + """ + ecosystem: SecurityAdvisoryEcosystem + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for the returned topics. + """ + orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC} + + """ + A package name to filter vulnerabilities by. + """ + package: String + + """ + A list of severities to filter vulnerabilities by. + """ + severities: [SecurityAdvisorySeverity!] + ): SecurityVulnerabilityConnection! + + """ + Users and organizations who can be sponsored via GitHub Sponsors. + """ + sponsorables( + """ + 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 + + """ + Optional filter for which dependencies should be checked for sponsorable + owners. Only sponsorable owners of dependencies in this ecosystem will be + included. Used when onlyDependencies = true. + + **Upcoming Change on 2022-07-01 UTC** + **Description:** `dependencyEcosystem` will be removed. Use the ecosystem argument instead. + **Reason:** The type is switching from SecurityAdvisoryEcosystem to DependencyGraphEcosystem. + """ + dependencyEcosystem: SecurityAdvisoryEcosystem + + """ + Optional filter for which dependencies should be checked for sponsorable + owners. Only sponsorable owners of dependencies in this ecosystem will be + included. Used when onlyDependencies = true. + """ + ecosystem: DependencyGraphEcosystem + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Whether only sponsorables who own the viewer's dependencies will be + returned. Must be authenticated to use. Can check an organization instead + for their dependencies owned by sponsorables by passing + orgLoginForDependencies. + """ + onlyDependencies: Boolean = false + + """ + Ordering options for users and organizations returned from the connection. + """ + orderBy: SponsorableOrder = {field: LOGIN, direction: ASC} + + """ + Optional organization username for whose dependencies should be checked. + Used when onlyDependencies = true. Omit to check your own dependencies. If + you are not an administrator of the organization, only dependencies from its + public repositories will be considered. + """ + orgLoginForDependencies: String + ): SponsorableItemConnection! + + """ + Look up a topic by name. + """ + topic( + """ + The topic's name. + """ + name: String! + ): Topic + + """ + Lookup a user by login. + """ + user( + """ + The user's login. + """ + login: String! + ): User + + """ + The currently authenticated user. + """ + viewer: User! +} + +""" +Represents the client's rate limit. +""" +type RateLimit @docsCategory(name: "meta") { + """ + The point cost for the current query counting against the rate limit. + """ + cost: Int! + + """ + The maximum number of points the client is permitted to consume in a 60 minute window. + """ + limit: Int! + + """ + The maximum number of nodes this query may return + """ + nodeCount: Int! + + """ + The number of points remaining in the current rate limit window. + """ + remaining: Int! + + """ + The time at which the current rate limit window resets in UTC epoch seconds. + """ + resetAt: DateTime! + + """ + The number of points used in the current rate limit window. + """ + used: Int! +} + +""" +Represents a subject that can be reacted on. +""" +interface Reactable @docsCategory(name: "reactions") { + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the Reactable object + """ + id: ID! + + """ + 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! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! +} + +""" +The connection type for User. +""" +type ReactingUserConnection { + """ + A list of edges. + """ + edges: [ReactingUserEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user that's made a reaction. +""" +type ReactingUserEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: User! + + """ + The moment when the user made the reaction. + """ + reactedAt: DateTime! +} + +""" +An emoji reaction to a particular piece of content. +""" +type Reaction implements Node @docsCategory(name: "reactions") { + """ + Identifies the emoji reaction. + """ + content: ReactionContent! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the Reaction object + """ + id: ID! + + """ + The reactable piece of content + """ + reactable: Reactable! + + """ + Identifies the user who created this reaction. + """ + user: User +} + +""" +A list of reactions that have been left on the subject. +""" +type ReactionConnection { + """ + A list of edges. + """ + edges: [ReactionEdge] + + """ + A list of nodes. + """ + nodes: [Reaction] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + Whether or not the authenticated user has left a reaction on the subject. + """ + viewerHasReacted: Boolean! +} + +""" +Emojis that can be attached to Issues, Pull Requests and Comments. +""" +enum ReactionContent @docsCategory(name: "reactions") { + """ + Represents the `:confused:` emoji. + """ + CONFUSED + + """ + Represents the `:eyes:` emoji. + """ + EYES + + """ + Represents the `:heart:` emoji. + """ + HEART + + """ + Represents the `:hooray:` emoji. + """ + HOORAY + + """ + Represents the `:laugh:` emoji. + """ + LAUGH + + """ + Represents the `:rocket:` emoji. + """ + ROCKET + + """ + Represents the `:-1:` emoji. + """ + THUMBS_DOWN + + """ + Represents the `:+1:` emoji. + """ + THUMBS_UP +} + +""" +An edge in a connection. +""" +type ReactionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Reaction +} + +""" +A group of emoji reactions to a particular piece of content. +""" +type ReactionGroup @docsCategory(name: "reactions") { + """ + Identifies the emoji reaction. + """ + content: ReactionContent! + + """ + Identifies when the reaction was created. + """ + createdAt: DateTime + + """ + Reactors to the reaction subject with the emotion represented by this reaction group. + """ + reactors( + """ + 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 + ): ReactorConnection! + + """ + The subject that was reacted to. + """ + subject: Reactable! + + """ + Users who have reacted to the reaction subject with the emotion represented by this reaction group + """ + users( + """ + 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 + ): ReactingUserConnection! + @deprecated( + reason: "Reactors can now be mannequins, bots, and organizations. Use the `reactors` field instead. Removal on 2021-10-01 UTC." + ) + + """ + Whether or not the authenticated user has left a reaction on the subject. + """ + viewerHasReacted: Boolean! +} + +""" +Ways in which lists of reactions can be ordered upon return. +""" +input ReactionOrder @docsCategory(name: "reactions") { + """ + The direction in which to order reactions by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order reactions by. + """ + field: ReactionOrderField! +} + +""" +A list of fields that reactions can be ordered by. +""" +enum ReactionOrderField @docsCategory(name: "reactions") { + """ + Allows ordering a list of reactions by when they were created. + """ + CREATED_AT +} + +""" +Types that can be assigned to reactions. +""" +union Reactor @docsCategory(name: "reactions") = Bot | Mannequin | Organization | User + +""" +The connection type for Reactor. +""" +type ReactorConnection { + """ + A list of edges. + """ + edges: [ReactorEdge] + + """ + A list of nodes. + """ + nodes: [Reactor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents an author of a reaction. +""" +type ReactorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The author of the reaction. + """ + node: Reactor! + + """ + The moment when the user made the reaction. + """ + reactedAt: DateTime! +} + +""" +Represents a 'ready_for_review' event on a given pull request. +""" +type ReadyForReviewEvent implements Node & UniformResourceLocatable @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ReadyForReviewEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + The HTTP path for this ready for review event. + """ + resourcePath: URI! + + """ + The HTTP URL for this ready for review event. + """ + url: URI! +} + +""" +Represents a Git reference. +""" +type Ref implements Node @docsCategory(name: "git") { + """ + A list of pull requests with this ref as the head ref. + """ + associatedPullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection! + + """ + Branch protection rules for this ref + """ + branchProtectionRule: BranchProtectionRule + + """ + Compares the current ref as a base ref to another head ref, if the comparison can be made. + """ + compare( + """ + The head ref to compare against. + """ + headRef: String! + ): Comparison + + """ + The Node ID of the Ref object + """ + id: ID! + + """ + The ref name. + """ + name: String! + + """ + The ref's prefix, such as `refs/heads/` or `refs/tags/`. + """ + prefix: String! + + """ + Branch protection rules that are viewable by non-admins + """ + refUpdateRule: RefUpdateRule + + """ + The repository the ref belongs to. + """ + repository: Repository! + + """ + A list of rules from active Repository and Organization rulesets that apply to this ref. + """ + rules( + """ + 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 + + """ + Ordering options for repository rules. + """ + orderBy: RepositoryRuleOrder = {field: UPDATED_AT, direction: DESC} + ): RepositoryRuleConnection + + """ + The object the ref points to. Returns null when object does not exist. + """ + target: GitObject +} + +""" +The connection type for Ref. +""" +type RefConnection { + """ + A list of edges. + """ + edges: [RefEdge] + + """ + A list of nodes. + """ + nodes: [Ref] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RefEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Ref +} + +""" +Parameters to be used for the ref_name condition +""" +type RefNameConditionTarget @docsCategory(name: "branches") { + """ + Array of ref names or patterns to exclude. The condition will not pass if any of these patterns match. + """ + exclude: [String!]! + + """ + Array of ref names or patterns to include. One of these patterns must match + for the condition to pass. Also accepts `~DEFAULT_BRANCH` to include the + default branch or `~ALL` to include all branches. + """ + include: [String!]! +} + +""" +Parameters to be used for the ref_name condition +""" +input RefNameConditionTargetInput @docsCategory(name: "branches") { + """ + Array of ref names or patterns to exclude. The condition will not pass if any of these patterns match. + """ + exclude: [String!]! + + """ + Array of ref names or patterns to include. One of these patterns must match + for the condition to pass. Also accepts `~DEFAULT_BRANCH` to include the + default branch or `~ALL` to include all branches. + """ + include: [String!]! +} + +""" +Ways in which lists of git refs can be ordered upon return. +""" +input RefOrder @docsCategory(name: "git") { + """ + The direction in which to order refs by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order refs by. + """ + field: RefOrderField! +} + +""" +Properties by which ref connections can be ordered. +""" +enum RefOrderField @docsCategory(name: "git") { + """ + Order refs by their alphanumeric name + """ + ALPHABETICAL + + """ + Order refs by underlying commit date if the ref prefix is refs/tags/ + """ + TAG_COMMIT_DATE +} + +""" +A ref update +""" +input RefUpdate @docsCategory(name: "git") { + """ + The value this ref should be updated to. + """ + afterOid: GitObjectID! + + """ + The value this ref needs to point to before the update. + """ + beforeOid: GitObjectID + + """ + Force a non fast-forward update. + """ + force: Boolean = false + + """ + The fully qualified name of the ref to be update. For example `refs/heads/branch-name` + """ + name: GitRefname! +} + +""" +Branch protection rules that are enforced on the viewer. +""" +type RefUpdateRule @docsCategory(name: "git") { + """ + Can this branch be deleted. + """ + allowsDeletions: Boolean! + + """ + Are force pushes allowed on this branch. + """ + allowsForcePushes: Boolean! + + """ + Can matching branches be created. + """ + blocksCreations: Boolean! + + """ + Identifies the protection rule pattern. + """ + pattern: String! + + """ + Number of approving reviews required to update matching branches. + """ + requiredApprovingReviewCount: Int + + """ + List of required status check contexts that must pass for commits to be accepted to matching branches. + """ + requiredStatusCheckContexts: [String] + + """ + Are reviews from code owners required to update matching branches. + """ + requiresCodeOwnerReviews: Boolean! + + """ + Are conversations required to be resolved before merging. + """ + requiresConversationResolution: Boolean! + + """ + Are merge commits prohibited from being pushed to this branch. + """ + requiresLinearHistory: Boolean! + + """ + Are commits required to be signed. + """ + requiresSignatures: Boolean! + + """ + Is the viewer allowed to dismiss reviews. + """ + viewerAllowedToDismissReviews: Boolean! + + """ + Can the viewer push to the branch + """ + viewerCanPush: Boolean! +} + +""" +Represents a 'referenced' event on a given `ReferencedSubject`. +""" +type ReferencedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the commit associated with the 'referenced' event. + """ + commit: Commit + + """ + Identifies the repository associated with the 'referenced' event. + """ + commitRepository: Repository! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ReferencedEvent object + """ + id: ID! + + """ + Reference originated in a different repository. + """ + isCrossRepository: Boolean! + + """ + Checks if the commit message itself references the subject. Can be false in the case of a commit comment reference. + """ + isDirectReference: Boolean! + + """ + Object referenced by event. + """ + subject: ReferencedSubject! +} + +""" +Any referencable object +""" +union ReferencedSubject @docsCategory(name: "issues") = Issue | PullRequest + +""" +Autogenerated input type of RegenerateEnterpriseIdentityProviderRecoveryCodes +""" +input RegenerateEnterpriseIdentityProviderRecoveryCodesInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set an identity provider. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) +} + +""" +Autogenerated return type of RegenerateEnterpriseIdentityProviderRecoveryCodes. +""" +type RegenerateEnterpriseIdentityProviderRecoveryCodesPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The identity provider for the enterprise. + """ + identityProvider: EnterpriseIdentityProvider +} + +""" +Autogenerated input type of RegenerateVerifiableDomainToken +""" +input RegenerateVerifiableDomainTokenInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the verifiable domain to regenerate the verification token of. + """ + id: ID! @possibleTypes(concreteTypes: ["VerifiableDomain"]) +} + +""" +Autogenerated return type of RegenerateVerifiableDomainToken. +""" +type RegenerateVerifiableDomainTokenPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The verification token that was generated. + """ + verificationToken: String +} + +""" +Autogenerated input type of RejectDeployments +""" +input RejectDeploymentsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Optional comment for rejecting deployments + """ + comment: String = "" + + """ + The ids of environments to reject deployments + """ + environmentIds: [ID!]! + + """ + The node ID of the workflow run containing the pending deployments. + """ + workflowRunId: ID! @possibleTypes(concreteTypes: ["WorkflowRun"]) +} + +""" +Autogenerated return type of RejectDeployments. +""" +type RejectDeploymentsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The affected deployments. + """ + deployments: [Deployment!] +} + +""" +A release contains the content for a release. +""" +type Release implements Node & Reactable & UniformResourceLocatable @docsCategory(name: "releases") { + """ + The author of the release + """ + author: User + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The description of the release. + """ + description: String + + """ + The description of this release rendered to HTML. + """ + descriptionHTML: HTML + + """ + The Node ID of the Release object + """ + id: ID! + + """ + Whether or not the release is immutable + """ + immutable: Boolean! + + """ + Whether or not the release is a draft + """ + isDraft: Boolean! + + """ + Whether or not the release is the latest releast + """ + isLatest: Boolean! + + """ + Whether or not the release is a prerelease + """ + isPrerelease: Boolean! + + """ + A list of users mentioned in the release description + """ + mentions( + """ + 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 + ): UserConnection + + """ + The title of the release. + """ + name: String + + """ + Identifies the date and time when the release was created. + """ + 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! + + """ + List of releases assets which are dependent on this release. + """ + releaseAssets( + """ + 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 + + """ + A name to filter the assets by. + """ + name: String + ): ReleaseAssetConnection! + + """ + The repository that the release belongs to. + """ + repository: Repository! + + """ + The HTTP path for this issue + """ + resourcePath: URI! + + """ + A description of the release, rendered to HTML without any links in it. + """ + shortDescriptionHTML( + """ + How many characters to return. + """ + limit: Int = 200 + ): HTML + + """ + The Git tag the release points to + """ + tag: Ref + + """ + The tag commit for this release. + """ + tagCommit: Commit + + """ + The name of the release's Git tag + """ + tagName: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this issue + """ + url: URI! + + """ + Can user react to this subject + """ + viewerCanReact: Boolean! +} + +""" +A release asset contains the content for a release asset. +""" +type ReleaseAsset implements Node @docsCategory(name: "releases") { + """ + The asset's content-type + """ + contentType: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The SHA256 digest of the asset + """ + digest: String + + """ + The number of times this asset was downloaded + """ + downloadCount: Int! + + """ + Identifies the URL where you can download the release asset via the browser. + """ + downloadUrl: URI! + + """ + The Node ID of the ReleaseAsset object + """ + id: ID! + + """ + Identifies the title of the release asset. + """ + name: String! + + """ + Release that the asset is associated with + """ + release: Release + + """ + The size (in bytes) of the asset + """ + size: Int! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The user that performed the upload + """ + uploadedBy: User! + + """ + Identifies the URL of the release asset. + """ + url: URI! +} + +""" +The connection type for ReleaseAsset. +""" +type ReleaseAssetConnection { + """ + A list of edges. + """ + edges: [ReleaseAssetEdge] + + """ + A list of nodes. + """ + nodes: [ReleaseAsset] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ReleaseAssetEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ReleaseAsset +} + +""" +The connection type for Release. +""" +type ReleaseConnection { + """ + A list of edges. + """ + edges: [ReleaseEdge] + + """ + A list of nodes. + """ + nodes: [Release] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ReleaseEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Release +} + +""" +Ways in which lists of releases can be ordered upon return. +""" +input ReleaseOrder @docsCategory(name: "releases") { + """ + The direction in which to order releases by the specified field. + """ + direction: OrderDirection! + + """ + The field in which to order releases by. + """ + field: ReleaseOrderField! +} + +""" +Properties by which release connections can be ordered. +""" +enum ReleaseOrderField @docsCategory(name: "releases") { + """ + Order releases by creation time + """ + CREATED_AT + + """ + Order releases alphabetically by name + """ + NAME +} + +""" +Autogenerated input type of RemoveAssigneesFromAssignable +""" +input RemoveAssigneesFromAssignableInput { + """ + The id of the assignable object to remove assignees from. + """ + assignableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Assignable") + + """ + The ids of actors to remove as assignees. + """ + assigneeIds: [ID!]! + @possibleTypes( + concreteTypes: ["Bot", "EnterpriseUserAccount", "Mannequin", "Organization", "User"] + abstractType: "Actor" + ) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated return type of RemoveAssigneesFromAssignable. +""" +type RemoveAssigneesFromAssignablePayload { + """ + The item that was unassigned. + """ + assignable: Assignable + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of RemoveBlockedBy +""" +input RemoveBlockedByInput { + """ + The ID of the blocking issue. + """ + blockingIssueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the blocked issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of RemoveBlockedBy. +""" +type RemoveBlockedByPayload { + """ + The previously blocking issue. + """ + blockingIssue: Issue + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The previously blocked issue. + """ + issue: Issue +} + +""" +Autogenerated input type of RemoveEnterpriseAdmin +""" +input RemoveEnterpriseAdminInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Enterprise ID from which to remove the administrator. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of the user to remove as an administrator. + """ + login: String! +} + +""" +Autogenerated return type of RemoveEnterpriseAdmin. +""" +type RemoveEnterpriseAdminPayload { + """ + The user who was removed as an administrator. + """ + admin: User + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated enterprise. + """ + enterprise: Enterprise + + """ + A message confirming the result of removing an administrator. + """ + message: String + + """ + The viewer performing the mutation. + """ + viewer: User +} + +""" +Autogenerated input type of RemoveEnterpriseIdentityProvider +""" +input RemoveEnterpriseIdentityProviderInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise from which to remove the identity provider. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) +} + +""" +Autogenerated return type of RemoveEnterpriseIdentityProvider. +""" +type RemoveEnterpriseIdentityProviderPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The identity provider that was removed from the enterprise. + """ + identityProvider: EnterpriseIdentityProvider +} + +""" +Autogenerated input type of RemoveEnterpriseMember +""" +input RemoveEnterpriseMemberInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise from which the user should be removed. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the user to remove from the enterprise. + """ + userId: ID! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of RemoveEnterpriseMember. +""" +type RemoveEnterpriseMemberPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated enterprise. + """ + enterprise: Enterprise + + """ + The user that was removed from the enterprise. + """ + user: User + + """ + The viewer performing the mutation. + """ + viewer: User +} + +""" +Autogenerated input type of RemoveEnterpriseOrganization +""" +input RemoveEnterpriseOrganizationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise from which the organization should be removed. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the organization to remove from the enterprise. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of RemoveEnterpriseOrganization. +""" +type RemoveEnterpriseOrganizationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated enterprise. + """ + enterprise: Enterprise + + """ + The organization that was removed from the enterprise. + """ + organization: Organization + + """ + The viewer performing the mutation. + """ + viewer: User +} + +""" +Autogenerated input type of RemoveEnterpriseSupportEntitlement +""" +input RemoveEnterpriseSupportEntitlementInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Enterprise which the admin belongs to. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of a member who will lose the support entitlement. + """ + login: String! +} + +""" +Autogenerated return type of RemoveEnterpriseSupportEntitlement. +""" +type RemoveEnterpriseSupportEntitlementPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of removing the support entitlement. + """ + message: String +} + +""" +Autogenerated input type of RemoveLabelsFromLabelable +""" +input RemoveLabelsFromLabelableInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ids of labels to remove. + """ + labelIds: [ID!]! @possibleTypes(concreteTypes: ["Label"]) + + """ + The id of the Labelable to remove labels from. + """ + labelableId: ID! @possibleTypes(concreteTypes: ["Discussion", "Issue", "PullRequest"], abstractType: "Labelable") +} + +""" +Autogenerated return type of RemoveLabelsFromLabelable. +""" +type RemoveLabelsFromLabelablePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Labelable the labels were removed from. + """ + labelable: Labelable +} + +""" +Autogenerated input type of RemoveOutsideCollaborator +""" +input RemoveOutsideCollaboratorInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the organization to remove the outside collaborator from. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The ID of the outside collaborator to remove. + """ + userId: ID! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of RemoveOutsideCollaborator. +""" +type RemoveOutsideCollaboratorPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The user that was removed as an outside collaborator. + """ + removedUser: User +} + +""" +Autogenerated input type of RemovePullRequestCreationCapBypassUsers +""" +input RemovePullRequestCreationCapBypassUsersInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The Node IDs of the users to remove from the bypass list. + """ + userIds: [ID!]! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of RemovePullRequestCreationCapBypassUsers. +""" +type RemovePullRequestCreationCapBypassUsersPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository with the updated bypass list. + """ + repository: Repository +} + +""" +Autogenerated input type of RemoveReaction +""" +input RemoveReactionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of the emoji reaction to remove. + """ + content: ReactionContent! + + """ + The Node ID of the subject to modify. + """ + subjectId: ID! + @possibleTypes( + concreteTypes: [ + "CommitComment" + "Discussion" + "DiscussionComment" + "Issue" + "IssueComment" + "PullRequest" + "PullRequestReview" + "PullRequestReviewComment" + "Release" + ] + abstractType: "Reactable" + ) +} + +""" +Autogenerated return type of RemoveReaction. +""" +type RemoveReactionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The reaction object. + """ + reaction: Reaction + + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + + """ + The reactable subject. + """ + subject: Reactable +} + +""" +Autogenerated input type of RemoveStar +""" +input RemoveStarInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Starrable ID to unstar. + """ + starrableId: ID! @possibleTypes(concreteTypes: ["Gist", "Repository", "Topic"], abstractType: "Starrable") +} + +""" +Autogenerated return type of RemoveStar. +""" +type RemoveStarPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The starrable. + """ + starrable: Starrable +} + +""" +Autogenerated input type of RemoveSubIssue +""" +input RemoveSubIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The id of the sub-issue. + """ + subIssueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of RemoveSubIssue. +""" +type RemoveSubIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The parent of the sub-issue. + """ + issue: Issue + + """ + The sub-issue of the parent. + """ + subIssue: Issue +} + +""" +Autogenerated input type of RemoveUpvote +""" +input RemoveUpvoteInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion or comment to remove upvote. + """ + subjectId: ID! @possibleTypes(concreteTypes: ["Discussion", "DiscussionComment"], abstractType: "Votable") +} + +""" +Autogenerated return type of RemoveUpvote. +""" +type RemoveUpvotePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The votable subject. + """ + subject: Votable +} + +""" +Represents a 'removed_from_merge_queue' event on a given pull request. +""" +type RemovedFromMergeQueueEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the before commit SHA for the 'removed_from_merge_queue' event. + """ + beforeCommit: Commit + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The user who removed this Pull Request from the merge queue + """ + enqueuer: User + + """ + The Node ID of the RemovedFromMergeQueueEvent object + """ + id: ID! + + """ + The merge queue where this pull request was removed from. + """ + mergeQueue: MergeQueue + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest + + """ + The reason this pull request was removed from the queue. + """ + reason: String +} + +""" +Represents a 'removed_from_project' event on a given issue or pull request. +""" +type RemovedFromProjectEvent implements Node @docsCategory(name: "projects-classic") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The Node ID of the RemovedFromProjectEvent object + """ + id: ID! + + """ + Project referenced by event. + """ + project: Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Column name referenced by this project event. + """ + projectColumnName: String! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) +} + +""" +Represents a 'removed_from_project_v2' event on a given issue or pull request. +""" +type RemovedFromProjectV2Event implements Node & ProjectV2Event @docsCategory(name: "projects") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the RemovedFromProjectV2Event object + """ + id: ID! + + """ + Project referenced by event. + """ + project: ProjectV2 + + """ + Did this event result from workflow automation? + """ + wasAutomated: Boolean! +} + +""" +Represents a 'renamed' event on a given issue or pull request +""" +type RenamedTitleEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the current title of the issue or pull request. + """ + currentTitle: String! + + """ + The Node ID of the RenamedTitleEvent object + """ + id: ID! + + """ + Identifies the previous title of the issue or pull request. + """ + previousTitle: String! + + """ + Subject that was renamed. + """ + subject: RenamedTitleSubject! +} + +""" +An object which has a renamable title +""" +union RenamedTitleSubject @docsCategory(name: "issues") = Issue | PullRequest + +""" +Autogenerated input type of ReopenDiscussion +""" +input ReopenDiscussionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the discussion to be reopened. + """ + discussionId: ID! @possibleTypes(concreteTypes: ["Discussion"]) +} + +""" +Autogenerated return type of ReopenDiscussion. +""" +type ReopenDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that was reopened. + """ + discussion: Discussion +} + +""" +Autogenerated input type of ReopenIssue +""" +input ReopenIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the issue to be opened. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of ReopenIssue. +""" +type ReopenIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that was opened. + """ + issue: Issue +} + +""" +Autogenerated input type of ReopenPullRequest +""" +input ReopenPullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the pull request to be reopened. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of ReopenPullRequest. +""" +type ReopenPullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was reopened. + """ + pullRequest: PullRequest +} + +""" +Represents a 'reopened' event on any `Closable`. +""" +type ReopenedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Object that was reopened. + """ + closable: Closable! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ReopenedEvent object + """ + id: ID! + + """ + The reason the issue state was changed to open. + """ + stateReason: IssueStateReason +} + +""" +Autogenerated input type of ReorderEnvironment +""" +input ReorderEnvironmentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the environment to modify + """ + environmentId: ID! @possibleTypes(concreteTypes: ["Environment"]) + + """ + The desired position of the environment + """ + position: Int! +} + +""" +Autogenerated return type of ReorderEnvironment. +""" +type ReorderEnvironmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The environment that was reordered + """ + environment: Environment +} + +""" +Autogenerated input type of ReplaceActorsForAssignable +""" +input ReplaceActorsForAssignableInput { + """ + The ids of the actors to replace the existing assignees. May be used as an + alternative to or in conjunction with actorLogins. + """ + actorIds: [ID!] + @possibleTypes( + concreteTypes: ["Bot", "EnterpriseUserAccount", "Mannequin", "Organization", "User"] + abstractType: "Actor" + ) + + """ + The usernames of the actors to replace the existing assignees. May be used as + an alternative to or in conjunction with actorIds. For bots, use the login + format with [bot] suffix (e.g., 'my-app[bot]'). + """ + actorLogins: [String!] + + """ + Configuration for assigning an AI agent to this issue. + """ + agentAssignment: AgentAssignmentInput + + """ + The id of the assignable object to replace the assignees for. + """ + assignableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Assignable") + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated return type of ReplaceActorsForAssignable. +""" +type ReplaceActorsForAssignablePayload { + """ + The item that was assigned. + """ + assignable: Assignable + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Audit log entry for a repo.access event. +""" +type RepoAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoAccessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoAccessAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoAccessAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.add_member event. +""" +type RepoAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoAddMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoAddMemberAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoAddMemberAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.add_topic event. +""" +type RepoAddTopicAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TopicAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoAddTopicAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The name of the topic added to the repository + """ + topic: Topic + + """ + The name of the topic added to the repository + """ + topicName: String + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.archived event. +""" +type RepoArchivedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoArchivedAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoArchivedAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoArchivedAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.change_merge_setting event. +""" +type RepoChangeMergeSettingAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoChangeMergeSettingAuditEntry object + """ + id: ID! + + """ + Whether the change was to enable (true) or disable (false) the merge type + """ + isEnabled: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The merge method affected by the change + """ + mergeType: RepoChangeMergeSettingAuditEntryMergeType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The merge options available for pull requests to this repository. +""" +enum RepoChangeMergeSettingAuditEntryMergeType @docsCategory(name: "repos") { + """ + The pull request is added to the base branch in a merge commit. + """ + MERGE + + """ + Commits from the pull request are added onto the base branch individually without a merge commit. + """ + REBASE + + """ + The pull request's commits are squashed into a single commit before they are merged to the base branch. + """ + SQUASH +} + +""" +Audit log entry for a repo.config.disable_anonymous_git_access event. +""" +type RepoConfigDisableAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigDisableAnonymousGitAccessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.disable_collaborators_only event. +""" +type RepoConfigDisableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigDisableCollaboratorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.disable_contributors_only event. +""" +type RepoConfigDisableContributorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigDisableContributorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.disable_sockpuppet_disallowed event. +""" +type RepoConfigDisableSockpuppetDisallowedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigDisableSockpuppetDisallowedAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.enable_anonymous_git_access event. +""" +type RepoConfigEnableAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigEnableAnonymousGitAccessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.enable_collaborators_only event. +""" +type RepoConfigEnableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigEnableCollaboratorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.enable_contributors_only event. +""" +type RepoConfigEnableContributorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigEnableContributorsOnlyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.enable_sockpuppet_disallowed event. +""" +type RepoConfigEnableSockpuppetDisallowedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigEnableSockpuppetDisallowedAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.lock_anonymous_git_access event. +""" +type RepoConfigLockAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigLockAnonymousGitAccessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.config.unlock_anonymous_git_access event. +""" +type RepoConfigUnlockAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoConfigUnlockAnonymousGitAccessAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repo.create event. +""" +type RepoCreateAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the parent repository for this forked repository. + """ + forkParentName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the root repository for this network. + """ + forkSourceName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoCreateAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoCreateAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoCreateAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.destroy event. +""" +type RepoDestroyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoDestroyAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoDestroyAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoDestroyAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.remove_member event. +""" +type RepoRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoRemoveMemberAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The visibility of the repository + """ + visibility: RepoRemoveMemberAuditEntryVisibility + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The privacy of a repository +""" +enum RepoRemoveMemberAuditEntryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repo.remove_topic event. +""" +type RepoRemoveTopicAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TopicAuditEntryData + @docsCategory(name: "repos") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the RepoRemoveTopicAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The name of the topic added to the repository + """ + topic: Topic + + """ + The name of the topic added to the repository + """ + topicName: String + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The reasons a piece of content can be reported or minimized. +""" +enum ReportedContentClassifiers @docsCategory(name: "meta") { + """ + An abusive or harassing piece of content + """ + ABUSE + + """ + A duplicated piece of content + """ + DUPLICATE + + """ + A low quality piece of content + """ + LOW_QUALITY + + """ + An irrelevant piece of content + """ + OFF_TOPIC + + """ + An outdated piece of content + """ + OUTDATED + + """ + The content has been resolved + """ + RESOLVED + + """ + A spammy piece of content + """ + SPAM +} + +""" +A repository contains the content for a project. +""" +type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent & RepositoryInfo & Starrable & Subscribable & UniformResourceLocatable + @docsCategory(name: "repos") { + """ + Whether or not a pull request head branch that is behind its base branch can + always be updated even if it is not required to be up to date before merging. + """ + allowUpdateBranch: Boolean! + + """ + Identifies the date and time when the repository was archived. + """ + archivedAt: DateTime + + """ + A list of users that can be assigned to issues in this repository. + """ + assignableUsers( + """ + 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 + + """ + Filters users with query on user name and login. + """ + query: String + ): UserConnection! + + """ + Whether or not Auto-merge can be enabled on pull requests in this repository. + """ + autoMergeAllowed: Boolean! + + """ + A list of branch protection rules for this repository. + """ + branchProtectionRules( + """ + 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 + ): BranchProtectionRuleConnection! + + """ + Returns the code of conduct for this repository + """ + codeOfConduct: CodeOfConduct + + """ + Information extracted from the repository's `CODEOWNERS` file. + """ + codeowners( + """ + The ref name used to return the associated `CODEOWNERS` file. + """ + refName: String + ): RepositoryCodeowners + + """ + A list of collaborators associated with the repository. + """ + collaborators( + """ + Collaborators affiliation level with a repository. + """ + affiliation: CollaboratorAffiliation + + """ + 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 + + """ + The login of one specific collaborator. + """ + login: String + + """ + Filters users with query on user name and login + """ + query: String + ): RepositoryCollaboratorConnection + + """ + A list of commit comments associated with the repository. + """ + commitComments( + """ + 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 + ): CommitCommentConnection! + + """ + Returns a list of contact links associated to the repository + """ + contactLinks: [RepositoryContactLink!] + + """ + Returns the contributing guidelines for this repository. + """ + contributingGuidelines: ContributingGuidelines + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Ref associated with the repository's default branch. + """ + defaultBranchRef: Ref + + """ + Whether or not branches are automatically deleted when merged in this repository. + """ + deleteBranchOnMerge: Boolean! + + """ + A list of dependency manifests contained in the repository + """ + dependencyGraphManifests( + """ + 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 + + """ + Cursor to paginate dependencies + """ + dependenciesAfter: String + + """ + Number of dependencies to fetch + """ + dependenciesFirst: Int + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Flag to scope to only manifests with dependencies + """ + withDependencies: Boolean + ): DependencyGraphManifestConnection + + """ + A list of deploy keys that are on this repository. + """ + deployKeys( + """ + 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 + ): DeployKeyConnection! + + """ + Deployments associated with the repository + """ + deployments( + """ + 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 + + """ + Environments to list deployments for + """ + environments: [String!] + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for deployments returned from the connection. + """ + orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC} + ): DeploymentConnection! + + """ + The description of the repository. + """ + description: String + + """ + The description of the repository rendered to HTML. + """ + descriptionHTML: HTML! + + """ + Returns a single discussion from the current repository by number. + """ + discussion( + """ + The number for the discussion to be returned. + """ + number: Int! + ): Discussion + + """ + A list of discussion categories that are available in the repository. + """ + discussionCategories( + """ + 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 + + """ + Filter by categories that are assignable by the viewer. + """ + filterByAssignable: Boolean = false + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): DiscussionCategoryConnection! + + """ + A discussion category by slug. + """ + discussionCategory( + """ + The slug of the discussion category to be returned. + """ + slug: String! + ): DiscussionCategory + + """ + A list of discussions that have been opened in the repository. + """ + discussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Only show answered or unanswered discussions + """ + answered: Boolean = null + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Only include discussions that belong to the category with this ID. + """ + categoryId: ID = null + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for discussions returned from the connection. + """ + orderBy: DiscussionOrder = {field: UPDATED_AT, direction: DESC} + + """ + A list of states to filter the discussions by. + """ + states: [DiscussionState!] = [] + ): DiscussionConnection! + + """ + The number of kilobytes this repository occupies on disk. + """ + diskUsage: Int + + """ + Returns a single active environment from the current repository by name. + """ + environment( + """ + The name of the environment to be returned. + """ + name: String! + ): Environment + + """ + A list of environments that are in this repository. + """ + environments( + """ + 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 + + """ + The names of the environments to be returned. + """ + names: [String!] = [] + + """ + Ordering options for the environments + """ + orderBy: Environments = {field: NAME, direction: ASC} + + """ + Filter to control pinned environments return + """ + pinnedEnvironmentFilter: EnvironmentPinnedFilterField = ALL + ): EnvironmentConnection! + + """ + Returns how many forks there are of this repository in the whole network. + """ + forkCount: Int! + + """ + Whether this repository allows forks. + """ + forkingAllowed: Boolean! + + """ + A list of direct forked repositories. + """ + forks( + """ + Array of viewer's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + current viewer owns. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + The funding links for this repository + """ + fundingLinks: [FundingLink!]! + + """ + Indicates if the repository has the Discussions feature enabled. + """ + hasDiscussionsEnabled: Boolean! + + """ + Indicates if the repository has issues feature enabled. + """ + hasIssuesEnabled: Boolean! + + """ + Indicates if the repository has the Projects feature enabled. + """ + hasProjectsEnabled: Boolean! + + """ + Indicates if the repository has the pull requests feature enabled. + """ + hasPullRequestsEnabled: Boolean! + + """ + Indicates if the repository displays a Sponsor button for financial contributions. + """ + hasSponsorshipsEnabled: Boolean! + + """ + Whether vulnerability alerts are enabled for the repository. + """ + hasVulnerabilityAlertsEnabled: Boolean! + + """ + Indicates if the repository has wiki feature enabled. + """ + hasWikiEnabled: Boolean! + + """ + The repository's URL. + """ + homepageUrl: URI + + """ + The Node ID of the Repository object + """ + id: ID! + + """ + The interaction ability settings for this repository. + """ + interactionAbility: RepositoryInteractionAbility + + """ + Indicates if the repository is unmaintained. + """ + isArchived: Boolean! + + """ + Returns true if the viewer can create a blank issue in this repository + """ + isBlankIssuesEnabled: Boolean! + + """ + Returns whether or not this repository disabled. + """ + isDisabled: Boolean! + + """ + Returns whether or not this repository is empty. + """ + isEmpty: Boolean! + + """ + Identifies if the repository is a fork. + """ + isFork: Boolean! + + """ + Indicates if a repository is either owned by an organization, or is a private fork of an organization repository. + """ + isInOrganization: Boolean! + + """ + Indicates if the repository has been locked or not. + """ + isLocked: Boolean! + + """ + Identifies if the repository is a mirror. + """ + isMirror: Boolean! + + """ + Identifies if the repository is private or internal. + """ + isPrivate: Boolean! + + """ + Returns true if this repository has a security policy + """ + isSecurityPolicyEnabled: Boolean + + """ + Identifies if the repository is a template that can be used to generate new repositories. + """ + isTemplate: Boolean! + + """ + Is this repository a user configuration repository? + """ + isUserConfigurationRepository: Boolean! + + """ + Returns a single issue from the current repository by number. + """ + issue( + """ + The number for the issue to be returned. + """ + number: Int! + ): Issue + + """ + The policy controlling who can create issues in this repository. + """ + issueCreationPolicy: IssueCreationPolicy + + """ + A list of the repository's issue fields, inherited from the organization + """ + issueFields( + """ + 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 + + """ + Ordering options for issue fields returned from the connection. + """ + orderBy: IssueFieldOrder = {field: CREATED_AT, direction: ASC} + ): IssueFieldsConnection + + """ + Returns a single issue-like object from the current repository by number. + """ + issueOrPullRequest( + """ + The number for the issue to be returned. + """ + number: Int! + ): IssueOrPullRequest + + """ + Returns a list of issue templates associated to the repository + """ + issueTemplates: [IssueTemplate!] + + """ + Returns a single issue type by name + """ + issueType( + """ + Issue type name. + """ + name: String! + ): IssueType + + """ + A list of the repository's issue types + """ + issueTypes( + """ + 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 + + """ + Ordering options for issue types returned from the connection. + """ + orderBy: IssueTypeOrder = {field: CREATED_AT, direction: ASC} + ): IssueTypeConnection + + """ + A list of issues that have been opened in the repository. + """ + issues( + """ + 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 + + """ + Filtering options for issues returned from the connection. + """ + filterBy: IssueFilters + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for issues returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the issues by. + """ + states: [IssueState!] + ): IssueConnection! + + """ + Returns a single label by name + """ + label( + """ + Label name + """ + name: String! + ): Label + + """ + A list of labels associated with the repository. + """ + labels( + """ + 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 + + """ + Ordering options for labels returned from the connection. + """ + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + + """ + If provided, searches labels by name and description. + """ + query: String + ): LabelConnection + + """ + A list containing a breakdown of the language composition of the repository. + """ + languages( + """ + 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 + + """ + Order for connection + """ + orderBy: LanguageOrder + ): LanguageConnection + + """ + Get the latest release for the repository if one exists. + """ + latestRelease: Release + + """ + The license associated with the repository + """ + licenseInfo: License + + """ + The reason the repository has been locked. + """ + lockReason: RepositoryLockReason + + """ + A list of Users that can be mentioned in the context of the repository. + """ + mentionableUsers( + """ + 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 + + """ + Filters users with query on user name and login + """ + query: String + ): UserConnection! + + """ + Whether or not PRs are merged with a merge commit on this repository. + """ + mergeCommitAllowed: Boolean! + + """ + How the default commit message will be generated when merging a pull request. + """ + mergeCommitMessage: MergeCommitMessage! + + """ + How the default commit title will be generated when merging a pull request. + """ + mergeCommitTitle: MergeCommitTitle! + + """ + The merge queue for a specified branch, otherwise the default branch if not provided. + """ + mergeQueue( + """ + The name of the branch to get the merge queue for. Case sensitive. + """ + branch: String + ): MergeQueue + + """ + Returns a single milestone from the current repository by number. + """ + milestone( + """ + The number for the milestone to be returned. + """ + number: Int! + ): Milestone + + """ + A list of milestones associated with the repository. + """ + milestones( + """ + 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 + + """ + Ordering options for milestones. + """ + orderBy: MilestoneOrder + + """ + Filters milestones with a query on the title + """ + query: String + + """ + Filter by the state of the milestones. + """ + states: [MilestoneState!] + ): MilestoneConnection + + """ + The repository's original mirror URL. + """ + mirrorUrl: URI + + """ + The name of the repository. + """ + name: String! + + """ + The repository's name with owner. + """ + nameWithOwner: String! + + """ + A Git object in the repository + """ + object( + """ + A Git revision expression suitable for rev-parse + """ + expression: String + + """ + The Git object ID + """ + oid: GitObjectID + ): GitObject + + """ + The image used to represent this repository in Open Graph data. + """ + openGraphImageUrl: URI! + + """ + The User owner of the repository. + """ + owner: RepositoryOwner! + + """ + A list of packages under the owner. + """ + packages( + """ + 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 + + """ + Find packages by their names. + """ + names: [String] + + """ + Ordering of the returned packages. + """ + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter registry package by type. + """ + packageType: PackageType + + """ + Find packages in a repository by ID. + """ + repositoryId: ID + ): PackageConnection! + + """ + The repository parent, if this is a fork. + """ + parent: Repository + + """ + A list of discussions that have been pinned in this repository. + """ + pinnedDiscussions( + """ + 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 + ): PinnedDiscussionConnection! + + """ + A list of pinned environments for this repository. + """ + pinnedEnvironments( + """ + 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 + + """ + Ordering options for the environments + """ + orderBy: PinnedEnvironmentOrder = {field: POSITION, direction: ASC} + ): PinnedEnvironmentConnection + + """ + A list of pinned issues for this repository. + """ + pinnedIssues( + """ + 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 + ): PinnedIssueConnection + + """ + Returns information about the availability of certain features and limits based on the repository's billing plan. + """ + planFeatures: RepositoryPlanFeatures! + + """ + The primary language of the repository's code. + """ + primaryLanguage: Language + + """ + Find project by number. + """ + project( + """ + The project number to find. + """ + number: Int! + ): Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Finds and returns the Project according to the provided Project number. + """ + projectV2( + """ + The Project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projects( + """ + 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 + + """ + Ordering options for projects returned from the connection + """ + orderBy: ProjectOrder + + """ + Query to search projects by, currently only searching by name. + """ + search: String + + """ + A list of states to filter the projects by. + """ + states: [ProjectState!] + ): ProjectConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path listing the repository's projects + """ + projectsResourcePath: URI! + + """ + The HTTP URL listing the repository's projects + """ + projectsUrl: URI! + + """ + List of projects linked to this repository. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for linked to the repo. + """ + query: String + ): ProjectV2Connection! + + """ + Returns a single pull request from the current repository by number. + """ + pullRequest( + """ + The number for the pull request to be returned. + """ + number: Int! + ): PullRequest + + """ + The pull request creation cap configuration for this repository. Only visible + to repository maintainers and administrators. + """ + pullRequestCreationCapConfig: PullRequestCreationCapConfig + + """ + The policy controlling who can create pull requests in this repository. + """ + pullRequestCreationPolicy: PullRequestCreationPolicy + + """ + Returns a list of pull request templates associated to the repository + """ + pullRequestTemplates: [PullRequestTemplate!] + + """ + A list of pull requests that have been opened in the repository. + """ + pullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection! + + """ + Identifies the date and time when the repository was last pushed to. + """ + pushedAt: DateTime + + """ + Whether or not rebase-merging is enabled on this repository. + """ + rebaseMergeAllowed: Boolean! + + """ + Recent projects that this user has modified in the context of the owner. + """ + recentProjects( + """ + 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 + ): ProjectV2Connection! + + """ + Fetch a given ref from the repository + """ + ref( + """ + The ref to retrieve. Fully qualified matches are checked in order + (`refs/heads/master`) before falling back onto checks for short name matches (`master`). + """ + qualifiedName: String! + ): Ref + + """ + Fetch a list of refs from the repository + """ + refs( + """ + 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 + + """ + DEPRECATED: use orderBy. The ordering direction. + """ + direction: OrderDirection + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for refs returned from the connection. + """ + orderBy: RefOrder + + """ + Filters refs with query on name + """ + query: String + + """ + A ref name prefix like `refs/heads/`, `refs/tags/`, etc. + """ + refPrefix: String! + ): RefConnection + + """ + Lookup a single release given various criteria. + """ + release( + """ + The name of the Tag the Release was created from + """ + tagName: String! + ): Release + + """ + List of releases which are dependent on this repository. + """ + releases( + """ + 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 + + """ + Order for connection + """ + orderBy: ReleaseOrder + ): ReleaseConnection! + + """ + A custom property value for the repository. + """ + repositoryCustomPropertyValue( + """ + The name of the custom property to retrieve the value for. + """ + propertyName: String! + ): RepositoryCustomPropertyValue + + """ + A list of custom properties and their associated values for a repository. + """ + repositoryCustomPropertyValues( + """ + 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 + ): RepositoryCustomPropertyValueConnection + + """ + A list of applied repository-topic associations for this repository. + """ + repositoryTopics( + """ + 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 + ): RepositoryTopicConnection! + + """ + The HTTP path for this repository + """ + resourcePath: URI! + + """ + Returns a single ruleset from the current repository by ID. + """ + ruleset( + """ + The ID of the ruleset to be returned. + """ + databaseId: Int! + + """ + Include rulesets configured at higher levels that apply to this repository + """ + includeParents: Boolean = true + ): RepositoryRuleset + + """ + A list of rulesets for this repository. + """ + rulesets( + """ + 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 + + """ + Return rulesets configured at higher levels that apply to this repository + """ + includeParents: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Return rulesets that apply to the specified target + """ + targets: [RepositoryRulesetTarget!] = null + ): RepositoryRulesetConnection + + """ + The security policy URL. + """ + securityPolicyUrl: URI + + """ + A description of the repository, rendered to HTML without any links in it. + """ + shortDescriptionHTML( + """ + How many characters to return. + """ + limit: Int = 200 + ): HTML! + + """ + Whether or not squash-merging is enabled on this repository. + """ + squashMergeAllowed: Boolean! + + """ + How the default commit message will be generated when squash merging a pull request. + """ + squashMergeCommitMessage: SquashMergeCommitMessage! + + """ + How the default commit title will be generated when squash merging a pull request. + """ + squashMergeCommitTitle: SquashMergeCommitTitle! + + """ + Whether a squash merge commit can use the pull request title as default. + """ + squashPrTitleUsedAsDefault: Boolean! + @deprecated( + reason: "`squashPrTitleUsedAsDefault` will be removed. Use `Repository.squashMergeCommitTitle` instead. Removal on 2023-04-01 UTC." + ) + + """ + The SSH URL to clone this repository + """ + sshUrl: GitSSHRemote! + + """ + Returns a count of how many stargazers there are on this object + """ + stargazerCount: Int! + + """ + A list of users who have starred this starrable. + """ + stargazers( + """ + 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 + + """ + Order for connection + """ + orderBy: StarOrder + ): StargazerConnection! + + """ + Returns a list of all submodules in this repository parsed from the + .gitmodules file as of the default branch's HEAD commit. + """ + submodules( + """ + 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 + ): SubmoduleConnection! + + """ + A list of suggested actors that can be attributed to content in this repository. + """ + suggestedActors( + """ + 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 + + """ + A list of capabilities to filter actors by. + """ + capabilities: [RepositorySuggestedActorFilter!]! + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + A comma separated list of login names to filter actors by. Only the first 10 logins will be used. + """ + loginNames: String + + """ + Search actors with query on user name and login. + """ + query: String + ): ActorConnection! + + """ + Temporary authentication token for cloning this repository. + """ + tempCloneToken: String + + """ + The repository from which this repository was generated, if any. + """ + templateRepository: Repository + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this repository + """ + url: URI! + + """ + Whether this repository has a custom image to use with Open Graph as opposed to being represented by the owner's avatar. + """ + usesCustomOpenGraphImage: Boolean! + + """ + Indicates whether the viewer has admin permissions on this repository. + """ + viewerCanAdminister: Boolean! + + """ + Indicates whether the current user can create issues in this repository. + """ + viewerCanCreateIssues: Boolean! + + """ + Can the current viewer create new projects on this owner. + """ + viewerCanCreateProjects: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Indicates whether the current user can see issue fields in this repository + """ + viewerCanSeeIssueFields: Boolean! + + """ + Check if the viewer is able to change their subscription status for the repository. + """ + viewerCanSubscribe: Boolean! + + """ + Indicates whether the viewer can update the topics of this repository. + """ + viewerCanUpdateTopics: Boolean! + + """ + The content warning for this repository for the viewer. + """ + viewerContentWarning: ContentWarning + + """ + The last commit email for the viewer. + """ + viewerDefaultCommitEmail: String + + """ + The last used merge method by the viewer or the default for the repository. + """ + viewerDefaultMergeMethod: PullRequestMergeMethod! + + """ + Returns a boolean indicating whether the viewing user has starred this starrable. + """ + viewerHasStarred: Boolean! + + """ + The users permission level on the repository. Will return null if authenticated as an GitHub App. + """ + viewerPermission: RepositoryPermission + + """ + A list of emails this viewer can commit with. + """ + viewerPossibleCommitEmails: [String!] + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState + + """ + Indicates the repository's visibility level. + """ + visibility: RepositoryVisibility! + + """ + Returns a single vulnerability alert from the current repository by number. + """ + vulnerabilityAlert( + """ + The number for the vulnerability alert to be returned. + """ + number: Int! + ): RepositoryVulnerabilityAlert + + """ + A list of vulnerability alerts that are on this repository. + """ + vulnerabilityAlerts( + """ + 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 + + """ + Filter by the classification of the alert's associated security advisory + """ + classifications: [SecurityAdvisoryClassification!] + + """ + Filter by the scope of the alert's dependency + """ + dependencyScopes: [RepositoryVulnerabilityAlertDependencyScope!] + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter by the state of the alert + """ + states: [RepositoryVulnerabilityAlertState!] + ): RepositoryVulnerabilityAlertConnection + + """ + A list of users watching the repository. + """ + watchers( + """ + 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 + ): UserConnection! + + """ + Whether contributors are required to sign off on web-based commits in this repository. + """ + webCommitSignoffRequired: Boolean! +} + +""" +The affiliation of a user to a repository +""" +enum RepositoryAffiliation @docsCategory(name: "repos") { + """ + Repositories that the user has been added to as a collaborator. + """ + COLLABORATOR + + """ + Repositories that the user has access to through being a member of an + organization. This includes every repository on every team that the user is on. + """ + ORGANIZATION_MEMBER + + """ + Repositories that are owned by the authenticated user. + """ + OWNER +} + +""" +Metadata for an audit entry with action repo.* +""" +interface RepositoryAuditEntryData @docsCategory(name: "repos") { + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI +} + +""" +Information extracted from a repository's `CODEOWNERS` file. +""" +type RepositoryCodeowners @docsCategory(name: "repos") { + """ + Any problems that were encountered while parsing the `CODEOWNERS` file. + """ + errors: [RepositoryCodeownersError!]! +} + +""" +An error in a `CODEOWNERS` file. +""" +type RepositoryCodeownersError @docsCategory(name: "repos") { + """ + The column number where the error occurs. + """ + column: Int! + + """ + A short string describing the type of error. + """ + kind: String! + + """ + The line number where the error occurs. + """ + line: Int! + + """ + A complete description of the error, combining information from other fields. + """ + message: String! + + """ + The path to the file when the error occurs. + """ + path: String! + + """ + The content of the line where the error occurs. + """ + source: String! + + """ + A suggestion of how to fix the error. + """ + suggestion: String +} + +""" +The connection type for User. +""" +type RepositoryCollaboratorConnection { + """ + A list of edges. + """ + edges: [RepositoryCollaboratorEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user who is a collaborator of a repository. +""" +type RepositoryCollaboratorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: User! + + """ + The permission the user has on the repository. + """ + permission: RepositoryPermission! + + """ + A list of sources for the user's access to the repository. + """ + permissionSources: [PermissionSource!] +} + +""" +A list of repositories owned by the subject. +""" +type RepositoryConnection { + """ + A list of edges. + """ + edges: [RepositoryEdge] + + """ + A list of nodes. + """ + nodes: [Repository] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + The total size in kilobytes of all repositories in the connection. Value will + never be larger than max 32-bit signed integer. + """ + totalDiskUsage: Int! +} + +""" +A repository contact link. +""" +type RepositoryContactLink @docsCategory(name: "repos") { + """ + The contact link purpose. + """ + about: String! + + """ + The contact link name. + """ + name: String! + + """ + The contact link URL. + """ + url: URI! +} + +""" +The reason a repository is listed as 'contributed'. +""" +enum RepositoryContributionType @docsCategory(name: "repos") { + """ + Created a commit + """ + COMMIT + + """ + Created an issue + """ + ISSUE + + """ + Created a pull request + """ + PULL_REQUEST + + """ + Reviewed a pull request + """ + PULL_REQUEST_REVIEW + + """ + Created the repository + """ + REPOSITORY +} + +""" +A repository custom property. +""" +type RepositoryCustomProperty implements Node @docsCategory(name: "repos") { + """ + The allowed values for the custom property. Required if `value_type` is `single_select` or `multi_select`. + """ + allowedValues: [String!] + + """ + The default value of the custom property, if the property is `required`. + """ + defaultValue: CustomPropertyValue + + """ + The description of the custom property. + """ + description: String + + """ + The Node ID of the RepositoryCustomProperty object + """ + id: ID! + + """ + The name of the custom property. + """ + propertyName: String! + + """ + The regex pattern that the value of the custom property must match, if the `value_type` is `string`. + """ + regex: String + + """ + Whether this repository custom property requires explicit values. + """ + requireExplicitValues: Boolean + + """ + Whether the custom property is required. + """ + required: Boolean + + """ + The source type of the custom property. + """ + source: CustomPropertySource! + + """ + The value type of the custom property. + """ + valueType: CustomPropertyValueType! + + """ + Who can edit the values of this repository custom property. + """ + valuesEditableBy: RepositoryCustomPropertyValuesEditableBy! +} + +""" +The connection type for RepositoryCustomProperty. +""" +type RepositoryCustomPropertyConnection { + """ + A list of edges. + """ + edges: [RepositoryCustomPropertyEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryCustomProperty] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryCustomPropertyEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryCustomProperty +} + +""" +A value associated with a repository custom property. +""" +type RepositoryCustomPropertyValue @docsCategory(name: "repos") { + """ + The name of the custom property. + """ + propertyName: String! + + """ + The value of the custom property. + """ + value: CustomPropertyValue! +} + +""" +The connection type for RepositoryCustomPropertyValue. +""" +type RepositoryCustomPropertyValueConnection { + """ + A list of edges. + """ + edges: [RepositoryCustomPropertyValueEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryCustomPropertyValue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryCustomPropertyValueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryCustomPropertyValue +} + +""" +The allowed actors who can edit the values of a custom property. +""" +enum RepositoryCustomPropertyValuesEditableBy @docsCategory(name: "repos") { + """ + The organization actors. + """ + ORG_ACTORS + + """ + The organization and repository actors. + """ + ORG_AND_REPO_ACTORS +} + +""" +Represents an author of discussions in repositories. +""" +interface RepositoryDiscussionAuthor @docsCategory(name: "discussions") { + """ + Discussions this user has started. + """ + repositoryDiscussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Filter discussions to only those that have been answered or not. Defaults to + including both answered and unanswered discussions. + """ + answered: Boolean = null + + """ + 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 + + """ + Ordering options for discussions returned from the connection. + """ + orderBy: DiscussionOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter discussions to only those in a specific repository. + """ + repositoryId: ID + + """ + A list of states to filter the discussions by. + """ + states: [DiscussionState!] = [] + ): DiscussionConnection! +} + +""" +Represents an author of discussion comments in repositories. +""" +interface RepositoryDiscussionCommentAuthor @docsCategory(name: "discussions") { + """ + Discussion comments this user has authored. + """ + repositoryDiscussionComments( + """ + 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 + + """ + Filter discussion comments to only those that were marked as the answer + """ + onlyAnswers: Boolean = false + + """ + Filter discussion comments to only those in a specific repository. + """ + repositoryId: ID + ): DiscussionCommentConnection! +} + +""" +An edge in a connection. +""" +type RepositoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Repository +} + +""" +Parameters to be used for the repository_id condition +""" +type RepositoryIdConditionTarget @docsCategory(name: "repos") { + """ + One of these repo IDs must match the repo. + """ + repositoryIds: [ID!]! +} + +""" +Parameters to be used for the repository_id condition +""" +input RepositoryIdConditionTargetInput @docsCategory(name: "repos") { + """ + One of these repo IDs must match the repo. + """ + repositoryIds: [ID!]! +} + +""" +A subset of repository info. +""" +interface RepositoryInfo @docsCategory(name: "repos") { + """ + Identifies the date and time when the repository was archived. + """ + archivedAt: DateTime + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The description of the repository. + """ + description: String + + """ + The description of the repository rendered to HTML. + """ + descriptionHTML: HTML! + + """ + Returns how many forks there are of this repository in the whole network. + """ + forkCount: Int! + + """ + Indicates if the repository has the Discussions feature enabled. + """ + hasDiscussionsEnabled: Boolean! + + """ + Indicates if the repository has issues feature enabled. + """ + hasIssuesEnabled: Boolean! + + """ + Indicates if the repository has the Projects feature enabled. + """ + hasProjectsEnabled: Boolean! + + """ + Indicates if the repository has the pull requests feature enabled. + """ + hasPullRequestsEnabled: Boolean! + + """ + Indicates if the repository displays a Sponsor button for financial contributions. + """ + hasSponsorshipsEnabled: Boolean! + + """ + Indicates if the repository has wiki feature enabled. + """ + hasWikiEnabled: Boolean! + + """ + The repository's URL. + """ + homepageUrl: URI + + """ + Indicates if the repository is unmaintained. + """ + isArchived: Boolean! + + """ + Identifies if the repository is a fork. + """ + isFork: Boolean! + + """ + Indicates if a repository is either owned by an organization, or is a private fork of an organization repository. + """ + isInOrganization: Boolean! + + """ + Indicates if the repository has been locked or not. + """ + isLocked: Boolean! + + """ + Identifies if the repository is a mirror. + """ + isMirror: Boolean! + + """ + Identifies if the repository is private or internal. + """ + isPrivate: Boolean! + + """ + Identifies if the repository is a template that can be used to generate new repositories. + """ + isTemplate: Boolean! + + """ + The policy controlling who can create issues in this repository. + """ + issueCreationPolicy: IssueCreationPolicy + + """ + The license associated with the repository + """ + licenseInfo: License + + """ + The reason the repository has been locked. + """ + lockReason: RepositoryLockReason + + """ + The repository's original mirror URL. + """ + mirrorUrl: URI + + """ + The name of the repository. + """ + name: String! + + """ + The repository's name with owner. + """ + nameWithOwner: String! + + """ + The image used to represent this repository in Open Graph data. + """ + openGraphImageUrl: URI! + + """ + The User owner of the repository. + """ + owner: RepositoryOwner! + + """ + The policy controlling who can create pull requests in this repository. + """ + pullRequestCreationPolicy: PullRequestCreationPolicy + + """ + Identifies the date and time when the repository was last pushed to. + """ + pushedAt: DateTime + + """ + The HTTP path for this repository + """ + resourcePath: URI! + + """ + A description of the repository, rendered to HTML without any links in it. + """ + shortDescriptionHTML( + """ + How many characters to return. + """ + limit: Int = 200 + ): HTML! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this repository + """ + url: URI! + + """ + Whether this repository has a custom image to use with Open Graph as opposed to being represented by the owner's avatar. + """ + usesCustomOpenGraphImage: Boolean! + + """ + Indicates the repository's visibility level. + """ + visibility: RepositoryVisibility! +} + +""" +Repository interaction limit that applies to this object. +""" +type RepositoryInteractionAbility @docsCategory(name: "repos") { + """ + The time the currently active limit expires. + """ + expiresAt: DateTime + + """ + The current limit that is enabled on this object. + """ + limit: RepositoryInteractionLimit! + + """ + The origin of the currently active interaction limit. + """ + origin: RepositoryInteractionLimitOrigin! +} + +""" +A repository interaction limit. +""" +enum RepositoryInteractionLimit @docsCategory(name: "repos") { + """ + Users that are not collaborators will not be able to interact with the repository. + """ + COLLABORATORS_ONLY + + """ + Users that have not previously committed to a repository’s default branch will be unable to interact with the repository. + """ + CONTRIBUTORS_ONLY + + """ + Users that have recently created their account will be unable to interact with the repository. + """ + EXISTING_USERS + + """ + No interaction limits are enabled. + """ + NO_LIMIT +} + +""" +The length for a repository interaction limit to be enabled for. +""" +enum RepositoryInteractionLimitExpiry @docsCategory(name: "repos") { + """ + The interaction limit will expire after 1 day. + """ + ONE_DAY + + """ + The interaction limit will expire after 1 month. + """ + ONE_MONTH + + """ + The interaction limit will expire after 1 week. + """ + ONE_WEEK + + """ + The interaction limit will expire after 6 months. + """ + SIX_MONTHS + + """ + The interaction limit will expire after 3 days. + """ + THREE_DAYS +} + +""" +Indicates where an interaction limit is configured. +""" +enum RepositoryInteractionLimitOrigin @docsCategory(name: "repos") { + """ + A limit that is configured at the organization level. + """ + ORGANIZATION + + """ + A limit that is configured at the repository level. + """ + REPOSITORY + + """ + A limit that is configured at the user-wide level. + """ + USER +} + +""" +An invitation for a user to be added to a repository. +""" +type RepositoryInvitation implements Node @docsCategory(name: "repos") { + """ + The email address that received the invitation. + """ + email: String + + """ + The Node ID of the RepositoryInvitation object + """ + id: ID! + + """ + The user who received the invitation. + """ + invitee: User + + """ + The user who created the invitation. + """ + inviter: User! + + """ + The permalink for this repository invitation. + """ + permalink: URI! + + """ + The permission granted on this repository by this invitation. + """ + permission: RepositoryPermission! + + """ + The Repository the user is invited to. + """ + repository: RepositoryInfo +} + +""" +A list of repository invitations. +""" +type RepositoryInvitationConnection { + """ + A list of edges. + """ + edges: [RepositoryInvitationEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryInvitation] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryInvitationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryInvitation +} + +""" +Ordering options for repository invitation connections. +""" +input RepositoryInvitationOrder @docsCategory(name: "repos") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order repository invitations by. + """ + field: RepositoryInvitationOrderField! +} + +""" +Properties by which repository invitation connections can be ordered. +""" +enum RepositoryInvitationOrderField @docsCategory(name: "repos") { + """ + Order repository invitations by creation time + """ + CREATED_AT +} + +""" +The possible reasons a given repository could be in a locked state. +""" +enum RepositoryLockReason @docsCategory(name: "repos") { + """ + The repository is locked due to a billing related reason. + """ + BILLING + + """ + The repository is locked due to a migration. + """ + MIGRATING + + """ + The repository is locked due to a move. + """ + MOVING + + """ + The repository is locked due to a rename. + """ + RENAME + + """ + The repository is locked due to a trade controls related reason. + """ + TRADE_RESTRICTION + + """ + The repository is locked due to an ownership transfer. + """ + TRANSFERRING_OWNERSHIP +} + +""" +A GitHub Enterprise Importer (GEI) repository migration. +""" +type RepositoryMigration implements Migration & Node @docsCategory(name: "migrations") { + """ + The migration flag to continue on error. + """ + continueOnError: Boolean! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the migration failed. + """ + failureReason: String + + """ + The Node ID of the RepositoryMigration object + """ + id: ID! + + """ + The URL for the migration log (expires 1 day after migration completes). + """ + migrationLogUrl: URI + + """ + The migration source. + """ + migrationSource: MigrationSource! + + """ + The target repository name. + """ + repositoryName: String! + + """ + The migration source URL, for example `https://github.com` or `https://monalisa.ghe.com`. + """ + sourceUrl: URI! + + """ + The migration state. + """ + state: MigrationState! + + """ + The number of warnings encountered for this migration. To review the warnings, + check the [Migration Log](https://docs.github.com/migrations/using-github-enterprise-importer/completing-your-migration-with-github-enterprise-importer/accessing-your-migration-logs-for-github-enterprise-importer). + """ + warningsCount: Int! +} + +""" +A list of migrations. +""" +type RepositoryMigrationConnection { + """ + A list of edges. + """ + edges: [RepositoryMigrationEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryMigration] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a repository migration. +""" +type RepositoryMigrationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryMigration +} + +""" +Ordering options for repository migrations. +""" +input RepositoryMigrationOrder @docsCategory(name: "migrations") { + """ + The ordering direction. + """ + direction: RepositoryMigrationOrderDirection! + + """ + The field to order repository migrations by. + """ + field: RepositoryMigrationOrderField! +} + +""" +Possible directions in which to order a list of repository migrations when provided an `orderBy` argument. +""" +enum RepositoryMigrationOrderDirection @docsCategory(name: "migrations") { + """ + Specifies an ascending order for a given `orderBy` argument. + """ + ASC + + """ + Specifies a descending order for a given `orderBy` argument. + """ + DESC +} + +""" +Properties by which repository migrations can be ordered. +""" +enum RepositoryMigrationOrderField @docsCategory(name: "migrations") { + """ + Order mannequins why when they were created. + """ + CREATED_AT +} + +""" +Parameters to be used for the repository_name condition +""" +type RepositoryNameConditionTarget @docsCategory(name: "repos") { + """ + Array of repository names or patterns to exclude. The condition will not pass if any of these patterns match. + """ + exclude: [String!]! + + """ + Array of repository names or patterns to include. One of these patterns must + match for the condition to pass. Also accepts `~ALL` to include all repositories. + """ + include: [String!]! + + """ + Target changes that match these patterns will be prevented except by those with bypass permissions. + """ + protected: Boolean! +} + +""" +Parameters to be used for the repository_name condition +""" +input RepositoryNameConditionTargetInput @docsCategory(name: "repos") { + """ + Array of repository names or patterns to exclude. The condition will not pass if any of these patterns match. + """ + exclude: [String!]! + + """ + Array of repository names or patterns to include. One of these patterns must + match for the condition to pass. Also accepts `~ALL` to include all repositories. + """ + include: [String!]! + + """ + Target changes that match these patterns will be prevented except by those with bypass permissions. + """ + protected: Boolean +} + +""" +Represents a object that belongs to a repository. +""" +interface RepositoryNode @docsCategory(name: "repos") { + """ + The repository associated with this node. + """ + repository: Repository! +} + +""" +Ordering options for repository connections +""" +input RepositoryOrder @docsCategory(name: "repos") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order repositories by. + """ + field: RepositoryOrderField! +} + +""" +Properties by which repository connections can be ordered. +""" +enum RepositoryOrderField @docsCategory(name: "repos") { + """ + Order repositories by creation time + """ + CREATED_AT + + """ + Order repositories by name + """ + NAME + + """ + Order repositories by push time + """ + PUSHED_AT + + """ + Order repositories by number of stargazers + """ + STARGAZERS + + """ + Order repositories by update time + """ + UPDATED_AT +} + +""" +Represents an owner of a Repository. +""" +interface RepositoryOwner @docsCategory(name: "repos") { + """ + A URL pointing to the owner's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The Node ID of the RepositoryOwner object + """ + id: ID! + + """ + The username used to login. + """ + login: String! + + """ + A list of repositories that the user owns. + """ + repositories( + """ + Array of viewer's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + current viewer owns. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they are archived and not maintained + """ + isArchived: Boolean + + """ + If non-null, filters repositories according to whether they are forks of another repository + """ + isFork: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + Find Repository. + """ + repository( + """ + Follow repository renames. If disabled, a repository referenced by its old name will return an error. + """ + followRenames: Boolean = true + + """ + Name of Repository to find. + """ + name: String! + ): Repository + + """ + The HTTP URL for the owner. + """ + resourcePath: URI! + + """ + The HTTP URL for the owner. + """ + url: URI! +} + +""" +The access level to a repository +""" +enum RepositoryPermission @docsCategory(name: "repos") { + """ + Can read, clone, and push to this repository. Can also manage issues, pull + requests, and repository settings, including adding collaborators + """ + ADMIN + + """ + Can read, clone, and push to this repository. They can also manage issues, pull requests, and some repository settings + """ + MAINTAIN + + """ + Can read and clone this repository. Can also open and comment on issues and pull requests + """ + READ + + """ + Can read and clone this repository. Can also manage issues and pull requests + """ + TRIAGE + + """ + Can read, clone, and push to this repository. Can also manage issues and pull requests + """ + WRITE +} + +""" +Information about the availability of features and limits for a repository based on its billing plan. +""" +type RepositoryPlanFeatures @docsCategory(name: "repos") { + """ + Whether reviews can be automatically requested and enforced with a CODEOWNERS file + """ + codeowners: Boolean! + + """ + Whether pull requests can be created as or converted to draft + """ + draftPullRequests: Boolean! + + """ + Maximum number of users that can be assigned to an issue or pull request + """ + maximumAssignees: Int! + + """ + Maximum number of manually-requested reviews on a pull request + """ + maximumManualReviewRequests: Int! + + """ + Whether teams can be requested to review pull requests + """ + teamReviewRequests: Boolean! +} + +""" +The privacy of a repository +""" +enum RepositoryPrivacy @docsCategory(name: "repos") { + """ + Private + """ + PRIVATE + + """ + Public + """ + PUBLIC +} + +""" +Parameters to be used for the repository_property condition +""" +type RepositoryPropertyConditionTarget @docsCategory(name: "repos") { + """ + Array of repository properties that must not match. + """ + exclude: [PropertyTargetDefinition!]! + + """ + Array of repository properties that must match + """ + include: [PropertyTargetDefinition!]! +} + +""" +Parameters to be used for the repository_property condition +""" +input RepositoryPropertyConditionTargetInput @docsCategory(name: "repos") { + """ + Array of repository properties that must not match. + """ + exclude: [PropertyTargetDefinitionInput!]! + + """ + Array of repository properties that must match + """ + include: [PropertyTargetDefinitionInput!]! +} + +""" +A repository rule. +""" +type RepositoryRule implements Node @docsCategory(name: "repos") { + """ + The Node ID of the RepositoryRule object + """ + id: ID! + + """ + The parameters for this rule. + """ + parameters: RuleParameters + + """ + The repository ruleset associated with this rule configuration + """ + repositoryRuleset: RepositoryRuleset + + """ + The type of rule. + """ + type: RepositoryRuleType! +} + +""" +Set of conditions that determine if a ruleset will evaluate +""" +type RepositoryRuleConditions @docsCategory(name: "repos") { + """ + Configuration for the organization_property condition + """ + organizationProperty: OrganizationPropertyConditionTarget + + """ + Configuration for the ref_name condition + """ + refName: RefNameConditionTarget + + """ + Configuration for the repository_id condition + """ + repositoryId: RepositoryIdConditionTarget + + """ + Configuration for the repository_name condition + """ + repositoryName: RepositoryNameConditionTarget + + """ + Configuration for the repository_property condition + """ + repositoryProperty: RepositoryPropertyConditionTarget +} + +""" +Specifies the conditions required for a ruleset to evaluate +""" +input RepositoryRuleConditionsInput @docsCategory(name: "repos") { + """ + Configuration for the organization_property condition + """ + organizationProperty: OrganizationPropertyConditionTargetInput + + """ + Configuration for the ref_name condition + """ + refName: RefNameConditionTargetInput + + """ + Configuration for the repository_id condition + """ + repositoryId: RepositoryIdConditionTargetInput + + """ + Configuration for the repository_name condition + """ + repositoryName: RepositoryNameConditionTargetInput + + """ + Configuration for the repository_property condition + """ + repositoryProperty: RepositoryPropertyConditionTargetInput +} + +""" +The connection type for RepositoryRule. +""" +type RepositoryRuleConnection { + """ + A list of edges. + """ + edges: [RepositoryRuleEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryRule] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryRuleEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryRule +} + +""" +Specifies the attributes for a new or updated rule. +""" +input RepositoryRuleInput @docsCategory(name: "repos") { + """ + Optional ID of this rule when updating + """ + id: ID @possibleTypes(concreteTypes: ["RepositoryRule"]) + + """ + The parameters for the rule. + """ + parameters: RuleParametersInput + + """ + The type of rule to create. + """ + type: RepositoryRuleType! +} + +""" +Ordering options for repository rules. +""" +input RepositoryRuleOrder @docsCategory(name: "repos") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order repository rules by. + """ + field: RepositoryRuleOrderField! +} + +""" +Properties by which repository rule connections can be ordered. +""" +enum RepositoryRuleOrderField @docsCategory(name: "repos") { + """ + Order repository rules by created time + """ + CREATED_AT + + """ + Order repository rules by type + """ + TYPE + + """ + Order repository rules by updated time + """ + UPDATED_AT +} + +""" +The rule types supported in rulesets +""" +enum RepositoryRuleType { + """ + Authorization + """ + AUTHORIZATION + + """ + Branch name pattern + """ + BRANCH_NAME_PATTERN + + """ + Choose which tools must provide code scanning results before the reference is + updated. When configured, code scanning must be enabled and have results for + both the commit and the reference being updated. + """ + CODE_SCANNING + + """ + Committer email pattern + """ + COMMITTER_EMAIL_PATTERN + + """ + Commit author email pattern + """ + COMMIT_AUTHOR_EMAIL_PATTERN + + """ + Commit message pattern + """ + COMMIT_MESSAGE_PATTERN + + """ + Request Copilot code review for new pull requests automatically if the author + has access to Copilot code review and their premium requests quota has not + reached the limit. + """ + COPILOT_CODE_REVIEW + + """ + Only allow users with bypass permission to create matching refs. + """ + CREATION + + """ + Only allow users with bypass permissions to delete matching refs. + """ + DELETION + + """ + Prevent commits that include files with specified file extensions from being pushed to the commit graph. + """ + FILE_EXTENSION_RESTRICTION + + """ + Prevent commits that include changes in specified file and folder paths from + being pushed to the commit graph. This includes absolute paths that contain file names. + """ + FILE_PATH_RESTRICTION + + """ + Enforce any added or changed dependencies to comply with the organization's license policy. + """ + LICENSE_COMPLIANCE_SCANNING + + """ + Branch is read-only. Users cannot push to the branch. + """ + LOCK_BRANCH + + """ + Prevent commits that include file paths that exceed the specified character limit from being pushed to the commit graph. + """ + MAX_FILE_PATH_LENGTH + + """ + Prevent commits with individual files that exceed the specified limit from being pushed to the commit graph. + """ + MAX_FILE_SIZE + + """ + Max ref updates + """ + MAX_REF_UPDATES + + """ + Merges must be performed via a merge queue. + """ + MERGE_QUEUE + + """ + Merge queue locked ref + """ + MERGE_QUEUE_LOCKED_REF + + """ + Prevent users with push access from force pushing to refs. + """ + NON_FAST_FORWARD + + """ + Require all commits be made to a non-target branch and submitted via a pull request before they can be merged. + """ + PULL_REQUEST + + """ + Choose which environments must be successfully deployed to before refs can be pushed into a ref that matches this rule. + """ + REQUIRED_DEPLOYMENTS + + """ + Prevent merge commits from being pushed to matching refs. + """ + REQUIRED_LINEAR_HISTORY + + """ + When enabled, all conversations on code must be resolved before a pull request + can be merged into a branch that matches this rule. + """ + REQUIRED_REVIEW_THREAD_RESOLUTION + + """ + Commits pushed to matching refs must have verified signatures. + """ + REQUIRED_SIGNATURES + + """ + Choose which status checks must pass before the ref is updated. When enabled, + commits must first be pushed to another ref where the checks pass. + """ + REQUIRED_STATUS_CHECKS + + """ + Require all commits be made to a non-target branch and submitted via a pull + request and required workflow checks to pass before they can be merged. + """ + REQUIRED_WORKFLOW_STATUS_CHECKS + + """ + Secret scanning + """ + SECRET_SCANNING + + """ + Tag + """ + TAG + + """ + Tag name pattern + """ + TAG_NAME_PATTERN + + """ + Only allow users with bypass permission to update matching refs. + """ + UPDATE + + """ + Require all changes made to a targeted branch to pass the specified workflows before they can be merged. + """ + WORKFLOWS + + """ + Workflow files cannot be modified. + """ + WORKFLOW_UPDATES +} + +""" +A repository ruleset. +""" +type RepositoryRuleset implements Node @docsCategory(name: "repos") { + """ + The actors that can bypass this ruleset + """ + bypassActors( + """ + 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 + ): RepositoryRulesetBypassActorConnection + + """ + The set of conditions that must evaluate to true for this ruleset to apply + """ + conditions: RepositoryRuleConditions! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The enforcement level of this ruleset + """ + enforcement: RuleEnforcement! + + """ + The Node ID of the RepositoryRuleset object + """ + id: ID! + + """ + Name of the ruleset. + """ + name: String! + + """ + List of rules. + """ + rules( + """ + 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 + + """ + The type of rule. + """ + type: RepositoryRuleType + ): RepositoryRuleConnection + + """ + Source of ruleset. + """ + source: RuleSource! + + """ + Target of the ruleset. + """ + target: RepositoryRulesetTarget + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +A team, app or user that has the ability to bypass rules defined on a ruleset +""" +type RepositoryRulesetBypassActor implements Node @docsCategory(name: "repos") { + """ + The actor that can bypass rules. + """ + actor: BypassActor + + """ + The mode for the bypass actor + """ + bypassMode: RepositoryRulesetBypassActorBypassMode + + """ + This actor represents the ability for a deploy key to bypass + """ + deployKey: Boolean! + + """ + This actor represents the ability for an enterprise owner to bypass + """ + enterpriseOwner: Boolean! + + """ + This actor represents the ability for an enterprise role to bypass + """ + enterpriseRole: Boolean! + + """ + The Node ID of the RepositoryRulesetBypassActor object + """ + id: ID! + + """ + This actor represents the ability for an organization owner to bypass + """ + organizationAdmin: Boolean! + + """ + If the actor is a repository role, the repository role's ID that can bypass + """ + repositoryRoleDatabaseId: Int + + """ + If the actor is a repository role, the repository role's name that can bypass + """ + repositoryRoleName: String + + """ + Identifies the ruleset associated with the allowed actor + """ + repositoryRuleset: RepositoryRuleset +} + +""" +The bypass mode for a specific actor on a ruleset. +""" +enum RepositoryRulesetBypassActorBypassMode @docsCategory(name: "repos") { + """ + The actor can always bypass rules + """ + ALWAYS + + """ + The actor is exempt from rules without generating a pass / fail result + """ + EXEMPT + + """ + The actor can only bypass rules via a pull request + """ + PULL_REQUEST +} + +""" +The connection type for RepositoryRulesetBypassActor. +""" +type RepositoryRulesetBypassActorConnection { + """ + A list of edges. + """ + edges: [RepositoryRulesetBypassActorEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryRulesetBypassActor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryRulesetBypassActorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryRulesetBypassActor +} + +""" +Specifies the attributes for a new or updated ruleset bypass actor. Only one of +`actor_id`, `repository_role_database_id`, `organization_admin`, +`enterprise_owner`, or `deploy_key` should be specified. +""" +input RepositoryRulesetBypassActorInput @docsCategory(name: "repos") { + """ + For Team, Integration and User bypasses, the Team, Integration, or User ID + """ + actorId: ID + + """ + The bypass mode for this actor. + """ + bypassMode: RepositoryRulesetBypassActorBypassMode! + + """ + For deploy key bypasses, true. Can only use ALWAYS as the bypass mode + """ + deployKey: Boolean + + """ + For enterprise owner bypasses, true + """ + enterpriseOwner: Boolean + + """ + For enterprise role bypasses, true. NOTE: This bypass actor is in beta. + """ + enterpriseRole: Boolean + + """ + For organization owner bypasses, true + """ + organizationAdmin: Boolean + + """ + For role bypasses, the role database ID + """ + repositoryRoleDatabaseId: Int +} + +""" +The connection type for RepositoryRuleset. +""" +type RepositoryRulesetConnection { + """ + A list of edges. + """ + edges: [RepositoryRulesetEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryRuleset] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryRulesetEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryRuleset +} + +""" +The targets supported for rulesets. +""" +enum RepositoryRulesetTarget @docsCategory(name: "repos") { + """ + Branch + """ + BRANCH + + """ + Push + """ + PUSH + + """ + repository + """ + REPOSITORY + + """ + Tag + """ + TAG +} + +""" +The possible filters for suggested actors in a repository +""" +enum RepositorySuggestedActorFilter @docsCategory(name: "repos") { + """ + Actors that can be assigned to issues and pull requests + """ + CAN_BE_ASSIGNED + + """ + Actors that can be the author of issues and pull requests + """ + CAN_BE_AUTHOR +} + +""" +A repository-topic connects a repository to a topic. +""" +type RepositoryTopic implements Node & UniformResourceLocatable @docsCategory(name: "repos") { + """ + The Node ID of the RepositoryTopic object + """ + id: ID! + + """ + The HTTP path for this repository-topic. + """ + resourcePath: URI! + + """ + The topic. + """ + topic: Topic! + + """ + The HTTP URL for this repository-topic. + """ + url: URI! +} + +""" +The connection type for RepositoryTopic. +""" +type RepositoryTopicConnection { + """ + A list of edges. + """ + edges: [RepositoryTopicEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryTopic] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RepositoryTopicEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryTopic +} + +""" +The repository's visibility level. +""" +enum RepositoryVisibility @docsCategory(name: "repos") { + """ + The repository is visible only to users in the same enterprise. + """ + INTERNAL + + """ + The repository is visible only to those with explicit access. + """ + PRIVATE + + """ + The repository is visible to everyone. + """ + PUBLIC +} + +""" +Audit log entry for a repository_visibility_change.disable event. +""" +type RepositoryVisibilityChangeDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the RepositoryVisibilityChangeDisableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a repository_visibility_change.enable event. +""" +type RepositoryVisibilityChangeEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData + @docsCategory(name: "enterprise-admin") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for this enterprise. + """ + enterpriseResourcePath: URI + + """ + The slug of the enterprise. + """ + enterpriseSlug: String + + """ + The HTTP URL for this enterprise. + """ + enterpriseUrl: URI + + """ + The Node ID of the RepositoryVisibilityChangeEnableAuditEntry object + """ + id: ID! + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +A Dependabot alert for a repository with a dependency affected by a security vulnerability. +""" +type RepositoryVulnerabilityAlert implements Node & RepositoryNode @docsCategory(name: "dependabot") { + """ + When was the alert auto-dismissed? + """ + autoDismissedAt: DateTime + + """ + When was the alert created? + """ + createdAt: DateTime! + + """ + The associated Dependabot update + """ + dependabotUpdate: DependabotUpdate + + """ + The relationship of an alert's dependency. + """ + dependencyRelationship: RepositoryVulnerabilityAlertDependencyRelationship + + """ + The scope of an alert's dependency + """ + dependencyScope: RepositoryVulnerabilityAlertDependencyScope + + """ + Comment explaining the reason the alert was dismissed + """ + dismissComment: String + + """ + The reason the alert was dismissed + """ + dismissReason: String + + """ + When was the alert dismissed? + """ + dismissedAt: DateTime + + """ + The user who dismissed the alert + """ + dismisser: User + + """ + When was the alert fixed? + """ + fixedAt: DateTime + + """ + The Node ID of the RepositoryVulnerabilityAlert object + """ + id: ID! + + """ + Identifies the alert number. + """ + number: Int! + + """ + The associated repository + """ + repository: Repository! + + """ + The associated security advisory + """ + securityAdvisory: SecurityAdvisory + + """ + The associated security vulnerability + """ + securityVulnerability: SecurityVulnerability + + """ + Identifies the state of the alert. + """ + state: RepositoryVulnerabilityAlertState! + + """ + The vulnerable manifest filename + """ + vulnerableManifestFilename: String! + + """ + The vulnerable manifest path + """ + vulnerableManifestPath: String! + + """ + The vulnerable requirements + """ + vulnerableRequirements: String +} + +""" +The connection type for RepositoryVulnerabilityAlert. +""" +type RepositoryVulnerabilityAlertConnection { + """ + A list of edges. + """ + edges: [RepositoryVulnerabilityAlertEdge] + + """ + A list of nodes. + """ + nodes: [RepositoryVulnerabilityAlert] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The possible relationships of an alert's dependency. +""" +enum RepositoryVulnerabilityAlertDependencyRelationship @docsCategory(name: "dependabot") { + """ + A direct dependency of your project + """ + DIRECT + + """ + The relationship could not be determined + """ + INCONCLUSIVE + + """ + A transitive dependency of your project + """ + TRANSITIVE + + """ + The relationship is unknown + """ + UNKNOWN +} + +""" +The possible scopes of an alert's dependency. +""" +enum RepositoryVulnerabilityAlertDependencyScope @docsCategory(name: "dependabot") { + """ + A dependency that is only used in development + """ + DEVELOPMENT + + """ + A dependency that is leveraged during application runtime + """ + RUNTIME +} + +""" +An edge in a connection. +""" +type RepositoryVulnerabilityAlertEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RepositoryVulnerabilityAlert +} + +""" +The possible states of an alert +""" +enum RepositoryVulnerabilityAlertState @docsCategory(name: "dependabot") { + """ + An alert that has been automatically closed by Dependabot. + """ + AUTO_DISMISSED + + """ + An alert that has been manually closed by a user. + """ + DISMISSED + + """ + An alert that has been resolved by a code change. + """ + FIXED + + """ + An alert that is still open. + """ + OPEN +} + +""" +Autogenerated input type of ReprioritizeSubIssue +""" +input ReprioritizeSubIssueInput { + """ + The id of the sub-issue to be prioritized after (either positional argument after OR before should be specified). + """ + afterId: ID @possibleTypes(concreteTypes: ["Issue"]) + + """ + The id of the sub-issue to be prioritized before (either positional argument after OR before should be specified). + """ + beforeId: ID @possibleTypes(concreteTypes: ["Issue"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the parent issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The id of the sub-issue to reprioritize. + """ + subIssueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of ReprioritizeSubIssue. +""" +type ReprioritizeSubIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The parent issue that the sub-issue was reprioritized in. + """ + issue: Issue +} + +""" +Autogenerated input type of RequestReviewsByLogin +""" +input RequestReviewsByLoginInput { + """ + The logins of the bots to request reviews from, including the [bot] suffix (e.g., 'copilot-pull-request-reviewer[bot]'). + """ + botLogins: [String!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to modify. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The slugs of the teams to request reviews from (format: 'org/team-slug'). + """ + teamSlugs: [String!] + + """ + Add users to the set rather than replace. + """ + union: Boolean = false + + """ + The login strings of the users to request reviews from. + """ + userLogins: [String!] +} + +""" +Autogenerated return type of RequestReviewsByLogin. +""" +type RequestReviewsByLoginPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is getting requests. + """ + pullRequest: PullRequest + + """ + The edge from the pull request to the requested reviewers. + """ + requestedReviewersEdge: UserEdge +} + +""" +Autogenerated input type of RequestReviews +""" +input RequestReviewsInput { + """ + The Node IDs of the bot to request. + """ + botIds: [ID!] @possibleTypes(concreteTypes: ["Bot"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to modify. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The Node IDs of the team to request. + """ + teamIds: [ID!] @possibleTypes(concreteTypes: ["EnterpriseTeam", "Team"], abstractType: "TeamReviewRequestable") + + """ + Add users to the set rather than replace. + """ + union: Boolean = false + + """ + The Node IDs of the user to request. + """ + userIds: [ID!] @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of RequestReviews. +""" +type RequestReviewsPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is getting requests. + """ + pullRequest: PullRequest + + """ + The edge from the pull request to the requested reviewers. + """ + requestedReviewersEdge: UserEdge +} + +""" +The possible states that can be requested when creating a check run. +""" +enum RequestableCheckStatusState @docsCategory(name: "checks") { + """ + The check suite or run has been completed. + """ + COMPLETED + + """ + The check suite or run is in progress. + """ + IN_PROGRESS + + """ + The check suite or run is in pending state. + """ + PENDING + + """ + The check suite or run has been queued. + """ + QUEUED + + """ + The check suite or run is in waiting state. + """ + WAITING +} + +""" +Types that can be requested reviewers. +""" +union RequestedReviewer @docsCategory(name: "pulls") = Bot | EnterpriseTeam | Mannequin | Team | User + +""" +The connection type for RequestedReviewer. +""" +type RequestedReviewerConnection { + """ + A list of edges. + """ + edges: [RequestedReviewerEdge] + + """ + A list of nodes. + """ + nodes: [RequestedReviewer] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type RequestedReviewerEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: RequestedReviewer +} + +""" +Represents a type that can be required by a pull request for merging. +""" +interface RequirableByPullRequest @docsCategory(name: "pulls") { + """ + Whether this is required to pass before merging for a specific pull request. + """ + isRequired( + """ + The id of the pull request this is required for + """ + pullRequestId: ID + + """ + The number of the pull request this is required for + """ + pullRequestNumber: Int + ): Boolean! +} + +""" +Choose which environments must be successfully deployed to before refs can be pushed into a ref that matches this rule. +""" +type RequiredDeploymentsParameters @docsCategory(name: "deployments") { + """ + The environments that must be successfully deployed to before branches can be merged. + """ + requiredDeploymentEnvironments: [String!]! +} + +""" +Choose which environments must be successfully deployed to before refs can be pushed into a ref that matches this rule. +""" +input RequiredDeploymentsParametersInput @docsCategory(name: "deployments") { + """ + The environments that must be successfully deployed to before branches can be merged. + """ + requiredDeploymentEnvironments: [String!]! +} + +""" +A reviewing team, and file patterns describing which files they must approve changes to. +""" +type RequiredReviewerConfiguration @docsCategory(name: "pulls") { + """ + Array of file patterns. Pull requests which change matching files must be + approved by the specified team. File patterns use fnmatch syntax. + """ + filePatterns: [String!]! + + """ + Minimum number of approvals required from the specified team. If set to zero, + the team will be added to the pull request but approval is optional. + """ + minimumApprovals: Int! + + """ + Node ID of the team which must review changes to matching files. + """ + reviewerId: ID! +} + +""" +A reviewing team, and file patterns describing which files they must approve changes to. +""" +input RequiredReviewerConfigurationInput @docsCategory(name: "pulls") { + """ + Array of file patterns. Pull requests which change matching files must be + approved by the specified team. File patterns use fnmatch syntax. + """ + filePatterns: [String!]! + + """ + Minimum number of approvals required from the specified team. If set to zero, + the team will be added to the pull request but approval is optional. + """ + minimumApprovals: Int! + + """ + Node ID of the team which must review changes to matching files. + """ + reviewerId: ID! +} + +""" +Represents a required status check for a protected branch, but not any specific run of that check. +""" +type RequiredStatusCheckDescription @docsCategory(name: "branches") { + """ + The App that must provide this status in order for it to be accepted. + """ + app: App + + """ + The name of this status. + """ + context: String! +} + +""" +Specifies the attributes for a new or updated required status check. +""" +input RequiredStatusCheckInput @docsCategory(name: "branches") { + """ + The ID of the App that must set the status in order for it to be accepted. + Omit this value to use whichever app has recently been setting this status, or + use "any" to allow any app to set the status. + """ + appId: ID + + """ + Status check context that must pass for commits to be accepted to the matching branch. + """ + context: String! +} + +""" +Choose which status checks must pass before the ref is updated. When enabled, +commits must first be pushed to another ref where the checks pass. +""" +type RequiredStatusChecksParameters @docsCategory(name: "branches") { + """ + Allow repositories and branches to be created if a check would otherwise prohibit it. + """ + doNotEnforceOnCreate: Boolean! + + """ + Status checks that are required. + """ + requiredStatusChecks: [StatusCheckConfiguration!]! + + """ + Whether pull requests targeting a matching branch must be tested with the + latest code. This setting will not take effect unless at least one status + check is enabled. + """ + strictRequiredStatusChecksPolicy: Boolean! +} + +""" +Choose which status checks must pass before the ref is updated. When enabled, +commits must first be pushed to another ref where the checks pass. +""" +input RequiredStatusChecksParametersInput @docsCategory(name: "branches") { + """ + Allow repositories and branches to be created if a check would otherwise prohibit it. + """ + doNotEnforceOnCreate: Boolean + + """ + Status checks that are required. + """ + requiredStatusChecks: [StatusCheckConfigurationInput!]! + + """ + Whether pull requests targeting a matching branch must be tested with the + latest code. This setting will not take effect unless at least one status + check is enabled. + """ + strictRequiredStatusChecksPolicy: Boolean! +} + +""" +Autogenerated input type of RerequestCheckSuite +""" +input RerequestCheckSuiteInput { + """ + The Node ID of the check suite. + """ + checkSuiteId: ID! @possibleTypes(concreteTypes: ["CheckSuite"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of RerequestCheckSuite. +""" +type RerequestCheckSuitePayload { + """ + The requested check suite. + """ + checkSuite: CheckSuite + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of ResolveReviewThread +""" +input ResolveReviewThreadInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the thread to resolve + """ + threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"]) +} + +""" +Autogenerated return type of ResolveReviewThread. +""" +type ResolveReviewThreadPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The thread to resolve. + """ + thread: PullRequestReviewThread +} + +""" +Represents a private contribution a user made on GitHub. +""" +type RestrictedContribution implements Contribution @docsCategory(name: "users") { + """ + Whether this contribution is associated with a record you do not have access to. For + example, your own 'first issue' contribution may have been made on a repository you can no + longer access. + """ + isRestricted: Boolean! + + """ + When this contribution was made. + """ + occurredAt: DateTime! + + """ + The HTTP path for this contribution. + """ + resourcePath: URI! + + """ + The HTTP URL for this contribution. + """ + url: URI! + + """ + The user who made this contribution. + """ + user: User! +} + +""" +Autogenerated input type of RetireSponsorsTier +""" +input RetireSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the published tier to retire. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of RetireSponsorsTier. +""" +type RetireSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was retired. + """ + sponsorsTier: SponsorsTier +} + +""" +Autogenerated input type of RevertPullRequest +""" +input RevertPullRequestInput { + """ + The description of the revert pull request. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Indicates whether the revert pull request should be a draft. + """ + draft: Boolean = false + + """ + The ID of the pull request to revert. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The title of the revert pull request. + """ + title: String +} + +""" +Autogenerated return type of RevertPullRequest. +""" +type RevertPullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was reverted. + """ + pullRequest: PullRequest + + """ + The new pull request that reverts the input pull request. + """ + revertPullRequest: PullRequest +} + +""" +A user, team, or app who has the ability to dismiss a review on a protected branch. +""" +type ReviewDismissalAllowance implements Node @docsCategory(name: "branches") { + """ + The actor that can dismiss. + """ + actor: ReviewDismissalAllowanceActor + + """ + Identifies the branch protection rule associated with the allowed user, team, or app. + """ + branchProtectionRule: BranchProtectionRule + + """ + The Node ID of the ReviewDismissalAllowance object + """ + id: ID! +} + +""" +Types that can be an actor. +""" +union ReviewDismissalAllowanceActor @docsCategory(name: "branches") = App | Team | User + +""" +The connection type for ReviewDismissalAllowance. +""" +type ReviewDismissalAllowanceConnection { + """ + A list of edges. + """ + edges: [ReviewDismissalAllowanceEdge] + + """ + A list of nodes. + """ + nodes: [ReviewDismissalAllowance] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ReviewDismissalAllowanceEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ReviewDismissalAllowance +} + +""" +Represents a 'review_dismissed' event on a given issue or pull request. +""" +type ReviewDismissedEvent implements Node & UniformResourceLocatable @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + Identifies the optional message associated with the 'review_dismissed' event. + """ + dismissalMessage: String + + """ + Identifies the optional message associated with the event, rendered to HTML. + """ + dismissalMessageHTML: String + + """ + The Node ID of the ReviewDismissedEvent object + """ + id: ID! + + """ + Identifies the previous state of the review with the 'review_dismissed' event. + """ + previousReviewState: PullRequestReviewState! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + Identifies the commit which caused the review to become stale. + """ + pullRequestCommit: PullRequestCommit + + """ + The HTTP path for this review dismissed event. + """ + resourcePath: URI! + + """ + Identifies the review associated with the 'review_dismissed' event. + """ + review: PullRequestReview + + """ + The HTTP URL for this review dismissed event. + """ + url: URI! +} + +""" +A request for a user to review a pull request. +""" +type ReviewRequest implements Node @docsCategory(name: "pulls") { + """ + Whether this request was created for a code owner + """ + asCodeOwner: Boolean! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the ReviewRequest object + """ + id: ID! + + """ + Identifies the pull request associated with this review request. + """ + pullRequest: PullRequest! + + """ + The reviewer that is requested. + """ + requestedReviewer: RequestedReviewer +} + +""" +The connection type for ReviewRequest. +""" +type ReviewRequestConnection { + """ + A list of edges. + """ + edges: [ReviewRequestEdge] + + """ + A list of nodes. + """ + nodes: [ReviewRequest] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ReviewRequestEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ReviewRequest +} + +""" +Represents an 'review_request_removed' event on a given pull request. +""" +type ReviewRequestRemovedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ReviewRequestRemovedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + Identifies the reviewer whose review request was removed. + """ + requestedReviewer: RequestedReviewer +} + +""" +Represents an 'review_requested' event on a given pull request. +""" +type ReviewRequestedEvent implements Node @docsCategory(name: "pulls") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the ReviewRequestedEvent object + """ + id: ID! + + """ + PullRequest referenced by event. + """ + pullRequest: PullRequest! + + """ + Identifies the reviewer whose review was requested. + """ + requestedReviewer: RequestedReviewer +} + +""" +A hovercard context with a message describing the current code review state of the pull +request. +""" +type ReviewStatusHovercardContext implements HovercardContext @docsCategory(name: "pulls") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! + + """ + The current status of the pull request with respect to code review. + """ + reviewDecision: PullRequestReviewDecision +} + +""" +Autogenerated input type of RevokeEnterpriseOrganizationsMigratorRole +""" +input RevokeEnterpriseOrganizationsMigratorRoleInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise to which all organizations managed by it will be granted the migrator role. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of the user to revoke the migrator role + """ + login: String! +} + +""" +Autogenerated return type of RevokeEnterpriseOrganizationsMigratorRole. +""" +type RevokeEnterpriseOrganizationsMigratorRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organizations that had the migrator role revoked for the given user. + """ + organizations( + """ + 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 + ): OrganizationConnection +} + +""" +Autogenerated input type of RevokeMigratorRole +""" +input RevokeMigratorRoleInput { + """ + The user login or Team slug to revoke the migrator role from. + """ + actor: String! + + """ + Specifies the type of the actor, can be either USER or TEAM. + """ + actorType: ActorType! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the organization that the user/team belongs to. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of RevokeMigratorRole. +""" +type RevokeMigratorRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Did the operation succeed? + """ + success: Boolean +} + +""" +Possible roles a user may have in relation to an organization. +""" +enum RoleInOrganization @docsCategory(name: "orgs") { + """ + A user who is a direct member of the organization. + """ + DIRECT_MEMBER + + """ + A user with full administrative access to the organization. + """ + OWNER + + """ + A user who is unaffiliated with the organization. + """ + UNAFFILIATED +} + +""" +The level of enforcement for a rule or ruleset. +""" +enum RuleEnforcement @docsCategory(name: "repos") { + """ + Rules will be enforced + """ + ACTIVE + + """ + Do not evaluate or enforce rules + """ + DISABLED + + """ + Allow admins to test rules before enforcing them. Admins can view insights on + the Rule Insights page (`evaluate` is only available with GitHub Enterprise). + """ + EVALUATE +} + +""" +Types which can be parameters for `RepositoryRule` objects. +""" +union RuleParameters = + | BranchNamePatternParameters + | CodeScanningParameters + | CommitAuthorEmailPatternParameters + | CommitMessagePatternParameters + | CommitterEmailPatternParameters + | CopilotCodeReviewParameters + | FileExtensionRestrictionParameters + | FilePathRestrictionParameters + | MaxFilePathLengthParameters + | MaxFileSizeParameters + | MergeQueueParameters + | PullRequestParameters + | RequiredDeploymentsParameters + | RequiredStatusChecksParameters + | TagNamePatternParameters + | UpdateParameters + | WorkflowsParameters + +""" +Specifies the parameters for a `RepositoryRule` object. Only one of the fields should be specified. +""" +input RuleParametersInput { + """ + Parameters used for the `branch_name_pattern` rule type + """ + branchNamePattern: BranchNamePatternParametersInput + + """ + Parameters used for the `code_scanning` rule type + """ + codeScanning: CodeScanningParametersInput + + """ + Parameters used for the `commit_author_email_pattern` rule type + """ + commitAuthorEmailPattern: CommitAuthorEmailPatternParametersInput + + """ + Parameters used for the `commit_message_pattern` rule type + """ + commitMessagePattern: CommitMessagePatternParametersInput + + """ + Parameters used for the `committer_email_pattern` rule type + """ + committerEmailPattern: CommitterEmailPatternParametersInput + + """ + Parameters used for the `copilot_code_review` rule type + """ + copilotCodeReview: CopilotCodeReviewParametersInput + + """ + Parameters used for the `file_extension_restriction` rule type + """ + fileExtensionRestriction: FileExtensionRestrictionParametersInput + + """ + Parameters used for the `file_path_restriction` rule type + """ + filePathRestriction: FilePathRestrictionParametersInput + + """ + Parameters used for the `max_file_path_length` rule type + """ + maxFilePathLength: MaxFilePathLengthParametersInput + + """ + Parameters used for the `max_file_size` rule type + """ + maxFileSize: MaxFileSizeParametersInput + + """ + Parameters used for the `merge_queue` rule type + """ + mergeQueue: MergeQueueParametersInput + + """ + Parameters used for the `pull_request` rule type + """ + pullRequest: PullRequestParametersInput + + """ + Parameters used for the `required_deployments` rule type + """ + requiredDeployments: RequiredDeploymentsParametersInput + + """ + Parameters used for the `required_status_checks` rule type + """ + requiredStatusChecks: RequiredStatusChecksParametersInput + + """ + Parameters used for the `tag_name_pattern` rule type + """ + tagNamePattern: TagNamePatternParametersInput + + """ + Parameters used for the `update` rule type + """ + update: UpdateParametersInput + + """ + Parameters used for the `workflows` rule type + """ + workflows: WorkflowsParametersInput +} + +""" +Types which can have `RepositoryRule` objects. +""" +union RuleSource @docsCategory(name: "repos") = Enterprise | Organization | Repository + +""" +The possible digest algorithms used to sign SAML requests for an identity provider. +""" +enum SamlDigestAlgorithm @docsCategory(name: "enterprise-admin") { + """ + SHA1 + """ + SHA1 + + """ + SHA256 + """ + SHA256 + + """ + SHA384 + """ + SHA384 + + """ + SHA512 + """ + SHA512 +} + +""" +The possible signature algorithms used to sign SAML requests for a Identity Provider. +""" +enum SamlSignatureAlgorithm @docsCategory(name: "enterprise-admin") { + """ + RSA-SHA1 + """ + RSA_SHA1 + + """ + RSA-SHA256 + """ + RSA_SHA256 + + """ + RSA-SHA384 + """ + RSA_SHA384 + + """ + RSA-SHA512 + """ + RSA_SHA512 +} + +""" +A Saved Reply is text a user can use to reply quickly. +""" +type SavedReply implements Node @docsCategory(name: "users") { + """ + The body of the saved reply. + """ + body: String! + + """ + The saved reply body rendered to HTML. + """ + bodyHTML: HTML! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the SavedReply object + """ + id: ID! + + """ + The title of the saved reply. + """ + title: String! + + """ + The user that saved this reply. + """ + user: Actor +} + +""" +The connection type for SavedReply. +""" +type SavedReplyConnection { + """ + A list of edges. + """ + edges: [SavedReplyEdge] + + """ + A list of nodes. + """ + nodes: [SavedReply] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SavedReplyEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SavedReply +} + +""" +Ordering options for saved reply connections. +""" +input SavedReplyOrder @docsCategory(name: "users") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order saved replies by. + """ + field: SavedReplyOrderField! +} + +""" +Properties by which saved reply connections can be ordered. +""" +enum SavedReplyOrderField @docsCategory(name: "users") { + """ + Order saved reply by when they were updated. + """ + UPDATED_AT +} + +""" +The results of a search. +""" +union SearchResultItem @docsCategory(name: "search") = + | App + | Discussion + | Issue + | MarketplaceListing + | Organization + | PullRequest + | Repository + | User + +""" +A list of results that matched against a search query. Regardless of the number +of matches, a maximum of 1,000 results will be available across all types, +potentially split across many pages. +""" +type SearchResultItemConnection { + """ + The total number of pieces of code that matched the search query. Regardless + of the total number of matches, a maximum of 1,000 results will be available + across all types. + """ + codeCount: Int! + + """ + The total number of discussions that matched the search query. Regardless of + the total number of matches, a maximum of 1,000 results will be available + across all types. + """ + discussionCount: Int! + + """ + A list of edges. + """ + edges: [SearchResultItemEdge] + + """ + The total number of issues that matched the search query. Regardless of the + total number of matches, a maximum of 1,000 results will be available across all types. + """ + issueCount: Int! + + """ + The type of search that was performed for issues (lexical, semantic, or hybrid) + """ + issueSearchType: IssueSearchType + + """ + When a semantic or hybrid search falls back to lexical, the reasons why the fallback occurred. + """ + lexicalFallbackReason: [LexicalFallbackReason!] + + """ + A list of nodes. + """ + nodes: [SearchResultItem] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + The total number of repositories that matched the search query. Regardless of + the total number of matches, a maximum of 1,000 results will be available + across all types. + """ + repositoryCount: Int! + + """ + The total number of users that matched the search query. Regardless of the + total number of matches, a maximum of 1,000 results will be available across all types. + """ + userCount: Int! + + """ + The total number of wiki pages that matched the search query. Regardless of + the total number of matches, a maximum of 1,000 results will be available + across all types. + """ + wikiCount: Int! +} + +""" +An edge in a connection. +""" +type SearchResultItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SearchResultItem + + """ + Text matches on the result found. + """ + textMatches: [TextMatch] +} + +""" +Represents the individual results of a search. +""" +enum SearchType @docsCategory(name: "search") { + """ + Returns matching discussions in repositories. + """ + DISCUSSION + + """ + Returns results matching issues in repositories. + """ + ISSUE + + """ + Returns results matching issues in repositories. + """ + ISSUE_ADVANCED + + """ + Returns results matching issues using hybrid (lexical + semantic) search. + """ + ISSUE_HYBRID + + """ + Returns results matching issues using semantic search. + """ + ISSUE_SEMANTIC + + """ + Returns results matching repositories. + """ + REPOSITORY + + """ + Returns results matching users and organizations on GitHub. + """ + USER +} + +""" +A GitHub Security Advisory +""" +type SecurityAdvisory implements Node @docsCategory(name: "security-advisories") { + """ + The classification of the advisory + """ + classification: SecurityAdvisoryClassification! + + """ + The CVSS associated with this advisory + """ + cvss: CVSS! + @deprecated( + reason: "`cvss` will be removed. New `cvss_severities` field will now contain both `cvss_v3` and `cvss_v4` properties. Removal on 2025-10-01 UTC." + ) + + """ + The CVSS associated with this advisory + """ + cvssSeverities: CvssSeverities! + + """ + CWEs associated with this Advisory + """ + cwes( + """ + 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 + ): CWEConnection! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + This is a long plaintext description of the advisory + """ + description: String! + + """ + The Exploit Prediction Scoring System + """ + epss: EPSS + + """ + The GitHub Security Advisory ID + """ + ghsaId: String! + + """ + The Node ID of the SecurityAdvisory object + """ + id: ID! + + """ + A list of identifiers for this advisory + """ + identifiers: [SecurityAdvisoryIdentifier!]! + + """ + The permalink for the advisory's dependabot alerts page + """ + notificationsPermalink: URI + + """ + The organization that originated the advisory + """ + origin: String! + + """ + The permalink for the advisory + """ + permalink: URI + + """ + When the advisory was published + """ + publishedAt: DateTime! + + """ + A list of references for this advisory + """ + references: [SecurityAdvisoryReference!]! + + """ + The severity of the advisory + """ + severity: SecurityAdvisorySeverity! + + """ + A short plaintext summary of the advisory + """ + summary: String! + + """ + When the advisory was last updated + """ + updatedAt: DateTime! + + """ + Vulnerabilities associated with this Advisory + """ + vulnerabilities( + """ + 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 + + """ + A list of advisory classifications to filter vulnerabilities by. + """ + classifications: [SecurityAdvisoryClassification!] + + """ + An ecosystem to filter vulnerabilities by. + """ + ecosystem: SecurityAdvisoryEcosystem + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for the returned topics. + """ + orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC} + + """ + A package name to filter vulnerabilities by. + """ + package: String + + """ + A list of severities to filter vulnerabilities by. + """ + severities: [SecurityAdvisorySeverity!] + ): SecurityVulnerabilityConnection! + + """ + When the advisory was withdrawn, if it has been withdrawn + """ + withdrawnAt: DateTime +} + +""" +Classification of the advisory. +""" +enum SecurityAdvisoryClassification @docsCategory(name: "security-advisories") { + """ + Classification of general advisories. + """ + GENERAL + + """ + Classification of malware advisories. + """ + MALWARE +} + +""" +The connection type for SecurityAdvisory. +""" +type SecurityAdvisoryConnection { + """ + A list of edges. + """ + edges: [SecurityAdvisoryEdge] + + """ + A list of nodes. + """ + nodes: [SecurityAdvisory] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +The possible ecosystems of a security vulnerability's package. +""" +enum SecurityAdvisoryEcosystem @docsCategory(name: "security-advisories") { + """ + GitHub Actions + """ + ACTIONS + + """ + PHP packages hosted at packagist.org + """ + COMPOSER + + """ + Erlang/Elixir packages hosted at hex.pm + """ + ERLANG + + """ + Go modules + """ + GO + + """ + Java artifacts hosted at the Maven central repository + """ + MAVEN + + """ + JavaScript packages hosted at npmjs.com + """ + NPM + + """ + .NET packages hosted at the NuGet Gallery + """ + NUGET + + """ + Python packages hosted at PyPI.org + """ + PIP + + """ + Dart packages hosted at pub.dev + """ + PUB + + """ + Ruby gems hosted at RubyGems.org + """ + RUBYGEMS + + """ + Rust crates + """ + RUST + + """ + Swift packages + """ + SWIFT +} + +""" +An edge in a connection. +""" +type SecurityAdvisoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SecurityAdvisory +} + +""" +A GitHub Security Advisory Identifier +""" +type SecurityAdvisoryIdentifier @docsCategory(name: "security-advisories") { + """ + The identifier type, e.g. GHSA, CVE + """ + type: String! + + """ + The identifier + """ + value: String! +} + +""" +An advisory identifier to filter results on. +""" +input SecurityAdvisoryIdentifierFilter @docsCategory(name: "security-advisories") { + """ + The identifier type. + """ + type: SecurityAdvisoryIdentifierType! + + """ + The identifier string. Supports exact or partial matching. + """ + value: String! +} + +""" +Identifier formats available for advisories. +""" +enum SecurityAdvisoryIdentifierType @docsCategory(name: "security-advisories") { + """ + Common Vulnerabilities and Exposures Identifier. + """ + CVE + + """ + GitHub Security Advisory ID. + """ + GHSA +} + +""" +Ordering options for security advisory connections +""" +input SecurityAdvisoryOrder @docsCategory(name: "security-advisories") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order security advisories by. + """ + field: SecurityAdvisoryOrderField! +} + +""" +Properties by which security advisory connections can be ordered. +""" +enum SecurityAdvisoryOrderField @docsCategory(name: "security-advisories") { + """ + Order advisories by EPSS percentage + """ + EPSS_PERCENTAGE + + """ + Order advisories by EPSS percentile + """ + EPSS_PERCENTILE + + """ + Order advisories by publication time + """ + PUBLISHED_AT + + """ + Order advisories by update time + """ + UPDATED_AT +} + +""" +An individual package +""" +type SecurityAdvisoryPackage @docsCategory(name: "security-advisories") { + """ + The ecosystem the package belongs to, e.g. RUBYGEMS, NPM + """ + ecosystem: SecurityAdvisoryEcosystem! + + """ + The package name + """ + name: String! +} + +""" +An individual package version +""" +type SecurityAdvisoryPackageVersion @docsCategory(name: "security-advisories") { + """ + The package name or version + """ + identifier: String! +} + +""" +A GitHub Security Advisory Reference +""" +type SecurityAdvisoryReference @docsCategory(name: "security-advisories") { + """ + A publicly accessible reference + """ + url: URI! +} + +""" +Severity of the vulnerability. +""" +enum SecurityAdvisorySeverity @docsCategory(name: "security-advisories") { + """ + Critical. + """ + CRITICAL + + """ + High. + """ + HIGH + + """ + Low. + """ + LOW + + """ + Moderate. + """ + MODERATE + + """ + Unknown. + """ + UNKNOWN +} + +""" +An individual vulnerability within an Advisory +""" +type SecurityVulnerability @docsCategory(name: "security-advisories") { + """ + The Advisory associated with this Vulnerability + """ + advisory: SecurityAdvisory! + + """ + The first version containing a fix for the vulnerability + """ + firstPatchedVersion: SecurityAdvisoryPackageVersion + + """ + A description of the vulnerable package + """ + package: SecurityAdvisoryPackage! + + """ + The severity of the vulnerability within this package + """ + severity: SecurityAdvisorySeverity! + + """ + When the vulnerability was last updated + """ + updatedAt: DateTime! + + """ + A string that describes the vulnerable package versions. + This string follows a basic syntax with a few forms. + + `= 0.2.0` denotes a single vulnerable version. + + `<= 1.0.8` denotes a version range up to and including the specified version + + `< 0.1.11` denotes a version range up to, but excluding, the specified version + + `>= 4.3.0, < 4.3.5` denotes a version range with a known minimum and maximum version. + + `>= 0.0.1` denotes a version range with a known minimum, but no known maximum + """ + vulnerableVersionRange: String! +} + +""" +The connection type for SecurityVulnerability. +""" +type SecurityVulnerabilityConnection { + """ + A list of edges. + """ + edges: [SecurityVulnerabilityEdge] + + """ + A list of nodes. + """ + nodes: [SecurityVulnerability] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SecurityVulnerabilityEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SecurityVulnerability +} + +""" +Ordering options for security vulnerability connections +""" +input SecurityVulnerabilityOrder @docsCategory(name: "security-advisories") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order security vulnerabilities by. + """ + field: SecurityVulnerabilityOrderField! +} + +""" +Properties by which security vulnerability connections can be ordered. +""" +enum SecurityVulnerabilityOrderField @docsCategory(name: "security-advisories") { + """ + Order vulnerability by update time + """ + UPDATED_AT +} + +""" +Autogenerated input type of SetEnterpriseIdentityProvider +""" +input SetEnterpriseIdentityProviderInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The digest algorithm used to sign SAML requests for the identity provider. + """ + digestMethod: SamlDigestAlgorithm! + + """ + The ID of the enterprise on which to set an identity provider. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The x509 certificate used by the identity provider to sign assertions and responses. + """ + idpCertificate: String! + + """ + The Issuer Entity ID for the SAML identity provider + """ + issuer: String + + """ + The signature algorithm used to sign SAML requests for the identity provider. + """ + signatureMethod: SamlSignatureAlgorithm! + + """ + The URL endpoint for the identity provider's SAML SSO. + """ + ssoUrl: URI! +} + +""" +Autogenerated return type of SetEnterpriseIdentityProvider. +""" +type SetEnterpriseIdentityProviderPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The identity provider for the enterprise. + """ + identityProvider: EnterpriseIdentityProvider +} + +""" +Autogenerated input type of SetIssueFieldValue +""" +input SetIssueFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue fields to set on the issue. + """ + issueFields: [IssueFieldCreateOrUpdateInput!]! + + """ + The ID of the Issue to set the field value on. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of SetIssueFieldValue. +""" +type SetIssueFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue where the field values were set. + """ + issue: Issue + + """ + The issue field values that were created or updated. + """ + issueFieldValues: [IssueFieldValue!] +} + +""" +Autogenerated input type of SetOrganizationInteractionLimit +""" +input SetOrganizationInteractionLimitInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + When this limit should expire. + """ + expiry: RepositoryInteractionLimitExpiry + + """ + The limit to set. + """ + limit: RepositoryInteractionLimit! + + """ + The ID of the organization to set a limit for. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of SetOrganizationInteractionLimit. +""" +type SetOrganizationInteractionLimitPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organization that the interaction limit was set for. + """ + organization: Organization +} + +""" +Autogenerated input type of SetRepositoryCustomPropertyValues +""" +input SetRepositoryCustomPropertyValuesInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A list of custom property names and associated values to apply. + """ + properties: [CustomPropertyValueInput!]! + + """ + The ID of the repository to set properties for. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of SetRepositoryCustomPropertyValues. +""" +type SetRepositoryCustomPropertyValuesPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository that the custom properties were set for. + """ + repository: Repository +} + +""" +Autogenerated input type of SetRepositoryInteractionLimit +""" +input SetRepositoryInteractionLimitInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + When this limit should expire. + """ + expiry: RepositoryInteractionLimitExpiry + + """ + The limit to set. + """ + limit: RepositoryInteractionLimit! + + """ + The ID of the repository to set a limit for. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of SetRepositoryInteractionLimit. +""" +type SetRepositoryInteractionLimitPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository that the interaction limit was set for. + """ + repository: Repository +} + +""" +Autogenerated input type of SetUserInteractionLimit +""" +input SetUserInteractionLimitInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + When this limit should expire. + """ + expiry: RepositoryInteractionLimitExpiry + + """ + The limit to set. + """ + limit: RepositoryInteractionLimit! + + """ + The ID of the user to set a limit for. + """ + userId: ID! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of SetUserInteractionLimit. +""" +type SetUserInteractionLimitPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The user that the interaction limit was set for. + """ + user: User +} + +""" +Represents an S/MIME signature on a Commit or Tag. +""" +type SmimeSignature implements GitSignature @docsCategory(name: "git") { + """ + Email used to sign this object. + """ + email: String! + + """ + True if the signature is valid and verified by GitHub. + """ + isValid: Boolean! + + """ + Payload for GPG signing object. Raw ODB object without the signature header. + """ + payload: String! + + """ + ASCII-armored signature header from object. + """ + signature: String! + + """ + GitHub user corresponding to the email signing this commit. + """ + signer: User + + """ + The state of this signature. `VALID` if signature is valid and verified by + GitHub, otherwise represents reason why signature is considered invalid. + """ + state: GitSignatureState! + + """ + The date the signature was verified, if valid + """ + verifiedAt: DateTime + + """ + True if the signature was made with GitHub's signing key. + """ + wasSignedByGitHub: Boolean! +} + +""" +Social media profile associated with a user. +""" +type SocialAccount @docsCategory(name: "users") { + """ + Name of the social media account as it appears on the profile. + """ + displayName: String! + + """ + Software or company that hosts the social media account. + """ + provider: SocialAccountProvider! + + """ + URL of the social media account. + """ + url: URI! +} + +""" +The connection type for SocialAccount. +""" +type SocialAccountConnection { + """ + A list of edges. + """ + edges: [SocialAccountEdge] + + """ + A list of nodes. + """ + nodes: [SocialAccount] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SocialAccountEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SocialAccount +} + +""" +Software or company that hosts social media accounts. +""" +enum SocialAccountProvider @docsCategory(name: "users") { + """ + Decentralized microblogging social platform. + """ + BLUESKY + + """ + Social media and networking website. + """ + FACEBOOK + + """ + Catch-all for social media providers that do not yet have specific handling. + """ + GENERIC + + """ + Fork of Mastodon with a greater focus on local posting. + """ + HOMETOWN + + """ + Social media website with a focus on photo and video sharing. + """ + INSTAGRAM + + """ + Professional networking website. + """ + LINKEDIN + + """ + Open-source federated microblogging service. + """ + MASTODON + + """ + JavaScript package registry. + """ + NPM + + """ + Social news aggregation and discussion website. + """ + REDDIT + + """ + Microblogging social platform. + """ + THREADS + + """ + Live-streaming service. + """ + TWITCH + + """ + Microblogging website. + """ + TWITTER + + """ + Online video platform. + """ + YOUTUBE +} + +""" +Entities that can sponsor others via GitHub Sponsors +""" +union Sponsor @docsCategory(name: "sponsors") = Organization | User + +""" +A GitHub account and the total amount in USD they've paid for sponsorships to a +particular maintainer. Does not include payments made via Patreon. +""" +type SponsorAndLifetimeValue @docsCategory(name: "sponsors") { + """ + The amount in cents. + """ + amountInCents: Int! + + """ + The amount in USD, formatted as a string. + """ + formattedAmount: String! + + """ + The sponsor's GitHub account. + """ + sponsor: Sponsorable! + + """ + The maintainer's GitHub account. + """ + sponsorable: Sponsorable! +} + +""" +The connection type for SponsorAndLifetimeValue. +""" +type SponsorAndLifetimeValueConnection { + """ + A list of edges. + """ + edges: [SponsorAndLifetimeValueEdge] + + """ + A list of nodes. + """ + nodes: [SponsorAndLifetimeValue] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SponsorAndLifetimeValueEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SponsorAndLifetimeValue +} + +""" +Ordering options for connections to get sponsor entities and associated USD amounts for GitHub Sponsors. +""" +input SponsorAndLifetimeValueOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order results by. + """ + field: SponsorAndLifetimeValueOrderField! +} + +""" +Properties by which sponsor and lifetime value connections can be ordered. +""" +enum SponsorAndLifetimeValueOrderField @docsCategory(name: "sponsors") { + """ + Order results by how much money the sponsor has paid in total. + """ + LIFETIME_VALUE + + """ + Order results by the sponsor's login (username). + """ + SPONSOR_LOGIN + + """ + Order results by the sponsor's relevance to the viewer. + """ + SPONSOR_RELEVANCE +} + +""" +A list of users and organizations sponsoring someone via GitHub Sponsors. +""" +type SponsorConnection { + """ + A list of edges. + """ + edges: [SponsorEdge] + + """ + A list of nodes. + """ + nodes: [Sponsor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user or organization who is sponsoring someone in GitHub Sponsors. +""" +type SponsorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Sponsor +} + +""" +Ordering options for connections to get sponsor entities for GitHub Sponsors. +""" +input SponsorOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order sponsor entities by. + """ + field: SponsorOrderField! +} + +""" +Properties by which sponsor connections can be ordered. +""" +enum SponsorOrderField @docsCategory(name: "sponsors") { + """ + Order sponsorable entities by login (username). + """ + LOGIN + + """ + Order sponsors by their relevance to the viewer. + """ + RELEVANCE +} + +""" +Entities that can sponsor or be sponsored through GitHub Sponsors. +""" +interface Sponsorable @docsCategory(name: "sponsors") { + """ + The estimated next GitHub Sponsors payout for this user/organization in cents (USD). + """ + estimatedNextSponsorsPayoutInCents: Int! + + """ + True if this user/organization has a GitHub Sponsors listing. + """ + hasSponsorsListing: Boolean! + + """ + Whether the given account is sponsoring this user/organization. + """ + isSponsoredBy( + """ + The target account's login. + """ + accountLogin: String! + ): Boolean! + + """ + True if the viewer is sponsored by this user/organization. + """ + isSponsoringViewer: Boolean! + + """ + Calculate how much each sponsor has ever paid total to this maintainer via + GitHub Sponsors. Does not include sponsorships paid via Patreon. + """ + lifetimeReceivedSponsorshipValues( + """ + 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 + + """ + Ordering options for results returned from the connection. + """ + orderBy: SponsorAndLifetimeValueOrder = {field: SPONSOR_LOGIN, direction: ASC} + ): SponsorAndLifetimeValueConnection! + + """ + The estimated monthly GitHub Sponsors income for this user/organization in cents (USD). + """ + monthlyEstimatedSponsorsIncomeInCents: Int! + + """ + List of users and organizations this entity is sponsoring. + """ + sponsoring( + """ + 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 + + """ + Ordering options for the users and organizations returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + ): SponsorConnection! + + """ + List of sponsors for this user or organization. + """ + sponsors( + """ + 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 + + """ + Ordering options for sponsors returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + + """ + If given, will filter for sponsors at the given tier. Will only return + sponsors whose tier the viewer is permitted to see. + """ + tierId: ID + ): SponsorConnection! + + """ + Events involving this sponsorable, such as new sponsorships. + """ + sponsorsActivities( + """ + Filter activities to only the specified actions. + """ + actions: [SponsorsActivityAction!] = [] + + """ + 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 + + """ + Whether to include those events where this sponsorable acted as the sponsor. + Defaults to only including events where this sponsorable was the recipient + of a sponsorship. + """ + includeAsSponsor: Boolean = false + + """ + Whether or not to include private activities in the result set. Defaults to including public and private activities. + """ + includePrivate: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for activity returned from the connection. + """ + orderBy: SponsorsActivityOrder = {field: TIMESTAMP, direction: DESC} + + """ + Filter activities returned to only those that occurred in the most recent + specified time period. Set to ALL to avoid filtering by when the activity + occurred. Will be ignored if `since` or `until` is given. + """ + period: SponsorsActivityPeriod = MONTH + + """ + Filter activities to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter activities to those that occurred before this time. + """ + until: DateTime + ): SponsorsActivityConnection! + + """ + The GitHub Sponsors listing for this user or organization. + """ + sponsorsListing: SponsorsListing + + """ + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. + """ + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. + """ + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + List of sponsorship updates sent from this sponsorable to sponsors. + """ + sponsorshipNewsletters( + """ + 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 + + """ + Ordering options for sponsorship updates returned from the connection. + """ + orderBy: SponsorshipNewsletterOrder = {field: CREATED_AT, direction: DESC} + ): SponsorshipNewsletterConnection! + + """ + The sponsorships where this user or organization is the maintainer receiving the funds. + """ + sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Whether or not to include private sponsorships in the result set + """ + includePrivate: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + The sponsorships where this user or organization is the funder. + """ + sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Filter sponsorships returned to those for the specified maintainers. That + is, the recipient of the sponsorship is a user or organization with one of + the given logins. + """ + maintainerLogins: [String!] + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + + """ + Whether or not the viewer is able to sponsor this user/organization. + """ + viewerCanSponsor: Boolean! + + """ + True if the viewer is sponsoring this user/organization. + """ + viewerIsSponsoring: Boolean! +} + +""" +Entities that can be sponsored via GitHub Sponsors +""" +union SponsorableItem @docsCategory(name: "sponsors") = Organization | User + +""" +The connection type for SponsorableItem. +""" +type SponsorableItemConnection { + """ + A list of edges. + """ + edges: [SponsorableItemEdge] + + """ + A list of nodes. + """ + nodes: [SponsorableItem] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SponsorableItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SponsorableItem +} + +""" +Ordering options for connections to get sponsorable entities for GitHub Sponsors. +""" +input SponsorableOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order sponsorable entities by. + """ + field: SponsorableOrderField! +} + +""" +Properties by which sponsorable connections can be ordered. +""" +enum SponsorableOrderField @docsCategory(name: "sponsors") { + """ + Order sponsorable entities by login (username). + """ + LOGIN +} + +""" +An event related to sponsorship activity. +""" +type SponsorsActivity implements Node @docsCategory(name: "sponsors") { + """ + What action this activity indicates took place. + """ + action: SponsorsActivityAction! + + """ + The sponsor's current privacy level. + """ + currentPrivacyLevel: SponsorshipPrivacy + + """ + The Node ID of the SponsorsActivity object + """ + id: ID! + + """ + The platform that was used to pay for the sponsorship. + """ + paymentSource: SponsorshipPaymentSource + + """ + The tier that the sponsorship used to use, for tier change events. + """ + previousSponsorsTier: SponsorsTier + + """ + The user or organization who triggered this activity and was/is sponsoring the sponsorable. + """ + sponsor: Sponsor + + """ + The user or organization that is being sponsored, the maintainer. + """ + sponsorable: Sponsorable! + + """ + The associated sponsorship tier. + """ + sponsorsTier: SponsorsTier + + """ + The timestamp of this event. + """ + timestamp: DateTime + + """ + Was this sponsorship made alongside other sponsorships at the same time from the same sponsor? + """ + viaBulkSponsorship: Boolean! +} + +""" +The possible actions that GitHub Sponsors activities can represent. +""" +enum SponsorsActivityAction @docsCategory(name: "sponsors") { + """ + The activity was cancelling a sponsorship. + """ + CANCELLED_SPONSORSHIP + + """ + The activity was starting a sponsorship. + """ + NEW_SPONSORSHIP + + """ + The activity was scheduling a downgrade or cancellation. + """ + PENDING_CHANGE + + """ + The activity was funds being refunded to the sponsor or GitHub. + """ + REFUND + + """ + The activity was disabling matching for a previously matched sponsorship. + """ + SPONSOR_MATCH_DISABLED + + """ + The activity was changing the sponsorship tier, either directly by the sponsor or by a scheduled/pending change. + """ + TIER_CHANGE +} + +""" +The connection type for SponsorsActivity. +""" +type SponsorsActivityConnection { + """ + A list of edges. + """ + edges: [SponsorsActivityEdge] + + """ + A list of nodes. + """ + nodes: [SponsorsActivity] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SponsorsActivityEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SponsorsActivity +} + +""" +Ordering options for GitHub Sponsors activity connections. +""" +input SponsorsActivityOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order activity by. + """ + field: SponsorsActivityOrderField! +} + +""" +Properties by which GitHub Sponsors activity connections can be ordered. +""" +enum SponsorsActivityOrderField @docsCategory(name: "sponsors") { + """ + Order activities by when they happened. + """ + TIMESTAMP +} + +""" +The possible time periods for which Sponsors activities can be requested. +""" +enum SponsorsActivityPeriod @docsCategory(name: "sponsors") { + """ + Don't restrict the activity to any date range, include all activity. + """ + ALL + + """ + The previous calendar day. + """ + DAY + + """ + The previous thirty days. + """ + MONTH + + """ + The previous seven days. + """ + WEEK +} + +""" +Represents countries or regions for billing and residence for a GitHub Sponsors profile. +""" +enum SponsorsCountryOrRegionCode @docsCategory(name: "sponsors") { + """ + Andorra + """ + AD + + """ + United Arab Emirates + """ + AE + + """ + Afghanistan + """ + AF + + """ + Antigua and Barbuda + """ + AG + + """ + Anguilla + """ + AI + + """ + Albania + """ + AL + + """ + Armenia + """ + AM + + """ + Angola + """ + AO + + """ + Antarctica + """ + AQ + + """ + Argentina + """ + AR + + """ + American Samoa + """ + AS + + """ + Austria + """ + AT + + """ + Australia + """ + AU + + """ + Aruba + """ + AW + + """ + Åland + """ + AX + + """ + Azerbaijan + """ + AZ + + """ + Bosnia and Herzegovina + """ + BA + + """ + Barbados + """ + BB + + """ + Bangladesh + """ + BD + + """ + Belgium + """ + BE + + """ + Burkina Faso + """ + BF + + """ + Bulgaria + """ + BG + + """ + Bahrain + """ + BH + + """ + Burundi + """ + BI + + """ + Benin + """ + BJ + + """ + Saint Barthélemy + """ + BL + + """ + Bermuda + """ + BM + + """ + Brunei Darussalam + """ + BN + + """ + Bolivia + """ + BO + + """ + Bonaire, Sint Eustatius and Saba + """ + BQ + + """ + Brazil + """ + BR + + """ + Bahamas + """ + BS + + """ + Bhutan + """ + BT + + """ + Bouvet Island + """ + BV + + """ + Botswana + """ + BW + + """ + Belarus + """ + BY + + """ + Belize + """ + BZ + + """ + Canada + """ + CA + + """ + Cocos (Keeling) Islands + """ + CC + + """ + Congo (Kinshasa) + """ + CD + + """ + Central African Republic + """ + CF + + """ + Congo (Brazzaville) + """ + CG + + """ + Switzerland + """ + CH + + """ + Côte d'Ivoire + """ + CI + + """ + Cook Islands + """ + CK + + """ + Chile + """ + CL + + """ + Cameroon + """ + CM + + """ + China + """ + CN + + """ + Colombia + """ + CO + + """ + Costa Rica + """ + CR + + """ + Cape Verde + """ + CV + + """ + Curaçao + """ + CW + + """ + Christmas Island + """ + CX + + """ + Cyprus + """ + CY + + """ + Czech Republic + """ + CZ + + """ + Germany + """ + DE + + """ + Djibouti + """ + DJ + + """ + Denmark + """ + DK + + """ + Dominica + """ + DM + + """ + Dominican Republic + """ + DO + + """ + Algeria + """ + DZ + + """ + Ecuador + """ + EC + + """ + Estonia + """ + EE + + """ + Egypt + """ + EG + + """ + Western Sahara + """ + EH + + """ + Eritrea + """ + ER + + """ + Spain + """ + ES + + """ + Ethiopia + """ + ET + + """ + Finland + """ + FI + + """ + Fiji + """ + FJ + + """ + Falkland Islands + """ + FK + + """ + Micronesia + """ + FM + + """ + Faroe Islands + """ + FO + + """ + France + """ + FR + + """ + Gabon + """ + GA + + """ + United Kingdom + """ + GB + + """ + Grenada + """ + GD + + """ + Georgia + """ + GE + + """ + French Guiana + """ + GF + + """ + Guernsey + """ + GG + + """ + Ghana + """ + GH + + """ + Gibraltar + """ + GI + + """ + Greenland + """ + GL + + """ + Gambia + """ + GM + + """ + Guinea + """ + GN + + """ + Guadeloupe + """ + GP + + """ + Equatorial Guinea + """ + GQ + + """ + Greece + """ + GR + + """ + South Georgia and South Sandwich Islands + """ + GS + + """ + Guatemala + """ + GT + + """ + Guam + """ + GU + + """ + Guinea-Bissau + """ + GW + + """ + Guyana + """ + GY + + """ + Hong Kong + """ + HK + + """ + Heard and McDonald Islands + """ + HM + + """ + Honduras + """ + HN + + """ + Croatia + """ + HR + + """ + Haiti + """ + HT + + """ + Hungary + """ + HU + + """ + Indonesia + """ + ID + + """ + Ireland + """ + IE + + """ + Israel + """ + IL + + """ + Isle of Man + """ + IM + + """ + India + """ + IN + + """ + British Indian Ocean Territory + """ + IO + + """ + Iraq + """ + IQ + + """ + Iran + """ + IR + + """ + Iceland + """ + IS + + """ + Italy + """ + IT + + """ + Jersey + """ + JE + + """ + Jamaica + """ + JM + + """ + Jordan + """ + JO + + """ + Japan + """ + JP + + """ + Kenya + """ + KE + + """ + Kyrgyzstan + """ + KG + + """ + Cambodia + """ + KH + + """ + Kiribati + """ + KI + + """ + Comoros + """ + KM + + """ + Saint Kitts and Nevis + """ + KN + + """ + Korea, South + """ + KR + + """ + Kuwait + """ + KW + + """ + Cayman Islands + """ + KY + + """ + Kazakhstan + """ + KZ + + """ + Laos + """ + LA + + """ + Lebanon + """ + LB + + """ + Saint Lucia + """ + LC + + """ + Liechtenstein + """ + LI + + """ + Sri Lanka + """ + LK + + """ + Liberia + """ + LR + + """ + Lesotho + """ + LS + + """ + Lithuania + """ + LT + + """ + Luxembourg + """ + LU + + """ + Latvia + """ + LV + + """ + Libya + """ + LY + + """ + Morocco + """ + MA + + """ + Monaco + """ + MC + + """ + Moldova + """ + MD + + """ + Montenegro + """ + ME + + """ + Saint Martin (French part) + """ + MF + + """ + Madagascar + """ + MG + + """ + Marshall Islands + """ + MH + + """ + Macedonia + """ + MK + + """ + Mali + """ + ML + + """ + Myanmar + """ + MM + + """ + Mongolia + """ + MN + + """ + Macau + """ + MO + + """ + Northern Mariana Islands + """ + MP + + """ + Martinique + """ + MQ + + """ + Mauritania + """ + MR + + """ + Montserrat + """ + MS + + """ + Malta + """ + MT + + """ + Mauritius + """ + MU + + """ + Maldives + """ + MV + + """ + Malawi + """ + MW + + """ + Mexico + """ + MX + + """ + Malaysia + """ + MY + + """ + Mozambique + """ + MZ + + """ + Namibia + """ + NA + + """ + New Caledonia + """ + NC + + """ + Niger + """ + NE + + """ + Norfolk Island + """ + NF + + """ + Nigeria + """ + NG + + """ + Nicaragua + """ + NI + + """ + Netherlands + """ + NL + + """ + Norway + """ + NO + + """ + Nepal + """ + NP + + """ + Nauru + """ + NR + + """ + Niue + """ + NU + + """ + New Zealand + """ + NZ + + """ + Oman + """ + OM + + """ + Panama + """ + PA + + """ + Peru + """ + PE + + """ + French Polynesia + """ + PF + + """ + Papua New Guinea + """ + PG + + """ + Philippines + """ + PH + + """ + Pakistan + """ + PK + + """ + Poland + """ + PL + + """ + Saint Pierre and Miquelon + """ + PM + + """ + Pitcairn + """ + PN + + """ + Puerto Rico + """ + PR + + """ + Palestine + """ + PS + + """ + Portugal + """ + PT + + """ + Palau + """ + PW + + """ + Paraguay + """ + PY + + """ + Qatar + """ + QA + + """ + Reunion + """ + RE + + """ + Romania + """ + RO + + """ + Serbia + """ + RS + + """ + Russian Federation + """ + RU + + """ + Rwanda + """ + RW + + """ + Saudi Arabia + """ + SA + + """ + Solomon Islands + """ + SB + + """ + Seychelles + """ + SC + + """ + Sudan + """ + SD + + """ + Sweden + """ + SE + + """ + Singapore + """ + SG + + """ + Saint Helena + """ + SH + + """ + Slovenia + """ + SI + + """ + Svalbard and Jan Mayen Islands + """ + SJ + + """ + Slovakia + """ + SK + + """ + Sierra Leone + """ + SL + + """ + San Marino + """ + SM + + """ + Senegal + """ + SN + + """ + Somalia + """ + SO + + """ + Suriname + """ + SR + + """ + South Sudan + """ + SS + + """ + Sao Tome and Principe + """ + ST + + """ + El Salvador + """ + SV + + """ + Sint Maarten (Dutch part) + """ + SX + + """ + Syria + """ + SY + + """ + Swaziland + """ + SZ + + """ + Turks and Caicos Islands + """ + TC + + """ + Chad + """ + TD + + """ + French Southern Lands + """ + TF + + """ + Togo + """ + TG + + """ + Thailand + """ + TH + + """ + Tajikistan + """ + TJ + + """ + Tokelau + """ + TK + + """ + Timor-Leste + """ + TL + + """ + Turkmenistan + """ + TM + + """ + Tunisia + """ + TN + + """ + Tonga + """ + TO + + """ + Türkiye + """ + TR + + """ + Trinidad and Tobago + """ + TT + + """ + Tuvalu + """ + TV + + """ + Taiwan + """ + TW + + """ + Tanzania + """ + TZ + + """ + Ukraine + """ + UA + + """ + Uganda + """ + UG + + """ + United States Minor Outlying Islands + """ + UM + + """ + United States of America + """ + US + + """ + Uruguay + """ + UY + + """ + Uzbekistan + """ + UZ + + """ + Vatican City + """ + VA + + """ + Saint Vincent and the Grenadines + """ + VC + + """ + Venezuela + """ + VE + + """ + Virgin Islands, British + """ + VG + + """ + Virgin Islands, U.S. + """ + VI + + """ + Vietnam + """ + VN + + """ + Vanuatu + """ + VU + + """ + Wallis and Futuna Islands + """ + WF + + """ + Samoa + """ + WS + + """ + Yemen + """ + YE + + """ + Mayotte + """ + YT + + """ + South Africa + """ + ZA + + """ + Zambia + """ + ZM + + """ + Zimbabwe + """ + ZW +} + +""" +A goal associated with a GitHub Sponsors listing, representing a target the sponsored maintainer would like to attain. +""" +type SponsorsGoal @docsCategory(name: "sponsors") { + """ + A description of the goal from the maintainer. + """ + description: String + + """ + What the objective of this goal is. + """ + kind: SponsorsGoalKind! + + """ + The percentage representing how complete this goal is, between 0-100. + """ + percentComplete: Int! + + """ + What the goal amount is. Represents an amount in USD for monthly sponsorship + amount goals. Represents a count of unique sponsors for total sponsors count goals. + """ + targetValue: Int! + + """ + A brief summary of the kind and target value of this goal. + """ + title: String! +} + +""" +The different kinds of goals a GitHub Sponsors member can have. +""" +enum SponsorsGoalKind @docsCategory(name: "sponsors") { + """ + The goal is about getting a certain amount in USD from sponsorships each month. + """ + MONTHLY_SPONSORSHIP_AMOUNT + + """ + The goal is about reaching a certain number of sponsors. + """ + TOTAL_SPONSORS_COUNT +} + +""" +A GitHub Sponsors listing. +""" +type SponsorsListing implements Node @docsCategory(name: "sponsors") { + """ + The current goal the maintainer is trying to reach with GitHub Sponsors, if any. + """ + activeGoal: SponsorsGoal + + """ + The Stripe Connect account currently in use for payouts for this Sponsors + listing, if any. Will only return a value when queried by the maintainer + themselves, or by an admin of the sponsorable organization. + """ + activeStripeConnectAccount: StripeConnectAccount + + """ + The name of the country or region with the maintainer's bank account or fiscal + host. Will only return a value when queried by the maintainer themselves, or + by an admin of the sponsorable organization. + """ + billingCountryOrRegion: String + + """ + The email address used by GitHub to contact the sponsorable about their GitHub + Sponsors profile. Will only return a value when queried by the maintainer + themselves, or by an admin of the sponsorable organization. + """ + contactEmailAddress: String + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The HTTP path for the Sponsors dashboard for this Sponsors listing. + """ + dashboardResourcePath: URI! + + """ + The HTTP URL for the Sponsors dashboard for this Sponsors listing. + """ + dashboardUrl: URI! + + """ + The records featured on the GitHub Sponsors profile. + """ + featuredItems( + """ + The types of featured items to return. + """ + featureableTypes: [SponsorsListingFeaturedItemFeatureableType!] = [REPOSITORY, USER] + ): [SponsorsListingFeaturedItem!]! + + """ + The fiscal host used for payments, if any. Will only return a value when + queried by the maintainer themselves, or by an admin of the sponsorable organization. + """ + fiscalHost: Organization + + """ + The full description of the listing. + """ + fullDescription: String! + + """ + The full description of the listing rendered to HTML. + """ + fullDescriptionHTML: HTML! + + """ + The Node ID of the SponsorsListing object + """ + id: ID! + + """ + Whether this listing is publicly visible. + """ + isPublic: Boolean! + + """ + The listing's full name. + """ + name: String! + + """ + A future date on which this listing is eligible to receive a payout. + """ + nextPayoutDate: Date + + """ + The name of the country or region where the maintainer resides. Will only + return a value when queried by the maintainer themselves, or by an admin of + the sponsorable organization. + """ + residenceCountryOrRegion: String + + """ + The HTTP path for this Sponsors listing. + """ + resourcePath: URI! + + """ + The short description of the listing. + """ + shortDescription: String! + + """ + The short name of the listing. + """ + slug: String! + + """ + The entity this listing represents who can be sponsored on GitHub Sponsors. + """ + sponsorable: Sponsorable! + + """ + The tiers for this GitHub Sponsors profile. + """ + tiers( + """ + 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 + + """ + Whether to include tiers that aren't published. Only admins of the Sponsors + listing can see draft tiers. Only admins of the Sponsors listing and viewers + who are currently sponsoring on a retired tier can see those retired tiers. + Defaults to including only published tiers, which are visible to anyone who + can see the GitHub Sponsors profile. + """ + includeUnpublished: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for Sponsors tiers returned from the connection. + """ + orderBy: SponsorsTierOrder = {field: MONTHLY_PRICE_IN_CENTS, direction: ASC} + ): SponsorsTierConnection + + """ + The HTTP URL for this Sponsors listing. + """ + url: URI! +} + +""" +A record that can be featured on a GitHub Sponsors profile. +""" +union SponsorsListingFeatureableItem @docsCategory(name: "sponsors") = Repository | User + +""" +A record that is promoted on a GitHub Sponsors profile. +""" +type SponsorsListingFeaturedItem implements Node @docsCategory(name: "sponsors") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Will either be a description from the sponsorable maintainer about why they + featured this item, or the item's description itself, such as a user's bio + from their GitHub profile page. + """ + description: String + + """ + The record that is featured on the GitHub Sponsors profile. + """ + featureable: SponsorsListingFeatureableItem! + + """ + The Node ID of the SponsorsListingFeaturedItem object + """ + id: ID! + + """ + The position of this featured item on the GitHub Sponsors profile with a lower + position indicating higher precedence. Starts at 1. + """ + position: Int! + + """ + The GitHub Sponsors profile that features this record. + """ + sponsorsListing: SponsorsListing! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The different kinds of records that can be featured on a GitHub Sponsors profile page. +""" +enum SponsorsListingFeaturedItemFeatureableType @docsCategory(name: "sponsors") { + """ + A repository owned by the user or organization with the GitHub Sponsors profile. + """ + REPOSITORY + + """ + A user who belongs to the organization with the GitHub Sponsors profile. + """ + USER +} + +""" +A GitHub Sponsors tier associated with a GitHub Sponsors listing. +""" +type SponsorsTier implements Node @docsCategory(name: "sponsors") { + """ + SponsorsTier information only visible to users that can administer the associated Sponsors listing. + """ + adminInfo: SponsorsTierAdminInfo + + """ + Get a different tier for this tier's maintainer that is at the same frequency + as this tier but with an equal or lesser cost. Returns the published tier with + the monthly price closest to this tier's without going over. + """ + closestLesserValueTier: SponsorsTier + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The description of the tier. + """ + description: String! + + """ + The tier description rendered to HTML + """ + descriptionHTML: HTML! + + """ + The Node ID of the SponsorsTier object + """ + id: ID! + + """ + Whether this tier was chosen at checkout time by the sponsor rather than + defined ahead of time by the maintainer who manages the Sponsors listing. + """ + isCustomAmount: Boolean! + + """ + Whether this tier is only for use with one-time sponsorships. + """ + isOneTime: Boolean! + + """ + How much this tier costs per month in cents. + """ + monthlyPriceInCents: Int! + + """ + How much this tier costs per month in USD. + """ + monthlyPriceInDollars: Int! + + """ + The name of the tier. + """ + name: String! + + """ + The sponsors listing that this tier belongs to. + """ + sponsorsListing: SponsorsListing! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +SponsorsTier information only visible to users that can administer the associated Sponsors listing. +""" +type SponsorsTierAdminInfo @docsCategory(name: "sponsors") { + """ + Indicates whether this tier is still a work in progress by the sponsorable and + not yet published to the associated GitHub Sponsors profile. Draft tiers + cannot be used for new sponsorships and will not be in use on existing + sponsorships. Draft tiers cannot be seen by anyone but the admins of the + GitHub Sponsors profile. + """ + isDraft: Boolean! + + """ + Indicates whether this tier is published to the associated GitHub Sponsors + profile. Published tiers are visible to anyone who can see the GitHub Sponsors + profile, and are available for use in sponsorships if the GitHub Sponsors + profile is publicly visible. + """ + isPublished: Boolean! + + """ + Indicates whether this tier has been retired from the associated GitHub + Sponsors profile. Retired tiers are no longer shown on the GitHub Sponsors + profile and cannot be chosen for new sponsorships. Existing sponsorships may + still use retired tiers if the sponsor selected the tier before it was retired. + """ + isRetired: Boolean! + + """ + The sponsorships using this tier. + """ + sponsorships( + """ + 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 + + """ + Whether or not to return private sponsorships using this tier. Defaults to + only returning public sponsorships on this tier. + """ + includePrivate: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! +} + +""" +The connection type for SponsorsTier. +""" +type SponsorsTierConnection { + """ + A list of edges. + """ + edges: [SponsorsTierEdge] + + """ + A list of nodes. + """ + nodes: [SponsorsTier] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SponsorsTierEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SponsorsTier +} + +""" +Ordering options for Sponsors tiers connections. +""" +input SponsorsTierOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order tiers by. + """ + field: SponsorsTierOrderField! +} + +""" +Properties by which Sponsors tiers connections can be ordered. +""" +enum SponsorsTierOrderField @docsCategory(name: "sponsors") { + """ + Order tiers by creation time. + """ + CREATED_AT + + """ + Order tiers by their monthly price in cents + """ + MONTHLY_PRICE_IN_CENTS +} + +""" +A sponsorship relationship between a sponsor and a maintainer +""" +type Sponsorship implements Node @docsCategory(name: "sponsors") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the Sponsorship object + """ + id: ID! + + """ + Whether the sponsorship is active. False implies the sponsor is a past sponsor + of the maintainer, while true implies they are a current sponsor. + """ + isActive: Boolean! + + """ + Whether this sponsorship represents a one-time payment versus a recurring sponsorship. + """ + isOneTimePayment: Boolean! + + """ + Whether the sponsor has chosen to receive sponsorship update emails sent from + the sponsorable. Only returns a non-null value when the viewer has permission to know this. + """ + isSponsorOptedIntoEmail: Boolean + + """ + The entity that is being sponsored + """ + maintainer: User! + @deprecated( + reason: "`Sponsorship.maintainer` will be removed. Use `Sponsorship.sponsorable` instead. Removal on 2020-04-01 UTC." + ) + + """ + The platform that was most recently used to pay for the sponsorship. + """ + paymentSource: SponsorshipPaymentSource + + """ + The privacy level for this sponsorship. + """ + privacyLevel: SponsorshipPrivacy! + + """ + The user that is sponsoring. Returns null if the sponsorship is private or if sponsor is not a user. + """ + sponsor: User + @deprecated( + reason: "`Sponsorship.sponsor` will be removed. Use `Sponsorship.sponsorEntity` instead. Removal on 2020-10-01 UTC." + ) + + """ + The user or organization that is sponsoring, if you have permission to view them. + """ + sponsorEntity: Sponsor + + """ + The entity that is being sponsored + """ + sponsorable: Sponsorable! + + """ + The associated sponsorship tier + """ + tier: SponsorsTier + + """ + Identifies the date and time when the current tier was chosen for this sponsorship. + """ + tierSelectedAt: DateTime +} + +""" +A list of sponsorships either from the subject or received by the subject. +""" +type SponsorshipConnection { + """ + A list of edges. + """ + edges: [SponsorshipEdge] + + """ + A list of nodes. + """ + nodes: [Sponsorship] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! + + """ + The total amount in cents of all recurring sponsorships in the connection + whose amount you can view. Does not include one-time sponsorships. + """ + totalRecurringMonthlyPriceInCents: Int! + + """ + The total amount in USD of all recurring sponsorships in the connection whose + amount you can view. Does not include one-time sponsorships. + """ + totalRecurringMonthlyPriceInDollars: Int! +} + +""" +An edge in a connection. +""" +type SponsorshipEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Sponsorship +} + +""" +An update sent to sponsors of a user or organization on GitHub Sponsors. +""" +type SponsorshipNewsletter implements Node @docsCategory(name: "sponsors") { + """ + The author of the newsletter. + """ + author: User + + """ + The contents of the newsletter, the message the sponsorable wanted to give. + """ + body: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the SponsorshipNewsletter object + """ + id: ID! + + """ + Indicates if the newsletter has been made available to sponsors. + """ + isPublished: Boolean! + + """ + The user or organization this newsletter is from. + """ + sponsorable: Sponsorable! + + """ + The subject of the newsletter, what it's about. + """ + subject: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +The connection type for SponsorshipNewsletter. +""" +type SponsorshipNewsletterConnection { + """ + A list of edges. + """ + edges: [SponsorshipNewsletterEdge] + + """ + A list of nodes. + """ + nodes: [SponsorshipNewsletter] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SponsorshipNewsletterEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SponsorshipNewsletter +} + +""" +Ordering options for sponsorship newsletter connections. +""" +input SponsorshipNewsletterOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order sponsorship newsletters by. + """ + field: SponsorshipNewsletterOrderField! +} + +""" +Properties by which sponsorship update connections can be ordered. +""" +enum SponsorshipNewsletterOrderField @docsCategory(name: "sponsors") { + """ + Order sponsorship newsletters by when they were created. + """ + CREATED_AT +} + +""" +Ordering options for sponsorship connections. +""" +input SponsorshipOrder @docsCategory(name: "sponsors") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order sponsorship by. + """ + field: SponsorshipOrderField! +} + +""" +Properties by which sponsorship connections can be ordered. +""" +enum SponsorshipOrderField @docsCategory(name: "sponsors") { + """ + Order sponsorship by creation time. + """ + CREATED_AT +} + +""" +How payment was made for funding a GitHub Sponsors sponsorship. +""" +enum SponsorshipPaymentSource @docsCategory(name: "sponsors") { + """ + Payment was made through GitHub. + """ + GITHUB + + """ + Payment was made through Patreon. + """ + PATREON +} + +""" +The privacy of a sponsorship +""" +enum SponsorshipPrivacy @docsCategory(name: "sponsors") { + """ + Private + """ + PRIVATE + + """ + Public + """ + PUBLIC +} + +""" +The possible default commit messages for squash merges. +""" +enum SquashMergeCommitMessage @docsCategory(name: "repos") { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the branch's commit messages. + """ + COMMIT_MESSAGES + + """ + Default to the pull request's body. + """ + PR_BODY +} + +""" +The possible default commit titles for squash merges. +""" +enum SquashMergeCommitTitle @docsCategory(name: "repos") { + """ + Default to the commit's title (if only one commit) or the pull request's title (when more than one commit). + """ + COMMIT_OR_PR_TITLE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +Represents an SSH signature on a Commit or Tag. +""" +type SshSignature implements GitSignature @docsCategory(name: "git") { + """ + Email used to sign this object. + """ + email: String! + + """ + True if the signature is valid and verified by GitHub. + """ + isValid: Boolean! + + """ + Hex-encoded fingerprint of the key that signed this object. + """ + keyFingerprint: String + + """ + Payload for GPG signing object. Raw ODB object without the signature header. + """ + payload: String! + + """ + ASCII-armored signature header from object. + """ + signature: String! + + """ + GitHub user corresponding to the email signing this commit. + """ + signer: User + + """ + The state of this signature. `VALID` if signature is valid and verified by + GitHub, otherwise represents reason why signature is considered invalid. + """ + state: GitSignatureState! + + """ + The date the signature was verified, if valid + """ + verifiedAt: DateTime + + """ + True if the signature was made with GitHub's signing key. + """ + wasSignedByGitHub: Boolean! +} + +""" +Ways in which star connections can be ordered. +""" +input StarOrder @docsCategory(name: "activity") { + """ + The direction in which to order nodes. + """ + direction: OrderDirection! + + """ + The field in which to order nodes by. + """ + field: StarOrderField! +} + +""" +Properties by which star connections can be ordered. +""" +enum StarOrderField @docsCategory(name: "activity") { + """ + Allows ordering a list of stars by when they were created. + """ + STARRED_AT +} + +""" +The connection type for User. +""" +type StargazerConnection { + """ + A list of edges. + """ + edges: [StargazerEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user that's starred a repository. +""" +type StargazerEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: User! + + """ + Identifies when the item was starred. + """ + starredAt: DateTime! +} + +""" +Things that can be starred. +""" +interface Starrable @docsCategory(name: "activity") { + """ + The Node ID of the Starrable object + """ + id: ID! + + """ + Returns a count of how many stargazers there are on this object + """ + stargazerCount: Int! + + """ + A list of users who have starred this starrable. + """ + stargazers( + """ + 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 + + """ + Order for connection + """ + orderBy: StarOrder + ): StargazerConnection! + + """ + Returns a boolean indicating whether the viewing user has starred this starrable. + """ + viewerHasStarred: Boolean! +} + +""" +The connection type for Repository. +""" +type StarredRepositoryConnection { + """ + A list of edges. + """ + edges: [StarredRepositoryEdge] + + """ + Is the list of stars for this user truncated? This is true for users that have many stars. + """ + isOverLimit: Boolean! + + """ + A list of nodes. + """ + nodes: [Repository] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a starred repository. +""" +type StarredRepositoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: Repository! + + """ + Identifies when the item was starred. + """ + starredAt: DateTime! +} + +""" +Autogenerated input type of StartOrganizationMigration +""" +input StartOrganizationMigrationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The migration source access token. + """ + sourceAccessToken: String! + + """ + The URL of the organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The ID of the enterprise the target organization belongs to. + """ + targetEnterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The name of the target organization. + """ + targetOrgName: String! +} + +""" +Autogenerated return type of StartOrganizationMigration. +""" +type StartOrganizationMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new organization migration. + """ + orgMigration: OrganizationMigration +} + +""" +Autogenerated input type of StartRepositoryMigration +""" +input StartRepositoryMigrationInput { + """ + The migration source access token. + """ + accessToken: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether to continue the migration on error. Defaults to `true`. + """ + continueOnError: Boolean + + """ + The signed URL to access the user-uploaded git archive. + """ + gitArchiveUrl: String + + """ + The GitHub personal access token of the user importing to the target repository. + """ + githubPat: String + + """ + Whether to lock the source repository. + """ + lockSource: Boolean + + """ + The signed URL to access the user-uploaded metadata archive. + """ + metadataArchiveUrl: String + + """ + The ID of the organization that will own the imported repository. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The name of the imported repository. + """ + repositoryName: String! + + """ + Whether to skip migrating releases for the repository. + """ + skipReleases: Boolean + + """ + The ID of the migration source. + """ + sourceId: ID! @possibleTypes(concreteTypes: ["MigrationSource"]) + + """ + The URL of the source repository. + """ + sourceRepositoryUrl: URI! + + """ + The visibility of the imported repository. + """ + targetRepoVisibility: String +} + +""" +Autogenerated return type of StartRepositoryMigration. +""" +type StartRepositoryMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new repository migration. + """ + repositoryMigration: RepositoryMigration +} + +""" +Represents a commit status. +""" +type Status implements Node @docsCategory(name: "commits") { + """ + A list of status contexts and check runs for this commit. + """ + combinedContexts( + """ + 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 + ): StatusCheckRollupContextConnection! + + """ + The commit this status is attached to. + """ + commit: Commit + + """ + Looks up an individual status context by context name. + """ + context( + """ + The context name. + """ + name: String! + ): StatusContext + + """ + The individual status contexts for this commit. + """ + contexts: [StatusContext!]! + + """ + The Node ID of the Status object + """ + id: ID! + + """ + The combined commit status. + """ + state: StatusState! +} + +""" +Required status check +""" +type StatusCheckConfiguration @docsCategory(name: "commits") { + """ + The status check context name that must be present on the commit. + """ + context: String! + + """ + The optional integration ID that this status check must originate from. + """ + integrationId: Int +} + +""" +Required status check +""" +input StatusCheckConfigurationInput @docsCategory(name: "commits") { + """ + The status check context name that must be present on the commit. + """ + context: String! + + """ + The optional integration ID that this status check must originate from. + """ + integrationId: Int +} + +""" +Represents the rollup for both the check runs and status for a commit. +""" +type StatusCheckRollup implements Node @docsCategory(name: "commits") { + """ + The commit the status and check runs are attached to. + """ + commit: Commit + + """ + A list of status contexts and check runs for this commit. + """ + contexts( + """ + 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 + ): StatusCheckRollupContextConnection! + + """ + The Node ID of the StatusCheckRollup object + """ + id: ID! + + """ + The combined status for the commit. + """ + state: StatusState! +} + +""" +Types that can be inside a StatusCheckRollup context. +""" +union StatusCheckRollupContext @docsCategory(name: "commits") = CheckRun | StatusContext + +""" +The connection type for StatusCheckRollupContext. +""" +type StatusCheckRollupContextConnection { + """ + The number of check runs in this rollup. + """ + checkRunCount: Int! + + """ + Counts of check runs by state. + """ + checkRunCountsByState: [CheckRunStateCount!] + + """ + A list of edges. + """ + edges: [StatusCheckRollupContextEdge] + + """ + A list of nodes. + """ + nodes: [StatusCheckRollupContext] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + The number of status contexts in this rollup. + """ + statusContextCount: Int! + + """ + Counts of status contexts by state. + """ + statusContextCountsByState: [StatusContextStateCount!] + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type StatusCheckRollupContextEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: StatusCheckRollupContext +} + +""" +Represents an individual commit status context +""" +type StatusContext implements Node & RequirableByPullRequest @docsCategory(name: "commits") { + """ + The avatar of the OAuth application or the user that created the status + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int = 40 + ): URI + + """ + This commit this status context is attached to. + """ + commit: Commit + + """ + The name of this status context. + """ + context: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The actor who created this status context. + """ + creator: Actor + + """ + The description for this status context. + """ + description: String + + """ + The Node ID of the StatusContext object + """ + id: ID! + + """ + Whether this is required to pass before merging for a specific pull request. + """ + isRequired( + """ + The id of the pull request this is required for + """ + pullRequestId: ID + + """ + The number of the pull request this is required for + """ + pullRequestNumber: Int + ): Boolean! + + """ + The state of this status context. + """ + state: StatusState! + + """ + The URL for this status context. + """ + targetUrl: URI + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +Represents a count of the state of a status context. +""" +type StatusContextStateCount @docsCategory(name: "commits") { + """ + The number of statuses with this state. + """ + count: Int! + + """ + The state of a status context. + """ + state: StatusState! +} + +""" +The possible commit status states. +""" +enum StatusState @docsCategory(name: "commits") { + """ + Status is errored. + """ + ERROR + + """ + Status is expected. + """ + EXPECTED + + """ + Status is failing. + """ + FAILURE + + """ + Status is pending. + """ + PENDING + + """ + Status is successful. + """ + SUCCESS +} + +""" +A Stripe Connect account for receiving sponsorship funds from GitHub Sponsors. +""" +type StripeConnectAccount @docsCategory(name: "sponsors") { + """ + The account number used to identify this Stripe Connect account. + """ + accountId: String! + + """ + The name of the country or region of an external account, such as a bank + account, tied to the Stripe Connect account. Will only return a value when + queried by the maintainer of the associated GitHub Sponsors profile + themselves, or by an admin of the sponsorable organization. + """ + billingCountryOrRegion: String + + """ + The name of the country or region of the Stripe Connect account. Will only + return a value when queried by the maintainer of the associated GitHub + Sponsors profile themselves, or by an admin of the sponsorable organization. + """ + countryOrRegion: String + + """ + Whether this Stripe Connect account is currently in use for the associated GitHub Sponsors profile. + """ + isActive: Boolean! + + """ + The GitHub Sponsors profile associated with this Stripe Connect account. + """ + sponsorsListing: SponsorsListing! + + """ + The URL to access this Stripe Connect account on Stripe's website. + """ + stripeDashboardUrl: URI! +} + +""" +Represents a 'sub_issue_added' event on a given issue. +""" +type SubIssueAddedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the SubIssueAddedEvent object + """ + id: ID! + + """ + The sub-issue added. + """ + subIssue: Issue +} + +""" +Represents a 'sub_issue_removed' event on a given issue. +""" +type SubIssueRemovedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the SubIssueRemovedEvent object + """ + id: ID! + + """ + The sub-issue removed. + """ + subIssue: Issue +} + +""" +Summary of the state of an issue's sub-issues +""" +type SubIssuesSummary @docsCategory(name: "issues") { + """ + Count of completed sub-issues + """ + completed: Int! + + """ + Percent of sub-issues which are completed + """ + percentCompleted: Int! + + """ + Count of total number of sub-issues + """ + total: Int! +} + +""" +Autogenerated input type of SubmitPullRequestReview +""" +input SubmitPullRequestReviewInput { + """ + The text field to set on the Pull Request Review. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The event to send to the Pull Request Review. + """ + event: PullRequestReviewEvent! + + """ + The Pull Request ID to submit any pending reviews. + """ + pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The Pull Request Review ID to submit. + """ + pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"]) +} + +""" +Autogenerated return type of SubmitPullRequestReview. +""" +type SubmitPullRequestReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The submitted pull request review. + """ + pullRequestReview: PullRequestReview +} + +""" +A pointer to a repository at a specific revision embedded inside another repository. +""" +type Submodule @docsCategory(name: "git") { + """ + The branch of the upstream submodule for tracking updates + """ + branch: String + + """ + The git URL of the submodule repository + """ + gitUrl: URI! + + """ + The name of the submodule in .gitmodules + """ + name: String! + + """ + The name of the submodule in .gitmodules (Base64-encoded) + """ + nameRaw: Base64String! + + """ + The path in the superproject that this submodule is located in + """ + path: String! + + """ + The path in the superproject that this submodule is located in (Base64-encoded) + """ + pathRaw: Base64String! + + """ + The commit revision of the subproject repository being tracked by the submodule + """ + subprojectCommitOid: GitObjectID +} + +""" +The connection type for Submodule. +""" +type SubmoduleConnection { + """ + A list of edges. + """ + edges: [SubmoduleEdge] + + """ + A list of nodes. + """ + nodes: [Submodule] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SubmoduleEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Submodule +} + +""" +Entities that can be subscribed to for web and email notifications. +""" +interface Subscribable @docsCategory(name: "activity") { + """ + The Node ID of the Subscribable object + """ + id: ID! + + """ + Check if the viewer is able to change their subscription status for the repository. + """ + viewerCanSubscribe: Boolean! + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState +} + +""" +Entities that can be subscribed to for web and email notifications. +""" +interface SubscribableThread @docsCategory(name: "activity") { + """ + The Node ID of the SubscribableThread object + """ + id: ID! + + """ + Identifies the viewer's thread subscription form action. + """ + viewerThreadSubscriptionFormAction: ThreadSubscriptionFormAction + + """ + Identifies the viewer's thread subscription status. + """ + viewerThreadSubscriptionStatus: ThreadSubscriptionState +} + +""" +Represents a 'subscribed' event on a given `Subscribable`. +""" +type SubscribedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the SubscribedEvent object + """ + id: ID! + + """ + Object referenced by event. + """ + subscribable: Subscribable! +} + +""" +The possible states of a subscription. +""" +enum SubscriptionState @docsCategory(name: "activity") { + """ + The User is never notified. + """ + IGNORED + + """ + The User is notified of all conversations. + """ + SUBSCRIBED + + """ + The User is only notified when participating or @mentioned. + """ + UNSUBSCRIBED +} + +""" +A suggestion to review a pull request based on a user's commit history and review comments. +""" +type SuggestedReviewer @docsCategory(name: "pulls") { + """ + Is this suggestion based on past commits? + """ + isAuthor: Boolean! + + """ + Is this suggestion based on past review comments? + """ + isCommenter: Boolean! + + """ + Identifies the user suggested to review the pull request. + """ + reviewer: User! +} + +""" +A suggestion to review a pull request based on an actor's commit history, review comments, and integrations. +""" +type SuggestedReviewerActor @docsCategory(name: "pulls") { + """ + Is this suggestion based on past commits? + """ + isAuthor: Boolean! + + """ + Is this suggestion based on past review comments? + """ + isCommenter: Boolean! + + """ + Identifies the actor suggested to review the pull request. + """ + reviewer: Actor! +} + +""" +A suggestion to review a pull request based on an actor's commit history, review comments, and integrations. +""" +type SuggestedReviewerActorConnection { + """ + A list of edges. + """ + edges: [SuggestedReviewerActorEdge] + + """ + A list of nodes. + """ + nodes: [SuggestedReviewerActor] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type SuggestedReviewerActorEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: SuggestedReviewerActor +} + +""" +Represents a Git tag. +""" +type Tag implements GitObject & Node @docsCategory(name: "git") { + """ + An abbreviated version of the Git object ID + """ + abbreviatedOid: String! + + """ + The HTTP path for this Git object + """ + commitResourcePath: URI! + + """ + The HTTP URL for this Git object + """ + commitUrl: URI! + + """ + The Node ID of the Tag object + """ + id: ID! + + """ + The Git tag message. + """ + message: String + + """ + The Git tag name. + """ + name: String! + + """ + The Git object ID + """ + oid: GitObjectID! + + """ + The Repository the Git object belongs to + """ + repository: Repository! + + """ + Details about the tag author. + """ + tagger: GitActor + + """ + The Git object the tag points to. + """ + target: GitObject! +} + +""" +Parameters to be used for the tag_name_pattern rule +""" +type TagNamePatternParameters @docsCategory(name: "repos") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean! + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +Parameters to be used for the tag_name_pattern rule +""" +input TagNamePatternParametersInput @docsCategory(name: "repos") { + """ + How this rule appears when configuring it. + """ + name: String + + """ + If true, the rule will fail if the pattern matches. + """ + negate: Boolean + + """ + The operator to use for matching. + """ + operator: String! + + """ + The pattern to match with. + """ + pattern: String! +} + +""" +A team of users in an organization. +""" +type Team implements MemberStatusable & Node & Subscribable & TeamReviewRequestable @docsCategory(name: "teams") { + """ + A list of teams that are ancestors of this team. + """ + ancestors( + """ + 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 + ): TeamConnection! + + """ + A URL pointing to the team's avatar. + """ + avatarUrl( + """ + The size in pixels of the resulting square image. + """ + size: Int = 400 + ): URI + + """ + List of child teams belonging to this team + """ + childTeams( + """ + 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 + + """ + Whether to list immediate child teams or all descendant child teams. + """ + immediateOnly: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Order for connection + """ + orderBy: TeamOrder + + """ + User logins to filter by + """ + userLogins: [String!] + ): TeamConnection! + + """ + The slug corresponding to the organization and team. + """ + combinedSlug: String! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The description of the team. + """ + description: String + + """ + The HTTP path for editing this team + """ + editTeamResourcePath: URI! + + """ + The HTTP URL for editing this team + """ + editTeamUrl: URI! + + """ + The Node ID of the Team object + """ + id: ID! + + """ + A list of pending invitations for users to this team + """ + invitations( + """ + 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 + ): OrganizationInvitationConnection + + """ + Get the status messages members of this entity have set that are either public or visible only to the organization. + """ + memberStatuses( + """ + 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 + + """ + Ordering options for user statuses returned from the connection. + """ + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! + + """ + A list of users who are members of this team. + """ + members( + """ + 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 + + """ + Filter by membership type + """ + membership: TeamMembershipType = ALL + + """ + Order for the connection. + """ + orderBy: TeamMemberOrder + + """ + The search string to look for. + """ + query: String + + """ + Filter by team member role + """ + role: TeamMemberRole + ): TeamMemberConnection! + + """ + The HTTP path for the team' members + """ + membersResourcePath: URI! + + """ + The HTTP URL for the team' members + """ + membersUrl: URI! + + """ + The name of the team. + """ + name: String! + + """ + The HTTP path creating a new team + """ + newTeamResourcePath: URI! + + """ + The HTTP URL creating a new team + """ + newTeamUrl: URI! + + """ + The notification setting that the team has set. + """ + notificationSetting: TeamNotificationSetting! + + """ + The organization that owns this team. + """ + organization: Organization! + + """ + The parent team of the team. + """ + parentTeam: Team + + """ + The level of privacy the team has. + """ + privacy: TeamPrivacy! + + """ + Finds and returns the project according to the provided project number. + """ + projectV2( + """ + The Project number. + """ + number: Int! + ): ProjectV2 + + """ + List of projects this team has collaborator access to. + """ + projectsV2( + """ + 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 + + """ + Filtering options for projects returned from this connection + """ + filterBy: ProjectV2Filters = {} + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + The query to search projects by. + """ + query: String = "" + ): ProjectV2Connection! + + """ + A list of repositories this team has access to. + """ + repositories( + """ + 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 + + """ + Order for the connection. + """ + orderBy: TeamRepositoryOrder + + """ + The search string to look for. Repositories will be returned where the name contains your search string. + """ + query: String + ): TeamRepositoryConnection! + + """ + The HTTP path for this team's repositories + """ + repositoriesResourcePath: URI! + + """ + The HTTP URL for this team's repositories + """ + repositoriesUrl: URI! + + """ + The HTTP path for this team + """ + resourcePath: URI! + + """ + What algorithm is used for review assignment for this team + """ + reviewRequestDelegationAlgorithm: TeamReviewAssignmentAlgorithm + + """ + True if review assignment is enabled for this team + """ + reviewRequestDelegationEnabled: Boolean! + + """ + How many team members are required for review assignment for this team + """ + reviewRequestDelegationMemberCount: Int + + """ + When assigning team members via delegation, whether the entire team should be notified as well. + """ + reviewRequestDelegationNotifyTeam: Boolean! + + """ + The slug corresponding to the team. + """ + slug: String! + + """ + The HTTP path for this team's teams + """ + teamsResourcePath: URI! + + """ + The HTTP URL for this team's teams + """ + teamsUrl: URI! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this team + """ + url: URI! + + """ + Team is adminable by the viewer. + """ + viewerCanAdminister: Boolean! + + """ + Check if the viewer is able to change their subscription status for the subscribable entity. + """ + viewerCanSubscribe: Boolean! + @deprecated( + reason: "`Team.viewerCanSubscribe` will be removed. Team notifications subscriptions are being deprecated. Removal on 2026-07-01 UTC." + ) + + """ + Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. + """ + viewerSubscription: SubscriptionState + @deprecated( + reason: "`Team.viewerSubscription` will be removed. Team notifications subscriptions are being deprecated. Removal on 2026-07-01 UTC." + ) +} + +""" +Audit log entry for a team.add_member event. +""" +type TeamAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData + @docsCategory(name: "teams") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the TeamAddMemberAuditEntry object + """ + id: ID! + + """ + Whether the team was mapped to an LDAP Group. + """ + isLdapMapped: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a team.add_repository event. +""" +type TeamAddRepositoryAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TeamAuditEntryData + @docsCategory(name: "teams") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the TeamAddRepositoryAuditEntry object + """ + id: ID! + + """ + Whether the team was mapped to an LDAP Group. + """ + isLdapMapped: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Metadata for an audit entry with action team.* +""" +interface TeamAuditEntryData @docsCategory(name: "teams") { + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI +} + +""" +Audit log entry for a team.change_parent_team event. +""" +type TeamChangeParentTeamAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData + @docsCategory(name: "teams") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the TeamChangeParentTeamAuditEntry object + """ + id: ID! + + """ + Whether the team was mapped to an LDAP Group. + """ + isLdapMapped: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The new parent team. + """ + parentTeam: Team + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the new parent team + """ + parentTeamName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the former parent team + """ + parentTeamNameWas: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the parent team + """ + parentTeamResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the parent team + """ + parentTeamUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The former parent team. + """ + parentTeamWas: Team + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the previous parent team + """ + parentTeamWasResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the previous parent team + """ + parentTeamWasUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The connection type for Team. +""" +type TeamConnection { + """ + A list of edges. + """ + edges: [TeamEdge] + + """ + A list of nodes. + """ + nodes: [Team] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type TeamEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Team +} + +""" +The connection type for User. +""" +type TeamMemberConnection { + """ + A list of edges. + """ + edges: [TeamMemberEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a user who is a member of a team. +""" +type TeamMemberEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The HTTP path to the organization's member access page. + """ + memberAccessResourcePath: URI! + + """ + The HTTP URL to the organization's member access page. + """ + memberAccessUrl: URI! + node: User! + + """ + The role the member has on the team. + """ + role: TeamMemberRole! +} + +""" +Ordering options for team member connections +""" +input TeamMemberOrder @docsCategory(name: "teams") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order team members by. + """ + field: TeamMemberOrderField! +} + +""" +Properties by which team member connections can be ordered. +""" +enum TeamMemberOrderField @docsCategory(name: "teams") { + """ + Order team members by creation time + """ + CREATED_AT + + """ + Order team members by login + """ + LOGIN +} + +""" +The possible team member roles; either 'maintainer' or 'member'. +""" +enum TeamMemberRole @docsCategory(name: "teams") { + """ + A team maintainer has permission to add and remove team members. + """ + MAINTAINER + + """ + A team member has no administrative permissions on the team. + """ + MEMBER +} + +""" +Defines which types of team members are included in the returned list. Can be one of IMMEDIATE, CHILD_TEAM or ALL. +""" +enum TeamMembershipType @docsCategory(name: "teams") { + """ + Includes immediate and child team members for the team. + """ + ALL + + """ + Includes only child team members for the team. + """ + CHILD_TEAM + + """ + Includes only immediate members of the team. + """ + IMMEDIATE +} + +""" +The possible team notification values. +""" +enum TeamNotificationSetting @docsCategory(name: "teams") { + """ + No one will receive notifications. + """ + NOTIFICATIONS_DISABLED + + """ + Everyone will receive notifications when the team is @mentioned. + """ + NOTIFICATIONS_ENABLED +} + +""" +Ways in which team connections can be ordered. +""" +input TeamOrder @docsCategory(name: "teams") { + """ + The direction in which to order nodes. + """ + direction: OrderDirection! + + """ + The field in which to order nodes by. + """ + field: TeamOrderField! +} + +""" +Properties by which team connections can be ordered. +""" +enum TeamOrderField @docsCategory(name: "teams") { + """ + Allows ordering a list of teams by name. + """ + NAME +} + +""" +The possible team privacy values. +""" +enum TeamPrivacy @docsCategory(name: "teams") { + """ + A secret team can only be seen by its members. + """ + SECRET + + """ + A visible team can be seen and @mentioned by every member of the organization. + """ + VISIBLE +} + +""" +Audit log entry for a team.remove_member event. +""" +type TeamRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData + @docsCategory(name: "teams") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the TeamRemoveMemberAuditEntry object + """ + id: ID! + + """ + Whether the team was mapped to an LDAP Group. + """ + isLdapMapped: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +Audit log entry for a team.remove_repository event. +""" +type TeamRemoveRepositoryAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TeamAuditEntryData + @docsCategory(name: "teams") { + """ + The action name + """ + action: String! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The user who initiated the action + """ + actor: AuditEntryActor + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The IP address of the actor + """ + actorIp: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + A readable representation of the actor's location + """ + actorLocation: ActorLocation + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The username of the user who initiated the action + """ + actorLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the actor. + """ + actorResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the actor. + """ + actorUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The time the action was initiated + """ + createdAt: PreciseDateTime! + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Node ID of the TeamRemoveRepositoryAuditEntry object + """ + id: ID! + + """ + Whether the team was mapped to an LDAP Group. + """ + isLdapMapped: Boolean + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The corresponding operation type for the action + """ + operationType: OperationType + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The Organization associated with the Audit Entry. + """ + organization: Organization + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The name of the Organization. + """ + organizationName: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the organization + """ + organizationResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the organization + """ + organizationUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The repository associated with the action + """ + repository: Repository + + """ + The name of the repository + """ + repositoryName: String + + """ + The HTTP path for the repository + """ + repositoryResourcePath: URI + + """ + The HTTP URL for the repository + """ + repositoryUrl: URI + + """ + The team associated with the action + """ + team: Team + + """ + The name of the team + """ + teamName: String + + """ + The HTTP path for this team + """ + teamResourcePath: URI + + """ + The HTTP URL for this team + """ + teamUrl: URI + + """ + The user affected by the action + """ + user: User + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + For actions involving two users, the actor is the initiator and the user is the affected user. + """ + userLogin: String + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP path for the user. + """ + userResourcePath: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) + + """ + The HTTP URL for the user. + """ + userUrl: URI + @deprecated( + reason: "The GraphQL audit-log is deprecated. Please use the REST API instead. Removal on 2026-04-01 UTC." + ) +} + +""" +The connection type for Repository. +""" +type TeamRepositoryConnection { + """ + A list of edges. + """ + edges: [TeamRepositoryEdge] + + """ + A list of nodes. + """ + nodes: [Repository] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +Represents a team repository. +""" +type TeamRepositoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + node: Repository! + + """ + The permission level the team has on the repository + """ + permission: RepositoryPermission! +} + +""" +Ordering options for team repository connections +""" +input TeamRepositoryOrder @docsCategory(name: "teams") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order repositories by. + """ + field: TeamRepositoryOrderField! +} + +""" +Properties by which team repository connections can be ordered. +""" +enum TeamRepositoryOrderField @docsCategory(name: "teams") { + """ + Order repositories by creation time + """ + CREATED_AT + + """ + Order repositories by name + """ + NAME + + """ + Order repositories by permission + """ + PERMISSION + + """ + Order repositories by push time + """ + PUSHED_AT + + """ + Order repositories by number of stargazers + """ + STARGAZERS + + """ + Order repositories by update time + """ + UPDATED_AT +} + +""" +The possible team review assignment algorithms +""" +enum TeamReviewAssignmentAlgorithm @docsCategory(name: "teams") { + """ + Balance review load across the entire team + """ + LOAD_BALANCE + + """ + Alternate reviews between each team member + """ + ROUND_ROBIN +} + +""" +Represents a team that can be requested to review a pull request. +""" +interface TeamReviewRequestable @docsCategory(name: "teams") { + """ + The Node ID of the TeamReviewRequestable object + """ + id: ID! + + """ + The name of the team. + """ + name: String! + + """ + A unique, human-readable identifier for the team. + """ + slug: String! +} + +""" +The role of a user on a team. +""" +enum TeamRole @docsCategory(name: "teams") { + """ + User has admin rights on the team. + """ + ADMIN + + """ + User is a member of the team. + """ + MEMBER +} + +""" +A text match within a search result. +""" +type TextMatch @docsCategory(name: "search") { + """ + The specific text fragment within the property matched on. + """ + fragment: String! + + """ + Highlights within the matched fragment. + """ + highlights: [TextMatchHighlight!]! + + """ + The property matched on. + """ + property: String! +} + +""" +Represents a single highlight in a search result match. +""" +type TextMatchHighlight @docsCategory(name: "search") { + """ + The indice in the fragment where the matched text begins. + """ + beginIndice: Int! + + """ + The indice in the fragment where the matched text ends. + """ + endIndice: Int! + + """ + The text matched. + """ + text: String! +} + +""" +The possible states of a thread subscription form action +""" +enum ThreadSubscriptionFormAction @docsCategory(name: "activity") { + """ + The User cannot subscribe or unsubscribe to the thread + """ + NONE + + """ + The User can subscribe to the thread + """ + SUBSCRIBE + + """ + The User can unsubscribe to the thread + """ + UNSUBSCRIBE +} + +""" +The possible states of a subscription. +""" +enum ThreadSubscriptionState @docsCategory(name: "activity") { + """ + The subscription status is currently disabled. + """ + DISABLED + + """ + The User is never notified because they are ignoring the list + """ + IGNORING_LIST + + """ + The User is never notified because they are ignoring the thread + """ + IGNORING_THREAD + + """ + The User is not recieving notifications from this thread + """ + NONE + + """ + The User is notified becuase they are watching the list + """ + SUBSCRIBED_TO_LIST + + """ + The User is notified because they are subscribed to the thread + """ + SUBSCRIBED_TO_THREAD + + """ + The User is notified because they chose custom settings for this thread. + """ + SUBSCRIBED_TO_THREAD_EVENTS + + """ + The User is notified because they chose custom settings for this thread. + """ + SUBSCRIBED_TO_THREAD_TYPE + + """ + The subscription status is currently unavailable. + """ + UNAVAILABLE +} + +""" +A topic aggregates entities that are related to a subject. +""" +type Topic implements Node & Starrable @docsCategory(name: "repos") { + """ + The Node ID of the Topic object + """ + id: ID! + + """ + The topic's name. + """ + name: String! + + """ + A list of related topics, including aliases of this topic, sorted with the most relevant + first. Returns up to 10 Topics. + """ + relatedTopics( + """ + How many topics to return. + """ + first: Int = 3 + ): [Topic!]! + + """ + A list of repositories. + """ + repositories( + """ + Array of viewer's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + current viewer owns. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If true, only repositories whose owner can be sponsored via GitHub Sponsors will be returned. + """ + sponsorableOnly: Boolean = false + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + Returns a count of how many stargazers there are on this object + """ + stargazerCount: Int! + + """ + A list of users who have starred this starrable. + """ + stargazers( + """ + 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 + + """ + Order for connection + """ + orderBy: StarOrder + ): StargazerConnection! + + """ + Returns a boolean indicating whether the viewing user has starred this starrable. + """ + viewerHasStarred: Boolean! +} + +""" +Metadata for an audit entry with a topic. +""" +interface TopicAuditEntryData @docsCategory(name: "enterprise-admin") { + """ + The name of the topic added to the repository + """ + topic: Topic + + """ + The name of the topic added to the repository + """ + topicName: String +} + +""" +Reason that the suggested topic is declined. +""" +enum TopicSuggestionDeclineReason @docsCategory(name: "repos") { + """ + The suggested topic is not relevant to the repository. + """ + NOT_RELEVANT @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") + + """ + The viewer does not like the suggested topic. + """ + PERSONAL_PREFERENCE @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") + + """ + The suggested topic is too general for the repository. + """ + TOO_GENERAL @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") + + """ + The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1). + """ + TOO_SPECIFIC @deprecated(reason: "Suggested topics are no longer supported Removal on 2024-04-01 UTC.") +} + +""" +The possible states of a tracked issue. +""" +enum TrackedIssueStates @docsCategory(name: "issues") { + """ + The tracked issue is closed + """ + CLOSED + + """ + The tracked issue is open + """ + OPEN +} + +""" +Autogenerated input type of TransferEnterpriseOrganization +""" +input TransferEnterpriseOrganizationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise where the organization should be transferred. + """ + destinationEnterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the organization to transfer. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of TransferEnterpriseOrganization. +""" +type TransferEnterpriseOrganizationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organization for which a transfer was initiated. + """ + organization: Organization +} + +""" +Autogenerated input type of TransferIssue +""" +input TransferIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether to create labels if they don't exist in the target repository (matched by name) + """ + createLabelsIfMissing: Boolean = false + + """ + The Node ID of the issue to be transferred + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The Node ID of the repository the issue should be transferred to + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of TransferIssue. +""" +type TransferIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue that was transferred + """ + issue: Issue +} + +""" +Represents a 'transferred' event on a given issue or pull request. +""" +type TransferredEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The repository this came from + """ + fromRepository: Repository + + """ + The Node ID of the TransferredEvent object + """ + id: ID! + + """ + Identifies the issue associated with the event. + """ + issue: Issue! +} + +""" +Represents a Git tree. +""" +type Tree implements GitObject & Node @docsCategory(name: "git") { + """ + An abbreviated version of the Git object ID + """ + abbreviatedOid: String! + + """ + The HTTP path for this Git object + """ + commitResourcePath: URI! + + """ + The HTTP URL for this Git object + """ + commitUrl: URI! + + """ + A list of tree entries. + """ + entries: [TreeEntry!] + + """ + The Node ID of the Tree object + """ + id: ID! + + """ + The Git object ID + """ + oid: GitObjectID! + + """ + The Repository the Git object belongs to + """ + repository: Repository! +} + +""" +Represents a Git tree entry. +""" +type TreeEntry @docsCategory(name: "git") { + """ + The extension of the file + """ + extension: String + + """ + Whether or not this tree entry is generated + """ + isGenerated: Boolean! + + """ + The programming language this file is written in. + """ + language: Language + + """ + Number of lines in the file. + """ + lineCount: Int + + """ + Entry file mode. + """ + mode: Int! + + """ + Entry file name. + """ + name: String! + + """ + Entry file name. (Base64-encoded) + """ + nameRaw: Base64String! + + """ + Entry file object. + """ + object: GitObject + + """ + Entry file Git object ID. + """ + oid: GitObjectID! + + """ + The full path of the file. + """ + path: String + + """ + The full path of the file. (Base64-encoded) + """ + pathRaw: Base64String + + """ + The Repository the tree entry belongs to + """ + repository: Repository! + + """ + Entry byte size + """ + size: Int! + + """ + If the TreeEntry is for a directory occupied by a submodule project, this returns the corresponding submodule + """ + submodule: Submodule + + """ + Entry file type. + """ + type: String! +} + +""" +Filters by whether or not 2FA is enabled and if the method configured is considered secure or insecure. +""" +enum TwoFactorCredentialSecurityType @docsCategory(name: "enterprise-admin") { + """ + No method of two-factor authentication. + """ + DISABLED + + """ + Has an insecure method of two-factor authentication. GitHub currently defines this as SMS two-factor authentication. + """ + INSECURE + + """ + Has only secure methods of two-factor authentication. + """ + SECURE +} + +""" +An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string. +""" +scalar URI + +""" +Autogenerated input type of UnarchiveProjectV2Item +""" +input UnarchiveProjectV2ItemInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the ProjectV2Item to unarchive. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project to archive the item from. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of UnarchiveProjectV2Item. +""" +type UnarchiveProjectV2ItemPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item unarchived from the project. + """ + item: ProjectV2Item +} + +""" +Autogenerated input type of UnarchivePullRequest +""" +input UnarchivePullRequestInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to unarchive. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of UnarchivePullRequest. +""" +type UnarchivePullRequestPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that was unarchived. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of UnarchiveRepository +""" +input UnarchiveRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the repository to unarchive. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of UnarchiveRepository. +""" +type UnarchiveRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository that was unarchived. + """ + repository: Repository +} + +""" +Represents an 'unassigned' event on any assignable object. +""" +type UnassignedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the assignable associated with the event. + """ + assignable: Assignable! + + """ + Identifies the user or mannequin that was unassigned. + """ + assignee: Assignee + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UnassignedEvent object + """ + id: ID! + + """ + Identifies the subject (user) who was unassigned. + """ + user: User + @deprecated(reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC.") +} + +""" +Autogenerated input type of UnfollowOrganization +""" +input UnfollowOrganizationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the organization to unfollow. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of UnfollowOrganization. +""" +type UnfollowOrganizationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The organization that was unfollowed. + """ + organization: Organization +} + +""" +Autogenerated input type of UnfollowUser +""" +input UnfollowUserInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the user to unfollow. + """ + userId: ID! @possibleTypes(concreteTypes: ["User"]) +} + +""" +Autogenerated return type of UnfollowUser. +""" +type UnfollowUserPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The user that was unfollowed. + """ + user: User +} + +""" +Represents a type that can be retrieved by a URL. +""" +interface UniformResourceLocatable @docsCategory(name: "meta") { + """ + The HTML path to this resource. + """ + resourcePath: URI! + + """ + The URL to this resource. + """ + url: URI! +} + +""" +Represents an unknown signature on a Commit or Tag. +""" +type UnknownSignature implements GitSignature @docsCategory(name: "git") { + """ + Email used to sign this object. + """ + email: String! + + """ + True if the signature is valid and verified by GitHub. + """ + isValid: Boolean! + + """ + Payload for GPG signing object. Raw ODB object without the signature header. + """ + payload: String! + + """ + ASCII-armored signature header from object. + """ + signature: String! + + """ + GitHub user corresponding to the email signing this commit. + """ + signer: User + + """ + The state of this signature. `VALID` if signature is valid and verified by + GitHub, otherwise represents reason why signature is considered invalid. + """ + state: GitSignatureState! + + """ + The date the signature was verified, if valid + """ + verifiedAt: DateTime + + """ + True if the signature was made with GitHub's signing key. + """ + wasSignedByGitHub: Boolean! +} + +""" +Represents an 'unlabeled' event on a given issue or pull request. +""" +type UnlabeledEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UnlabeledEvent object + """ + id: ID! + + """ + Identifies the label associated with the 'unlabeled' event. + """ + label: Label! + + """ + Identifies the `Labelable` associated with the event. + """ + labelable: Labelable! +} + +""" +Autogenerated input type of UnlinkProjectV2FromRepository +""" +input UnlinkProjectV2FromRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the project to unlink from the repository. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The ID of the repository to unlink from the project. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of UnlinkProjectV2FromRepository. +""" +type UnlinkProjectV2FromRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository the project is no longer linked to. + """ + repository: Repository +} + +""" +Autogenerated input type of UnlinkProjectV2FromTeam +""" +input UnlinkProjectV2FromTeamInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the project to unlink from the team. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The ID of the team to unlink from the project. + """ + teamId: ID! @possibleTypes(concreteTypes: ["Team"]) +} + +""" +Autogenerated return type of UnlinkProjectV2FromTeam. +""" +type UnlinkProjectV2FromTeamPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The team the project is unlinked from + """ + team: Team +} + +""" +Autogenerated input type of UnlinkRepositoryFromProject +""" +input UnlinkRepositoryFromProjectInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project linked to the Repository. + """ + projectId: ID! @possibleTypes(concreteTypes: ["Project"]) + + """ + The ID of the Repository linked to the Project. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of UnlinkRepositoryFromProject. +""" +type UnlinkRepositoryFromProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The linked Project. + """ + project: Project + + """ + The linked Repository. + """ + repository: Repository +} + +""" +Autogenerated input type of UnlockLockable +""" +input UnlockLockableInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the item to be unlocked. + """ + lockableId: ID! @possibleTypes(concreteTypes: ["Discussion", "Issue", "PullRequest"], abstractType: "Lockable") +} + +""" +Autogenerated return type of UnlockLockable. +""" +type UnlockLockablePayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item that was unlocked. + """ + unlockedRecord: Lockable +} + +""" +Represents an 'unlocked' event on a given issue or pull request. +""" +type UnlockedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UnlockedEvent object + """ + id: ID! + + """ + Object that was unlocked. + """ + lockable: Lockable! +} + +""" +Autogenerated input type of UnmarkDiscussionCommentAsAnswer +""" +input UnmarkDiscussionCommentAsAnswerInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion comment to unmark as an answer. + """ + id: ID! @possibleTypes(concreteTypes: ["DiscussionComment"]) +} + +""" +Autogenerated return type of UnmarkDiscussionCommentAsAnswer. +""" +type UnmarkDiscussionCommentAsAnswerPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The discussion that includes the comment. + """ + discussion: Discussion +} + +""" +Autogenerated input type of UnmarkFileAsViewed +""" +input UnmarkFileAsViewedInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The path of the file to mark as unviewed + """ + path: String! + + """ + The Node ID of the pull request. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) +} + +""" +Autogenerated return type of UnmarkFileAsViewed. +""" +type UnmarkFileAsViewedPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated pull request. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of UnmarkIssueAsDuplicate +""" +input UnmarkIssueAsDuplicateInput { + """ + ID of the issue or pull request currently considered canonical/authoritative/original. + """ + canonicalId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest") + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + ID of the issue or pull request currently marked as a duplicate. + """ + duplicateId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest") +} + +""" +Autogenerated return type of UnmarkIssueAsDuplicate. +""" +type UnmarkIssueAsDuplicatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue or pull request that was marked as a duplicate. + """ + duplicate: IssueOrPullRequest +} + +""" +Autogenerated input type of UnmarkProjectV2AsTemplate +""" +input UnmarkProjectV2AsTemplateInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Project to unmark as a template. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of UnmarkProjectV2AsTemplate. +""" +type UnmarkProjectV2AsTemplatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The project. + """ + projectV2: ProjectV2 +} + +""" +Represents an 'unmarked_as_duplicate' event on a given issue or pull request. +""" +type UnmarkedAsDuplicateEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + The authoritative issue or pull request which has been duplicated by another. + """ + canonical: IssueOrPullRequest + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The issue or pull request which has been marked as a duplicate of another. + """ + duplicate: IssueOrPullRequest + + """ + The Node ID of the UnmarkedAsDuplicateEvent object + """ + id: ID! + + """ + Canonical and duplicate belong to different repositories. + """ + isCrossRepository: Boolean! +} + +""" +Autogenerated input type of UnminimizeComment +""" +input UnminimizeCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the subject to modify. + """ + subjectId: ID! + @possibleTypes( + concreteTypes: [ + "CommitComment" + "DiscussionComment" + "GistComment" + "IssueComment" + "PullRequestReview" + "PullRequestReviewComment" + ] + abstractType: "Minimizable" + ) +} + +""" +Autogenerated return type of UnminimizeComment. +""" +type UnminimizeCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The comment that was unminimized. + """ + unminimizedComment: Minimizable +} + +""" +Autogenerated input type of UnpinIssueComment +""" +input UnpinIssueCommentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Issue Comment to unpin. Comment pinning is not supported on Pull Requests. + """ + issueCommentId: ID! @possibleTypes(concreteTypes: ["IssueComment"]) +} + +""" +Autogenerated return type of UnpinIssueComment. +""" +type UnpinIssueCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Issue Comment that was unpinned + """ + issueComment: IssueComment +} + +""" +Autogenerated input type of UnpinIssue +""" +input UnpinIssueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue to be unpinned + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of UnpinIssue. +""" +type UnpinIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the pinned issue that was unpinned + """ + id: ID + + """ + The issue that was unpinned + """ + issue: Issue +} + +""" +Represents an 'unpinned' event on a given issue or pull request. +""" +type UnpinnedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UnpinnedEvent object + """ + id: ID! + + """ + Identifies the issue associated with the event. + """ + issue: Issue! +} + +""" +Autogenerated input type of UnresolveReviewThread +""" +input UnresolveReviewThreadInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the thread to unresolve + """ + threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"]) +} + +""" +Autogenerated return type of UnresolveReviewThread. +""" +type UnresolveReviewThreadPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The thread to resolve. + """ + thread: PullRequestReviewThread +} + +""" +Represents an 'unsubscribed' event on a given `Subscribable`. +""" +type UnsubscribedEvent implements Node @docsCategory(name: "issues") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UnsubscribedEvent object + """ + id: ID! + + """ + Object referenced by event. + """ + subscribable: Subscribable! +} + +""" +Entities that can be updated. +""" +interface Updatable @docsCategory(name: "issues") { + """ + Check if the current viewer can update this object. + """ + viewerCanUpdate: Boolean! +} + +""" +Comments that can be updated. +""" +interface UpdatableComment @docsCategory(name: "issues") { + """ + Reasons why the current viewer can not update this comment. + """ + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! +} + +""" +Autogenerated input type of UpdateBranchProtectionRule +""" +input UpdateBranchProtectionRuleInput { + """ + Can this branch be deleted. + """ + allowsDeletions: Boolean + + """ + Are force pushes allowed on this branch. + """ + allowsForcePushes: Boolean + + """ + Is branch creation a protected operation. + """ + blocksCreations: Boolean + + """ + The global relay id of the branch protection rule to be updated. + """ + branchProtectionRuleId: ID! @possibleTypes(concreteTypes: ["BranchProtectionRule"]) + + """ + A list of User, Team, or App IDs allowed to bypass force push targeting matching branches. + """ + bypassForcePushActorIds: [ID!] + + """ + A list of User, Team, or App IDs allowed to bypass pull requests targeting matching branches. + """ + bypassPullRequestActorIds: [ID!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Will new commits pushed to matching branches dismiss pull request review approvals. + """ + dismissesStaleReviews: Boolean + + """ + Can admins override branch protection. + """ + isAdminEnforced: Boolean + + """ + Whether users can pull changes from upstream when the branch is locked. Set to + `true` to allow fork syncing. Set to `false` to prevent fork syncing. + """ + lockAllowsFetchAndMerge: Boolean + + """ + Whether to set the branch as read-only. If this is true, users will not be able to push to the branch. + """ + lockBranch: Boolean + + """ + The glob-like pattern used to determine matching branches. + """ + pattern: String + + """ + A list of User, Team, or App IDs allowed to push to matching branches. + """ + pushActorIds: [ID!] + + """ + Whether the most recent push must be approved by someone other than the person who pushed it + """ + requireLastPushApproval: Boolean + + """ + Number of approving reviews required to update matching branches. + """ + requiredApprovingReviewCount: Int + + """ + The list of required deployment environments + """ + requiredDeploymentEnvironments: [String!] + + """ + List of required status check contexts that must pass for commits to be accepted to matching branches. + """ + requiredStatusCheckContexts: [String!] + + """ + The list of required status checks + """ + requiredStatusChecks: [RequiredStatusCheckInput!] + + """ + Are approving reviews required to update matching branches. + """ + requiresApprovingReviews: Boolean + + """ + Are reviews from code owners required to update matching branches. + """ + requiresCodeOwnerReviews: Boolean + + """ + Are commits required to be signed. + """ + requiresCommitSignatures: Boolean + + """ + Are conversations required to be resolved before merging. + """ + requiresConversationResolution: Boolean + + """ + Are successful deployments required before merging. + """ + requiresDeployments: Boolean + + """ + Are merge commits prohibited from being pushed to this branch. + """ + requiresLinearHistory: Boolean + + """ + Are status checks required to update matching branches. + """ + requiresStatusChecks: Boolean + + """ + Are branches required to be up to date before merging. + """ + requiresStrictStatusChecks: Boolean + + """ + Is pushing to matching branches restricted. + """ + restrictsPushes: Boolean + + """ + Is dismissal of pull request reviews restricted. + """ + restrictsReviewDismissals: Boolean + + """ + A list of User, Team, or App IDs allowed to dismiss reviews on pull requests targeting matching branches. + """ + reviewDismissalActorIds: [ID!] +} + +""" +Autogenerated return type of UpdateBranchProtectionRule. +""" +type UpdateBranchProtectionRulePayload { + """ + The newly created BranchProtectionRule. + """ + branchProtectionRule: BranchProtectionRule + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of UpdateCheckRun +""" +input UpdateCheckRunInput { + """ + Possible further actions the integrator can perform, which a user may trigger. + """ + actions: [CheckRunAction!] + + """ + The node of the check. + """ + checkRunId: ID! @possibleTypes(concreteTypes: ["CheckRun"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The time that the check run finished. + """ + completedAt: DateTime + + """ + The final conclusion of the check. + """ + conclusion: CheckConclusionState + + """ + The URL of the integrator's site that has the full details of the check. + """ + detailsUrl: URI + + """ + A reference for the run on the integrator's system. + """ + externalId: String + + """ + The name of the check. + """ + name: String + + """ + Descriptive details about the run. + """ + output: CheckRunOutput + + """ + The node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + The time that the check run began. + """ + startedAt: DateTime + + """ + The current status. + """ + status: RequestableCheckStatusState +} + +""" +Autogenerated return type of UpdateCheckRun. +""" +type UpdateCheckRunPayload { + """ + The updated check run. + """ + checkRun: CheckRun + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of UpdateCheckSuitePreferences +""" +input UpdateCheckSuitePreferencesInput { + """ + The check suite preferences to modify. + """ + autoTriggerPreferences: [CheckSuiteAutoTriggerPreference!]! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of UpdateCheckSuitePreferences. +""" +type UpdateCheckSuitePreferencesPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated repository. + """ + repository: Repository +} + +""" +Autogenerated input type of UpdateDiscussionComment +""" +input UpdateDiscussionCommentInput { + """ + The new contents of the comment body. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion comment to update. + """ + commentId: ID! @possibleTypes(concreteTypes: ["DiscussionComment"]) +} + +""" +Autogenerated return type of UpdateDiscussionComment. +""" +type UpdateDiscussionCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The modified discussion comment. + """ + comment: DiscussionComment +} + +""" +Autogenerated input type of UpdateDiscussion +""" +input UpdateDiscussionInput { + """ + The new contents of the discussion body. + """ + body: String + + """ + The Node ID of a discussion category within the same repository to change this discussion to. + """ + categoryId: ID @possibleTypes(concreteTypes: ["DiscussionCategory"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the discussion to update. + """ + discussionId: ID! @possibleTypes(concreteTypes: ["Discussion"]) + + """ + The new discussion title. + """ + title: String +} + +""" +Autogenerated return type of UpdateDiscussion. +""" +type UpdateDiscussionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The modified discussion. + """ + discussion: Discussion +} + +""" +Autogenerated input type of UpdateEnterpriseAdministratorRole +""" +input UpdateEnterpriseAdministratorRoleInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Enterprise which the admin belongs to. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The login of a administrator whose role is being changed. + """ + login: String! + + """ + The new role for the Enterprise administrator. + """ + role: EnterpriseAdministratorRole! +} + +""" +Autogenerated return type of UpdateEnterpriseAdministratorRole. +""" +type UpdateEnterpriseAdministratorRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of changing the administrator's role. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseAllowPrivateRepositoryForkingSetting +""" +input UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the allow private repository forking setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the allow private repository forking policy on the enterprise. + """ + policyValue: EnterpriseAllowPrivateRepositoryForkingPolicyValue + + """ + The value for the allow private repository forking setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseAllowPrivateRepositoryForkingSetting. +""" +type UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated allow private repository forking setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the allow private repository forking setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseDefaultRepositoryPermissionSetting +""" +input UpdateEnterpriseDefaultRepositoryPermissionSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the base repository permission setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the base repository permission setting on the enterprise. + """ + settingValue: EnterpriseDefaultRepositoryPermissionSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseDefaultRepositoryPermissionSetting. +""" +type UpdateEnterpriseDefaultRepositoryPermissionSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated base repository permission setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the base repository permission setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseDeployKeySetting +""" +input UpdateEnterpriseDeployKeySettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the deploy key setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the deploy key setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseDeployKeySetting. +""" +type UpdateEnterpriseDeployKeySettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated deploy key setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the deploy key setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting +""" +input UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can change repository visibility setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can change repository visibility setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting. +""" +type UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can change repository visibility setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can change repository visibility setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanCreateRepositoriesSetting +""" +input UpdateEnterpriseMembersCanCreateRepositoriesSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can create repositories setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + Allow members to create internal repositories. Defaults to current value. + """ + membersCanCreateInternalRepositories: Boolean + + """ + Allow members to create private repositories. Defaults to current value. + """ + membersCanCreatePrivateRepositories: Boolean + + """ + Allow members to create public repositories. Defaults to current value. + """ + membersCanCreatePublicRepositories: Boolean + + """ + When false, allow member organizations to set their own repository creation member privileges. + """ + membersCanCreateRepositoriesPolicyEnabled: Boolean + + """ + Value for the members can create repositories setting on the enterprise. This + or the granular public/private/internal allowed fields (but not both) must be provided. + """ + settingValue: EnterpriseMembersCanCreateRepositoriesSettingValue +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanCreateRepositoriesSetting. +""" +type UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can create repositories setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can create repositories setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanDeleteIssuesSetting +""" +input UpdateEnterpriseMembersCanDeleteIssuesSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can delete issues setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can delete issues setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanDeleteIssuesSetting. +""" +type UpdateEnterpriseMembersCanDeleteIssuesSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can delete issues setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can delete issues setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanDeleteRepositoriesSetting +""" +input UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can delete repositories setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can delete repositories setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanDeleteRepositoriesSetting. +""" +type UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can delete repositories setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can delete repositories setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanInviteCollaboratorsSetting +""" +input UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can invite collaborators setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can invite collaborators setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanInviteCollaboratorsSetting. +""" +type UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can invite collaborators setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can invite collaborators setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanMakePurchasesSetting +""" +input UpdateEnterpriseMembersCanMakePurchasesSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can make purchases setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can make purchases setting on the enterprise. + """ + settingValue: EnterpriseMembersCanMakePurchasesSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanMakePurchasesSetting. +""" +type UpdateEnterpriseMembersCanMakePurchasesSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can make purchases setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can make purchases setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting +""" +input UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can update protected branches setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can update protected branches setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting. +""" +type UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can update protected branches setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can update protected branches setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseMembersCanViewDependencyInsightsSetting +""" +input UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the members can view dependency insights setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the members can view dependency insights setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseMembersCanViewDependencyInsightsSetting. +""" +type UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated members can view dependency insights setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the members can view dependency insights setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseOrganizationProjectsSetting +""" +input UpdateEnterpriseOrganizationProjectsSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the organization projects setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the organization projects setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseOrganizationProjectsSetting. +""" +type UpdateEnterpriseOrganizationProjectsSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated organization projects setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the organization projects setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseOwnerOrganizationRole +""" +input UpdateEnterpriseOwnerOrganizationRoleInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Enterprise which the owner belongs to. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The ID of the organization for membership change. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + The role to assume in the organization. + """ + organizationRole: RoleInOrganization! +} + +""" +Autogenerated return type of UpdateEnterpriseOwnerOrganizationRole. +""" +type UpdateEnterpriseOwnerOrganizationRolePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of changing the owner's organization role. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseProfile +""" +input UpdateEnterpriseProfileInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The description of the enterprise. + """ + description: String + + """ + The Enterprise ID to update. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The location of the enterprise. + """ + location: String + + """ + The name of the enterprise. + """ + name: String + + """ + The security contact email address of the enterprise. + """ + securityContactEmail: String + + """ + The URL of the enterprise's website. + """ + websiteUrl: String +} + +""" +Autogenerated return type of UpdateEnterpriseProfile. +""" +type UpdateEnterpriseProfilePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated enterprise. + """ + enterprise: Enterprise +} + +""" +Autogenerated input type of UpdateEnterpriseRepositoryProjectsSetting +""" +input UpdateEnterpriseRepositoryProjectsSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the repository projects setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the repository projects setting on the enterprise. + """ + settingValue: EnterpriseEnabledDisabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseRepositoryProjectsSetting. +""" +type UpdateEnterpriseRepositoryProjectsSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated repository projects setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the repository projects setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSetting +""" +input UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the two-factor authentication disallowed methods setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the two-factor authentication disallowed methods setting on the enterprise. + """ + settingValue: EnterpriseDisallowedMethodsSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSetting. +""" +type UpdateEnterpriseTwoFactorAuthenticationDisallowedMethodsSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated two-factor authentication disallowed methods setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the two-factor authentication disallowed methods setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnterpriseTwoFactorAuthenticationRequiredSetting +""" +input UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the enterprise on which to set the two factor authentication required setting. + """ + enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The value for the two factor authentication required setting on the enterprise. + """ + settingValue: EnterpriseEnabledSettingValue! +} + +""" +Autogenerated return type of UpdateEnterpriseTwoFactorAuthenticationRequiredSetting. +""" +type UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The enterprise with the updated two factor authentication required setting. + """ + enterprise: Enterprise + + """ + A message confirming the result of updating the two factor authentication required setting. + """ + message: String +} + +""" +Autogenerated input type of UpdateEnvironment +""" +input UpdateEnvironmentInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The node ID of the environment. + """ + environmentId: ID! @possibleTypes(concreteTypes: ["Environment"]) + + """ + Whether deployments to this environment can be approved by the user who created the deployment. + """ + preventSelfReview: Boolean + + """ + The ids of users or teams that can approve deployments to this environment + """ + reviewers: [ID!] + + """ + The wait timer in minutes. + """ + waitTimer: Int +} + +""" +Autogenerated return type of UpdateEnvironment. +""" +type UpdateEnvironmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated environment. + """ + environment: Environment +} + +""" +Autogenerated input type of UpdateIpAllowListEnabledSetting +""" +input UpdateIpAllowListEnabledSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the owner on which to set the IP allow list enabled setting. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["App", "Enterprise", "Organization"], abstractType: "IpAllowListOwner") + + """ + The value for the IP allow list enabled setting. + """ + settingValue: IpAllowListEnabledSettingValue! +} + +""" +Autogenerated return type of UpdateIpAllowListEnabledSetting. +""" +type UpdateIpAllowListEnabledSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list owner on which the setting was updated. + """ + owner: IpAllowListOwner +} + +""" +Autogenerated input type of UpdateIpAllowListEntry +""" +input UpdateIpAllowListEntryInput { + """ + An IP address or range of addresses in CIDR notation. + """ + allowListValue: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the IP allow list entry to update. + """ + ipAllowListEntryId: ID! @possibleTypes(concreteTypes: ["IpAllowListEntry"]) + + """ + Whether the IP allow list entry is active when an IP allow list is enabled. + """ + isActive: Boolean! + + """ + An optional name for the IP allow list entry. + """ + name: String +} + +""" +Autogenerated return type of UpdateIpAllowListEntry. +""" +type UpdateIpAllowListEntryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list entry that was updated. + """ + ipAllowListEntry: IpAllowListEntry +} + +""" +Autogenerated input type of UpdateIpAllowListForInstalledAppsEnabledSetting +""" +input UpdateIpAllowListForInstalledAppsEnabledSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the owner. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["App", "Enterprise", "Organization"], abstractType: "IpAllowListOwner") + + """ + The value for the IP allow list configuration for installed GitHub Apps setting. + """ + settingValue: IpAllowListForInstalledAppsEnabledSettingValue! +} + +""" +Autogenerated return type of UpdateIpAllowListForInstalledAppsEnabledSetting. +""" +type UpdateIpAllowListForInstalledAppsEnabledSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list owner on which the setting was updated. + """ + owner: IpAllowListOwner +} + +""" +Autogenerated input type of UpdateIpAllowListUserLevelEnforcementEnabledSetting +""" +input UpdateIpAllowListUserLevelEnforcementEnabledSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the owner. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["App", "Enterprise", "Organization"], abstractType: "IpAllowListOwner") + + """ + The value for the IP allow list user-level enforcement enabled setting. + """ + settingValue: IpAllowListUserLevelEnforcementEnabledSettingValue! +} + +""" +Autogenerated return type of UpdateIpAllowListUserLevelEnforcementEnabledSetting. +""" +type UpdateIpAllowListUserLevelEnforcementEnabledSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The IP allow list owner on which the setting was updated. + """ + owner: IpAllowListOwner +} + +""" +Autogenerated input type of UpdateIssueComment +""" +input UpdateIssueCommentInput { + """ + The updated text of the comment. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the IssueComment to modify. + """ + id: ID! @possibleTypes(concreteTypes: ["IssueComment"]) +} + +""" +Autogenerated return type of UpdateIssueComment. +""" +type UpdateIssueCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated comment. + """ + issueComment: IssueComment +} + +""" +Autogenerated input type of UpdateIssueField +""" +input UpdateIssueFieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A description of the issue field. + """ + description: String + + """ + The ID of the issue field to update. + """ + id: ID! + @possibleTypes( + concreteTypes: [ + "IssueFieldDate" + "IssueFieldMultiSelect" + "IssueFieldNumber" + "IssueFieldSingleSelect" + "IssueFieldText" + ] + abstractType: "IssueFields" + ) + + """ + The name of the issue field. + """ + name: String + + """ + The options for the issue field if applicable. + """ + options: [IssueFieldSingleSelectOptionInput!] + + """ + The visibility of the issue field. + """ + visibility: IssueFieldVisibility +} + +""" +Autogenerated return type of UpdateIssueField. +""" +type UpdateIssueFieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated issue field. + """ + issueField: IssueFields +} + +""" +Autogenerated input type of UpdateIssueFieldValue +""" +input UpdateIssueFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The field value to update. May include an optional `rationale` or be flagged + with `suggest: true` to be stored as a pending suggestion instead of being + applied directly. + """ + issueField: IssueFieldCreateOrUpdateInput! + + """ + The ID of the issue. + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) +} + +""" +Autogenerated return type of UpdateIssueFieldValue. +""" +type UpdateIssueFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue object. + """ + issue: Issue + + """ + The updated issue field value. + """ + issueFieldValue: IssueFieldValue +} + +""" +Autogenerated input type of UpdateIssue +""" +input UpdateIssueInput { + """ + Configuration for assigning an AI agent to this issue. + """ + agentAssignment: AgentAssignmentInput + + """ + An array of Node IDs of users or bots for this issue. + """ + assigneeIds: [ID!] + @possibleTypes( + concreteTypes: ["Bot", "EnterpriseUserAccount", "Mannequin", "Organization", "User"] + abstractType: "Actor" + ) + + """ + The body for the issue description. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the Issue to modify. + """ + id: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The ID of the Issue Type for this issue. + """ + issueTypeId: ID + + """ + An array of Node IDs of labels for this issue. + """ + labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"]) + + """ + The Node ID of the milestone for this issue. + """ + milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"]) + + """ + An array of Node IDs for projects associated with this issue. + """ + projectIds: [ID!] + + """ + The desired issue state. + """ + state: IssueState + + """ + The title for the issue. + """ + title: String +} + +""" +Autogenerated input type of UpdateIssueIssueType +""" +input UpdateIssueIssueTypeInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the issue to update + """ + issueId: ID! @possibleTypes(concreteTypes: ["Issue"]) + + """ + The ID of the issue type to update on the issue + """ + issueTypeId: ID +} + +""" +Autogenerated return type of UpdateIssueIssueType. +""" +type UpdateIssueIssueTypePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated issue + """ + issue: Issue +} + +""" +Autogenerated return type of UpdateIssue. +""" +type UpdateIssuePayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The issue. + """ + issue: Issue +} + +""" +Autogenerated input type of UpdateIssueType +""" +input UpdateIssueTypeInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Color for the issue type + """ + color: IssueTypeColor + + """ + The description of the issue type + """ + description: String + + """ + Whether or not the issue type is enabled for the organization + """ + isEnabled: Boolean + + """ + The ID of the issue type to update + """ + issueTypeId: ID! @possibleTypes(concreteTypes: ["IssueType"]) + + """ + The name of the issue type + """ + name: String +} + +""" +Autogenerated return type of UpdateIssueType. +""" +type UpdateIssueTypePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated issue type + """ + issueType: IssueType +} + +""" +Autogenerated input type of UpdateLabel +""" +input UpdateLabelInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A 6 character hex code, without the leading #, identifying the updated color of the label. + """ + color: String + + """ + A brief description of the label, such as its purpose. + """ + description: String + + """ + The Node ID of the label to be updated. + """ + id: ID! @possibleTypes(concreteTypes: ["Label"]) + + """ + The updated name of the label. + """ + name: String +} + +""" +Autogenerated return type of UpdateLabel. +""" +type UpdateLabelPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated label. + """ + label: Label +} + +""" +Autogenerated input type of UpdateNotificationRestrictionSetting +""" +input UpdateNotificationRestrictionSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the owner on which to set the restrict notifications setting. + """ + ownerId: ID! @possibleTypes(concreteTypes: ["Enterprise", "Organization"], abstractType: "VerifiableDomainOwner") + + """ + The value for the restrict notifications setting. + """ + settingValue: NotificationRestrictionSettingValue! +} + +""" +Autogenerated return type of UpdateNotificationRestrictionSetting. +""" +type UpdateNotificationRestrictionSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The owner on which the setting was updated. + """ + owner: VerifiableDomainOwner +} + +""" +Autogenerated input type of UpdateOrganizationAllowPrivateRepositoryForkingSetting +""" +input UpdateOrganizationAllowPrivateRepositoryForkingSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Enable forking of private repositories in the organization? + """ + forkingEnabled: Boolean! + + """ + The ID of the organization on which to set the allow private repository forking setting. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) +} + +""" +Autogenerated return type of UpdateOrganizationAllowPrivateRepositoryForkingSetting. +""" +type UpdateOrganizationAllowPrivateRepositoryForkingSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of updating the allow private repository forking setting. + """ + message: String + + """ + The organization with the updated allow private repository forking setting. + """ + organization: Organization +} + +""" +Autogenerated input type of UpdateOrganizationWebCommitSignoffSetting +""" +input UpdateOrganizationWebCommitSignoffSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the organization on which to set the web commit signoff setting. + """ + organizationId: ID! @possibleTypes(concreteTypes: ["Organization"]) + + """ + Enable signoff on web-based commits for repositories in the organization? + """ + webCommitSignoffRequired: Boolean! +} + +""" +Autogenerated return type of UpdateOrganizationWebCommitSignoffSetting. +""" +type UpdateOrganizationWebCommitSignoffSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of updating the web commit signoff setting. + """ + message: String + + """ + The organization with the updated web commit signoff setting. + """ + organization: Organization +} + +""" +Only allow users with bypass permission to update matching refs. +""" +type UpdateParameters @docsCategory(name: "repos") { + """ + Branch can pull changes from its upstream repository + """ + updateAllowsFetchAndMerge: Boolean! +} + +""" +Only allow users with bypass permission to update matching refs. +""" +input UpdateParametersInput @docsCategory(name: "repos") { + """ + Branch can pull changes from its upstream repository + """ + updateAllowsFetchAndMerge: Boolean! +} + +""" +Autogenerated input type of UpdatePatreonSponsorability +""" +input UpdatePatreonSponsorabilityInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether Patreon tiers should be shown on the GitHub Sponsors profile page, + allowing potential sponsors to make their payment through Patreon instead of GitHub. + """ + enablePatreonSponsorships: Boolean! + + """ + The username of the organization with the GitHub Sponsors profile, if any. + Defaults to the GitHub Sponsors profile for the authenticated user if omitted. + """ + sponsorableLogin: String +} + +""" +Autogenerated return type of UpdatePatreonSponsorability. +""" +type UpdatePatreonSponsorabilityPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The GitHub Sponsors profile. + """ + sponsorsListing: SponsorsListing +} + +""" +Autogenerated input type of UpdateProjectCard +""" +input UpdateProjectCardInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Whether or not the ProjectCard should be archived + """ + isArchived: Boolean + + """ + The note of ProjectCard. + """ + note: String + + """ + The ProjectCard ID to update. + """ + projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"]) +} + +""" +Autogenerated return type of UpdateProjectCard. +""" +type UpdateProjectCardPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated ProjectCard. + """ + projectCard: ProjectCard +} + +""" +Autogenerated input type of UpdateProjectColumn +""" +input UpdateProjectColumnInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of project column. + """ + name: String! + + """ + The ProjectColumn ID to update. + """ + projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"]) +} + +""" +Autogenerated return type of UpdateProjectColumn. +""" +type UpdateProjectColumnPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated project column. + """ + projectColumn: ProjectColumn +} + +""" +Autogenerated input type of UpdateProject +""" +input UpdateProjectInput { + """ + The description of project. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The name of project. + """ + name: String + + """ + The Project ID to update. + """ + projectId: ID! @possibleTypes(concreteTypes: ["Project"]) + + """ + Whether the project is public or not. + """ + public: Boolean + + """ + Whether the project is open or closed. + """ + state: ProjectState +} + +""" +Autogenerated return type of UpdateProject. +""" +type UpdateProjectPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated project. + """ + project: Project +} + +""" +Autogenerated input type of UpdateProjectV2Collaborators +""" +input UpdateProjectV2CollaboratorsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The collaborators to update. + """ + collaborators: [ProjectV2Collaborator!]! + + """ + The ID of the project to update the collaborators for. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of UpdateProjectV2Collaborators. +""" +type UpdateProjectV2CollaboratorsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The collaborators granted a role + """ + collaborators( + """ + 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 + ): ProjectV2ActorConnection +} + +""" +Autogenerated input type of UpdateProjectV2DraftIssue +""" +input UpdateProjectV2DraftIssueInput { + """ + The IDs of the assignees of the draft issue. + """ + assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"]) + + """ + The body of the draft issue. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the draft issue to update. + """ + draftIssueId: ID! @possibleTypes(concreteTypes: ["DraftIssue"]) + + """ + The title of the draft issue. + """ + title: String +} + +""" +Autogenerated return type of UpdateProjectV2DraftIssue. +""" +type UpdateProjectV2DraftIssuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The draft issue updated in the project. + """ + draftIssue: DraftIssue +} + +""" +Autogenerated input type of UpdateProjectV2Field +""" +input UpdateProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to update. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) + + """ + Configuration for a field of type ITERATION. Empty input is ignored, provided + values overwrite the existing configuration, and existing configuration should + be fetched for partial updates. + """ + iterationConfiguration: ProjectV2IterationFieldConfigurationInput + + """ + The name to update. + """ + name: String + + """ + Options for a field of type SINGLE_SELECT. Empty input is ignored, provided + values overwrite existing options, and existing options should be fetched for + partial updates. + """ + singleSelectOptions: [ProjectV2SingleSelectFieldOptionInput!] +} + +""" +Autogenerated return type of UpdateProjectV2Field. +""" +type UpdateProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + +""" +Autogenerated input type of UpdateProjectV2 +""" +input UpdateProjectV2Input { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Set the project to closed or open. + """ + closed: Boolean + + """ + The ID of the Project to update. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + Set the project to public or private. + """ + public: Boolean + + """ + Set the readme description of the project. + """ + readme: String + + """ + Set the short description of the project. + """ + shortDescription: String + + """ + Set the title of the project. + """ + title: String +} + +""" +Autogenerated input type of UpdateProjectV2ItemFieldValue +""" +input UpdateProjectV2ItemFieldValueInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to be updated. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) + + """ + The ID of the item to be updated. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + The value which will be set on the field. + """ + value: ProjectV2FieldValue! +} + +""" +Autogenerated return type of UpdateProjectV2ItemFieldValue. +""" +type UpdateProjectV2ItemFieldValuePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated item. + """ + projectV2Item: ProjectV2Item +} + +""" +Autogenerated input type of UpdateProjectV2ItemPosition +""" +input UpdateProjectV2ItemPositionInput { + """ + The ID of the item to position this item after. If omitted or set to null the item will be moved to top. + """ + afterId: ID @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the item to be moved. + """ + itemId: ID! @possibleTypes(concreteTypes: ["ProjectV2Item"]) + + """ + The ID of the Project. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) +} + +""" +Autogenerated return type of UpdateProjectV2ItemPosition. +""" +type UpdateProjectV2ItemPositionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The items in the new order + """ + items( + """ + 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 + ): ProjectV2ItemConnection +} + +""" +Autogenerated return type of UpdateProjectV2. +""" +type UpdateProjectV2Payload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated Project. + """ + projectV2: ProjectV2 +} + +""" +Autogenerated input type of UpdateProjectV2StatusUpdate +""" +input UpdateProjectV2StatusUpdateInput { + """ + The body of the status update. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The start date of the status update. + """ + startDate: Date + + """ + The status of the status update. + """ + status: ProjectV2StatusUpdateStatus + + """ + The ID of the status update to be updated. + """ + statusUpdateId: ID! @possibleTypes(concreteTypes: ["ProjectV2StatusUpdate"]) + + """ + The target date of the status update. + """ + targetDate: Date +} + +""" +Autogenerated return type of UpdateProjectV2StatusUpdate. +""" +type UpdateProjectV2StatusUpdatePayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The status update updated in the project. + """ + statusUpdate: ProjectV2StatusUpdate +} + +""" +Autogenerated input type of UpdatePullRequestBranch +""" +input UpdatePullRequestBranchInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The head ref oid for the upstream branch. + """ + expectedHeadOid: GitObjectID + + """ + The Node ID of the pull request. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The update branch method to use. If omitted, defaults to 'MERGE' + """ + updateMethod: PullRequestBranchUpdateMethod +} + +""" +Autogenerated return type of UpdatePullRequestBranch. +""" +type UpdatePullRequestBranchPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated pull request. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of UpdatePullRequest +""" +input UpdatePullRequestInput { + """ + An array of Node IDs of users for this pull request. + """ + assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"]) + + """ + The name of the branch you want your changes pulled into. This should be an existing branch + on the current repository. + """ + baseRefName: String + + """ + The contents of the pull request. + """ + body: String + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + An array of Node IDs of labels for this pull request. + """ + labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"]) + + """ + Indicates whether maintainers can modify the pull request. + """ + maintainerCanModify: Boolean + + """ + The Node ID of the milestone for this pull request. + """ + milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"]) + + """ + An array of Node IDs for projects associated with this pull request. + """ + projectIds: [ID!] + + """ + The Node ID of the pull request. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The target state of the pull request. + """ + state: PullRequestUpdateState + + """ + The title of the pull request. + """ + title: String +} + +""" +Autogenerated return type of UpdatePullRequest. +""" +type UpdatePullRequestPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated pull request. + """ + pullRequest: PullRequest +} + +""" +Autogenerated input type of UpdatePullRequestReviewComment +""" +input UpdatePullRequestReviewCommentInput { + """ + The text of the comment. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the comment to modify. + """ + pullRequestReviewCommentId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewComment"]) +} + +""" +Autogenerated return type of UpdatePullRequestReviewComment. +""" +type UpdatePullRequestReviewCommentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated comment. + """ + pullRequestReviewComment: PullRequestReviewComment +} + +""" +Autogenerated input type of UpdatePullRequestReview +""" +input UpdatePullRequestReviewInput { + """ + The contents of the pull request review body. + """ + body: String! + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request review to modify. + """ + pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"]) +} + +""" +Autogenerated return type of UpdatePullRequestReview. +""" +type UpdatePullRequestReviewPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated pull request review. + """ + pullRequestReview: PullRequestReview +} + +""" +Autogenerated input type of UpdateRef +""" +input UpdateRefInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Permit updates of branch Refs that are not fast-forwards? + """ + force: Boolean = false + + """ + The GitObjectID that the Ref shall be updated to target. + """ + oid: GitObjectID! + + """ + The Node ID of the Ref to be updated. + """ + refId: ID! @possibleTypes(concreteTypes: ["Ref"]) +} + +""" +Autogenerated return type of UpdateRef. +""" +type UpdateRefPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated Ref. + """ + ref: Ref +} + +""" +Autogenerated input type of UpdateRefs +""" +input UpdateRefsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A list of ref updates. + """ + refUpdates: [RefUpdate!]! + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) +} + +""" +Autogenerated return type of UpdateRefs. +""" +type UpdateRefsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String +} + +""" +Autogenerated input type of UpdateRepositoryCustomProperty +""" +input UpdateRepositoryCustomPropertyInput { + """ + The updated allowed values for the custom property. + """ + allowedValues: [String!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated default value for the custom property if the property is required. + """ + defaultValue: String + + """ + The updated description of the custom property. + """ + description: String + + """ + The regex pattern that the value of the custom property must match, if the `value_type` is `string`. + """ + regex: String + + """ + The global relay id of the source of the custom property. + """ + repositoryCustomPropertyId: ID! @possibleTypes(concreteTypes: ["RepositoryCustomProperty"]) + + """ + Whether this repository custom property requires explicit values. + """ + requireExplicitValues: Boolean + + """ + Whether the updated custom property is required. + """ + required: Boolean + + """ + The updated actors who can edit the values of the custom property. + """ + valuesEditableBy: RepositoryCustomPropertyValuesEditableBy +} + +""" +Autogenerated return type of UpdateRepositoryCustomProperty. +""" +type UpdateRepositoryCustomPropertyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated repository custom property. + """ + repositoryCustomProperty: RepositoryCustomProperty +} + +""" +Autogenerated input type of UpdateRepository +""" +input UpdateRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A new description for the repository. Pass an empty string to erase the existing description. + """ + description: String + + """ + Indicates if the repository should have the discussions feature enabled. + """ + hasDiscussionsEnabled: Boolean + + """ + Indicates if the repository should have the issues feature enabled. + """ + hasIssuesEnabled: Boolean + + """ + Indicates if the repository should have the project boards feature enabled. + """ + hasProjectsEnabled: Boolean + + """ + Indicates if the repository should have the pull requests feature enabled. + """ + hasPullRequestsEnabled: Boolean + + """ + Indicates if the repository displays a Sponsor button for financial contributions. + """ + hasSponsorshipsEnabled: Boolean + + """ + Indicates if the repository should have the wiki feature enabled. + """ + hasWikiEnabled: Boolean + + """ + The URL for a web page about this repository. Pass an empty string to erase the existing URL. + """ + homepageUrl: URI + + """ + The policy controlling who can create issues in this repository. + """ + issueCreationPolicy: IssueCreationPolicy + + """ + The new name of the repository. + """ + name: String + + """ + The policy controlling who can create pull requests in this repository. + """ + pullRequestCreationPolicy: PullRequestCreationPolicy + + """ + The ID of the repository to update. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + Whether this repository should be marked as a template such that anyone who + can access it can create new repositories with the same files and directory structure. + """ + template: Boolean +} + +""" +Autogenerated return type of UpdateRepository. +""" +type UpdateRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The updated repository. + """ + repository: Repository +} + +""" +Autogenerated input type of UpdateRepositoryRuleset +""" +input UpdateRepositoryRulesetInput { + """ + A list of actors that are allowed to bypass rules in this ruleset. + """ + bypassActors: [RepositoryRulesetBypassActorInput!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The list of conditions for this ruleset + """ + conditions: RepositoryRuleConditionsInput + + """ + The enforcement level for this ruleset + """ + enforcement: RuleEnforcement + + """ + The name of the ruleset. + """ + name: String + + """ + The global relay id of the repository ruleset to be updated. + """ + repositoryRulesetId: ID! @possibleTypes(concreteTypes: ["RepositoryRuleset"]) + + """ + The list of rules for this ruleset + """ + rules: [RepositoryRuleInput!] + + """ + The target of the ruleset. + """ + target: RepositoryRulesetTarget +} + +""" +Autogenerated return type of UpdateRepositoryRuleset. +""" +type UpdateRepositoryRulesetPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The newly created Ruleset. + """ + ruleset: RepositoryRuleset +} + +""" +Autogenerated input type of UpdateRepositoryWebCommitSignoffSetting +""" +input UpdateRepositoryWebCommitSignoffSettingInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the repository to update. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + Indicates if the repository should require signoff on web-based commits. + """ + webCommitSignoffRequired: Boolean! +} + +""" +Autogenerated return type of UpdateRepositoryWebCommitSignoffSetting. +""" +type UpdateRepositoryWebCommitSignoffSettingPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A message confirming the result of updating the web commit signoff setting. + """ + message: String + + """ + The updated repository. + """ + repository: Repository +} + +""" +Autogenerated input type of UpdateSponsorshipPreferences +""" +input UpdateSponsorshipPreferencesInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Specify whether others should be able to see that the sponsor is sponsoring + the sponsorable. Public visibility still does not reveal which tier is used. + """ + privacyLevel: SponsorshipPrivacy = PUBLIC + + """ + Whether the sponsor should receive email updates from the sponsorable. + """ + receiveEmails: Boolean = true + + """ + The ID of the user or organization who is acting as the sponsor, paying for + the sponsorship. Required if sponsorLogin is not given. + """ + sponsorId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsor") + + """ + The username of the user or organization who is acting as the sponsor, paying + for the sponsorship. Required if sponsorId is not given. + """ + sponsorLogin: String + + """ + The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. + """ + sponsorableId: ID @possibleTypes(concreteTypes: ["Organization", "User"], abstractType: "Sponsorable") + + """ + The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. + """ + sponsorableLogin: String +} + +""" +Autogenerated return type of UpdateSponsorshipPreferences. +""" +type UpdateSponsorshipPreferencesPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The sponsorship that was updated. + """ + sponsorship: Sponsorship +} + +""" +Autogenerated input type of UpdateSubscription +""" +input UpdateSubscriptionInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new state of the subscription. + """ + state: SubscriptionState! + + """ + The Node ID of the subscribable object to modify. + """ + subscribableId: ID! + @possibleTypes( + concreteTypes: ["Commit", "Discussion", "Issue", "PullRequest", "Repository", "Team"] + abstractType: "Subscribable" + ) +} + +""" +Autogenerated return type of UpdateSubscription. +""" +type UpdateSubscriptionPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The input subscribable entity. + """ + subscribable: Subscribable +} + +""" +Autogenerated input type of UpdateTeamReviewAssignment +""" +input UpdateTeamReviewAssignmentInput { + """ + The algorithm to use for review assignment + """ + algorithm: TeamReviewAssignmentAlgorithm = ROUND_ROBIN + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Count any members whose review has already been requested against the required number of members assigned to review + """ + countMembersAlreadyRequested: Boolean = true + + """ + Turn on or off review assignment + """ + enabled: Boolean! + + """ + An array of team member IDs to exclude + """ + excludedTeamMemberIds: [ID!] @possibleTypes(concreteTypes: ["User"]) + + """ + The Node ID of the team to update review assignments of + """ + id: ID! @possibleTypes(concreteTypes: ["Team"]) + + """ + Include the members of any child teams when assigning + """ + includeChildTeamMembers: Boolean = true + + """ + Notify the entire team of the PR if it is delegated + """ + notifyTeam: Boolean = true + + """ + Remove the team review request when assigning + """ + removeTeamRequest: Boolean = true + + """ + The number of team members to assign + """ + teamMemberCount: Int = 1 +} + +""" +Autogenerated return type of UpdateTeamReviewAssignment. +""" +type UpdateTeamReviewAssignmentPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The team that was modified + """ + team: Team +} + +""" +Autogenerated input type of UpdateTeamsRepository +""" +input UpdateTeamsRepositoryInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Permission that should be granted to the teams. + """ + permission: RepositoryPermission! + + """ + Repository ID being granted access to. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + A list of teams being granted access. Limit: 10 + """ + teamIds: [ID!]! @possibleTypes(concreteTypes: ["Team"]) +} + +""" +Autogenerated return type of UpdateTeamsRepository. +""" +type UpdateTeamsRepositoryPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The repository that was updated. + """ + repository: Repository + + """ + The teams granted permission on the repository. + """ + teams: [Team!] +} + +""" +Autogenerated input type of UpdateTopics +""" +input UpdateTopicsInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the repository. + """ + repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"]) + + """ + An array of topic names. + """ + topicNames: [String!]! +} + +""" +Autogenerated return type of UpdateTopics. +""" +type UpdateTopicsPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Names of the provided topics that are not valid. + """ + invalidTopicNames: [String!] + + """ + The updated repository. + """ + repository: Repository +} + +""" +Autogenerated input type of UpdateUserList +""" +input UpdateUserListInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + A description of the list + """ + description: String + + """ + Whether or not the list is private + """ + isPrivate: Boolean + + """ + The ID of the list to update. + """ + listId: ID! @possibleTypes(concreteTypes: ["UserList"]) + + """ + The name of the list + """ + name: String +} + +""" +Autogenerated return type of UpdateUserList. +""" +type UpdateUserListPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The list that was just updated + """ + list: UserList +} + +""" +Autogenerated input type of UpdateUserListsForItem +""" +input UpdateUserListsForItemInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item to add to the list + """ + itemId: ID! @possibleTypes(concreteTypes: ["Repository"], abstractType: "UserListItems") + + """ + The lists to which this item should belong + """ + listIds: [ID!]! @possibleTypes(concreteTypes: ["UserList"]) + + """ + The suggested lists to create and add this item to + """ + suggestedListIds: [ID!] @possibleTypes(concreteTypes: ["UserListSuggestion"]) +} + +""" +Autogenerated return type of UpdateUserListsForItem. +""" +type UpdateUserListsForItemPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The item that was added + """ + item: UserListItems + + """ + The lists to which this item belongs + """ + lists: [UserList!] + + """ + The user who owns the lists + """ + user: User +} + +""" +A user is an individual's account on GitHub that owns repositories and can make new content. +""" +type User implements Actor & Agentic & Node & PackageOwner & ProfileOwner & ProjectOwner & ProjectV2Owner & ProjectV2Recent & RepositoryDiscussionAuthor & RepositoryDiscussionCommentAuthor & RepositoryOwner & Sponsorable & UniformResourceLocatable + @docsCategory(name: "users") { + """ + Determine if this repository owner has any items that can be pinned to their profile. + """ + anyPinnableItems( + """ + Filter to only a particular kind of pinnable item. + """ + type: PinnableItemType + ): Boolean! + + """ + A URL pointing to the user's public avatar. + """ + avatarUrl( + """ + The size of the resulting square image. + """ + size: Int + ): URI! + + """ + The user's public profile bio. + """ + bio: String + + """ + The user's public profile bio as HTML. + """ + bioHTML: HTML! + + """ + Could this user receive email notifications, if the organization had notification restrictions enabled? + """ + canReceiveOrganizationEmailsWhenNotificationsRestricted( + """ + The login of the organization to check. + """ + login: String! + ): Boolean! + + """ + A list of commit comments made by this user. + """ + commitComments( + """ + 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 + ): CommitCommentConnection! + + """ + The user's public profile company. + """ + company: String + + """ + The user's public profile company as HTML. + """ + companyHTML: HTML! + + """ + The collection of contributions this user has made to different repositories. + """ + contributionsCollection( + """ + Only contributions made at this time or later will be counted. If omitted, defaults to a year ago. + """ + from: DateTime + + """ + The ID of the organization used to filter contributions. + """ + organizationID: ID + + """ + Only contributions made before and up to (including) this time will be + counted. If omitted, defaults to the current time or one year from the + provided from argument. + """ + to: DateTime + ): ContributionsCollection! + + """ + The user's Copilot endpoint information + """ + copilotEndpoints: CopilotEndpoints + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The user's publicly visible profile email. + """ + email: String! + + """ + A list of enterprises that the user belongs to. + """ + enterprises( + """ + 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 + + """ + Filter enterprises returned based on the user's membership type. + """ + membershipType: EnterpriseMembershipType = ALL + + """ + Ordering options for the User's enterprises. + """ + orderBy: EnterpriseOrder = {field: NAME, direction: ASC} + ): EnterpriseConnection + + """ + The estimated next GitHub Sponsors payout for this user/organization in cents (USD). + """ + estimatedNextSponsorsPayoutInCents: Int! + + """ + A list of users the given user is followed by. + """ + followers( + """ + 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 + ): FollowerConnection! + + """ + A list of users the given user is following. + """ + following( + """ + 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 + ): FollowingConnection! + + """ + Find gist by repo name. + """ + gist( + """ + The gist name to find. + """ + name: String! + ): Gist + + """ + A list of gist comments made by this user. + """ + gistComments( + """ + 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 + ): GistCommentConnection! + + """ + A list of the Gists the user has created. + """ + gists( + """ + 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 + + """ + Ordering options for gists returned from the connection + """ + orderBy: GistOrder + + """ + Filters Gists according to privacy. + """ + privacy: GistPrivacy + ): GistConnection! + + """ + True if this user/organization has a GitHub Sponsors listing. + """ + hasSponsorsListing: Boolean! + + """ + The hovercard information for this user in a given context + """ + hovercard( + """ + The ID of the subject to get the hovercard in the context of + """ + primarySubjectId: ID + ): Hovercard! + + """ + The Node ID of the User object + """ + id: ID! + + """ + The interaction ability settings for this user. + """ + interactionAbility: RepositoryInteractionAbility + + """ + Whether or not this user is a participant in the GitHub Security Bug Bounty. + """ + isBountyHunter: Boolean! + + """ + Whether or not this user is a participant in the GitHub Campus Experts Program. + """ + isCampusExpert: Boolean! + + """ + Whether or not this user is a GitHub Developer Program member. + """ + isDeveloperProgramMember: Boolean! + + """ + Whether or not this user is a GitHub employee. + """ + isEmployee: Boolean! + + """ + Whether or not this user is following the viewer. Inverse of viewerIsFollowing + """ + isFollowingViewer: Boolean! + + """ + Whether or not this user is a member of the GitHub Stars Program. + """ + isGitHubStar: Boolean! + + """ + Whether or not the user has marked themselves as for hire. + """ + isHireable: Boolean! + + """ + Whether or not this user is a site administrator. + """ + isSiteAdmin: Boolean! + + """ + Whether the given account is sponsoring this user/organization. + """ + isSponsoredBy( + """ + The target account's login. + """ + accountLogin: String! + ): Boolean! + + """ + True if the viewer is sponsored by this user/organization. + """ + isSponsoringViewer: Boolean! + + """ + Whether or not this user is the viewing user. + """ + isViewer: Boolean! + + """ + A list of issue comments made by this user. + """ + issueComments( + """ + 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 + + """ + Ordering options for issue comments returned from the connection. + """ + orderBy: IssueCommentOrder + ): IssueCommentConnection! + + """ + A list of issues associated with this user. + """ + issues( + """ + 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 + + """ + Filtering options for issues returned from the connection. + """ + filterBy: IssueFilters + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for issues returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the issues by. + """ + states: [IssueState!] + ): IssueConnection! + + """ + Showcases a selection of repositories and gists that the profile owner has + either curated or that have been selected automatically based on popularity. + """ + itemShowcase: ProfileItemShowcase! + + """ + Calculate how much each sponsor has ever paid total to this maintainer via + GitHub Sponsors. Does not include sponsorships paid via Patreon. + """ + lifetimeReceivedSponsorshipValues( + """ + 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 + + """ + Ordering options for results returned from the connection. + """ + orderBy: SponsorAndLifetimeValueOrder = {field: SPONSOR_LOGIN, direction: ASC} + ): SponsorAndLifetimeValueConnection! + + """ + A user-curated list of repositories + """ + lists( + """ + 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 + ): UserListConnection! + + """ + The user's public profile location. + """ + location: String + + """ + The username used to login. + """ + login: String! + + """ + The estimated monthly GitHub Sponsors income for this user/organization in cents (USD). + """ + monthlyEstimatedSponsorsIncomeInCents: Int! + + """ + The user's public profile name. + """ + name: String + + """ + Find an organization by its login that the user belongs to. + """ + organization( + """ + The login of the organization to find. + """ + login: String! + ): Organization + + """ + Verified email addresses that match verified domains for a specified organization the user is a member of. + """ + organizationVerifiedDomainEmails( + """ + The login of the organization to match verified domains from. + """ + login: String! + ): [String!]! + + """ + A list of organizations the user belongs to. + """ + organizations( + """ + 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 + + """ + Ordering options for the User's organizations. + """ + orderBy: OrganizationOrder = null + ): OrganizationConnection! + + """ + A list of packages under the owner. + """ + packages( + """ + 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 + + """ + Find packages by their names. + """ + names: [String] + + """ + Ordering of the returned packages. + """ + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter registry package by type. + """ + packageType: PackageType + + """ + Find packages in a repository by ID. + """ + repositoryId: ID + ): PackageConnection! + + """ + A list of repositories and gists this profile owner can pin to their profile. + """ + pinnableItems( + """ + 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 + + """ + Filter the types of pinnable items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + A list of repositories and gists this profile owner has pinned to their profile + """ + pinnedItems( + """ + 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 + + """ + Filter the types of pinned items that are returned. + """ + types: [PinnableItemType!] + ): PinnableItemConnection! + + """ + Returns how many more items this profile owner can pin to their profile. + """ + pinnedItemsRemaining: Int! + + """ + Find project by number. + """ + project( + """ + The project number to find. + """ + number: Int! + ): Project + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Find a project by number. + """ + projectV2( + """ + The project number. + """ + number: Int! + ): ProjectV2 + + """ + A list of projects under the owner. + """ + projects( + """ + 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 + + """ + Ordering options for projects returned from the connection + """ + orderBy: ProjectOrder + + """ + Query to search projects by, currently only searching by name. + """ + search: String + + """ + A list of states to filter the projects by. + """ + states: [ProjectState!] + ): ProjectConnection! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + The HTTP path listing user's projects + """ + projectsResourcePath: URI! + + """ + The HTTP URL listing user's projects + """ + projectsUrl: URI! + + """ + A list of projects under the owner. + """ + projectsV2( + """ + 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 + + """ + Filter projects based on user role. + """ + minPermissionLevel: ProjectV2PermissionLevel = READ + + """ + How to order the returned projects. + """ + orderBy: ProjectV2Order = {field: NUMBER, direction: DESC} + + """ + A project to search for under the owner. + """ + query: String + ): ProjectV2Connection! + + """ + The user's profile pronouns + """ + pronouns: String + + """ + A list of public keys associated with this user. + """ + publicKeys( + """ + 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 + ): PublicKeyConnection! + + """ + A list of pull requests associated with this user. + """ + pullRequests( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + The base ref name to filter the pull requests by. + """ + baseRefName: 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 + + """ + The head ref name to filter the pull requests by. + """ + headRefName: String + + """ + A list of label names to filter the pull requests by. + """ + labels: [String!] + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for pull requests returned from the connection. + """ + orderBy: IssueOrder + + """ + A list of states to filter the pull requests by. + """ + states: [PullRequestState!] + ): PullRequestConnection! + + """ + Recent projects that this user has modified in the context of the owner. + """ + recentProjects( + """ + 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 + ): ProjectV2Connection! + + """ + A list of repositories that the user owns. + """ + repositories( + """ + Array of viewer's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + current viewer owns. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they are archived and not maintained + """ + isArchived: Boolean + + """ + If non-null, filters repositories according to whether they are forks of another repository + """ + isFork: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + A list of repositories that the user recently contributed to. + """ + repositoriesContributedTo( + """ + 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 + + """ + If non-null, include only the specified types of contributions. The + GitHub.com UI uses [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY] + """ + contributionTypes: [RepositoryContributionType] + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + If non-null, filters repositories according to whether they have issues enabled + """ + hasIssues: Boolean + + """ + If true, include user repositories + """ + includeUserRepositories: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + If non-null, filters repositories according to privacy + """ + privacy: RepositoryPrivacy + ): RepositoryConnection! + + """ + Find Repository. + """ + repository( + """ + Follow repository renames. If disabled, a repository referenced by its old name will return an error. + """ + followRenames: Boolean = true + + """ + Name of Repository to find. + """ + name: String! + ): Repository + + """ + Discussion comments this user has authored. + """ + repositoryDiscussionComments( + """ + 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 + + """ + Filter discussion comments to only those that were marked as the answer + """ + onlyAnswers: Boolean = false + + """ + Filter discussion comments to only those in a specific repository. + """ + repositoryId: ID + ): DiscussionCommentConnection! + + """ + Discussions this user has started. + """ + repositoryDiscussions( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Filter discussions to only those that have been answered or not. Defaults to + including both answered and unanswered discussions. + """ + answered: Boolean = null + + """ + 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 + + """ + Ordering options for discussions returned from the connection. + """ + orderBy: DiscussionOrder = {field: CREATED_AT, direction: DESC} + + """ + Filter discussions to only those in a specific repository. + """ + repositoryId: ID + + """ + A list of states to filter the discussions by. + """ + states: [DiscussionState!] = [] + ): DiscussionConnection! + + """ + The HTTP path for this user + """ + resourcePath: URI! + + """ + Replies this user has saved + """ + savedReplies( + """ + 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 + + """ + The field to order saved replies by. + """ + orderBy: SavedReplyOrder = {field: UPDATED_AT, direction: DESC} + ): SavedReplyConnection + + """ + The user's social media accounts, ordered as they appear on the user's profile. + """ + socialAccounts( + """ + 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 + ): SocialAccountConnection! + + """ + List of users and organizations this entity is sponsoring. + """ + sponsoring( + """ + 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 + + """ + Ordering options for the users and organizations returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + ): SponsorConnection! + + """ + List of sponsors for this user or organization. + """ + sponsors( + """ + 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 + + """ + Ordering options for sponsors returned from the connection. + """ + orderBy: SponsorOrder = {field: RELEVANCE, direction: DESC} + + """ + If given, will filter for sponsors at the given tier. Will only return + sponsors whose tier the viewer is permitted to see. + """ + tierId: ID + ): SponsorConnection! + + """ + Events involving this sponsorable, such as new sponsorships. + """ + sponsorsActivities( + """ + Filter activities to only the specified actions. + """ + actions: [SponsorsActivityAction!] = [] + + """ + 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 + + """ + Whether to include those events where this sponsorable acted as the sponsor. + Defaults to only including events where this sponsorable was the recipient + of a sponsorship. + """ + includeAsSponsor: Boolean = false + + """ + Whether or not to include private activities in the result set. Defaults to including public and private activities. + """ + includePrivate: Boolean = true + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for activity returned from the connection. + """ + orderBy: SponsorsActivityOrder = {field: TIMESTAMP, direction: DESC} + + """ + Filter activities returned to only those that occurred in the most recent + specified time period. Set to ALL to avoid filtering by when the activity + occurred. Will be ignored if `since` or `until` is given. + """ + period: SponsorsActivityPeriod = MONTH + + """ + Filter activities to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter activities to those that occurred before this time. + """ + until: DateTime + ): SponsorsActivityConnection! + + """ + The GitHub Sponsors listing for this user or organization. + """ + sponsorsListing: SponsorsListing + + """ + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. + """ + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. + """ + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship + + """ + List of sponsorship updates sent from this sponsorable to sponsors. + """ + sponsorshipNewsletters( + """ + 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 + + """ + Ordering options for sponsorship updates returned from the connection. + """ + orderBy: SponsorshipNewsletterOrder = {field: CREATED_AT, direction: DESC} + ): SponsorshipNewsletterConnection! + + """ + The sponsorships where this user or organization is the maintainer receiving the funds. + """ + sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Whether or not to include private sponsorships in the result set + """ + includePrivate: Boolean = false + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + The sponsorships where this user or organization is the funder. + """ + sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + + """ + 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 + + """ + Filter sponsorships returned to those for the specified maintainers. That + is, the recipient of the sponsorship is a user or organization with one of + the given logins. + """ + maintainerLogins: [String!] + + """ + Ordering options for sponsorships returned from this connection. If left + blank, the sponsorships will be ordered based on relevancy to the viewer. + """ + orderBy: SponsorshipOrder + ): SponsorshipConnection! + + """ + Repositories the user has starred. + """ + starredRepositories( + """ + 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 + + """ + Order for connection + """ + orderBy: StarOrder + + """ + Filters starred repositories to only return repositories owned by the viewer. + """ + ownedByViewer: Boolean + ): StarredRepositoryConnection! + + """ + The user's description of what they're currently doing. + """ + status: UserStatus + + """ + Suggested names for user lists + """ + suggestedListNames: [UserListSuggestion!]! + + """ + Repositories the user has contributed to, ordered by contribution rank, plus repositories the user has created + """ + topRepositories( + """ + 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 + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder! + + """ + How far back in time to fetch contributed repositories + """ + since: DateTime + ): RepositoryConnection! + + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + + """ + The user's Twitter username. + """ + twitterUsername: String + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this user + """ + url: URI! + + """ + Whether the request returns publicly visible information or privately visible information about the user + """ + userViewType: UserViewType! + + """ + Can the viewer pin repositories and gists to the profile? + """ + viewerCanChangePinnedItems: Boolean! + + """ + Can the current viewer create new projects on this owner. + """ + viewerCanCreateProjects: Boolean! + @deprecated( + reason: "Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. Removal on 2025-04-01 UTC." + ) + + """ + Whether or not the viewer is able to follow the user. + """ + viewerCanFollow: Boolean! + + """ + Whether or not the viewer is able to sponsor this user/organization. + """ + viewerCanSponsor: Boolean! + + """ + Channel value for subscribing to live updates for session creations. + """ + viewerCopilotAgentCreatesChannel: String + + """ + Channel value for subscribing to live updates for session log updates. + """ + viewerCopilotAgentLogUpdatesChannel: String + + """ + Channel value for subscribing to live updates for task updates. + """ + viewerCopilotAgentTaskUpdatesChannel: String + + """ + Channel value for subscribing to live updates for session updates. + """ + viewerCopilotAgentUpdatesChannel: String + + """ + Whether or not this user is followed by the viewer. Inverse of isFollowingViewer. + """ + viewerIsFollowing: Boolean! + + """ + True if the viewer is sponsoring this user/organization. + """ + viewerIsSponsoring: Boolean! + + """ + A list of repositories the given user is watching. + """ + watching( + """ + Affiliation options for repositories returned from the connection. If none + specified, the results will include repositories for which the current + viewer is an owner or collaborator, or member. + """ + affiliations: [RepositoryAffiliation] + + """ + 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 non-null, filters repositories according to whether they have issues enabled + """ + hasIssuesEnabled: Boolean + + """ + If non-null, filters repositories according to whether they have been locked + """ + isLocked: Boolean + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Ordering options for repositories returned from the connection + """ + orderBy: RepositoryOrder + + """ + Array of owner's affiliation options for repositories returned from the + connection. For example, OWNER will include only repositories that the + organization or user being viewed owns. + """ + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + + """ + If non-null, filters repositories according to privacy. Internal + repositories are considered private; consider using the visibility argument + if only internal repositories are needed. Cannot be combined with the + visibility argument. + """ + privacy: RepositoryPrivacy + + """ + If non-null, filters repositories according to visibility. Cannot be combined with the privacy argument. + """ + visibility: RepositoryVisibility + ): RepositoryConnection! + + """ + A URL pointing to the user's public website/blog. + """ + websiteUrl: URI +} + +""" +The possible durations that a user can be blocked for. +""" +enum UserBlockDuration @docsCategory(name: "users") { + """ + The user was blocked for 1 day + """ + ONE_DAY + + """ + The user was blocked for 30 days + """ + ONE_MONTH + + """ + The user was blocked for 7 days + """ + ONE_WEEK + + """ + The user was blocked permanently + """ + PERMANENT + + """ + The user was blocked for 3 days + """ + THREE_DAYS +} + +""" +Represents a 'user_blocked' event on a given user. +""" +type UserBlockedEvent implements Node @docsCategory(name: "users") { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + Number of days that the user was blocked for. + """ + blockDuration: UserBlockDuration! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The Node ID of the UserBlockedEvent object + """ + id: ID! + + """ + The user who was blocked. + """ + subject: User +} + +""" +A list of users. +""" +type UserConnection { + """ + A list of edges. + """ + edges: [UserEdge] + + """ + A list of nodes. + """ + nodes: [User] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edit on user content +""" +type UserContentEdit implements Node @docsCategory(name: "users") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the date and time when the object was deleted. + """ + deletedAt: DateTime + + """ + The actor who deleted this content + """ + deletedBy: Actor + + """ + A summary of the changes for this edit + """ + diff: String + + """ + When this content was edited + """ + editedAt: DateTime! + + """ + The actor who edited this content + """ + editor: Actor + + """ + The Node ID of the UserContentEdit object + """ + id: ID! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! +} + +""" +A list of edits to content. +""" +type UserContentEditConnection { + """ + A list of edges. + """ + edges: [UserContentEditEdge] + + """ + A list of nodes. + """ + nodes: [UserContentEdit] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type UserContentEditEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: UserContentEdit +} + +""" +Represents a user. +""" +type UserEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: User +} + +""" +Email attributes from External Identity +""" +type UserEmailMetadata @docsCategory(name: "users") { + """ + Boolean to identify primary emails + """ + primary: Boolean + + """ + Type of email + """ + type: String + + """ + Email id + """ + value: String! +} + +""" +A user-curated list of repositories +""" +type UserList implements Node @docsCategory(name: "users") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + The description of this list + """ + description: String + + """ + The Node ID of the UserList object + """ + id: ID! + + """ + Whether or not this list is private + """ + isPrivate: Boolean! + + """ + The items associated with this list + """ + items( + """ + 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 + ): UserListItemsConnection! + + """ + The date and time at which this list was created or last had items added to it + """ + lastAddedAt: DateTime! + + """ + The name of this list + """ + name: String! + + """ + The slug of this list + """ + slug: String! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The user to which this list belongs + """ + user: User! +} + +""" +The connection type for UserList. +""" +type UserListConnection { + """ + A list of edges. + """ + edges: [UserListEdge] + + """ + A list of nodes. + """ + nodes: [UserList] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type UserListEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: UserList +} + +""" +Types that can be added to a user list. +""" +union UserListItems @docsCategory(name: "users") = Repository + +""" +The connection type for UserListItems. +""" +type UserListItemsConnection { + """ + A list of edges. + """ + edges: [UserListItemsEdge] + + """ + A list of nodes. + """ + nodes: [UserListItems] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type UserListItemsEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: UserListItems +} + +""" +Represents a suggested user list. +""" +type UserListSuggestion @docsCategory(name: "users") { + """ + The ID of the suggested user list + """ + id: ID + + """ + The name of the suggested user list + """ + name: String +} + +""" +A repository owned by an Enterprise Managed user. +""" +type UserNamespaceRepository implements Node @docsCategory(name: "enterprise-admin") { + """ + The Node ID of the UserNamespaceRepository object + """ + id: ID! + + """ + The name of the repository. + """ + name: String! + + """ + The repository's name with owner. + """ + nameWithOwner: String! + + """ + The user owner of the repository. + """ + owner: RepositoryOwner! +} + +""" +A list of repositories owned by users in an enterprise with Enterprise Managed Users. +""" +type UserNamespaceRepositoryConnection { + """ + A list of edges. + """ + edges: [UserNamespaceRepositoryEdge] + + """ + A list of nodes. + """ + nodes: [UserNamespaceRepository] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type UserNamespaceRepositoryEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: UserNamespaceRepository +} + +""" +The user's description of what they're currently doing. +""" +type UserStatus implements Node @docsCategory(name: "users") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + An emoji summarizing the user's status. + """ + emoji: String + + """ + The status emoji as HTML. + """ + emojiHTML: HTML + + """ + If set, the status will not be shown after this date. + """ + expiresAt: DateTime + + """ + The Node ID of the UserStatus object + """ + id: ID! + + """ + Whether this status indicates the user is not fully available on GitHub. + """ + indicatesLimitedAvailability: Boolean! + + """ + A brief message describing what the user is doing. + """ + message: String + + """ + The organization whose members can see this status. If null, this status is publicly visible. + """ + organization: Organization + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The user who has this status. + """ + user: User! +} + +""" +The connection type for UserStatus. +""" +type UserStatusConnection { + """ + A list of edges. + """ + edges: [UserStatusEdge] + + """ + A list of nodes. + """ + nodes: [UserStatus] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type UserStatusEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: UserStatus +} + +""" +Ordering options for user status connections. +""" +input UserStatusOrder @docsCategory(name: "users") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order user statuses by. + """ + field: UserStatusOrderField! +} + +""" +Properties by which user status connections can be ordered. +""" +enum UserStatusOrderField @docsCategory(name: "users") { + """ + Order user statuses by when they were updated. + """ + UPDATED_AT +} + +""" +Whether a user being viewed contains public or private information. +""" +enum UserViewType @docsCategory(name: "users") { + """ + A user containing information only visible to the authenticated user. + """ + PRIVATE + + """ + A user that is publicly visible. + """ + PUBLIC +} + +""" +A domain that can be verified or approved for an organization or an enterprise. +""" +type VerifiableDomain implements Node @docsCategory(name: "orgs") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The DNS host name that should be used for verification. + """ + dnsHostName: URI + + """ + The unicode encoded domain. + """ + domain: URI! + + """ + Whether a TXT record for verification with the expected host name was found. + """ + hasFoundHostName: Boolean! + + """ + Whether a TXT record for verification with the expected verification token was found. + """ + hasFoundVerificationToken: Boolean! + + """ + The Node ID of the VerifiableDomain object + """ + id: ID! + + """ + Whether or not the domain is approved. + """ + isApproved: Boolean! + + """ + Whether this domain is required to exist for an organization or enterprise policy to be enforced. + """ + isRequiredForPolicyEnforcement: Boolean! + + """ + Whether or not the domain is verified. + """ + isVerified: Boolean! + + """ + The owner of the domain. + """ + owner: VerifiableDomainOwner! + + """ + The punycode encoded domain. + """ + punycodeEncodedDomain: URI! + + """ + The time that the current verification token will expire. + """ + tokenExpirationTime: DateTime + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The current verification token for the domain. + """ + verificationToken: String +} + +""" +The connection type for VerifiableDomain. +""" +type VerifiableDomainConnection { + """ + A list of edges. + """ + edges: [VerifiableDomainEdge] + + """ + A list of nodes. + """ + nodes: [VerifiableDomain] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type VerifiableDomainEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: VerifiableDomain +} + +""" +Ordering options for verifiable domain connections. +""" +input VerifiableDomainOrder @docsCategory(name: "orgs") { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order verifiable domains by. + """ + field: VerifiableDomainOrderField! +} + +""" +Properties by which verifiable domain connections can be ordered. +""" +enum VerifiableDomainOrderField @docsCategory(name: "orgs") { + """ + Order verifiable domains by their creation date. + """ + CREATED_AT + + """ + Order verifiable domains by the domain name. + """ + DOMAIN +} + +""" +Types that can own a verifiable domain. +""" +union VerifiableDomainOwner @docsCategory(name: "orgs") = Enterprise | Organization + +""" +Autogenerated input type of VerifyVerifiableDomain +""" +input VerifyVerifiableDomainInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the verifiable domain to verify. + """ + id: ID! @possibleTypes(concreteTypes: ["VerifiableDomain"]) +} + +""" +Autogenerated return type of VerifyVerifiableDomain. +""" +type VerifyVerifiableDomainPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The verifiable domain that was verified. + """ + domain: VerifiableDomain +} + +""" +A hovercard context with a message describing how the viewer is related. +""" +type ViewerHovercardContext implements HovercardContext @docsCategory(name: "users") { + """ + A string describing this context + """ + message: String! + + """ + An octicon to accompany this context + """ + octicon: String! + + """ + Identifies the user who is related to this context. + """ + viewer: User! +} + +""" +A subject that may be upvoted. +""" +interface Votable @docsCategory(name: "discussions") { + """ + Number of upvotes that this subject has received. + """ + upvoteCount: Int! + + """ + Whether or not the current user can add or remove an upvote on this subject. + """ + viewerCanUpvote: Boolean! + + """ + Whether or not the current user has already upvoted this subject. + """ + viewerHasUpvoted: Boolean! +} + +""" +A workflow contains meta information about an Actions workflow file. +""" +type Workflow implements Node & UniformResourceLocatable @docsCategory(name: "actions") { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The Node ID of the Workflow object + """ + id: ID! + + """ + The name of the workflow. + """ + name: String! + + """ + The HTTP path for this workflow + """ + resourcePath: URI! + + """ + The runs of the workflow. + """ + runs( + """ + 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 + + """ + Ordering options for the connection + """ + orderBy: WorkflowRunOrder = {field: CREATED_AT, direction: DESC} + ): WorkflowRunConnection! + + """ + The state of the workflow. + """ + state: WorkflowState! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this workflow + """ + url: URI! +} + +""" +A workflow that must run for this rule to pass +""" +type WorkflowFileReference @docsCategory(name: "actions") { + """ + The path to the workflow file + """ + path: String! + + """ + The ref (branch or tag) of the workflow file to use + """ + ref: String + + """ + The ID of the repository where the workflow is defined + """ + repositoryId: Int! + + """ + The commit SHA of the workflow file to use + """ + sha: String +} + +""" +A workflow that must run for this rule to pass +""" +input WorkflowFileReferenceInput @docsCategory(name: "actions") { + """ + The path to the workflow file + """ + path: String! + + """ + The ref (branch or tag) of the workflow file to use + """ + ref: String + + """ + The ID of the repository where the workflow is defined + """ + repositoryId: Int! + + """ + The commit SHA of the workflow file to use + """ + sha: String +} + +""" +A workflow run. +""" +type WorkflowRun implements Node & UniformResourceLocatable @docsCategory(name: "actions") { + """ + The check suite this workflow run belongs to. + """ + checkSuite: CheckSuite! + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: Int + + """ + The log of deployment reviews + """ + deploymentReviews( + """ + 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 + ): DeploymentReviewConnection! + + """ + The human-readable title of the workflow run. + """ + displayTitle: String + + """ + The event that triggered the workflow run + """ + event: String! + + """ + The workflow file + """ + file: WorkflowRunFile + + """ + The Node ID of the WorkflowRun object + """ + id: ID! + + """ + The pending deployment requests of all check runs in this workflow run + """ + pendingDeploymentRequests( + """ + 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 + ): DeploymentRequestConnection! + + """ + The HTTP path for this workflow run + """ + resourcePath: URI! + + """ + The attempt number of this workflow run. + """ + runAttempt: Int! + + """ + A number that uniquely identifies this workflow run in its parent workflow. + """ + runNumber: Int! + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + + """ + The HTTP URL for this workflow run + """ + url: URI! + + """ + The workflow executed in this workflow run. + """ + workflow: Workflow! +} + +""" +The connection type for WorkflowRun. +""" +type WorkflowRunConnection { + """ + A list of edges. + """ + edges: [WorkflowRunEdge] + + """ + A list of nodes. + """ + nodes: [WorkflowRun] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type WorkflowRunEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: WorkflowRun +} + +""" +An executed workflow file for a workflow run. +""" +type WorkflowRunFile implements Node & UniformResourceLocatable @docsCategory(name: "actions") { + """ + The Node ID of the WorkflowRunFile object + """ + id: ID! + + """ + The path of the workflow file relative to its repository. + """ + path: String! + + """ + The direct link to the file in the repository which stores the workflow file. + """ + repositoryFileUrl: URI! + + """ + The repository name and owner which stores the workflow file. + """ + repositoryName: URI! + + """ + The HTTP path for this workflow run file + """ + resourcePath: URI! + + """ + The parent workflow run execution for this file. + """ + run: WorkflowRun! + + """ + The HTTP URL for this workflow run file + """ + url: URI! + + """ + If the viewer has permissions to push to the repository which stores the workflow. + """ + viewerCanPushRepository: Boolean! + + """ + If the viewer has permissions to read the repository which stores the workflow. + """ + viewerCanReadRepository: Boolean! +} + +""" +Ways in which lists of workflow runs can be ordered upon return. +""" +input WorkflowRunOrder @docsCategory(name: "actions") { + """ + The direction in which to order workflow runs by the specified field. + """ + direction: OrderDirection! + + """ + The field by which to order workflows. + """ + field: WorkflowRunOrderField! +} + +""" +Properties by which workflow run connections can be ordered. +""" +enum WorkflowRunOrderField @docsCategory(name: "actions") { + """ + Order workflow runs by most recently created + """ + CREATED_AT +} + +""" +The possible states for a workflow. +""" +enum WorkflowState @docsCategory(name: "actions") { + """ + The workflow is active. + """ + ACTIVE + + """ + The workflow was deleted from the git repository. + """ + DELETED + + """ + The workflow was disabled by default on a fork. + """ + DISABLED_FORK + + """ + The workflow was disabled for inactivity in the repository. + """ + DISABLED_INACTIVITY + + """ + The workflow was disabled manually. + """ + DISABLED_MANUALLY +} + +""" +Require all changes made to a targeted branch to pass the specified workflows before they can be merged. +""" +type WorkflowsParameters @docsCategory(name: "actions") { + """ + Allow repositories and branches to be created if a check would otherwise prohibit it. + """ + doNotEnforceOnCreate: Boolean! + + """ + Workflows that must pass for this rule to pass. + """ + workflows: [WorkflowFileReference!]! +} + +""" +Require all changes made to a targeted branch to pass the specified workflows before they can be merged. +""" +input WorkflowsParametersInput @docsCategory(name: "actions") { + """ + Allow repositories and branches to be created if a check would otherwise prohibit it. + """ + doNotEnforceOnCreate: Boolean + + """ + Workflows that must pass for this rule to pass. + """ + workflows: [WorkflowFileReferenceInput!]! +} + +""" +A valid x509 certificate string +""" +scalar X509Certificate diff --git a/graphql/test_pagination.graphql b/graphql/test_pagination.graphql new file mode 100644 index 00000000..4a943d86 --- /dev/null +++ b/graphql/test_pagination.graphql @@ -0,0 +1,13 @@ +query PageTestQuery($cursor: String) { + viewer { + repositories(first: 1, after: $cursor) { + nodes { + name + } + pageInfo { + hasNextPage + endCursor + } + } + } +} diff --git a/src/api/client/helpers.rs b/src/api/client/helpers.rs index 8b58779f..9ff5f876 100644 --- a/src/api/client/helpers.rs +++ b/src/api/client/helpers.rs @@ -1,6 +1,6 @@ //! Helper utilities for GraphQL request handling. -use reqwest::header::{ACCEPT, AUTHORIZATION, HeaderMap, HeaderValue, USER_AGENT}; +use http::header::{ACCEPT, AUTHORIZATION, HeaderMap, HeaderValue, USER_AGENT}; use serde_json::Value; use tracing::warn; @@ -150,7 +150,7 @@ mod tests { GraphQLError, Token, build_headers, handle_graphql_errors, operation_name, payload_snippet, snippet, }; - use reqwest::header::{ACCEPT, AUTHORIZATION, USER_AGENT}; + use http::header::{ACCEPT, AUTHORIZATION, USER_AGENT}; use rstest::rstest; use serde_json::json; diff --git a/src/api/client/mod.rs b/src/api/client/mod.rs index 10240005..1b3a7b98 100644 --- a/src/api/client/mod.rs +++ b/src/api/client/mod.rs @@ -4,13 +4,14 @@ mod helpers; mod http; mod pagination; mod transcript; +mod transport; mod types; use backon::Retryable; -use reqwest::header::HeaderMap; +// `::http` disambiguates the extern crate from this module's own `http` +// submodule, which would otherwise shadow it. +use ::http::header::HeaderMap; use serde::de::DeserializeOwned; -use serde_json::{Value, json}; -use std::borrow::Cow; use tokio::time::sleep; use tracing::warn; @@ -19,14 +20,14 @@ use crate::boxed::BoxedStr; use vk::environment; use self::helpers::{ - BODY_SNIPPET_LEN, VALUE_SNIPPET_LEN, build_headers, handle_graphql_errors, operation_name, - payload_snippet, snippet, + BODY_SNIPPET_LEN, VALUE_SNIPPET_LEN, build_headers, handle_graphql_errors, snippet, }; use self::http::HttpResponse; +use self::transport::Transport; use self::types::GraphQLResponse; use super::retry::{RetryConfig, build_retry_builder, should_retry}; -pub use self::types::{Endpoint, Query, Token}; +pub use self::types::{Endpoint, Token}; #[cfg(test)] mod tests; @@ -36,7 +37,7 @@ mod tests; /// The client handles authentication headers and optional request /// transcription for debugging. pub struct GraphQLClient { - client: reqwest::Client, + transport: Transport, headers: HeaderMap, endpoint: Endpoint, transcript: Option>>, @@ -104,7 +105,7 @@ impl GraphQLClient { .map_err(|e| VkError::Io(Box::new(e)))?; let headers = build_headers(&token)?; Ok(Self { - client: reqwest::Client::new(), + transport: Transport::new()?, headers, endpoint, transcript, @@ -123,50 +124,29 @@ impl GraphQLClient { payload: &serde_json::Value, operation: &str, ) -> Result { - let snip = payload_snippet(payload); - let make_ctx = |status: Option| { - let base = format!("operation {operation}; {snip}"); - match status { - Some(s) => format!("{base}; status {s}"), - None => base, - } - .boxed() - }; - - let response = self - .client - .post(self.endpoint.as_str()) - .headers(self.headers.clone()) - .json(payload) - .timeout(self.retry.request_timeout) - .send() - .await - .map_err(|e| VkError::RequestContext { - context: make_ctx(None), - source: e.into(), - })?; - let status = response.status(); - let status_u16 = status.as_u16(); - let status_err = response.error_for_status_ref().err(); - let body = response.text().await.map_err(|e| VkError::RequestContext { - context: make_ctx(Some(status_u16)), - source: e.into(), - })?; - let resp = HttpResponse { - status: status_u16, - body, - }; + let resp = self + .transport + .post_json( + &self.endpoint, + &self.headers, + payload, + self.retry.request_timeout, + ) + .await?; self.log_transcript(payload, operation, &resp); - if !(200..300).contains(&status_u16) { - let source: Box = match status_err { - Some(e) => Box::new(e), - None => Box::new(std::io::Error::other(format!( - "unexpected status {status_u16} without reqwest error" - ))), - }; + if !(200..300).contains(&resp.status) { + // The transport surfaces every completed HTTP response, so a + // non-2xx status is classified here. reqwest gave this a + // status-specific source error via `error_for_status_ref`; an + // `io::Error` carrying the same status reproduces the displayed + // information without the reqwest dependency. + let source: Box = Box::new(std::io::Error::other( + format!("HTTP status {}", resp.status), + )); return Err(VkError::RequestContext { context: format!( - "HTTP status {status_u16} | body snippet: {}", + "HTTP status {} | body snippet: {}", + resp.status, snippet(&resp.body, BODY_SNIPPET_LEN) ) .boxed(), @@ -228,28 +208,31 @@ impl GraphQLClient { } } - /// Execute a GraphQL query using this client. + /// Send `payload` for `operation`, applying the shared retry loop and + /// deserializing the successful response into `T`. + /// + /// This is the common core behind [`run_operation`](Self::run_operation) + /// and [`run_operation_as`](Self::run_operation_as): both build the request + /// envelope via `graphql_client` codegen and then delegate the POST, + /// jittered-backoff retry, transcript logging, and `serde_path_to_error` + /// diagnostics to this helper so the machinery is defined once. /// /// # Errors /// /// Returns a [`VkError`] if the request fails or the response cannot be /// deserialized. - pub async fn run_query(&self, query: impl Into, variables: V) -> Result + async fn run_payload( + &self, + payload: &serde_json::Value, + operation: &str, + ) -> Result where - V: serde::Serialize, T: DeserializeOwned, { - let query = query.into(); - let op_name = operation_name(query.as_ref()); - let operation = op_name.map_or_else(|| snippet(query.as_ref(), 64), str::to_string); - let mut payload = json!({ "query": query.as_ref(), "variables": &variables }); - if let (Some(_), Some(obj)) = (op_name, payload.as_object_mut()) { - obj.insert("operationName".into(), json!(operation.clone())); - } let builder = build_retry_builder(self.retry); (|| async { - let resp = self.execute_single_request(&payload, &operation).await?; - Self::process_graphql_response::(&resp, &operation) + let resp = self.execute_single_request(payload, operation).await?; + Self::process_graphql_response::(&resp, operation) }) .retry(builder) .sleep(sleep) @@ -258,58 +241,72 @@ impl GraphQLClient { .await } - /// Execute a GraphQL query and merge an optional cursor into the variables. + /// Execute a `graphql_client` codegen'd GraphQL operation using this client. /// - /// This wraps [`run_query`], injecting the `cursor` field when provided so - /// callers need only supply the base variables for paginated queries. If the - /// `variables` already contain a `cursor` key it will be overwritten. + /// The operation's `QueryBody` serializes to the standard + /// `{"query", "variables", "operationName"}` envelope, and the request is + /// dispatched through the shared POST, retry, transcript, and + /// deserialization core ([`run_payload`](Self::run_payload)), so behaviour + /// (retries, error text, transcript shape) matches the retired string-based + /// path exactly. /// /// # Errors /// - /// Returns [`VkError::BadResponse`] if `variables` serialize to a non-object - /// value, or propagates any error from the underlying request. + /// Returns a [`VkError`] if the variables cannot be serialized, the request + /// fails, or the response cannot be deserialized. /// /// # Examples /// ```no_run - /// use serde_json::{Map, Value, json}; + /// use graphql_client::GraphQLQuery; /// use vk::api::GraphQLClient; - /// # async fn run(client: GraphQLClient) -> Result<(), vk::VkError> { - /// let mut vars = Map::new(); - /// vars.insert("id".to_string(), json!(1)); - /// let data: Value = client.fetch_page("query", None, vars).await?; - /// # Ok(()) - /// # } - /// ``` - /// ```no_run - /// use serde_json::json; - /// use vk::api::GraphQLClient; - /// # async fn run(client: GraphQLClient) { - /// let err = client - /// .fetch_page::("query", None, json!(null)) - /// .await; - /// assert!(err.is_err()); + /// + /// # async fn run( + /// # client: GraphQLClient, + /// # variables: Q::Variables, + /// # ) -> Result { + /// let data = client.run_operation::(variables).await?; + /// # Ok(data) /// # } /// ``` - pub async fn fetch_page( + pub async fn run_operation( &self, - query: impl Into, - cursor: Option>, - variables: V, - ) -> Result + variables: Q::Variables, + ) -> Result where - V: serde::Serialize, + Q: graphql_client::GraphQLQuery, + { + self.run_operation_as::(variables).await + } + + /// Execute a codegen'd operation but deserialize the response into `T` + /// rather than the generated `ResponseData`. + /// + /// This is the escape hatch used where the generated `ResponseData` would + /// be stricter than the operation's documented behaviour or than the + /// hand-written domain structs the tests and fixtures rely on (for example + /// the review-thread listing, whose `isOutdated` field carries a + /// client-side default, and the reviews listing, whose `state` is a GraphQL + /// enum that the public `String` field preserves verbatim). The query is + /// still built from `Q` — so `graphql_client` validates the selection + /// against the vendored schema at compile time — while the wire body is + /// decoded into `T` through the same `serde_path_to_error` machinery as + /// [`run_operation`](Self::run_operation), keeping error text and retry + /// behaviour identical. + /// + /// # Errors + /// + /// Returns a [`VkError`] if the variables cannot be serialized, the request + /// fails, or the response cannot be deserialized into `T`. + pub(crate) async fn run_operation_as(&self, variables: Q::Variables) -> Result + where + Q: graphql_client::GraphQLQuery, T: DeserializeOwned, { - let query = query.into(); - let mut variables = serde_json::to_value(variables).map_err(|e| { - VkError::BadResponse(format!("serialising fetch_page variables: {e}").boxed()) - })?; - let obj = variables.as_object_mut().ok_or_else(|| { - VkError::BadResponse("variables for fetch_page must be a JSON object".boxed()) + let body = Q::build_query(variables); + let operation = body.operation_name.to_string(); + let payload = serde_json::to_value(&body).map_err(|e| { + VkError::BadResponse(format!("serialising {operation} variables: {e}").boxed()) })?; - if let Some(c) = cursor { - obj.insert("cursor".into(), Value::String(c.into_owned())); - } - self.run_query(query, variables).await + self.run_payload::(&payload, &operation).await } } diff --git a/src/api/client/pagination.rs b/src/api/client/pagination.rs index 4cc8af1e..f4e033d5 100644 --- a/src/api/client/pagination.rs +++ b/src/api/client/pagination.rs @@ -1,70 +1,95 @@ //! Pagination helpers for the GraphQL client. -use super::{GraphQLClient, Query}; +use super::GraphQLClient; use crate::VkError; +use crate::api::CursorVariables; use crate::boxed::BoxedStr; use serde::de::DeserializeOwned; -use serde_json::{Map, Value}; -use std::borrow::Cow; const MAX_PAGES: usize = 1000; impl GraphQLClient { - /// Fetch and concatenate all pages from a cursor-based connection. + /// Fetch and concatenate all pages of a `graphql_client` codegen'd + /// operation. /// - /// `query` and `vars` define the base request. The `map` closure - /// extracts the items and pagination info from each page's response. + /// `variables` supplies the base request, the [`CursorVariables`] impl + /// advances the cursor between pages, and the `map` closure extracts the + /// items and [`crate::PageInfo`] from each page's `ResponseData`. /// /// Pagination stops after 1000 pages to avoid infinite loops when cursors - /// repeat or the API misbehaves. + /// repeat or the API misbehaves. Any items fetched before an error are + /// discarded: an error from the request or the `map` closure aborts the + /// whole traversal and yields only that error. /// - /// # Examples - /// Borrowed and owned cursors both avoid allocations until needed. + /// # Errors + /// + /// Propagates any [`VkError`] returned by the underlying request or the + /// `map` closure, and returns [`VkError::BadResponse`] if the page cap is + /// exceeded. /// - /// ```no_run - /// use std::borrow::Cow; - /// use serde_json::Map; - /// use vk::{api::GraphQLClient, PageInfo, VkError}; + /// Currently exercised only from tests: the migrated paginated operations + /// all decode into hand-written domain structs via + /// [`paginate_operation_as`](Self::paginate_operation_as). This wrapper is + /// the plan-specified typed interface for future operations whose + /// generated `ResponseData` is fixture-compatible; the `expect` is removed + /// when its first production caller arrives. + #[cfg_attr( + not(test), + expect( + dead_code, + reason = "the codegen'd paginated ops decode via paginate_operation_as" + ) + )] + pub(crate) async fn paginate_operation( + &self, + variables: Q::Variables, + start_cursor: Option, + map: Mapper, + ) -> Result, VkError> + where + Q: graphql_client::GraphQLQuery, + Q::Variables: CursorVariables + Clone, + Mapper: FnMut(Q::ResponseData) -> Result<(Vec, crate::PageInfo), VkError>, + { + self.paginate_operation_as::(variables, start_cursor, map) + .await + } + + /// Fetch and concatenate all pages of a codegen'd operation, decoding each + /// page into `T` rather than the generated `ResponseData`. /// - /// # async fn run(client: GraphQLClient) -> Result<(), VkError> { - /// let vars = Map::new(); - /// client - /// .paginate_all::<(), _, serde_json::Value>( - /// "query", - /// vars.clone(), - /// Some(Cow::Borrowed("c1")), - /// |_page| Ok((Vec::new(), PageInfo::default())), - /// ) - /// .await?; - /// let owned = String::from("c2"); - /// client - /// .paginate_all::<(), _, serde_json::Value>( - /// "query", - /// vars, - /// Some(Cow::Owned(owned)), - /// |_page| Ok((Vec::new(), PageInfo::default())), - /// ) - /// .await?; - /// # Ok(()) - /// # } - /// ``` + /// This is the paginated counterpart to + /// [`run_operation_as`](Self::run_operation_as): the query is built from `Q` + /// (so the selection is schema-checked at compile time) and the cursor is + /// advanced through the [`CursorVariables`] impl, while each page body is + /// deserialized into the hand-written domain struct `T`. It is used by the + /// paginated operations whose generated `ResponseData` would be stricter + /// than the documented behaviour the tests and fixtures depend on (the + /// review-thread listing, per-thread comment paging, and the reviews + /// listing). + /// + /// Pagination stops after 1000 pages to avoid infinite loops when cursors + /// repeat or the API misbehaves. As with + /// [`paginate_operation`](Self::paginate_operation), any items fetched + /// before an error are discarded. /// /// # Errors /// - /// Propagates any [`VkError`] returned by the underlying request or mapper - /// closure. - pub async fn paginate_all( + /// Propagates any [`VkError`] returned by the underlying request or the + /// `map` closure, and returns [`VkError::BadResponse`] if the page cap is + /// exceeded. + pub(crate) async fn paginate_operation_as( &self, - query: impl Into, - vars: Map, - start_cursor: Option>, + variables: Q::Variables, + start_cursor: Option, mut map: Mapper, ) -> Result, VkError> where - Mapper: FnMut(Page) -> Result<(Vec, crate::PageInfo), VkError>, - Page: DeserializeOwned, + Q: graphql_client::GraphQLQuery, + Q::Variables: CursorVariables + Clone, + T: DeserializeOwned, + Mapper: FnMut(T) -> Result<(Vec, crate::PageInfo), VkError>, { - let query = query.into(); let mut items = Vec::new(); let mut cursor = start_cursor; let mut pages_seen = 0usize; @@ -75,13 +100,13 @@ impl GraphQLClient { format!("pagination exceeded max pages {MAX_PAGES}").boxed(), )); } - let data = self - .fetch_page::(query.clone(), cursor.take(), &vars) - .await?; + let mut vars = variables.clone(); + vars.set_cursor(cursor.take()); + let data = self.run_operation_as::(vars).await?; let (mut page, info) = map(data)?; items.append(&mut page); if let Some(next) = info.next_cursor()? { - cursor = Some(Cow::Owned(next.to_string())); + cursor = Some(next.to_string()); } else { break; } @@ -89,3 +114,158 @@ impl GraphQLClient { Ok(items) } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::api::CursorVariables; + use crate::test_utils::start_server; + use graphql_client::GraphQLQuery; + + /// Minimal paginated operation used to exercise [`CursorVariables`] and + /// [`GraphQLClient::paginate_operation`] against the scripted stub server. + #[derive(GraphQLQuery)] + #[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/test_pagination.graphql", + variables_derives = "Clone", + response_derives = "Debug, Clone, PartialEq" + )] + struct PageTestQuery; + + impl CursorVariables for page_test_query::Variables { + fn set_cursor(&mut self, cursor: Option) { + self.cursor = cursor; + } + } + + /// Extract repository names and pagination info from one page. + #[expect( + clippy::unnecessary_wraps, + reason = "paginate_operation mappers must return Result" + )] + fn map_page( + data: page_test_query::ResponseData, + ) -> Result<(Vec, crate::PageInfo), VkError> { + let repositories = data.viewer.repositories; + let names = repositories + .nodes + .into_iter() + .flatten() + .flatten() + .map(|node| node.name) + .collect(); + let page = repositories.page_info; + Ok(( + names, + crate::PageInfo { + has_next_page: page.has_next_page, + end_cursor: page.end_cursor, + }, + )) + } + + /// Build a page body with one repository and the given pagination cursor. + fn page_body(name: &str, has_next: bool, end_cursor: Option<&str>) -> String { + serde_json::json!({ + "data": { + "viewer": { + "repositories": { + "nodes": [{ "name": name }], + "pageInfo": { + "hasNextPage": has_next, + "endCursor": end_cursor, + } + } + } + } + }) + .to_string() + } + + #[test] + fn set_cursor_replaces_the_cursor_field() { + let mut vars = page_test_query::Variables { cursor: None }; + vars.set_cursor(Some("after-1".to_string())); + assert_eq!(vars.cursor.as_deref(), Some("after-1")); + vars.set_cursor(None); + assert_eq!(vars.cursor, None); + } + + #[tokio::test] + async fn paginate_operation_concatenates_all_pages() { + let server = start_server(vec![ + page_body("a", true, Some("c1")), + page_body("b", false, None), + ]); + let items = server + .client + .paginate_operation::( + page_test_query::Variables { cursor: None }, + None, + map_page, + ) + .await + .expect("pagination succeeds"); + assert_eq!(items, vec!["a".to_string(), "b".to_string()]); + assert_eq!(server.hits.load(std::sync::atomic::Ordering::SeqCst), 2); + server.join.abort(); + let _ = server.join.await; + } + + /// Port of the retired `fetch_page` cursor characterization: the cursor + /// supplied to the paginator must land in the request's + /// `variables.cursor`, overwriting any stale value already present in the + /// base variables. + #[rstest::rstest] + #[case::no_prior_cursor(None)] + #[case::overwrites_stale_cursor(Some("stale"))] + #[tokio::test] + async fn paginate_operation_sends_cursor_in_request_variables(#[case] prior: Option<&str>) { + let (client, captured, join) = super::super::tests::mock_server_with_capture(); + let _ = client + .paginate_operation_as::( + page_test_query::Variables { + cursor: prior.map(ToOwned::to_owned), + }, + Some("fresh".to_string()), + |_page| { + Ok(( + Vec::new(), + crate::PageInfo { + has_next_page: false, + end_cursor: None, + }, + )) + }, + ) + .await + .expect("single page"); + join.abort(); + let _ = join.await; + super::super::tests::assert_cursor_in_request(&captured, "fresh"); + } + + #[tokio::test] + async fn paginate_operation_discards_items_before_an_error() { + let error_body = serde_json::json!({ + "errors": [{ "message": "boom" }] + }) + .to_string(); + let server = start_server(vec![page_body("a", true, Some("c1")), error_body]); + let result = server + .client + .paginate_operation::( + page_test_query::Variables { cursor: None }, + None, + map_page, + ) + .await; + assert!( + matches!(result, Err(VkError::ApiErrors(_))), + "expected the second page's GraphQL error to abort the traversal, got {result:?}" + ); + server.join.abort(); + let _ = server.join.await; + } +} diff --git a/src/api/client/tests.rs b/src/api/client/tests.rs index 4197d0dc..ce84d222 100644 --- a/src/api/client/tests.rs +++ b/src/api/client/tests.rs @@ -3,10 +3,9 @@ use super::*; use crate::VkError; use crate::api::RetryConfig; -use rstest::{fixture, rstest}; -use serde_json::{Map, Value, json}; +use rstest::rstest; +use serde_json::Value; use std::{ - borrow::Cow, convert::Infallible, future::Future, sync::{ @@ -142,8 +141,10 @@ fn start_server_scripted( }; create_test_server(handler) } -#[fixture] -fn mock_server_with_capture() -> (GraphQLClient, Arc>, JoinHandle<()>) { +/// Start a stub server that captures the last request body and replies with +/// an empty `data` object. Shared with the pagination test module, which uses +/// it to assert the cursor a typed operation sends on the wire. +pub(super) fn mock_server_with_capture() -> (GraphQLClient, Arc>, JoinHandle<()>) { use third_wheel::hyper::body::to_bytes; let captured = Arc::new(Mutex::new(String::new())); @@ -177,7 +178,8 @@ fn mock_server_with_capture() -> (GraphQLClient, Arc>, JoinHandle< (client, captured, join) } -fn assert_cursor_in_request(captured: &Arc>, expected: &str) { +/// Assert the captured request body carries `variables.cursor == expected`. +pub(super) fn assert_cursor_in_request(captured: &Arc>, expected: &str) { let body = captured.lock().expect("lock").to_string(); let v: Value = serde_json::from_str(&body).expect("json body"); let cur = v @@ -186,15 +188,25 @@ fn assert_cursor_in_request(captured: &Arc>, expected: &str) { .and_then(Value::as_str); assert_eq!(cur, Some(expected)); } +/// Build the `{"query", "variables", "operationName"}` envelope the retired +/// string-based `run_query` produced, for driving [`GraphQLClient::run_payload`] +/// directly in the characterization tests below. +fn payload_for(op_name: &str) -> Value { + serde_json::json!({ + "query": format!("query {op_name} {{ __typename }}"), + "variables": {}, + "operationName": op_name, + }) +} #[tokio::test] -async fn run_query_retries_missing_data() { +async fn run_payload_retries_missing_data() { let responses = vec![ "{}".to_string(), serde_json::json!({"data": {"x": 1}}).to_string(), ]; let TestClient { client, join } = start_server(responses); let result: serde_json::Value = client - .run_query("query RetryOp { __typename }", serde_json::json!({})) + .run_payload(&payload_for("RetryOp"), "RetryOp") .await .expect("success"); assert_eq!(result, serde_json::json!({"x": 1})); @@ -202,7 +214,7 @@ async fn run_query_retries_missing_data() { let _ = join.await; } #[tokio::test] -async fn run_query_retries_on_5xx_then_succeeds() { +async fn run_payload_retries_on_5xx_then_succeeds() { let specs = vec![ RespSpec { status: StatusCode::BAD_GATEWAY, @@ -215,7 +227,7 @@ async fn run_query_retries_on_5xx_then_succeeds() { ]; let TestClient { client, join } = start_server_sequence(specs); let result: Value = client - .run_query("query OkAfter { __typename }", serde_json::json!({})) + .run_payload(&payload_for("OkAfter"), "OkAfter") .await .expect("ok"); assert_eq!(result, serde_json::json!({"x": 1})); @@ -223,7 +235,7 @@ async fn run_query_retries_on_5xx_then_succeeds() { let _ = join.await; } #[tokio::test] -async fn run_query_retries_html_5xx_then_succeeds() { +async fn run_payload_retries_html_5xx_then_succeeds() { let script = vec![ ScriptedResp { status: StatusCode::BAD_GATEWAY, @@ -238,7 +250,7 @@ async fn run_query_retries_html_5xx_then_succeeds() { ]; let (client, join, hits) = start_server_scripted(script); let result: Value = client - .run_query("query HtmlRetry { __typename }", serde_json::json!({})) + .run_payload(&payload_for("HtmlRetry"), "HtmlRetry") .await .expect("success after retry"); assert_eq!(result, serde_json::json!({"x": 1})); @@ -263,7 +275,7 @@ enum Expected { #[case(TestCase { responses: vec![], status: StatusCode::OK, - op: "query EmptyOp { }", + op: "EmptyOp", expect: Expected::EmptyResponse { fragments: ["status 200", "EmptyOp", "{}"], }, @@ -271,7 +283,7 @@ enum Expected { #[case(TestCase { responses: vec![], status: StatusCode::INTERNAL_SERVER_ERROR, - op: "query FailOp { }", + op: "FailOp", expect: Expected::RequestCtx { fragments: ["status 500", "body snippet: {}"], }, @@ -286,7 +298,7 @@ enum Expected { TestCase { responses: vec![error_response], status: StatusCode::OK, - op: "query ErrOp { }", + op: "ErrOp", expect: Expected::ApiErrors { fragment: "Something went wrong", }, @@ -295,13 +307,13 @@ enum Expected { #[case(TestCase { responses: vec![], status: StatusCode::TOO_MANY_REQUESTS, - op: "query RateLimited { }", + op: "RateLimited", expect: Expected::RequestCtx { fragments: ["status 429", "body snippet: {}"], }, })] #[tokio::test] -async fn run_query_reports_details(#[case] case: TestCase) { +async fn run_payload_reports_details(#[case] case: TestCase) { let TestCase { responses, status, @@ -310,7 +322,7 @@ async fn run_query_reports_details(#[case] case: TestCase) { } = case; let TestClient { client, join } = start_server_with_status(responses, status); let err = client - .run_query::<_, Value>(op, serde_json::json!({})) + .run_payload::(&payload_for(op), op) .await .expect_err("error"); match expect { @@ -342,54 +354,9 @@ async fn run_query_reports_details(#[case] case: TestCase) { join.abort(); let _ = join.await; } -#[tokio::test] -async fn fetch_page_rejects_non_object_variables() { - let client = GraphQLClient::with_endpoint("token", "http://127.0.0.1:9", None).expect("client"); - let err = client - .fetch_page::("query", None, serde_json::json!(null)) - .await - .expect_err("error"); - match err { - VkError::BadResponse(msg) => { - assert!(msg.contains("variables for fetch_page must be a JSON object")); - } - other => panic!("unexpected error: {other:?}"), - } -} -#[rstest] -#[case(false, Map::new(), "abc", "abc")] -#[case(true, Map::new(), "abc", "abc")] -#[case(false, { - let mut vars = Map::new(); - vars.insert("cursor".into(), json!("stale")); - vars -}, "fresh", "fresh")] -#[case(true, { - let mut vars = Map::new(); - vars.insert("cursor".into(), json!("stale")); - vars -}, "fresh", "fresh")] -#[tokio::test] -async fn fetch_page_cursor_handling_param( - mock_server_with_capture: (GraphQLClient, Arc>, JoinHandle<()>), - #[case] owned: bool, - #[case] variables: Map, - #[case] cursor: &str, - #[case] expected: &str, -) { - let (client, captured, join) = mock_server_with_capture; - let _: Value = if owned { - client - .fetch_page("query", Some(Cow::Owned(cursor.to_string())), variables) - .await - .expect("fetch") - } else { - client - .fetch_page("query", Some(Cow::Borrowed(cursor)), variables) - .await - .expect("fetch") - }; - join.abort(); - let _ = join.await; - assert_cursor_in_request(&captured, expected); -} +// NOTE: the string-based `fetch_page` and its non-object-variables guard were +// removed with the `run_query` surface; typed `Variables` structs are objects +// by construction, so that failure mode no longer exists. Cursor handling is +// characterized by `paginate_operation_overwrites_stale_cursor_in_request` in +// the pagination test module, which asserts the cursor on the wire exactly as +// the retired `fetch_page` tests did. diff --git a/src/api/client/transport.rs b/src/api/client/transport.rs new file mode 100644 index 00000000..bf7a16f3 --- /dev/null +++ b/src/api/client/transport.rs @@ -0,0 +1,176 @@ +//! Direct hyper transport for GraphQL requests. +//! +//! Replaces the former reqwest client with a pooled `hyper_util` legacy client +//! layered over a `hyper_rustls` HTTPS connector. This reassembles what reqwest +//! provided for free — connection pooling, rustls TLS, a total-request timeout, +//! and body collection — while leaving the surrounding transcript, retry, and +//! error-context machinery in [`super::GraphQLClient`] untouched. +//! +//! Deliberate behavioural differences from the reqwest client it replaces: +//! +//! - System proxies are not honoured. reqwest read `HTTP(S)_PROXY` from the +//! environment by default; a bare hyper client does not, and this transport +//! intentionally does not restore that. GraphQL traffic to GitHub (or a +//! loopback test server) does not traverse a proxy in any supported +//! deployment, so this is an accepted, untested blind spot. +//! - Redirects are not followed. reqwest followed up to ten redirects by +//! default; the GraphQL POST target never issues one in practice, so a 3xx +//! would surface as a non-2xx error exactly like any other unexpected status. + +use std::time::Duration; + +use http::header::CONTENT_TYPE; +use http::{HeaderMap, HeaderValue, Method, Request, Uri}; +use http_body_util::{BodyExt, Full}; +use hyper::body::Bytes; +use hyper_rustls::HttpsConnector; +use hyper_util::client::legacy::Client; +use hyper_util::client::legacy::connect::HttpConnector; +use hyper_util::rt::TokioExecutor; +use serde_json::Value; + +use super::helpers::{operation_name, payload_snippet, snippet}; +use super::http::HttpResponse; +use super::types::Endpoint; +use crate::VkError; +use crate::boxed::BoxedStr; + +/// Owns the pooled hyper client used for GraphQL requests. +pub(super) struct Transport { + client: Client, Full>, +} + +impl Transport { + /// Build a transport with a pooled client over an HTTPS/HTTP connector. + /// + /// The connector serves both `https://` (production) and `http://` (the + /// loopback stub servers used by the test suite) URLs. Its root store is + /// Mozilla's webpki roots with the ring crypto provider, matching reqwest's + /// former `rustls-tls` feature. + /// + /// # Errors + /// + /// Returns a [`VkError`] to preserve a fallible construction contract for a + /// future extraction into a shared crate, where TLS provider selection may + /// become fallible; the current webpki/ring setup cannot fail. + #[expect( + clippy::unnecessary_wraps, + reason = "fallible signature is part of the documented transport contract; \ + webpki-roots setup happens to be infallible today" + )] + pub(super) fn new() -> Result { + let connector = hyper_rustls::HttpsConnectorBuilder::new() + .with_webpki_roots() + .https_or_http() + .enable_http1() + .build(); + let client = Client::builder(TokioExecutor::new()).build(connector); + Ok(Self { client }) + } + + /// POST `payload` to `endpoint` with `headers`, honouring `timeout` across + /// the whole request, returning the response status and body. + /// + /// The `timeout` bounds the entire exchange (connection, send, and body + /// collection), mirroring reqwest's `.timeout()` scope. A timeout maps to a + /// [`VkError::RequestContext`], which the retry classifier treats as + /// transient, exactly as a reqwest timeout was treated. Transport and + /// body-collection failures reproduce the same context strings the reqwest + /// client built. + /// + /// # Errors + /// + /// Returns a [`VkError::RequestContext`] if the endpoint URL is invalid, the + /// request cannot be built or sent, the request times out, or the response + /// body cannot be collected. + pub(super) async fn post_json( + &self, + endpoint: &Endpoint, + headers: &HeaderMap, + payload: &Value, + timeout: Duration, + ) -> Result { + // Reconstruct the same request-context strings the reqwest client + // produced: the operation name (or a query snippet fallback) and a + // redacted payload snippet. Derived from the payload so this transport + // stays self-contained behind its fixed signature. + let snip = payload_snippet(payload); + let query = payload.get("query").and_then(Value::as_str).unwrap_or(""); + let operation = operation_name(query).map_or_else(|| snippet(query, 64), str::to_string); + let make_ctx = |status: Option| { + let base = format!("operation {operation}; {snip}"); + // Disambiguate from `BodyExt::boxed`, which is also in scope. + BoxedStr::boxed(match status { + Some(s) => format!("{base}; status {s}"), + None => base, + }) + }; + + let request = build_request(endpoint, headers, payload).map_err(|source| { + VkError::RequestContext { + context: make_ctx(None), + source, + } + })?; + + let exchange = async { + let response = + self.client + .request(request) + .await + .map_err(|e| VkError::RequestContext { + context: make_ctx(None), + source: Box::new(e), + })?; + let status = response.status().as_u16(); + let collected = + response + .into_body() + .collect() + .await + .map_err(|e| VkError::RequestContext { + context: make_ctx(Some(status)), + source: Box::new(e), + })?; + // Lossily decode, matching reqwest's UTF-8 text handling; decoding + // never fails, so only a collection error can surface above. + let body = String::from_utf8_lossy(&collected.to_bytes()).into_owned(); + Ok::(HttpResponse { status, body }) + }; + + match tokio::time::timeout(timeout, exchange).await { + Ok(result) => result, + Err(_elapsed) => Err(VkError::RequestContext { + context: make_ctx(None), + source: Box::new(std::io::Error::new( + std::io::ErrorKind::TimedOut, + format!("request timed out after {timeout:?}"), + )), + }), + } + } +} + +/// Boxed error alias for the low-level request-construction failures. +type BoxError = Box; + +/// Build the POST request, serialising `payload` as a JSON body and applying +/// `headers` plus a `Content-Type: application/json` header. +/// +/// Failures (an unparsable endpoint URL or payload serialisation) are returned +/// as boxed errors for the caller to wrap with the appropriate context. +fn build_request( + endpoint: &Endpoint, + headers: &HeaderMap, + payload: &Value, +) -> Result>, BoxError> { + let uri: Uri = endpoint.as_str().parse()?; + let body = Bytes::from(serde_json::to_vec(payload)?); + let mut request = Request::new(Full::new(body)); + *request.method_mut() = Method::POST; + *request.uri_mut() = uri; + let map = request.headers_mut(); + *map = headers.clone(); + map.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + Ok(request) +} diff --git a/src/api/client/types.rs b/src/api/client/types.rs index 93af622e..dca07a7e 100644 --- a/src/api/client/types.rs +++ b/src/api/client/types.rs @@ -2,33 +2,6 @@ use serde::Deserialize; -/// A GraphQL query string with type safety. -#[derive(Debug, Clone)] -pub struct Query(String); - -impl Query { - pub fn new(query: impl Into) -> Self { - Self(query.into()) - } - - #[must_use] - pub fn as_str(&self) -> &str { - &self.0 - } -} - -impl From<&str> for Query { - fn from(s: &str) -> Self { - Self(s.to_string()) - } -} - -impl AsRef for Query { - fn as_ref(&self) -> &str { - &self.0 - } -} - /// A GitHub API authentication token. #[derive(Debug, Clone)] pub struct Token(String); diff --git a/src/api/mod.rs b/src/api/mod.rs index e3f4cffd..ef42faaa 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,12 +1,14 @@ //! GraphQL client utilities and pagination helpers. //! -//! The API module exposes a [`GraphQLClient`] for issuing requests and a -//! [`paginate`] helper for cursor-based connections. +//! The API module exposes a [`GraphQLClient`] for issuing typed +//! `graphql_client` operations, with cursor pagination driven through the +//! [`CursorVariables`] trait. mod client; mod pagination; mod retry; +pub(crate) mod scalars; -pub use client::{Endpoint, GraphQLClient, Query, Token}; -pub use pagination::paginate; +pub use client::{Endpoint, GraphQLClient, Token}; +pub(crate) use pagination::CursorVariables; pub use retry::RetryConfig; diff --git a/src/api/pagination.rs b/src/api/pagination.rs index aeb876b6..7d3e698c 100644 --- a/src/api/pagination.rs +++ b/src/api/pagination.rs @@ -1,60 +1,17 @@ //! Pagination helpers for cursor-based GraphQL connections. -use crate::VkError; - -/// Retrieve all pages from a cursor-based connection. -/// -/// The `fetch` closure is called repeatedly with the current cursor until the -/// [`PageInfo`] object indicates no further pages remain. -/// -/// If the `fetch` closure yields an error, the function returns an [`Err`] -/// containing only that error. Any items fetched before the failure are -/// discarded and are not available in the error result. -/// -/// # Examples -/// ``` -/// use std::cell::Cell; -/// use vk::{api::paginate, PageInfo}; -/// -/// # tokio::runtime::Runtime::new().expect("runtime").block_on(async { -/// let calls = Cell::new(0); -/// let items = paginate(|_cursor| { -/// calls.set(calls.get() + 1); -/// let current = calls.get(); -/// async move { -/// let (has_next_page, end_cursor) = if current == 1 { -/// (true, Some("next".to_string())) -/// } else { -/// (false, None) -/// }; -/// Ok((vec![current], PageInfo { has_next_page, end_cursor })) -/// } -/// }).await.expect("pagination"); -/// assert_eq!(items, vec![1, 2]); -/// assert_eq!(calls.get(), 2); -/// # }); -/// ``` +/// Set the pagination cursor on a generated `Variables` struct. /// -/// # Errors +/// `graphql_client` renders each operation's variables as a typed struct, so +/// cursor injection cannot mutate an untyped JSON map. Paginated operations +/// implement this trait so [`super::GraphQLClient::paginate_operation`] (and +/// its `paginate_operation_as` counterpart) can advance the cursor between +/// pages without knowing the concrete variables type. /// -/// Propagates any [`VkError`] returned by the `fetch` closure. -pub async fn paginate(mut fetch: F) -> Result, VkError> -where - F: FnMut(Option) -> Fut, - Fut: std::future::Future, crate::PageInfo), VkError>>, -{ - let mut items = Vec::new(); - let mut cursor = None; - loop { - let (mut page, info) = fetch(cursor.clone()).await?; - items.append(&mut page); - if let Some(next) = info.next_cursor()? { - cursor = Some(next.into()); - } else { - break; - } - } - Ok(items) +/// Passing `None` clears the cursor, requesting the first page. +pub(crate) trait CursorVariables { + /// Replace the `after`/`cursor` variable with `cursor`. + fn set_cursor(&mut self, cursor: Option); } #[cfg(test)] diff --git a/src/api/pagination/tests.rs b/src/api/pagination/tests.rs index 78a85f4c..8d422def 100644 --- a/src/api/pagination/tests.rs +++ b/src/api/pagination/tests.rs @@ -1,66 +1,12 @@ //! Tests for pagination helpers. +//! +//! The traversal behaviours (item concatenation, error discarding, cursor +//! advancement) are covered by the `paginate_operation` tests in +//! `crate::api::client::pagination`; this module covers the [`PageInfo`] +//! cursor invariants those traversals rely on. -use super::paginate; use crate::{PageInfo, VkError}; use rstest::rstest; -use std::sync::{ - Arc, - atomic::{AtomicUsize, Ordering}, -}; - -#[tokio::test] -async fn paginate_discards_items_on_error() { - let seen = Arc::new(AtomicUsize::new(0)); - - let result: Result, VkError> = paginate({ - let seen = Arc::clone(&seen); - move |cursor| { - let seen = Arc::clone(&seen); - async move { - if cursor.is_none() { - seen.fetch_add(1, Ordering::SeqCst); - Ok(( - vec![1], - PageInfo { - has_next_page: true, - end_cursor: Some("next".to_string()), - }, - )) - } else { - Err(VkError::ApiErrors("boom".into())) - } - } - } - }) - .await; - - assert!(result.is_err()); - assert_eq!(seen.load(Ordering::SeqCst), 1); -} - -#[tokio::test] -async fn paginate_missing_cursor_errors() { - let result: Result, VkError> = paginate(|_cursor| async { - Ok(( - vec![1], - PageInfo { - has_next_page: true, - end_cursor: None, - }, - )) - }) - .await; - match result { - Err(VkError::BadResponse(msg)) => { - let s = msg.to_string(); - assert!( - s.contains("hasNextPage=true") && s.contains("endCursor"), - "{s}" - ); - } - other => panic!("unexpected result: {other:?}"), - } -} #[rstest] #[case(false, None, None)] diff --git a/src/api/retry.rs b/src/api/retry.rs index 5d2bdab5..bbdea83c 100644 --- a/src/api/retry.rs +++ b/src/api/retry.rs @@ -58,8 +58,9 @@ pub fn build_retry_builder(config: RetryConfig) -> ExponentialBuilder { } /// Determines whether a `VkError` is transient and should be retried. -/// Returns `true` for network errors (`VkError::RequestContext`, -/// `VkError::Request`), empty responses (`VkError::EmptyResponse`), and for +/// Returns `true` for network errors (`VkError::RequestContext`, which the +/// hyper transport uses for connection failures, timeouts, and body-read +/// errors), empty responses (`VkError::EmptyResponse`), and for /// `VkError::BadResponseSerde` errors only when /// `is_transient_serde_error(status, snippet)` returns true (indicating /// server-side or rate-limit failures). All other `VkError` variants return @@ -78,9 +79,7 @@ pub fn build_retry_builder(config: RetryConfig) -> ExponentialBuilder { /// ``` pub fn should_retry(err: &VkError) -> bool { match err { - VkError::RequestContext { .. } | VkError::Request(_) | VkError::EmptyResponse { .. } => { - true - } + VkError::RequestContext { .. } | VkError::EmptyResponse { .. } => true, VkError::BadResponseSerde { status, snippet, .. } => is_transient_serde_error(*status, snippet), diff --git a/src/api/scalars.rs b/src/api/scalars.rs new file mode 100644 index 00000000..8e36b2b6 --- /dev/null +++ b/src/api/scalars.rs @@ -0,0 +1,42 @@ +//! Rust type aliases for GitHub's GraphQL custom scalars. +//! +//! `graphql_client` codegen resolves each custom scalar named in a `.graphql` +//! document to a Rust type of the same name that must be in scope of the +//! `#[derive(GraphQLQuery)]`. GitHub's schema declares several scalars (for +//! example `DateTime`, `URI`, and `HTML`) that have no built-in mapping, so a +//! single shared module supplies the aliases and every operation module that +//! needs them writes `use crate::api::scalars::*;`. +//! +//! Keep this module the sole home for scalar aliases: adding a new operation +//! that references an as-yet-unmapped scalar surfaces as a compile error naming +//! the missing type, and the fix is to add the alias here rather than in the +//! consumer. + +// `DateTime` is consumed by the reviews operation (`submittedAt`) and `URI` by +// the review-thread operations (the comment `url` field). `HTML` is not yet +// referenced by any migrated operation, so `expect` keeps it in place while +// flagging the moment it becomes used — at which point the attribute is removed +// rather than left as a blanket `allow`. + +/// GitHub's `DateTime` scalar: an ISO-8601 instant in UTC. +pub(crate) type DateTime = chrono::DateTime; + +/// GitHub's `URI` scalar: an absolute URI transported as a string. +#[expect( + clippy::upper_case_acronyms, + reason = "the alias must match the schema scalar name exactly for codegen" +)] +pub(crate) type URI = String; + +/// GitHub's `BigInt` scalar: a non-fractional signed whole number that may +/// exceed 32 bits, encoded as a string on the wire. +pub(crate) type BigInt = String; + +/// GitHub's `HTML` scalar: a pre-rendered HTML fragment transported as a +/// string. +#[expect(dead_code, reason = "consumed once HTML-bearing operations migrate")] +#[expect( + clippy::upper_case_acronyms, + reason = "the alias must match the schema scalar name exactly for codegen" +)] +pub(crate) type HTML = String; diff --git a/src/branch_pr/mod.rs b/src/branch_pr/mod.rs index e0982404..1f95dc5b 100644 --- a/src/branch_pr/mod.rs +++ b/src/branch_pr/mod.rs @@ -5,13 +5,27 @@ //! forks have PRs with the same branch name by filtering on the head repository //! owner. +use graphql_client::GraphQLQuery; use serde::Deserialize; -use serde_json::{Map, json}; -use crate::graphql_queries::PR_FOR_BRANCH_QUERY; use crate::ref_parser::RepoInfo; use crate::{GraphQLClient, VkError}; +/// Typed `PrForBranchQuery` operation: the (non-paginated) PR-by-branch lookup. +/// +/// The response is decoded into the hand-written [`PrForBranchData`] via +/// [`GraphQLClient::run_operation_as`] rather than the generated `ResponseData` +/// so the domain [`PrNode::number`] stays `u64` (the schema types it as `Int`, +/// i.e. `i64`) and the direct-deserialization unit tests keep exercising the +/// same structs. The query itself is still schema-checked at compile time. +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/pr_for_branch.graphql", + response_derives = "Debug, Clone, PartialEq" +)] +pub struct PrForBranchQuery; + #[derive(Debug, Deserialize)] pub(crate) struct PrForBranchData { repository: PrForBranchRepository, @@ -100,12 +114,15 @@ pub async fn fetch_pr_for_branch( branch: &str, head_owner: Option<&str>, ) -> Result { - let mut vars = Map::new(); - vars.insert("owner".into(), json!(&repo.owner)); - vars.insert("name".into(), json!(&repo.name)); - vars.insert("headRef".into(), json!(branch)); + let variables = pr_for_branch_query::Variables { + owner: repo.owner.clone(), + name: repo.name.clone(), + head_ref: branch.to_string(), + }; - let data: PrForBranchData = client.run_query(PR_FOR_BRANCH_QUERY, vars).await?; + let data: PrForBranchData = client + .run_operation_as::(variables) + .await?; let prs = &data.repository.pull_requests.nodes; diff --git a/src/graphql_queries.rs b/src/graphql_queries.rs deleted file mode 100644 index 226452b5..00000000 --- a/src/graphql_queries.rs +++ /dev/null @@ -1,82 +0,0 @@ -//! GraphQL query strings used to fetch issues and review threads. - -pub const THREADS_QUERY: &str = r" - query($owner: String!, $name: String!, $number: Int!, $cursor: String) { - repository(owner: $owner, name: $name) { - pullRequest(number: $number) { - reviewThreads(first: 100, after: $cursor) { - nodes { - id - isResolved - isOutdated - comments(first: 100) { - nodes { - body - diffHunk - originalPosition - position - path - url - author { login } - } - pageInfo { hasNextPage endCursor } - } - } - pageInfo { hasNextPage endCursor } - } - } - } - } -"; - -pub const COMMENT_QUERY: &str = r" - query($id: ID!, $cursor: String) { - node(id: $id) { - ... on PullRequestReviewThread { - comments(first: 100, after: $cursor) { - nodes { - body - diffHunk - originalPosition - position - path - url - author { login } - } - pageInfo { hasNextPage endCursor } - } - } - } - } -"; - -pub const ISSUE_QUERY: &str = r" - query($owner: String!, $name: String!, $number: Int!) { - repository(owner: $owner, name: $name) { - issue(number: $number) { - title - body - } - } - } -"; - -/// Query to find PRs by head branch name. -/// -/// Fetches up to 10 PRs with the given head ref name to support disambiguation -/// when multiple forks have PRs with the same branch name. The response includes -/// the head repository owner for client-side filtering. -pub const PR_FOR_BRANCH_QUERY: &str = r" - query($owner: String!, $name: String!, $headRef: String!) { - repository(owner: $owner, name: $name) { - pullRequests(headRefName: $headRef, first: 10, states: [OPEN, MERGED]) { - nodes { - number - headRepository { - owner { login } - } - } - } - } - } -"; diff --git a/src/issues.rs b/src/issues.rs index 2bf5e5ee..b684a2e6 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -1,44 +1,78 @@ //! Helpers for fetching issues from the GitHub API. //! //! Currently only retrieval of a single issue by number is supported. +//! +//! This module also sets the crate convention for `graphql_client` codegen: +//! each consumer module hosts its own `#[derive(GraphQLQuery)]` item (pointing +//! at the vendored schema and an operation document under `graphql/`) together +//! with the mapper that converts the generated `ResponseData` into the public +//! domain type. Custom scalars, when an operation needs them, come from +//! `crate::api::scalars`. -use crate::graphql_queries::ISSUE_QUERY; +use crate::boxed::BoxedStr; use crate::ref_parser::RepoInfo; use crate::{GraphQLClient, VkError}; +use graphql_client::GraphQLQuery; use serde::Deserialize; -use serde_json::{Map, json}; - -#[derive(Deserialize)] -struct IssueData { - repository: IssueRepository, -} -#[derive(Deserialize)] -struct IssueRepository { - issue: Issue, -} +/// Typed `IssueQuery` GraphQL operation. +/// +/// Generated from `graphql/issue.graphql` and validated against the vendored +/// schema at compile time. The generated module `issue_query` provides the +/// `Variables` and `ResponseData` types used by [`fetch_issue`]. +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/issue.graphql", + response_derives = "Debug, Clone, PartialEq" +)] +pub struct IssueQuery; /// Minimal issue representation returned by the GitHub API. +/// +/// `Deserialize` is retained for consumers that decode fixtures directly; the +/// GraphQL path populates this type through [`issue_from_response`]. #[derive(Deserialize)] pub struct Issue { pub title: String, pub body: String, } +/// Convert an `IssueQuery` response into the public [`Issue`] type. +/// +/// A missing `repository` or `issue` node (both nullable in the schema) means +/// the requested issue does not exist; this is surfaced as a [`VkError`] rather +/// than a panic, matching the pre-codegen behaviour where the required-field +/// deserialization failed on a null issue. +fn issue_from_response(data: issue_query::ResponseData, number: u64) -> Result { + let issue = data + .repository + .and_then(|repository| repository.issue) + .ok_or_else(|| VkError::BadResponse(format!("issue #{number} not found").boxed()))?; + Ok(Issue { + title: issue.title, + body: issue.body, + }) +} + /// Fetch a single issue by repository and number. /// /// # Errors /// -/// Returns an error if the API request fails or the response is malformed. +/// Returns an error if the issue number is out of range, the API request +/// fails, or the response is malformed or reports no such issue. pub async fn fetch_issue( client: &GraphQLClient, repo: &RepoInfo, number: u64, ) -> Result { - let mut vars = Map::new(); - vars.insert("owner".into(), json!(repo.owner.clone())); - vars.insert("name".into(), json!(repo.name.clone())); - vars.insert("number".into(), json!(number)); - let data: IssueData = client.fetch_page(ISSUE_QUERY, None, vars).await?; - Ok(data.repository.issue) + let variables = issue_query::Variables { + owner: repo.owner.clone(), + name: repo.name.clone(), + // GraphQL `Int` maps to `i64`; issue numbers beyond `i64::MAX` cannot + // exist, so an overflow indicates a malformed reference. + number: i64::try_from(number).map_err(|_| VkError::InvalidNumber)?, + }; + let data = client.run_operation::(variables).await?; + issue_from_response(data, number) } diff --git a/src/main.rs b/src/main.rs index fc4f42b9..545d282c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,6 @@ mod auth; mod branch_pr; mod config_loader; mod diff; -mod graphql_queries; mod html; mod issues; #[cfg(test)] @@ -33,7 +32,7 @@ mod environment { pub(crate) use vk::environment::var; } -pub use crate::api::{GraphQLClient, paginate}; +pub use crate::api::GraphQLClient; pub use issues::{Issue, fetch_issue}; pub use review_threads::{ CommentConnection, FetchOptions, PageInfo, ReviewComment, ReviewThread, User, @@ -100,8 +99,6 @@ type SharedConfigError = Arc; pub enum VkError { #[error("unable to determine repository")] RepoNotFound, - #[error("request failed: {0}")] - Request(#[from] Box), #[error("request failed when running {context}: {source}")] RequestContext { context: Box, @@ -160,7 +157,6 @@ macro_rules! boxed_error_from { }; } -boxed_error_from!(reqwest::Error, Request); boxed_error_from!(std::io::Error, Io); impl From for VkError { diff --git a/src/resolve/graphql.rs b/src/resolve/graphql.rs index f3b5595e..cf19d7ce 100644 --- a/src/resolve/graphql.rs +++ b/src/resolve/graphql.rs @@ -1,28 +1,55 @@ //! GraphQL helpers for resolving review comment threads. +//! +//! The thread lookup pages through `repository.pullRequest.reviewThreads`, +//! scanning each thread's first 100 comments for the requested comment's +//! database id (`fullDatabaseId`; the plain `databaseId` field is deprecated +//! in the schema). An earlier revision paged a flat +//! `PullRequest.reviewComments` connection, but that field does not exist in +//! GitHub's published GraphQL schema — it only ever worked against mocked +//! responses — so the query was redesigned onto the real schema when the +//! operations moved to `graphql_client` codegen. +//! +//! Accepted limitation: a comment beyond the first 100 comments of a single +//! thread will not be found (the per-thread `comments(first: 100)` cap). This +//! is the same class of cap as the old flat query's `first: 100` page size; +//! review threads of that depth are not a practical concern for `vk resolve`. use super::CommentRef; +// `graphql_client` resolves the `BigInt` scalar (`fullDatabaseId`) to a type +// of the same name in scope of the derive; the shared alias supplies it. +use crate::api::scalars::BigInt; use crate::{VkError, api::GraphQLClient}; -use serde::Deserialize; -use serde_json::json; +use graphql_client::GraphQLQuery; -const RESOLVE_THREAD_MUTATION: &str = r" - mutation($id: ID!) { - resolveReviewThread(input: {threadId: $id}) { clientMutationId } - } -"; - -const REVIEW_COMMENTS_PAGE: &str = r" - query($owner: String!, $name: String!, $number: Int!, $after: String) { - repository(owner: $owner, name: $name) { - pullRequest(number: $number) { - reviewComments(first: 100, after: $after) { - pageInfo { endCursor hasNextPage } - nodes { databaseId pullRequestReviewThread { id } } - } - } - } - } -"; +/// Typed `ThreadForCommentQuery` operation: pages review threads (with their +/// first 100 comments) so [`get_thread_id`] can locate the thread owning a +/// comment database id. +/// +/// Uses the generated `ResponseData` directly: the fetcher trait below is the +/// only consumer, its unit tests construct the generated types via [`tests`] +/// helpers, and the integration stubs supply every selected field. +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/resolve.graphql", + response_derives = "Debug, Clone, PartialEq" +)] +pub(crate) struct ThreadForCommentQuery; + +/// Typed `ResolveReviewThreadMutation`: marks a review thread resolved. +/// +/// Uses the generated `ResponseData` directly ([`GraphQLClient::run_operation`]) +/// since nothing beyond a successful deserialization is consumed. +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/resolve.graphql", + response_derives = "Debug, Clone, PartialEq" +)] +pub(crate) struct ResolveReviewThreadMutation; + +/// One page of thread-for-comment data as returned by the API. +pub(crate) type ThreadPage = thread_for_comment_query::ResponseData; #[cfg(test)] use mockall::automock; @@ -45,7 +72,7 @@ pub(crate) trait ReviewCommentsFetcher { async fn fetch_review_comments<'a>( &self, query: ReviewCommentsQuery<'a>, - ) -> Result; + ) -> Result; } impl ReviewCommentsFetcher for GraphQLClient { @@ -56,79 +83,50 @@ impl ReviewCommentsFetcher for GraphQLClient { async fn fetch_review_comments<'a>( &self, query: ReviewCommentsQuery<'a>, - ) -> Result { - self.run_query( - REVIEW_COMMENTS_PAGE, - json!({ - "owner": query.owner, - "name": query.name, - "number": query.number, - "after": query.after, - }), - ) - .await + ) -> Result { + // GraphQL `Int` maps to `i64`; PR numbers fit comfortably, but reject + // an out-of-range value rather than silently truncating. + let number = i64::try_from(query.number).map_err(|_| VkError::InvalidNumber)?; + let variables = thread_for_comment_query::Variables { + owner: query.owner.to_string(), + name: query.name.to_string(), + number, + after: query.after, + }; + self.run_operation::(variables).await } } -#[derive(Clone, Deserialize)] -pub(crate) struct ReviewCommentsPage { - repository: Option, -} - -#[derive(Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct Repository { - pull_request: Option, -} - -#[derive(Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct PullRequest { - review_comments: Option, -} - -#[derive(Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct ReviewComments { - page_info: PageInfo, - nodes: Vec, -} - -#[derive(Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct PageInfo { - end_cursor: Option, - has_next_page: bool, -} - -#[derive(Clone, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct CommentNode { - database_id: u64, - pull_request_review_thread: ReviewThread, -} - -#[derive(Clone, Deserialize)] -pub(crate) struct ReviewThread { - id: String, -} - -#[derive(Clone, Deserialize)] -pub(crate) struct ResolveThreadResponse { - #[serde(rename = "resolveReviewThread")] - _resolve_review_thread: Option, -} - -#[derive(Clone, Deserialize)] -pub(crate) struct ResolveThreadInner { - #[serde(rename = "clientMutationId")] - _client_mutation_id: Option, +/// Scan one page of review threads for the comment with `target` database id, +/// returning the owning thread's id when found. +fn find_thread_in_page( + threads: Vec< + Option< + thread_for_comment_query::ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodes, + >, + >, + target: &str, +) -> Option { + threads.into_iter().flatten().find_map(|thread| { + let hit = thread + .comments + .nodes + .iter() + .flatten() + .flatten() + .any(|comment| comment.full_database_id.as_deref() == Some(target)); + hit.then_some(thread.id) + }) } pub(crate) async fn get_thread_id( gql: &impl ReviewCommentsFetcher, reference: CommentRef<'_>, ) -> Result { + // Comment ids come from `#discussion_r` permalinks; `fullDatabaseId` + // is a `BigInt` scalar carried as a decimal string, so the id is matched + // by its canonical string form. + let target = reference.comment_id.to_string(); let mut cursor: Option = None; loop { let data = gql @@ -139,22 +137,20 @@ pub(crate) async fn get_thread_id( after: cursor.clone(), }) .await?; - let comments = data + let threads = data .repository .and_then(|r| r.pull_request) - .and_then(|p| p.review_comments) - .ok_or_else(|| VkError::BadResponse("missing review comments".into()))?; - if let Some(node) = comments - .nodes - .iter() - .find(|n| n.database_id == reference.comment_id) + .map(|p| p.review_threads) + .ok_or_else(|| VkError::BadResponse("missing review threads".into()))?; + if let Some(nodes) = threads.nodes + && let Some(id) = find_thread_in_page(nodes, &target) { - return Ok(node.pull_request_review_thread.id.clone()); + return Ok(id); } - if !comments.page_info.has_next_page { + if !threads.page_info.has_next_page { break; } - let next = comments.page_info.end_cursor.clone(); + let next = threads.page_info.end_cursor; if next.is_none() { return Err(VkError::BadResponse( "missing endCursor with hasNextPage".into(), @@ -173,8 +169,12 @@ pub(crate) async fn get_thread_id( } pub(crate) async fn resolve_thread(gql: &GraphQLClient, thread_id: &str) -> Result<(), VkError> { - let _: ResolveThreadResponse = gql - .run_query(RESOLVE_THREAD_MUTATION, json!({ "id": thread_id })) + // The mutation's response is intentionally unconsumed beyond a successful + // deserialization, so the generated `ResponseData` is discarded. + let _ = gql + .run_operation::(resolve_review_thread_mutation::Variables { + id: thread_id.to_string(), + }) .await?; Ok(()) } @@ -185,31 +185,63 @@ mod tests { use crate::ref_parser::RepoInfo; use mockall::Sequence; use rstest::rstest; + use thread_for_comment_query::{ + ResponseData, ThreadForCommentQueryRepository, ThreadForCommentQueryRepositoryPullRequest, + ThreadForCommentQueryRepositoryPullRequestReviewThreads, + ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodes, + ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodesComments, + ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodesCommentsNodes, + ThreadForCommentQueryRepositoryPullRequestReviewThreadsPageInfo, + }; - fn page(nodes: Vec, end_cursor: Option<&str>, has_next: bool) -> ReviewCommentsPage { - ReviewCommentsPage { - repository: Some(Repository { - pull_request: Some(PullRequest { - review_comments: Some(ReviewComments { - page_info: PageInfo { - end_cursor: end_cursor.map(ToOwned::to_owned), - has_next_page: has_next, - }, - nodes: nodes - .into_iter() - .map(|id| CommentNode { - database_id: id, - pull_request_review_thread: ReviewThread { id: "t".into() }, + /// Build one thread node containing the given comment database ids. + fn thread( + id: &str, + comment_ids: Vec, + ) -> ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodes { + ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodes { + id: id.into(), + comments: ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodesComments { + nodes: Some( + comment_ids + .into_iter() + .map(|database_id| { + Some(ThreadForCommentQueryRepositoryPullRequestReviewThreadsNodesCommentsNodes { + full_database_id: Some(database_id.to_string()), }) - .collect(), - }), + }) + .collect(), + ), + }, + } + } + + /// Build a page of review threads, each holding one comment id, with the + /// given pagination cursor. + fn page(comment_ids: Vec, end_cursor: Option<&str>, has_next: bool) -> ThreadPage { + ResponseData { + repository: Some(ThreadForCommentQueryRepository { + pull_request: Some(ThreadForCommentQueryRepositoryPullRequest { + review_threads: ThreadForCommentQueryRepositoryPullRequestReviewThreads { + page_info: + ThreadForCommentQueryRepositoryPullRequestReviewThreadsPageInfo { + end_cursor: end_cursor.map(ToOwned::to_owned), + has_next_page: has_next, + }, + nodes: Some( + comment_ids + .into_iter() + .map(|id| Some(thread("t", vec![id]))) + .collect(), + ), + }, }), }), } } #[rstest] - #[case::missing_comments(vec![ReviewCommentsPage { repository: None }], VkError::BadResponse("missing review comments".into()))] + #[case::missing_threads(vec![ResponseData { repository: None }], VkError::BadResponse("missing review threads".into()))] #[case::missing_cursor(vec![page(vec![], None, true)], VkError::BadResponse("missing endCursor with hasNextPage".into()))] #[case::repeated_cursor( vec![ @@ -226,7 +258,7 @@ mod tests { VkError::CommentNotFound { comment_id: 42 }, )] #[tokio::test] - async fn pagination_errors(#[case] pages: Vec, #[case] expected: VkError) { + async fn pagination_errors(#[case] pages: Vec, #[case] expected: VkError) { let mut mock = MockReviewCommentsFetcher::new(); let mut seq = Sequence::new(); for page in pages { @@ -250,4 +282,33 @@ mod tests { .expect_err("expected error"); assert_eq!(format!("{err:?}"), format!("{expected:?}")); } + + #[tokio::test] + async fn finds_thread_owning_the_comment() { + let mut mock = MockReviewCommentsFetcher::new(); + let mut seq = Sequence::new(); + let pages = vec![ + page(vec![1], Some("a"), true), + // Second page: thread "t" holds the requested comment. + page(vec![42], None, false), + ]; + for page in pages { + let p = page.clone(); + mock.expect_fetch_review_comments() + .times(1) + .in_sequence(&mut seq) + .returning(move |_| Ok(p.clone())); + } + let repo = RepoInfo { + owner: "o".into(), + name: "r".into(), + }; + let reference = CommentRef { + repo: &repo, + pull_number: 1, + comment_id: 42, + }; + let id = get_thread_id(&mock, reference).await.expect("thread id"); + assert_eq!(id, "t"); + } } diff --git a/src/resolve/rest.rs b/src/resolve/rest.rs index 71e545a0..2ff39949 100644 --- a/src/resolve/rest.rs +++ b/src/resolve/rest.rs @@ -1,9 +1,15 @@ //! REST helpers for replying to review comments. +//! +//! The reply path is served by [`octocrab`], whose builder supplies the +//! authentication and base-URI plumbing previously hand-rolled on `reqwest`. +//! Only the raw `_post` route is used, so status-code handling stays under +//! `vk`'s control: a 404 is non-fatal (warn and continue), and any other +//! non-2xx status is fatal. use super::CommentRef; use crate::{VkError, boxed::BoxedStr}; -use reqwest::header::{ACCEPT, AUTHORIZATION, HeaderMap, HeaderName, HeaderValue, USER_AGENT}; -use reqwest::{StatusCode, Url}; +use http::header::{ACCEPT, HeaderName}; +use octocrab::Octocrab; use serde_json::json; #[cfg(test)] use std::sync::atomic::{AtomicUsize, Ordering}; @@ -11,71 +17,33 @@ use std::time::Duration; use tracing::warn; use vk::environment; -/// Build an authenticated client with GitHub headers. -/// -/// Returns [`VkError::RequestContext`] when the client cannot be built. -/// -/// # Examples -/// -/// ```ignore -/// # use crate::resolve::rest::github_client; -/// use std::time::Duration; -/// let client = github_client("token", Duration::from_secs(10), Duration::from_secs(5))?; -/// # Ok::<(), VkError>(()) -/// ``` -pub(crate) fn github_client( - token: &str, - timeout: Duration, - connect_timeout: Duration, -) -> Result { - let mut headers = HeaderMap::new(); - let parse_value = |value: &str, context: &str| -> Result { - HeaderValue::from_str(value).map_err(|e| VkError::RequestContext { - context: context.boxed(), - source: e.into(), - }) - }; - headers.insert(USER_AGENT, parse_value("vk", "build user agent header")?); - let auth_header = format!("Bearer {token}"); - headers.insert( - AUTHORIZATION, - parse_value(&auth_header, "build authorization header")?, - ); - headers.insert( - ACCEPT, - parse_value("application/vnd.github+json", "build accept header")?, - ); - let api_version_header = - HeaderName::from_bytes(b"x-github-api-version").map_err(|e| VkError::RequestContext { - context: "build x-github-api-version header name".boxed(), - source: e.into(), - })?; - headers.insert( - api_version_header, - parse_value("2022-11-28", "build x-github-api-version header value")?, - ); - reqwest::Client::builder() - .default_headers(headers) - .timeout(timeout) - .connect_timeout(connect_timeout) - .build() - .map_err(|e| VkError::RequestContext { - context: "build client".into(), - source: Box::new(e), - }) -} - /// GitHub REST client configuration. +/// +/// Wraps an [`Octocrab`] instance built from the resolved base URI and the +/// caller's authentication token. pub(crate) struct RestClient { - api: Url, - client: reqwest::Client, + client: Octocrab, + timeout: Duration, #[cfg(test)] request_count: AtomicUsize, } impl RestClient { /// Create a REST client targeting the provided `api` base URL. - /// Falls back to `GITHUB_API_URL` or the public GitHub endpoint when `api` is `None`. + /// + /// The base URI is resolved in order: the explicit `api` parameter, then the + /// `GITHUB_API_URL` environment variable, then the public GitHub endpoint. + /// Plain `http://` loopback addresses are accepted so tests can redirect the + /// client at a local stub server. + /// + /// `personal_token` is only set when `token` is non-empty, preserving + /// anonymous access. The `connect_timeout` maps directly onto octocrab's + /// connect timeout. The read and write timeouts are configured on octocrab, + /// and the original total-request deadline is retained for the complete + /// reply operation. + /// + /// Returns [`VkError::RequestContext`] when the base URI cannot be parsed or + /// the client cannot be built. pub(crate) fn new( token: &str, api: Option<&str>, @@ -89,19 +57,37 @@ impl RestClient { while base.ends_with('/') { base.pop(); } - let mut api = Url::parse(&base).map_err(|e| VkError::RequestContext { - context: format!("parse API base URL from {base}").boxed(), - source: Box::new(e), - })?; - let normalised_path = match api.path().trim_end_matches('/') { - "" => "/".to_owned(), - path => format!("{path}/"), - }; - api.set_path(&normalised_path); - let client = github_client(token, timeout, connect_timeout)?; + let mut builder = + Octocrab::builder() + .base_uri(base.as_str()) + .map_err(|e| VkError::RequestContext { + context: format!("parse API base URL from {base}").boxed(), + source: Box::new(e), + })?; + if !token.is_empty() { + builder = builder.personal_token(token.to_owned()); + } + // Restore the behaviourally meaningful headers the reqwest client + // sent: the pinned REST API version and the GitHub JSON media type. + // octocrab's default `User-Agent: octocrab` is left alone (decision + // recorded in the ExecPlan). + let client = builder + .add_header( + HeaderName::from_static("x-github-api-version"), + "2022-11-28".to_owned(), + ) + .add_header(ACCEPT, "application/vnd.github+json".to_owned()) + .set_connect_timeout(Some(connect_timeout)) + .set_read_timeout(Some(timeout)) + .set_write_timeout(Some(timeout)) + .build() + .map_err(|e| VkError::RequestContext { + context: "build client".boxed(), + source: Box::new(e), + })?; Ok(Self { - api, client, + timeout, #[cfg(test)] request_count: AtomicUsize::new(0), }) @@ -109,6 +95,11 @@ impl RestClient { } /// Post a reply to a review comment using the REST API. +/// +/// A 404 response is treated as non-fatal: the original comment is assumed to +/// have gone away, so the caller continues to resolve the thread. Any other +/// non-2xx status is mapped to [`VkError::RequestContext`], whose message names +/// the reply route and the failing status. pub(crate) async fn post_reply( rest: &RestClient, reference: CommentRef<'_>, @@ -116,49 +107,48 @@ pub(crate) async fn post_reply( ) -> Result<(), VkError> { let body = body.trim(); if body.is_empty() { - // Avoid GitHub 422s by skipping empty replies + // Avoid GitHub 422s by skipping empty replies. return Ok(()); } - let path = format!( - "repos/{}/{}/pulls/{}/comments/{}/replies", + let route = format!( + "/repos/{}/{}/pulls/{}/comments/{}/replies", reference.repo.owner, reference.repo.name, reference.pull_number, reference.comment_id ); - let url = rest.api.join(&path).map_err(|e| VkError::RequestContext { - context: format!( - "build reply URL for comment {} in repo {}/{}", - reference.comment_id, reference.repo.owner, reference.repo.name - ) - .boxed(), - source: Box::new(e), - })?; #[cfg(test)] rest.request_count.fetch_add(1, Ordering::SeqCst); - let res = rest - .client - .post(url) - .json(&json!({ "body": body })) - .send() - .await - .map_err(|e| VkError::RequestContext { - context: "post reply".into(), - source: Box::new(e), - })?; - if res.status() == StatusCode::NOT_FOUND { + let response = tokio::time::timeout( + rest.timeout, + rest.client + ._post(route.as_str(), Some(&json!({ "body": body }))), + ) + .await + .map_err(|e| VkError::RequestContext { + context: format!("post reply to {route}").boxed(), + source: Box::new(e), + })? + .map_err(|e| VkError::RequestContext { + context: "post reply".boxed(), + source: Box::new(e), + })?; + let status = response.status(); + if status.as_u16() == 404 { warn!( - "reply target not found (url={}): {}/{} comment {} in PR #{}", - res.url(), - reference.repo.owner, - reference.repo.name, - reference.comment_id, - reference.pull_number + "reply target not found (route={route}): {}/{} comment {} in PR #{}", + reference.repo.owner, reference.repo.name, reference.comment_id, reference.pull_number ); // Treat missing original comment as non-fatal: continue to resolve. return Ok(()); } - res.error_for_status() - .map(|_| ()) - .map_err(|e| VkError::Request(Box::new(e))) + if status.is_success() { + return Ok(()); + } + Err(VkError::RequestContext { + context: format!("post reply to {route}").boxed(), + source: Box::new(std::io::Error::other(format!( + "unexpected HTTP status {status}" + ))), + }) } #[cfg(test)] diff --git a/src/review_threads.rs b/src/review_threads.rs index a2075db8..a243f670 100644 --- a/src/review_threads.rs +++ b/src/review_threads.rs @@ -8,132 +8,18 @@ //! CLI flag `--show-outdated`. Utilities for filtering threads by file //! path are also provided. -use serde::Deserialize; -use serde_json::{Map, json}; -use std::{borrow::Cow, collections::HashSet}; +use std::collections::HashSet; use crate::boxed::BoxedStr; -use crate::graphql_queries::{COMMENT_QUERY, THREADS_QUERY}; use crate::ref_parser::RepoInfo; use crate::{GraphQLClient, VkError}; -#[derive(Debug, Deserialize, Default)] -struct ThreadData { - repository: Repository, -} - -#[derive(Debug, Deserialize, Default)] -struct Repository { - #[serde(rename = "pullRequest")] - pull_request: PullRequest, -} - -#[derive(Debug, Deserialize, Default)] -struct PullRequest { - #[serde(rename = "reviewThreads")] - review_threads: ReviewThreadConnection, -} - -#[derive(Debug, Deserialize, Default)] -struct NodeWrapper { - node: Option, -} +mod wire; -#[derive(Debug, Deserialize, Default)] -struct CommentNode { - comments: CommentConnection, -} - -#[derive(Debug, Deserialize, Default)] -pub struct Connection { - pub nodes: Vec, - #[serde(rename = "pageInfo")] - pub page_info: PageInfo, -} - -type ReviewThreadConnection = Connection; -pub type CommentConnection = Connection; - -/// Details of a single review thread. -#[derive(Debug, Deserialize, Default)] -pub struct ReviewThread { - pub id: String, - #[serde(rename = "isResolved")] - pub is_resolved: bool, - #[serde(default, rename = "isOutdated")] - pub is_outdated: bool, - pub comments: CommentConnection, -} - -/// A single review comment. -#[derive(Debug, Deserialize, Default)] -pub struct ReviewComment { - pub body: String, - #[serde(rename = "diffHunk")] - pub diff_hunk: String, - #[serde(rename = "originalPosition")] - pub original_position: Option, - pub position: Option, - pub path: String, - pub url: String, - pub author: Option, -} - -/// Pagination information returned by GitHub's GraphQL API. -#[derive(Debug, Deserialize, Default, Clone)] -pub struct PageInfo { - #[serde(rename = "hasNextPage")] - pub has_next_page: bool, - #[serde(rename = "endCursor")] - pub end_cursor: Option, -} - -impl PageInfo { - /// Return the cursor for the next page when available. - /// Returns `Ok(None)` when there are no more pages. - /// - /// # Errors - /// - /// Returns [`VkError::BadResponse`] when `has_next_page` is `true` but - /// `end_cursor` is absent. - /// - /// # Examples - /// ``` - /// use vk::PageInfo; - /// let info = PageInfo { has_next_page: true, end_cursor: Some("c1".into()) }; - /// assert_eq!(info.next_cursor().expect("cursor"), Some("c1")); - /// ``` - /// ``` - /// use vk::PageInfo; - /// let info = PageInfo { has_next_page: true, end_cursor: None }; - /// assert!(info.next_cursor().is_err()); - /// ``` - /// ``` - /// use vk::PageInfo; - /// let info = PageInfo { has_next_page: false, end_cursor: None }; - /// assert_eq!(info.next_cursor().expect("cursor"), None); - /// ``` - #[inline] - #[must_use = "inspect the returned cursor to advance pagination"] - pub fn next_cursor(&self) -> Result, VkError> { - match (self.has_next_page, self.end_cursor.as_deref()) { - (true, Some(cursor)) => Ok(Some(cursor)), - (true, None) => Err(VkError::BadResponse( - format!( - "PageInfo invariant violated: hasNextPage=true but endCursor missing | pageInfo: {self:?}" - ) - .boxed(), - )), - (false, _) => Ok(None), - } - } -} - -/// Minimal user representation for authorship information. -#[derive(Debug, Deserialize, Default, Clone)] -pub struct User { - pub login: String, -} +pub use wire::{ + CommentConnection, CommentQuery, PageInfo, ReviewComment, ReviewThread, ThreadsQuery, User, +}; +use wire::{CommentNode, NodeWrapper, ThreadData, comment_query, threads_query}; /// Options controlling which review threads to include. /// @@ -215,18 +101,26 @@ pub async fn fetch_review_threads_with_options( i32::try_from(number).is_ok(), "pull-request number {number} exceeds GraphQL Int (i32) range", ); - let number_i32 = i32::try_from(number).map_err(|_| VkError::InvalidNumber)?; + // GraphQL `Int` maps to `i64`; a pull-request number beyond `i32::MAX` + // cannot be valid, so range-check as `i32` before widening. + let number = i64::from(i32::try_from(number).map_err(|_| VkError::InvalidNumber)?); - let mut vars = Map::new(); - vars.insert("owner".into(), json!(repo.owner.clone())); - vars.insert("name".into(), json!(repo.name.clone())); - vars.insert("number".into(), json!(number_i32)); + let variables = threads_query::Variables { + owner: repo.owner.clone(), + name: repo.name.clone(), + number, + cursor: None, + }; let threads = client - .paginate_all(THREADS_QUERY, vars, None, |data: ThreadData| { - let conn = data.repository.pull_request.review_threads; - Ok((conn.nodes, conn.page_info)) - }) + .paginate_operation_as::( + variables, + None, + |data: ThreadData| { + let conn = data.repository.pull_request.review_threads; + Ok((conn.nodes, conn.page_info)) + }, + ) .await?; let mut threads = if options.include_resolved { @@ -269,13 +163,14 @@ async fn fetch_all_comments( page_info, } = initial; if let Some(cursor) = page_info.next_cursor()? { - let mut vars = Map::new(); - vars.insert("id".into(), json!(thread_id)); + let variables = comment_query::Variables { + id: thread_id.to_string(), + cursor: None, + }; let more = client - .paginate_all( - COMMENT_QUERY, - vars, - Some(Cow::Borrowed(cursor)), + .paginate_operation_as::, ReviewComment, _>( + variables, + Some(cursor.to_string()), |wrapper: NodeWrapper| { let conn = wrapper .node diff --git a/src/review_threads/tests.rs b/src/review_threads/tests.rs index e2335eaf..9f49915f 100644 --- a/src/review_threads/tests.rs +++ b/src/review_threads/tests.rs @@ -113,10 +113,7 @@ async fn path_variant_client( #[rstest] #[tokio::test] -async fn run_query_missing_nodes_reports_path( - repo: RepoInfo, - #[future] missing_nodes_client: TestClient, -) { +async fn missing_nodes_reports_path(repo: RepoInfo, #[future] missing_nodes_client: TestClient) { let TestClient { client, join, .. } = missing_nodes_client.await; let result = fetch_review_threads_with_options(&client, &repo, 1, FetchOptions::unresolved_current()) diff --git a/src/review_threads/wire.rs b/src/review_threads/wire.rs new file mode 100644 index 00000000..c453e542 --- /dev/null +++ b/src/review_threads/wire.rs @@ -0,0 +1,183 @@ +//! GraphQL wire layer for review-thread fetching. +//! +//! This submodule holds the transport-facing shapes for the review-thread and +//! comment queries: the [`GraphQLQuery`] operations, the [`CursorVariables`] +//! implementations that drive pagination, the private envelope structs used to +//! decode each response, and the public domain types those envelopes populate. +//! Keeping the wire shapes here isolates the generated-type-adjacent decoding +//! from the fetching and filtering behaviour in the parent module. + +use graphql_client::GraphQLQuery; +use serde::Deserialize; + +use crate::api::CursorVariables; +// `graphql_client` resolves the `URI` scalar (the comment `url` field) to a +// type of the same name in scope of the threads/comment derives; the shared +// alias supplies it. +use crate::VkError; +use crate::api::scalars::URI; +use crate::boxed::BoxedStr; + +/// Typed `ThreadsQuery` operation: the paginated review-thread listing. +/// +/// The generated `ResponseData` would require `isOutdated` on every thread, +/// but the documented behaviour is that threads missing `isOutdated` are +/// treated as current (see `docs/vk-design.md`). The response is therefore +/// decoded into the hand-written [`ThreadData`] via +/// [`GraphQLClient::paginate_operation_as`], which keeps that `#[serde(default)]` +/// leniency while still validating the query against the vendored schema. +/// +/// [`GraphQLClient::paginate_operation_as`]: crate::GraphQLClient::paginate_operation_as +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/review_threads.graphql", + variables_derives = "Clone", + response_derives = "Debug, Clone, PartialEq" +)] +pub struct ThreadsQuery; + +/// Typed `CommentQuery` operation: per-thread comment paging via `node(id:)`. +/// +/// Decoded into the hand-written [`NodeWrapper`] for consistency +/// with [`ThreadsQuery`] (both populate the shared [`ReviewComment`]) and to +/// avoid mapping the `Node` interface's inline-fragment enum; the fixtures +/// would also satisfy the generated `ResponseData`. +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/review_threads.graphql", + variables_derives = "Clone", + response_derives = "Debug, Clone, PartialEq" +)] +pub struct CommentQuery; + +impl CursorVariables for threads_query::Variables { + fn set_cursor(&mut self, cursor: Option) { + self.cursor = cursor; + } +} + +impl CursorVariables for comment_query::Variables { + fn set_cursor(&mut self, cursor: Option) { + self.cursor = cursor; + } +} + +#[derive(Debug, Deserialize, Default)] +pub(super) struct ThreadData { + pub(super) repository: Repository, +} + +#[derive(Debug, Deserialize, Default)] +pub(super) struct Repository { + #[serde(rename = "pullRequest")] + pub(super) pull_request: PullRequest, +} + +#[derive(Debug, Deserialize, Default)] +pub(super) struct PullRequest { + #[serde(rename = "reviewThreads")] + pub(super) review_threads: ReviewThreadConnection, +} + +#[derive(Debug, Deserialize, Default)] +pub(super) struct NodeWrapper { + pub(super) node: Option, +} + +#[derive(Debug, Deserialize, Default)] +pub(super) struct CommentNode { + pub(super) comments: CommentConnection, +} + +#[derive(Debug, Deserialize, Default)] +pub struct Connection { + pub nodes: Vec, + #[serde(rename = "pageInfo")] + pub page_info: PageInfo, +} + +pub(super) type ReviewThreadConnection = Connection; +pub type CommentConnection = Connection; + +/// Details of a single review thread. +#[derive(Debug, Deserialize, Default)] +pub struct ReviewThread { + pub id: String, + #[serde(rename = "isResolved")] + pub is_resolved: bool, + #[serde(default, rename = "isOutdated")] + pub is_outdated: bool, + pub comments: CommentConnection, +} + +/// A single review comment. +#[derive(Debug, Deserialize, Default)] +pub struct ReviewComment { + pub body: String, + #[serde(rename = "diffHunk")] + pub diff_hunk: String, + #[serde(rename = "originalPosition")] + pub original_position: Option, + pub position: Option, + pub path: String, + pub url: String, + pub author: Option, +} + +/// Pagination information returned by GitHub's GraphQL API. +#[derive(Debug, Deserialize, Default, Clone)] +pub struct PageInfo { + #[serde(rename = "hasNextPage")] + pub has_next_page: bool, + #[serde(rename = "endCursor")] + pub end_cursor: Option, +} + +impl PageInfo { + /// Return the cursor for the next page when available. + /// Returns `Ok(None)` when there are no more pages. + /// + /// # Errors + /// + /// Returns [`VkError::BadResponse`] when `has_next_page` is `true` but + /// `end_cursor` is absent. + /// + /// # Examples + /// ``` + /// use vk::PageInfo; + /// let info = PageInfo { has_next_page: true, end_cursor: Some("c1".into()) }; + /// assert_eq!(info.next_cursor().expect("cursor"), Some("c1")); + /// ``` + /// ``` + /// use vk::PageInfo; + /// let info = PageInfo { has_next_page: true, end_cursor: None }; + /// assert!(info.next_cursor().is_err()); + /// ``` + /// ``` + /// use vk::PageInfo; + /// let info = PageInfo { has_next_page: false, end_cursor: None }; + /// assert_eq!(info.next_cursor().expect("cursor"), None); + /// ``` + #[inline] + #[must_use = "inspect the returned cursor to advance pagination"] + pub fn next_cursor(&self) -> Result, VkError> { + match (self.has_next_page, self.end_cursor.as_deref()) { + (true, Some(cursor)) => Ok(Some(cursor)), + (true, None) => Err(VkError::BadResponse( + format!( + "PageInfo invariant violated: hasNextPage=true but endCursor missing | pageInfo: {self:?}" + ) + .boxed(), + )), + (false, _) => Ok(None), + } + } +} + +/// Minimal user representation for authorship information. +#[derive(Debug, Deserialize, Default, Clone)] +pub struct User { + pub login: String, +} diff --git a/src/reviews.rs b/src/reviews.rs index 772d3931..54ff39d2 100644 --- a/src/reviews.rs +++ b/src/reviews.rs @@ -3,68 +3,13 @@ //! The module defines GraphQL query structures and pagination helpers so callers //! can fetch pull-request reviews and collate the latest review from each author. -use chrono::{DateTime, Utc}; -use serde::Deserialize; -use serde_json::{Map, json}; - -use crate::{GraphQLClient, PageInfo, User, VkError, ref_parser::RepoInfo}; +use crate::{GraphQLClient, VkError, ref_parser::RepoInfo}; use std::collections::{HashMap, hash_map::Entry}; -#[derive(Debug, Deserialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct PullRequestReview { - pub body: String, - /// Timestamp when the review was formally submitted. - /// - /// This may be `None` when the timestamp is missing or unknown. - pub submitted_at: Option>, - pub state: String, - pub author: Option, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -struct ReviewData { - repository: RepositoryReviews, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -struct RepositoryReviews { - #[serde(rename = "pullRequest")] - pull_request: PullRequestReviews, -} +mod wire; -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -struct PullRequestReviews { - reviews: ReviewConnection, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -struct ReviewConnection { - nodes: Vec, - page_info: PageInfo, -} - -const REVIEWS_QUERY: &str = r" - query($owner: String!, $name: String!, $number: Int!, $cursor: String) { - repository(owner: $owner, name: $name) { - pullRequest(number: $number) { - reviews(first: 100, after: $cursor) { - nodes { - body - state - submittedAt - author { login } - } - pageInfo { hasNextPage endCursor } - } - } - } - } -"; +pub use wire::{PullRequestReview, ReviewsQuery}; +use wire::{ReviewData, reviews_query}; /// Retrieve all reviews for a pull request by paging through the GitHub /// GraphQL API. @@ -101,17 +46,25 @@ pub async fn fetch_reviews( i32::try_from(number).is_ok(), "pull-request number {number} exceeds GraphQL Int (i32) range", ); - let number_i32 = i32::try_from(number).map_err(|_| VkError::InvalidNumber)?; + // GraphQL `Int` maps to `i64`; a pull-request number beyond `i32::MAX` + // cannot be valid, so range-check as `i32` before widening. + let number = i64::from(i32::try_from(number).map_err(|_| VkError::InvalidNumber)?); - let mut vars = Map::new(); - vars.insert("owner".into(), json!(repo.owner.clone())); - vars.insert("name".into(), json!(repo.name.clone())); - vars.insert("number".into(), json!(number_i32)); + let variables = reviews_query::Variables { + owner: repo.owner.clone(), + name: repo.name.clone(), + number, + cursor: None, + }; client - .paginate_all(REVIEWS_QUERY, vars, None, |data: ReviewData| { - let conn = data.repository.pull_request.reviews; - Ok((conn.nodes, conn.page_info)) - }) + .paginate_operation_as::( + variables, + None, + |data: ReviewData| { + let conn = data.repository.pull_request.reviews; + Ok((conn.nodes, conn.page_info)) + }, + ) .await } @@ -203,7 +156,10 @@ mod tests { use crate::ref_parser::RepoInfo; use crate::test_utils::{TestClient, start_server}; use crate::{GraphQLClient, User, VkError}; - use chrono::{TimeZone, Utc}; + // Explicit `chrono::DateTime` shadows the `scalars::DateTime` alias pulled + // in by `use super::*`, so the `DateTime` case parameters below resolve + // to the generic chrono type. + use chrono::{DateTime, TimeZone, Utc}; #[cfg(debug_assertions)] use futures::FutureExt; use rstest::rstest; diff --git a/src/reviews/wire.rs b/src/reviews/wire.rs new file mode 100644 index 00000000..6077c76e --- /dev/null +++ b/src/reviews/wire.rs @@ -0,0 +1,83 @@ +//! GraphQL wire layer for pull-request review fetching. +//! +//! This submodule holds the transport-facing shapes for the reviews query: the +//! [`GraphQLQuery`] operation, the [`CursorVariables`] implementation that +//! drives pagination, the private envelope structs used to decode the +//! response, and the public [`PullRequestReview`] domain type those envelopes +//! populate. Keeping the wire shapes here isolates the generated-type-adjacent +//! decoding from the collating behaviour in the parent module. + +use graphql_client::GraphQLQuery; +use serde::Deserialize; + +// `graphql_client` resolves the `DateTime` scalar in `reviews.graphql` to a +// type of the same name in scope of the derive; the shared alias supplies it. +// It is `chrono::DateTime`, so it doubles as the field type for +// `PullRequestReview::submitted_at`. +use crate::api::CursorVariables; +use crate::api::scalars::DateTime; +use crate::{PageInfo, User}; + +/// Typed `ReviewsQuery` operation: the paginated pull-request review listing. +/// +/// The response is decoded into the hand-written [`ReviewData`] via +/// [`GraphQLClient::paginate_operation_as`] rather than the generated +/// `ResponseData` because the schema types `state` as the enum +/// `PullRequestReviewState`, whereas the public [`PullRequestReview::state`] is +/// a `String` that must preserve the wire value verbatim (including any future +/// or unknown state). Decoding into the hand-written struct avoids an +/// enum round-trip while still validating the query at compile time. +/// +/// [`GraphQLClient::paginate_operation_as`]: crate::GraphQLClient::paginate_operation_as +#[derive(GraphQLQuery)] +#[graphql( + schema_path = "graphql/schema.docs.graphql", + query_path = "graphql/reviews.graphql", + variables_derives = "Clone", + response_derives = "Debug, Clone, PartialEq" +)] +pub struct ReviewsQuery; + +impl CursorVariables for reviews_query::Variables { + fn set_cursor(&mut self, cursor: Option) { + self.cursor = cursor; + } +} + +#[derive(Debug, Deserialize, Clone)] +#[serde(rename_all = "camelCase")] +pub struct PullRequestReview { + pub body: String, + /// Timestamp when the review was formally submitted. + /// + /// This may be `None` when the timestamp is missing or unknown. + pub submitted_at: Option, + pub state: String, + pub author: Option, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(super) struct ReviewData { + pub(super) repository: RepositoryReviews, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(super) struct RepositoryReviews { + #[serde(rename = "pullRequest")] + pub(super) pull_request: PullRequestReviews, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(super) struct PullRequestReviews { + pub(super) reviews: ReviewConnection, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(super) struct ReviewConnection { + pub(super) nodes: Vec, + pub(super) page_info: PageInfo, +} diff --git a/tests/resolve.rs b/tests/resolve.rs index d4ac73fd..40aba9d9 100644 --- a/tests/resolve.rs +++ b/tests/resolve.rs @@ -4,7 +4,10 @@ use assert_cmd::prelude::*; use http_body_util::Full; -use hyper::{Response, StatusCode}; +use hyper::{ + Response, StatusCode, + header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE}, +}; use predicates::prelude::*; use serde_json::Value; use std::borrow::ToOwned; @@ -39,19 +42,22 @@ impl Page { } fn body(&self) -> String { + // One review-thread page holding a single thread whose sole comment + // carries the scripted database id (`fullDatabaseId` is a BigInt + // scalar, transported as a string). self.end_cursor.map_or_else( || { format!( - r#"{{"data":{{"repository":{{"pullRequest":{{"reviewComments":{{"pageInfo":{{"endCursor":null,"hasNextPage":false}},"nodes":[{{"databaseId":{},"pullRequestReviewThread":{{"id":"{}"}}}}]}}}}}}}}}}"#, - self.comment_id, + r#"{{"data":{{"repository":{{"pullRequest":{{"reviewThreads":{{"pageInfo":{{"endCursor":null,"hasNextPage":false}},"nodes":[{{"id":"{}","comments":{{"nodes":[{{"fullDatabaseId":"{}"}}]}}}}]}}}}}}}}}}"#, self.thread_id, + self.comment_id, ) }, |cursor| { format!( - r#"{{"data":{{"repository":{{"pullRequest":{{"reviewComments":{{"pageInfo":{{"endCursor":"{cursor}","hasNextPage":true}},"nodes":[{{"databaseId":{},"pullRequestReviewThread":{{"id":"{}"}}}}]}}}}}}}}}}"#, - self.comment_id, + r#"{{"data":{{"repository":{{"pullRequest":{{"reviewThreads":{{"pageInfo":{{"endCursor":"{cursor}","hasNextPage":true}},"nodes":[{{"id":"{}","comments":{{"nodes":[{{"fullDatabaseId":"{}"}}]}}}}]}}}}}}}}}}"#, self.thread_id, + self.comment_id, ) }, ) @@ -134,13 +140,34 @@ async fn resolve_flows(#[case] pages: Vec, #[case] expected_posts: usize) async fn run_reply_flow( rest_status: StatusCode, ) -> (Vec, Vec, Vec, std::process::ExitStatus) { - let (addr, handler, shutdown) = start_mitm().await.expect("start server"); + let (addr, handler, shutdown) = start_mitm_capture().await.expect("start server"); let calls = Arc::new(Mutex::new(Vec::::new())); let clone = Arc::clone(&calls); *handler.lock().expect("lock handler") = Box::new(move |req| { let mut vec = clone.lock().expect("lock"); let gql_calls = vec.iter().filter(|c| c.ends_with("/graphql")).count(); vec.push(format!("{} {}", req.method(), req.uri().path())); + if req.uri().path().ends_with("/replies") { + assert_eq!(req.body().as_ref(), br#"{"body":"done"}"#); + assert_eq!( + req.headers().get(AUTHORIZATION).expect("authorization"), + "Bearer dummy" + ); + assert_eq!( + req.headers().get(ACCEPT).expect("accept"), + "application/vnd.github+json" + ); + assert_eq!( + req.headers() + .get("x-github-api-version") + .expect("GitHub API version"), + "2022-11-28" + ); + assert_eq!( + req.headers().get(CONTENT_TYPE).expect("content type"), + "application/json" + ); + } let status = if req.uri().path().ends_with("/replies") { rest_status } else { @@ -148,7 +175,7 @@ async fn run_reply_flow( }; let body = if req.uri().path() == "/graphql" { if gql_calls == 0 { - r#"{"data":{"repository":{"pullRequest":{"reviewComments":{"pageInfo":{"endCursor":null,"hasNextPage":false},"nodes":[{"databaseId":1,"pullRequestReviewThread":{"id":"t"}}]}}}}}"# + r#"{"data":{"repository":{"pullRequest":{"reviewThreads":{"pageInfo":{"endCursor":null,"hasNextPage":false},"nodes":[{"id":"t","comments":{"nodes":[{"fullDatabaseId":"1"}]}}]}}}}}"# } else { r#"{"data":{"resolveReviewThread":{"clientMutationId":null}}}"# } @@ -157,7 +184,7 @@ async fn run_reply_flow( }; Response::builder() .status(status) - .header("Content-Type", "application/json") + .header(CONTENT_TYPE, "application/json") .body(Full::from(body)) .expect("response") }); @@ -234,6 +261,53 @@ async fn resolve_flows_reply( assert_eq!(calls.as_slice(), expected); } +#[tokio::test] +async fn resolve_reply_honours_total_http_timeout() { + let (addr, handler, shutdown) = start_mitm().await.expect("start server"); + *handler.lock().expect("lock handler") = Box::new(move |req| { + if req.uri().path().ends_with("/replies") { + std::thread::sleep(std::time::Duration::from_secs(2)); + } + let body = if req.uri().path() == "/graphql" { + r#"{"data":{"repository":{"pullRequest":{"reviewComments":{"pageInfo":{"endCursor":null,"hasNextPage":false},"nodes":[{"databaseId":1,"pullRequestReviewThread":{"id":"t"}}]}}}}}"# + } else { + "{}" + }; + Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(Full::from(body)) + .expect("response") + }); + let output = tokio::task::spawn_blocking(move || { + vk_cmd(addr) + .args([ + "--http-timeout", + "1", + "resolve", + "https://github.com/o/r/pull/83#discussion_r1", + "-m", + "done", + ]) + .output() + .expect("run command") + }) + .await + .expect("spawn blocking"); + shutdown.shutdown().await; + let stderr = String::from_utf8_lossy(&output.stderr); + assert!( + !output.status.success(), + "expected timeout; stderr: {stderr}" + ); + assert!( + predicate::str::contains("post reply to /repos/o/r/pulls/83/comments/1/replies") + .and(predicate::str::contains("deadline has elapsed")) + .eval(&stderr), + "stderr: {stderr}" + ); +} + #[cfg(feature = "unstable-rest-resolve")] #[tokio::test] async fn resolve_skips_empty_reply() { @@ -246,7 +320,7 @@ async fn resolve_skips_empty_reply() { vec.push(format!("{} {}", req.method(), req.uri().path())); let body = if req.uri().path() == "/graphql" { if gql_calls == 0 { - r#"{"data":{"repository":{"pullRequest":{"reviewComments":{"pageInfo":{"endCursor":null,"hasNextPage":false},"nodes":[{"databaseId":1,"pullRequestReviewThread":{"id":"t"}}]}}}}}"# + r#"{"data":{"repository":{"pullRequest":{"reviewThreads":{"pageInfo":{"endCursor":null,"hasNextPage":false},"nodes":[{"id":"t","comments":{"nodes":[{"fullDatabaseId":"1"}]}}]}}}}}"# } else { r#"{"data":{"resolveReviewThread":{"clientMutationId":null}}}"# }