aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Cargo.lock2050
-rw-r--r--Cargo.toml38
-rw-r--r--graphql/projects_query.graphql11
-rw-r--r--graphql/projects_schema.graphql9
-rw-r--r--graphql/schema.graphql28642
-rwxr-xr-xgraphql/update_schema.sh5
-rw-r--r--src/config/args.rs23
-rw-r--r--src/config/mod.rs87
-rw-r--r--src/forge/gitlab/config.rs26
-rw-r--r--src/forge/gitlab/mod.rs73
-rw-r--r--src/forge/mod.rs48
-rw-r--r--src/git/mod.rs27
-rw-r--r--src/lib.rs4
-rw-r--r--src/list/mod.rs12
-rw-r--r--src/local/;a211
-rw-r--r--src/local/aggregate.rs91
-rw-r--r--src/local/mod.rs272
-rw-r--r--src/local/repostate.rs36
-rw-r--r--src/local/update.rs57
-rw-r--r--src/main.rs98
-rw-r--r--src/update/mod.rs14
-rw-r--r--tests/directory_walker.rs55
23 files changed, 31890 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..3000ecb
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,2050 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
+
+[[package]]
+name = "ascii"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
+
+[[package]]
+name = "async-trait"
+version = "0.1.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "backtrace"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "091bcdf2da9950f96aa522681ce805e6857f6ca8df73833d35736ab2dc78e152"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
+
+[[package]]
+name = "cc"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term 0.11.0",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "combine"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
+dependencies = [
+ "ascii",
+ "byteorder",
+ "either",
+ "memchr",
+ "unreachable",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "strsim 0.9.3",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0"
+dependencies = [
+ "darling",
+ "derive_builder_core",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef"
+dependencies = [
+ "darling",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "dirs"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a74ea89a0a1b98f6332de42c95baff457ada66d1cb4030f9ff151b2041a1c746"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "synstructure",
+]
+
+[[package]]
+name = "figment"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790b4292c72618abbab50f787a477014fe15634f96291de45672ce46afe122df"
+dependencies = [
+ "atomic",
+ "pear",
+ "serde",
+ "serde_yaml",
+ "toml",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"
+dependencies = [
+ "autocfg",
+ "proc-macro-hack",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
+
+[[package]]
+name = "futures-task"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
+
+[[package]]
+name = "futures-util"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
+dependencies = [
+ "autocfg",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
+
+[[package]]
+name = "git2"
+version = "0.13.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a8057932925d3a9d9e4434ea016570d37420ddb1ceed45a174d577f24ed6700"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "gitlab"
+version = "0.1403.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a67e69e1baa896ba9e50734bb7ac7f49cc6e7df578f7c3deadf83b43ddd69d"
+dependencies = [
+ "async-trait",
+ "base64",
+ "bytes",
+ "chrono",
+ "derive_builder",
+ "futures-util",
+ "graphql_client",
+ "http",
+ "itertools",
+ "log",
+ "percent-encoding",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "graphql-parser"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5613c31f18676f164112732202124f373bb2103ff017b3b85ca954ea6a66ada"
+dependencies = [
+ "combine",
+ "failure",
+]
+
+[[package]]
+name = "graphql_client"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "384bd6253c9c37eac529ba6ff6eae31ed99a3532664cf7b7f48f240f77f73699"
+dependencies = [
+ "doc-comment",
+ "failure",
+ "graphql_query_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "graphql_client_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbbd911d25d37c6113fecbde95619869117a1903dad9dc0b94bbf1ac4c3d2747"
+dependencies = [
+ "failure",
+ "graphql-parser",
+ "heck",
+ "lazy_static",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "serde",
+ "serde_json",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "graphql_query_derive"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d251ffd6428a2a6a0fde38539a3858816fa2aa70bcfcc0a16968c93d51d0c7"
+dependencies = [
+ "failure",
+ "graphql_client_codegen",
+ "proc-macro2 0.4.30",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "gtree"
+version = "0.1.0"
+dependencies = [
+ "ansi_term 0.12.1",
+ "anyhow",
+ "async-trait",
+ "derivative",
+ "figment",
+ "futures",
+ "git2",
+ "gitlab",
+ "graphql_client",
+ "serde",
+ "structopt",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "url",
+ "walkdir",
+ "xdg",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fd819562fcebdac5afc5c113c3ec36f902840b70fd4fc458799c8ce4607ae55"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
+
+[[package]]
+name = "httpdate"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+
+[[package]]
+name = "hyper"
+version = "0.14.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "inlinable_string"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3094308123a0e9fd59659ce45e22de9f53fc1d2ac6e1feb9fef988e4f76cad77"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
+
+[[package]]
+name = "itertools"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.12.24+1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddbd6021eef06fb289a8f54b3c2acfdd85ff2a585dfbb24b8576325373d2152c"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "mio"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+
+[[package]]
+name = "openssl"
+version = "0.10.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc6b9e4403633698352880b22cbe2f0e45dd0177f6fabe4585536e56a3e4f75"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-src"
+version = "111.16.0+1.1.1l"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c571f25d3f66dd427e417cebf73dbe2361d6125cf6e3a70d143fdf97c9f5150"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "pear"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e44241c5e4c868e3eaa78b7c1848cadd6344ed4f54d029832d32b415a58702"
+dependencies = [
+ "inlinable_string",
+ "pear_codegen",
+ "yansi",
+]
+
+[[package]]
+name = "pear_codegen"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a5ca643c2303ecb740d506539deba189e16f2754040a42901cd8105d0282d0"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "proc-macro2-diagnostics",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
+dependencies = [
+ "unicode-xid 0.2.2",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
+dependencies = [
+ "proc-macro2 1.0.32",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d2927ca2f685faf0fc620ac4834690d29e7abb153add10f5812eef20b5e280"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8c608a35705a5d3cdc9fbe403147647ff34b921f8e833e49306df898f9b20af"
+dependencies = [
+ "dtoa",
+ "indexmap",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
+
+[[package]]
+name = "smallvec"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
+
+[[package]]
+name = "socket2"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "structopt"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "unicode-xid 0.2.2",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "unicode-xid 0.2.2",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "rand",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80a4ddde70311d8da398062ecf6fc2c309337de6b0f77d6c27aff8d53f6fca52"
+dependencies = [
+ "ansi_term 0.12.1",
+ "lazy_static",
+ "matchers",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "uncased"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "unreachable"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9"
+dependencies = [
+ "quote 1.0.10",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc"
+
+[[package]]
+name = "web-sys"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xdg"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a23fe958c70412687039c86f578938b4a0bb50ec788e96bce4d6ab00ddd5803"
+dependencies = [
+ "dirs",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..0a1f55c
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,38 @@
+[package]
+name = "gtree"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+tokio = { version = "1", features = ["full", "rt-multi-thread"] }
+futures = "0.3"
+
+gitlab = "0.1403"
+graphql_client = "0.8"
+
+git2 = { version = "0.13", features = ["vendored-libgit2", "vendored-openssl"] }
+
+walkdir = "2"
+
+async-trait = "*"
+
+# Arg parsing and config
+structopt = "0.3"
+figment = { version = "0.10", features = ["toml", "yaml", "env"] }
+serde = "1"
+
+# logging
+tracing = "0.1"
+tracing-subscriber = { version = "0.3", features = ["env-filter"] }
+
+# error handling
+anyhow = "1"
+thiserror = "1"
+
+derivative = "2"
+
+url = { version = "2", features = ["serde"] }
+xdg = "2"
+
+# terminal coloring
+ansi_term = "0.12"
diff --git a/graphql/projects_query.graphql b/graphql/projects_query.graphql
new file mode 100644
index 0000000..dee251a
--- /dev/null
+++ b/graphql/projects_query.graphql
@@ -0,0 +1,11 @@
+query Projects($scope: String!) {
+ projects(membership: true, searchNamespaces: true, search: $scope) {
+ nodes {
+ id
+ name
+ fullPath
+ sshUrlToRepo
+ httpUrlToRepo
+ }
+ }
+}
diff --git a/graphql/projects_schema.graphql b/graphql/projects_schema.graphql
new file mode 100644
index 0000000..b2be43a
--- /dev/null
+++ b/graphql/projects_schema.graphql
@@ -0,0 +1,9 @@
+type Query {
+ projects(path: String!): [Project]
+}
+
+type Project {
+ id: String
+ name: String
+ fullPath: String
+}
diff --git a/graphql/schema.graphql b/graphql/schema.graphql
new file mode 100644
index 0000000..ba5eefb
--- /dev/null
+++ b/graphql/schema.graphql
@@ -0,0 +1,28642 @@
+"""
+Represents the access level of a relationship between a User and object that it is related to
+"""
+type AccessLevel {
+ """Integer representation of access level."""
+ integerValue: Int
+
+ """String representation of access level."""
+ stringValue: AccessLevelEnum
+}
+
+"""Access level to a resource"""
+enum AccessLevelEnum {
+ """No access."""
+ NO_ACCESS
+
+ """Minimal access."""
+ MINIMAL_ACCESS
+
+ """Guest access."""
+ GUEST
+
+ """Reporter access."""
+ REPORTER
+
+ """Developer access."""
+ DEVELOPER
+
+ """Maintainer access."""
+ MAINTAINER
+
+ """Owner access."""
+ OWNER
+}
+
+"""Autogenerated input type of AddProjectToSecurityDashboard"""
+input AddProjectToSecurityDashboardInput {
+ """ID of the project to be added to Instance Security Dashboard."""
+ id: ProjectID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AddProjectToSecurityDashboard"""
+type AddProjectToSecurityDashboardPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Project that was added to the Instance Security Dashboard."""
+ project: Project
+}
+
+"""Autogenerated input type of AdminSidekiqQueuesDeleteJobs"""
+input AdminSidekiqQueuesDeleteJobsInput {
+ """Delete jobs matching user in the context metadata."""
+ user: String
+
+ """Delete jobs matching project in the context metadata."""
+ project: String
+
+ """Delete jobs matching root_namespace in the context metadata."""
+ rootNamespace: String
+
+ """Delete jobs matching subscription_plan in the context metadata."""
+ subscriptionPlan: String
+
+ """Delete jobs matching caller_id in the context metadata."""
+ callerId: String
+
+ """Delete jobs matching remote_ip in the context metadata."""
+ remoteIp: String
+
+ """Delete jobs matching related_class in the context metadata."""
+ relatedClass: String
+
+ """Delete jobs matching feature_category in the context metadata."""
+ featureCategory: String
+
+ """Delete jobs matching client_id in the context metadata."""
+ clientId: String
+
+ """Delete jobs with the given worker class."""
+ workerClass: String
+
+ """Name of the queue to delete jobs from."""
+ queueName: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AdminSidekiqQueuesDeleteJobs"""
+type AdminSidekiqQueuesDeleteJobsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Information about the status of the deletion request."""
+ result: DeleteJobsResponse
+}
+
+"""Configuration details for an Agent"""
+type AgentConfiguration {
+ """Name of the agent."""
+ agentName: String
+}
+
+"""The connection type for AgentConfiguration."""
+type AgentConfigurationConnection {
+ """A list of edges."""
+ edges: [AgentConfigurationEdge]
+
+ """A list of nodes."""
+ nodes: [AgentConfiguration]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type AgentConfigurationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: AgentConfiguration
+}
+
+"""Information about a connected Agent"""
+type AgentMetadata {
+ """Agent version commit."""
+ commit: String
+
+ """Name of the pod running the Agent."""
+ podName: String
+
+ """Namespace of the pod running the Agent."""
+ podNamespace: String
+
+ """Agent version tag."""
+ version: String
+}
+
+"""Describes an alert from the project's Alert Management"""
+type AlertManagementAlert implements NoteableInterface {
+ """Assignees of the alert."""
+ 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
+ ): UserCoreConnection
+
+ """Timestamp the alert was created."""
+ createdAt: Time
+
+ """Description of the alert."""
+ description: String
+
+ """Alert details."""
+ details: JSON
+
+ """URL of the alert detail page."""
+ detailsUrl: String!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Timestamp the alert ended."""
+ endedAt: Time
+
+ """Environment for the alert."""
+ environment: Environment
+
+ """Number of events of this alert."""
+ eventCount: Int
+
+ """List of hosts the alert came from."""
+ hosts: [String!]
+
+ """Internal ID of the alert."""
+ iid: ID!
+
+ """Issue attached to the alert."""
+ issue: Issue
+
+ """
+ Internal ID of the GitLab issue attached to the alert. Deprecated in 13.10: Use issue field.
+ """
+ issueIid: ID @deprecated(reason: "Use issue field. Deprecated in 13.10.")
+
+ """URL for metrics embed for the alert."""
+ metricsDashboardUrl: String
+
+ """Monitoring tool the alert came from."""
+ monitoringTool: String
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Alert condition for Prometheus."""
+ prometheusAlert: PrometheusAlert
+
+ """Runbook for the alert as defined in alert details."""
+ runbook: String
+
+ """Service the alert came from."""
+ service: String
+
+ """Severity of the alert."""
+ severity: AlertManagementSeverity
+
+ """Timestamp the alert was raised."""
+ startedAt: Time
+
+ """Status of the alert."""
+ status: AlertManagementStatus
+
+ """Title of the alert."""
+ title: String
+
+ """To-do items of the current user for the alert."""
+ todos(
+ """Action to be filtered."""
+ action: [TodoActionEnum!]
+
+ """ID of an author."""
+ authorId: [ID!]
+
+ """ID of a project."""
+ projectId: [ID!]
+
+ """ID of a group."""
+ groupId: [ID!]
+
+ """State of the todo."""
+ state: [TodoStateEnum!]
+
+ """Type of the todo."""
+ type: [TodoTargetEnum!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TodoConnection
+
+ """Timestamp the alert was last updated."""
+ updatedAt: Time
+}
+
+"""The connection type for AlertManagementAlert."""
+type AlertManagementAlertConnection {
+ """A list of edges."""
+ edges: [AlertManagementAlertEdge]
+
+ """A list of nodes."""
+ nodes: [AlertManagementAlert]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type AlertManagementAlertEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: AlertManagementAlert
+}
+
+"""Values for sorting alerts"""
+enum AlertManagementAlertSort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Start time by ascending order."""
+ STARTED_AT_ASC
+
+ """Start time by descending order."""
+ STARTED_AT_DESC
+
+ """End time by ascending order."""
+ ENDED_AT_ASC
+
+ """End time by descending order."""
+ ENDED_AT_DESC
+
+ """Created time by ascending order."""
+ CREATED_TIME_ASC
+
+ """Created time by descending order."""
+ CREATED_TIME_DESC
+
+ """Created time by ascending order."""
+ UPDATED_TIME_ASC
+
+ """Created time by descending order."""
+ UPDATED_TIME_DESC
+
+ """Events count by ascending order."""
+ EVENT_COUNT_ASC
+
+ """Events count by descending order."""
+ EVENT_COUNT_DESC
+
+ """Severity from less critical to more critical."""
+ SEVERITY_ASC
+
+ """Severity from more critical to less critical."""
+ SEVERITY_DESC
+
+ """Status by order: `Ignored > Resolved > Acknowledged > Triggered`."""
+ STATUS_ASC
+
+ """Status by order: `Triggered > Acknowledged > Resolved > Ignored`."""
+ STATUS_DESC
+}
+
+"""Represents total number of alerts for the represented categories"""
+type AlertManagementAlertStatusCountsType {
+ """Number of alerts with status ACKNOWLEDGED for the project"""
+ acknowledged: Int
+
+ """Total number of alerts for the project."""
+ all: Int
+
+ """Number of alerts with status IGNORED for the project"""
+ ignored: Int
+
+ """
+ Number of alerts with status TRIGGERED or ACKNOWLEDGED for the project.
+ """
+ open: Int
+
+ """Number of alerts with status RESOLVED for the project"""
+ resolved: Int
+
+ """Number of alerts with status TRIGGERED for the project"""
+ triggered: Int
+}
+
+"""Filters the alerts based on given domain"""
+enum AlertManagementDomainFilter {
+ """Alerts for operations domain."""
+ operations
+
+ """Alerts for threat monitoring domain."""
+ threat_monitoring
+}
+
+"""An endpoint and credentials used to accept alerts for a project"""
+type AlertManagementHttpIntegration implements AlertManagementIntegration {
+ """Whether the endpoint is currently accepting alerts."""
+ active: Boolean
+
+ """
+ URL at which Prometheus metrics can be queried to populate the metrics dashboard.
+ """
+ apiUrl: String
+
+ """ID of the integration."""
+ id: ID!
+
+ """Name of the integration."""
+ name: String
+
+ """Extract alert fields from payload example for custom mapping."""
+ payloadAlertFields: [AlertManagementPayloadAlertField!]
+
+ """
+ The custom mapping of GitLab alert attributes to fields from the payload_example.
+ """
+ payloadAttributeMappings: [AlertManagementPayloadAlertMappingField!]
+
+ """Example of an alert payload."""
+ payloadExample: JsonString
+
+ """Token used to authenticate alert notification requests."""
+ token: String
+
+ """Type of integration."""
+ type: AlertManagementIntegrationType!
+
+ """Endpoint which accepts alert notifications."""
+ url: String
+}
+
+"""The connection type for AlertManagementHttpIntegration."""
+type AlertManagementHttpIntegrationConnection {
+ """A list of edges."""
+ edges: [AlertManagementHttpIntegrationEdge]
+
+ """A list of nodes."""
+ nodes: [AlertManagementHttpIntegration]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type AlertManagementHttpIntegrationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: AlertManagementHttpIntegration
+}
+
+"""
+A `AlertManagementHttpIntegrationID` is a global ID. It is encoded as a string.
+
+An example `AlertManagementHttpIntegrationID` is: `"gid://gitlab/AlertManagement::HttpIntegration/1"`.
+"""
+scalar AlertManagementHttpIntegrationID
+
+interface AlertManagementIntegration {
+ """Whether the endpoint is currently accepting alerts."""
+ active: Boolean
+
+ """
+ URL at which Prometheus metrics can be queried to populate the metrics dashboard.
+ """
+ apiUrl: String
+
+ """ID of the integration."""
+ id: ID!
+
+ """Name of the integration."""
+ name: String
+
+ """Token used to authenticate alert notification requests."""
+ token: String
+
+ """Type of integration."""
+ type: AlertManagementIntegrationType!
+
+ """Endpoint which accepts alert notifications."""
+ url: String
+}
+
+"""The connection type for AlertManagementIntegration."""
+type AlertManagementIntegrationConnection {
+ """A list of edges."""
+ edges: [AlertManagementIntegrationEdge]
+
+ """A list of nodes."""
+ nodes: [AlertManagementIntegration]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type AlertManagementIntegrationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: AlertManagementIntegration
+}
+
+"""Values of types of integrations"""
+enum AlertManagementIntegrationType {
+ """Prometheus integration."""
+ PROMETHEUS
+
+ """Integration with any monitoring tool."""
+ HTTP
+}
+
+"""Parsed field from an alert used for custom mappings"""
+type AlertManagementPayloadAlertField {
+ """Human-readable label of the payload path."""
+ label: String
+
+ """Path to value inside payload JSON."""
+ path: [PayloadAlertFieldPathSegment!]
+
+ """Type of the parsed value."""
+ type: AlertManagementPayloadAlertFieldType
+}
+
+"""
+Field that are available while modifying the custom mapping attributes for an HTTP integration
+"""
+input AlertManagementPayloadAlertFieldInput {
+ """GitLab alert field name."""
+ fieldName: AlertManagementPayloadAlertFieldName!
+
+ """Path to value inside payload JSON."""
+ path: [PayloadAlertFieldPathSegment!]!
+
+ """Human-readable label of the payload path."""
+ label: String
+
+ """Type of the parsed value."""
+ type: AlertManagementPayloadAlertFieldType!
+}
+
+"""Values for alert field names used in the custom mapping"""
+enum AlertManagementPayloadAlertFieldName {
+ """The title of the incident."""
+ TITLE
+
+ """A high-level summary of the problem."""
+ DESCRIPTION
+
+ """The time of the incident."""
+ START_TIME
+
+ """The resolved time of the incident."""
+ END_TIME
+
+ """The affected service."""
+ SERVICE
+
+ """The name of the associated monitoring tool."""
+ MONITORING_TOOL
+
+ """One or more hosts, as to where this incident occurred."""
+ HOSTS
+
+ """The severity of the alert."""
+ SEVERITY
+
+ """
+ The unique identifier of the alert. This can be used to group occurrences of the same alert.
+ """
+ FINGERPRINT
+
+ """The name of the associated GitLab environment."""
+ GITLAB_ENVIRONMENT_NAME
+}
+
+"""Values for alert field types used in the custom mapping"""
+enum AlertManagementPayloadAlertFieldType {
+ """Array field type."""
+ ARRAY
+
+ """DateTime field type."""
+ DATETIME
+
+ """String field type."""
+ STRING
+}
+
+"""Parsed field (with its name) from an alert used for custom mappings"""
+type AlertManagementPayloadAlertMappingField {
+ """GitLab alert field name."""
+ fieldName: AlertManagementPayloadAlertFieldName
+
+ """Human-readable label of the payload path."""
+ label: String
+
+ """Path to value inside payload JSON."""
+ path: [PayloadAlertFieldPathSegment!]
+
+ """Type of the parsed value."""
+ type: AlertManagementPayloadAlertFieldType
+}
+
+"""
+An endpoint and credentials used to accept Prometheus alerts for a project
+"""
+type AlertManagementPrometheusIntegration implements AlertManagementIntegration {
+ """Whether the endpoint is currently accepting alerts."""
+ active: Boolean
+
+ """
+ URL at which Prometheus metrics can be queried to populate the metrics dashboard.
+ """
+ apiUrl: String
+
+ """ID of the integration."""
+ id: ID!
+
+ """Name of the integration."""
+ name: String
+
+ """Token used to authenticate alert notification requests."""
+ token: String
+
+ """Type of integration."""
+ type: AlertManagementIntegrationType!
+
+ """Endpoint which accepts alert notifications."""
+ url: String
+}
+
+"""Alert severity values"""
+enum AlertManagementSeverity {
+ """Critical severity"""
+ CRITICAL
+
+ """High severity"""
+ HIGH
+
+ """Medium severity"""
+ MEDIUM
+
+ """Low severity"""
+ LOW
+
+ """Info severity"""
+ INFO
+
+ """Unknown severity"""
+ UNKNOWN
+}
+
+"""Alert status values"""
+enum AlertManagementStatus {
+ """Investigation has not started."""
+ TRIGGERED
+
+ """Someone is actively investigating the problem."""
+ ACKNOWLEDGED
+
+ """The problem has been addressed."""
+ RESOLVED
+
+ """No action will be taken."""
+ IGNORED
+}
+
+"""Autogenerated input type of AlertSetAssignees"""
+input AlertSetAssigneesInput {
+ """Project the alert to mutate is in."""
+ projectPath: ID!
+
+ """IID of the alert to mutate."""
+ iid: String!
+
+ """
+ Usernames to assign to the alert. Replaces existing assignees by default.
+ """
+ assigneeUsernames: [String!]!
+
+ """Operation to perform. Defaults to REPLACE."""
+ operationMode: MutationOperationMode
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AlertSetAssignees"""
+type AlertSetAssigneesPayload {
+ """Alert after mutation."""
+ alert: AlertManagementAlert
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue created after mutation."""
+ issue: Issue
+
+ """To-do item after mutation."""
+ todo: Todo
+}
+
+"""Autogenerated input type of AlertTodoCreate"""
+input AlertTodoCreateInput {
+ """Project the alert to mutate is in."""
+ projectPath: ID!
+
+ """IID of the alert to mutate."""
+ iid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AlertTodoCreate"""
+type AlertTodoCreatePayload {
+ """Alert after mutation."""
+ alert: AlertManagementAlert
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue created after mutation."""
+ issue: Issue
+
+ """To-do item after mutation."""
+ todo: Todo
+}
+
+"""
+A `AnalyticsDevopsAdoptionEnabledNamespaceID` is a global ID. It is encoded as a string.
+
+An example `AnalyticsDevopsAdoptionEnabledNamespaceID` is: `"gid://gitlab/Analytics::DevopsAdoption::EnabledNamespace/1"`.
+"""
+scalar AnalyticsDevopsAdoptionEnabledNamespaceID
+
+"""Data associated with configuring API fuzzing scans in GitLab CI"""
+type ApiFuzzingCiConfiguration {
+ """All available scan modes."""
+ scanModes: [ApiFuzzingScanMode!]
+
+ """All default scan profiles."""
+ scanProfiles: [ApiFuzzingScanProfile!]
+}
+
+"""Autogenerated input type of ApiFuzzingCiConfigurationCreate"""
+input ApiFuzzingCiConfigurationCreateInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """
+ File path or URL to the file that defines the API surface for scanning. Must
+ be in the format specified by the `scanMode` argument.
+ """
+ apiSpecificationFile: String!
+
+ """
+ CI variable containing the password for authenticating with the target API.
+ """
+ authPassword: String
+
+ """
+ CI variable containing the username for authenticating with the target API.
+ """
+ authUsername: String
+
+ """Mode for API fuzzing scans."""
+ scanMode: ApiFuzzingScanMode!
+
+ """Name of a default profile to use for scanning. Ex: Quick-10."""
+ scanProfile: String
+
+ """URL for the target of API fuzzing scans."""
+ target: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ApiFuzzingCiConfigurationCreate"""
+type ApiFuzzingCiConfigurationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """
+ A YAML snippet that can be inserted into the project's `.gitlab-ci.yml` to set up API fuzzing scans.
+ """
+ configurationYaml: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Location at which the project's `.gitlab-ci.yml` file can be edited in the browser.
+ """
+ gitlabCiYamlEditPath: String
+}
+
+"""All possible ways to specify the API surface for an API fuzzing scan."""
+enum ApiFuzzingScanMode {
+ """The API surface is specified by a HAR file."""
+ HAR
+
+ """The API surface is specified by a OPENAPI file."""
+ OPENAPI
+
+ """The API surface is specified by a POSTMAN file."""
+ POSTMAN
+}
+
+"""An API Fuzzing scan profile."""
+type ApiFuzzingScanProfile {
+ """Short description of the profile."""
+ description: String
+
+ """Unique name of the profile."""
+ name: String
+
+ """Syntax highlighted HTML representation of the YAML."""
+ yaml: String
+}
+
+"""Describes a rule for who can approve merge requests."""
+type ApprovalRule {
+ """Number of required approvals."""
+ approvalsRequired: Int
+
+ """Indicates if the rule is satisfied."""
+ approved: Boolean
+
+ """List of users defined in the rule that approved the merge request."""
+ approvedBy(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCoreConnection
+
+ """Indicates if the rule contains approvers from a hidden group."""
+ containsHiddenGroups: Boolean
+
+ """
+ List of all users eligible to approve the merge request (defined explicitly and from associated groups).
+ """
+ eligibleApprovers: [UserCore!]
+
+ """List of groups added as approvers for the rule."""
+ groups(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """ID of the rule."""
+ id: GlobalID!
+
+ """Name of the rule."""
+ name: String
+
+ """Indicates if the rule was overridden for the merge request."""
+ overridden: Boolean
+
+ """Named section of the Code Owners file that the rule applies to."""
+ section: String
+
+ """Source rule used to create the rule."""
+ sourceRule: ApprovalRule
+
+ """Type of the rule."""
+ type: ApprovalRuleType
+
+ """List of users added as approvers for the rule."""
+ 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
+ ): UserCoreConnection
+}
+
+"""The kind of an approval rule."""
+enum ApprovalRuleType {
+ """A `regular` approval rule."""
+ REGULAR
+
+ """A `code_owner` approval rule."""
+ CODE_OWNER
+
+ """A `report_approver` approval rule."""
+ REPORT_APPROVER
+
+ """A `any_approver` approval rule."""
+ ANY_APPROVER
+}
+
+"""Assignee ID wildcard values"""
+enum AssigneeWildcardId {
+ """No assignee is assigned."""
+ NONE
+
+ """An assignee is assigned."""
+ ANY
+}
+
+"""
+A `AuditEventsExternalAuditEventDestinationID` is a global ID. It is encoded as a string.
+
+An example `AuditEventsExternalAuditEventDestinationID` is: `"gid://gitlab/AuditEvents::ExternalAuditEventDestination/1"`.
+"""
+scalar AuditEventsExternalAuditEventDestinationID
+
+"""User availability status"""
+enum AvailabilityEnum {
+ """Not Set"""
+ NOT_SET
+
+ """Busy"""
+ BUSY
+}
+
+"""
+A `AwardableID` is a global ID. It is encoded as a string.
+
+An example `AwardableID` is: `"gid://gitlab/Awardable/1"`.
+"""
+scalar AwardableID
+
+"""An emoji awarded by a user"""
+type AwardEmoji {
+ """Emoji description."""
+ description: String!
+
+ """Emoji as an icon."""
+ emoji: String!
+
+ """Emoji name."""
+ name: String!
+
+ """Emoji in Unicode."""
+ unicode: String!
+
+ """Unicode version for this emoji."""
+ unicodeVersion: String!
+
+ """User who awarded the emoji."""
+ user: UserCore!
+}
+
+"""Autogenerated input type of AwardEmojiAdd"""
+input AwardEmojiAddInput {
+ """Global ID of the awardable resource."""
+ awardableId: AwardableID!
+
+ """Emoji name."""
+ name: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AwardEmojiAdd"""
+type AwardEmojiAddPayload {
+ """Award emoji after mutation."""
+ awardEmoji: AwardEmoji
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""The connection type for AwardEmoji."""
+type AwardEmojiConnection {
+ """A list of edges."""
+ edges: [AwardEmojiEdge]
+
+ """A list of nodes."""
+ nodes: [AwardEmoji]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type AwardEmojiEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: AwardEmoji
+}
+
+"""Autogenerated input type of AwardEmojiRemove"""
+input AwardEmojiRemoveInput {
+ """Global ID of the awardable resource."""
+ awardableId: AwardableID!
+
+ """Emoji name."""
+ name: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AwardEmojiRemove"""
+type AwardEmojiRemovePayload {
+ """Award emoji after mutation."""
+ awardEmoji: AwardEmoji
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of AwardEmojiToggle"""
+input AwardEmojiToggleInput {
+ """Global ID of the awardable resource."""
+ awardableId: AwardableID!
+
+ """Emoji name."""
+ name: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of AwardEmojiToggle"""
+type AwardEmojiTogglePayload {
+ """Award emoji after mutation."""
+ awardEmoji: AwardEmoji
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji.
+ """
+ toggledOn: Boolean!
+}
+
+type BaseService implements Service {
+ """Indicates if the service is active."""
+ active: Boolean
+
+ """Class name of the service."""
+ type: String
+}
+
+"""
+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
+
+type Blob implements Entry {
+ """Flat path of the entry."""
+ flatPath: String!
+
+ """ID of the entry."""
+ id: ID!
+
+ """LFS ID of the blob."""
+ lfsOid: String
+
+ """Blob mode in numeric format."""
+ mode: String
+
+ """Name of the entry."""
+ name: String!
+
+ """Path of the entry."""
+ path: String!
+
+ """Last commit SHA for the entry."""
+ sha: String!
+
+ """Type of tree entry."""
+ type: EntryType!
+
+ """Web path of the blob."""
+ webPath: String
+
+ """Web URL of the blob."""
+ webUrl: String
+}
+
+"""The connection type for Blob."""
+type BlobConnection {
+ """A list of edges."""
+ edges: [BlobEdge]
+
+ """A list of nodes."""
+ nodes: [Blob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type BlobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Blob
+}
+
+"""Represents how the blob content should be displayed"""
+type BlobViewer {
+ """Shows whether the blob should be displayed collapsed."""
+ collapsed: Boolean!
+
+ """Content file type."""
+ fileType: String!
+
+ """Shows whether the blob content is loaded asynchronously."""
+ loadAsync: Boolean!
+
+ """Loading partial name."""
+ loadingPartialName: String!
+
+ """Error rendering the blob content."""
+ renderError: String
+
+ """Shows whether the blob is too large to be displayed."""
+ tooLarge: Boolean!
+
+ """Type of blob viewer."""
+ type: BlobViewersType!
+}
+
+"""Types of blob viewers"""
+enum BlobViewersType {
+ """Rich blob viewers type."""
+ rich
+
+ """Simple blob viewers type."""
+ simple
+
+ """Auxiliary blob viewers type."""
+ auxiliary
+}
+
+"""Represents a project or group issue board"""
+type Board {
+ """Board assignee."""
+ assignee: UserCore
+
+ """Timestamp of when the board was created."""
+ createdAt: Time!
+
+ """Epics associated with board issues."""
+ epics(
+ """Filters applied when selecting issues on the board."""
+ issueFilters: BoardIssueInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): BoardEpicConnection
+
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """ID (global ID) of the board."""
+ id: ID!
+
+ """Board iteration."""
+ iteration: Iteration
+
+ """Board iteration cadence."""
+ iterationCadence: IterationCadence
+
+ """Labels of the board."""
+ 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
+
+ """Lists of the board."""
+ lists(
+ """Find a list by its global ID."""
+ id: ListID
+
+ """Filters applied when getting issue metadata in the board list."""
+ issueFilters: BoardIssueInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): BoardListConnection
+
+ """Board milestone."""
+ milestone: Milestone
+
+ """Name of the board."""
+ name: String
+
+ """Timestamp of when the board was last updated."""
+ updatedAt: Time!
+
+ """Web path of the board."""
+ webPath: String!
+
+ """Web URL of the board."""
+ webUrl: String!
+
+ """Weight of the board."""
+ weight: Int
+}
+
+"""The connection type for Board."""
+type BoardConnection {
+ """A list of edges."""
+ edges: [BoardEdge]
+
+ """A list of nodes."""
+ nodes: [Board]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type BoardEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Board
+}
+
+"""Represents an epic on an issue board"""
+type BoardEpic implements NoteableInterface & CurrentUserTodos & Eventable {
+ """Ancestors (parents) of the epic."""
+ ancestors(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = true
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Author of the epic."""
+ author: UserCore!
+
+ """List of award emojis associated with the epic."""
+ awardEmoji(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AwardEmojiConnection
+
+ """Children (sub-epics) of the epic."""
+ children(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Timestamp of when the epic was closed."""
+ closedAt: Time
+
+ """Indicates if the epic is confidential."""
+ confidential: Boolean
+
+ """Timestamp of when the epic was created."""
+ createdAt: Time
+
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Number of open and closed descendant epics and issues."""
+ descendantCounts: EpicDescendantCount
+
+ """
+ Total weight of open and closed issues in the epic and its descendants.
+ """
+ descendantWeightSum: EpicDescendantWeights
+
+ """Description of the epic."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Number of downvotes the epic has received."""
+ downvotes: Int!
+
+ """Due date of the epic."""
+ dueDate: Time
+
+ """Fixed due date of the epic."""
+ dueDateFixed: Time
+
+ """Inherited due date of the epic from milestones."""
+ dueDateFromMilestones: Time
+
+ """Indicates if the due date has been manually set."""
+ dueDateIsFixed: Boolean
+
+ """List of events associated with the object."""
+ events(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EventConnection
+
+ """Group to which the epic belongs."""
+ group: Group!
+
+ """Indicates if the epic has children."""
+ hasChildren: Boolean!
+
+ """Indicates if the epic has direct issues."""
+ hasIssues: Boolean!
+
+ """Indicates if the epic has a parent epic."""
+ hasParent: Boolean!
+
+ """Current health status of the epic."""
+ healthStatus: EpicHealthStatus
+
+ """ID of the epic."""
+ id: ID!
+
+ """Internal ID of the epic."""
+ iid: ID!
+
+ """A list of issues associated with the epic."""
+ 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
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicIssueConnection
+
+ """Labels assigned to the epic."""
+ 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
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Parent epic of the epic."""
+ parent: Epic
+
+ """List of participants for the epic."""
+ 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
+ ): UserCoreConnection
+
+ """
+ Internal reference of the epic. Returned in shortened format by default.
+ """
+ reference(
+ """Indicates if the reference should be returned in full."""
+ full: Boolean = false
+ ): String!
+
+ """URI path of the epic-issue relationship."""
+ relationPath: String
+
+ """Relative position of the epic in the epic tree."""
+ relativePosition: Int
+
+ """Start date of the epic."""
+ startDate: Time
+
+ """Fixed start date of the epic."""
+ startDateFixed: Time
+
+ """Inherited start date of the epic from milestones."""
+ startDateFromMilestones: Time
+
+ """Indicates if the start date has been manually set."""
+ startDateIsFixed: Boolean
+
+ """State of the epic."""
+ state: EpicState!
+
+ """Indicates the currently logged in user is subscribed to the epic."""
+ subscribed: Boolean!
+
+ """Title of the epic."""
+ title: String
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Timestamp of when the epic was updated."""
+ updatedAt: Time
+
+ """Number of upvotes the epic has received."""
+ upvotes: Int!
+
+ """Number of user discussions in the epic."""
+ userDiscussionsCount: Int!
+
+ """Number of user notes of the epic."""
+ userNotesCount: Int!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: EpicPermissions!
+
+ """User preferences for the epic on the issue board."""
+ userPreferences: BoardEpicUserPreferences
+
+ """Web path of the epic."""
+ webPath: String!
+
+ """Web URL of the epic."""
+ webUrl: String!
+}
+
+"""The connection type for BoardEpic."""
+type BoardEpicConnection {
+ """A list of edges."""
+ edges: [BoardEpicEdge]
+
+ """A list of nodes."""
+ nodes: [BoardEpic]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of BoardEpicCreate"""
+input BoardEpicCreateInput {
+ """Group the epic to create is in."""
+ groupPath: ID!
+
+ """Global ID of the board that the epic is in."""
+ boardId: BoardsEpicBoardID!
+
+ """Global ID of the epic board list in which epic will be created."""
+ listId: BoardsEpicListID!
+
+ """Title of the epic."""
+ title: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of BoardEpicCreate"""
+type BoardEpicCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after creation."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type BoardEpicEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: BoardEpic
+}
+
+"""Represents user preferences for a board epic"""
+type BoardEpicUserPreferences {
+ """Indicates epic should be displayed as collapsed."""
+ collapsed: Boolean!
+}
+
+"""
+A `BoardID` is a global ID. It is encoded as a string.
+
+An example `BoardID` is: `"gid://gitlab/Board/1"`.
+"""
+scalar BoardID
+
+input BoardIssueInput {
+ """Filter by label name."""
+ labelName: [String]
+
+ """Filter by author username."""
+ authorUsername: String
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """List of IIDs of issues. For example `["1", "2"]`."""
+ iids: [String!]
+
+ """Filter by milestone title."""
+ milestoneTitle: String
+
+ """Filter by assignee username."""
+ assigneeUsername: [String]
+
+ """Filter by release tag."""
+ releaseTag: String
+
+ """Filter by the given issue types."""
+ types: [IssueType!]
+
+ """Filter by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """Filter by epic ID. Incompatible with epicWildcardId."""
+ epicId: EpicID
+
+ """Filter by iteration title."""
+ iterationTitle: String
+
+ """Filter by weight."""
+ weight: String
+
+ """
+ Filter by a list of iteration IDs. Incompatible with iterationWildcardId.
+ """
+ iterationId: [IterationID!]
+
+ """List of negated arguments."""
+ not: NegatedBoardIssueInput
+
+ """Search query for issue title or description."""
+ search: String
+
+ """Filter by assignee wildcard. Incompatible with assigneeUsername."""
+ assigneeWildcardId: AssigneeWildcardId
+
+ """Filter by epic ID wildcard. Incompatible with epicId."""
+ epicWildcardId: EpicWildcardId
+
+ """Filter by iteration ID wildcard."""
+ iterationWildcardId: IterationWildcardId
+
+ """Filter by weight ID wildcard. Incompatible with weight."""
+ weightWildcardId: WeightWildcardId
+}
+
+"""Represents a list for an issue board"""
+type BoardList {
+ """Assignee in the list."""
+ assignee: UserCore
+
+ """Indicates if the list is collapsed for this user."""
+ collapsed: Boolean
+
+ """ID (global ID) of the list."""
+ id: ID!
+
+ """Board issues."""
+ issues(
+ """Filters applied when selecting issues in the board list."""
+ filters: BoardIssueInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Count of issues in the list."""
+ issuesCount: Int
+
+ """Iteration of the list."""
+ iteration: Iteration
+
+ """Label of the list."""
+ label: Label
+
+ """Current limit metric for the list."""
+ limitMetric: ListLimitMetric
+
+ """Type of the list."""
+ listType: String!
+
+ """Maximum number of issues in the list."""
+ maxIssueCount: Int
+
+ """Maximum weight of issues in the list."""
+ maxIssueWeight: Int
+
+ """Milestone of the list."""
+ milestone: Milestone
+
+ """Position of list within the board."""
+ position: Int
+
+ """Title of the list."""
+ title: String!
+
+ """Total weight of all issues in the list."""
+ totalWeight: Int
+}
+
+"""The connection type for BoardList."""
+type BoardListConnection {
+ """A list of edges."""
+ edges: [BoardListEdge]
+
+ """A list of nodes."""
+ nodes: [BoardList]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of BoardListCreate"""
+input BoardListCreateInput {
+ """Create the backlog list."""
+ backlog: Boolean
+
+ """Global ID of an existing label."""
+ labelId: LabelID
+
+ """Global ID of the issue board to mutate."""
+ boardId: BoardID!
+
+ """Global ID of an existing milestone."""
+ milestoneId: MilestoneID
+
+ """Global ID of an existing iteration."""
+ iterationId: IterationID
+
+ """Global ID of an existing user."""
+ assigneeId: UserID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of BoardListCreate"""
+type BoardListCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue list in the issue board."""
+ list: BoardList
+}
+
+"""An edge in a connection."""
+type BoardListEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: BoardList
+}
+
+"""Autogenerated input type of BoardListUpdateLimitMetrics"""
+input BoardListUpdateLimitMetricsInput {
+ """Global ID of the list."""
+ listId: ListID!
+
+ """New limit metric type for the list."""
+ limitMetric: ListLimitMetric
+
+ """New maximum issue count limit."""
+ maxIssueCount: Int
+
+ """New maximum issue weight limit."""
+ maxIssueWeight: Int
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of BoardListUpdateLimitMetrics"""
+type BoardListUpdateLimitMetricsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated list."""
+ list: BoardList
+}
+
+"""
+A `BoardsEpicBoardID` is a global ID. It is encoded as a string.
+
+An example `BoardsEpicBoardID` is: `"gid://gitlab/Boards::EpicBoard/1"`.
+"""
+scalar BoardsEpicBoardID
+
+"""
+A `BoardsEpicListID` is a global ID. It is encoded as a string.
+
+An example `BoardsEpicListID` is: `"gid://gitlab/Boards::EpicList/1"`.
+"""
+scalar BoardsEpicListID
+
+type Branch {
+ """Commit for the branch."""
+ commit: Commit
+
+ """Name of the branch."""
+ name: String!
+}
+
+"""Autogenerated input type of BulkEnableDevopsAdoptionNamespaces"""
+input BulkEnableDevopsAdoptionNamespacesInput {
+ """List of Namespace IDs."""
+ namespaceIds: [NamespaceID!]!
+
+ """Display namespace ID."""
+ displayNamespaceId: NamespaceID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of BulkEnableDevopsAdoptionNamespaces"""
+type BulkEnableDevopsAdoptionNamespacesPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Enabled namespaces after mutation."""
+ enabledNamespaces: [DevopsAdoptionEnabledNamespace!]
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""
+Represents the total number of issues and their weights for a particular day
+"""
+type BurnupChartDailyTotals {
+ """Number of closed issues as of this day."""
+ completedCount: Int!
+
+ """Total weight of closed issues as of this day."""
+ completedWeight: Int!
+
+ """Date for burnup totals."""
+ date: ISO8601Date!
+
+ """Number of issues as of this day."""
+ scopeCount: Int!
+
+ """Total weight of issues as of this day."""
+ scopeWeight: Int!
+}
+
+type CiApplicationSettings {
+ """Whether to keep the latest jobs artifacts."""
+ keepLatestArtifact: Boolean
+}
+
+"""
+A `CiBuildID` is a global ID. It is encoded as a string.
+
+An example `CiBuildID` is: `"gid://gitlab/Ci::Build/1"`.
+"""
+scalar CiBuildID
+
+type CiBuildNeed {
+ """ID of the job we need to complete."""
+ id: ID!
+
+ """Name of the job we need to complete."""
+ name: String
+}
+
+"""The connection type for CiBuildNeed."""
+type CiBuildNeedConnection {
+ """A list of edges."""
+ edges: [CiBuildNeedEdge]
+
+ """A list of nodes."""
+ nodes: [CiBuildNeed]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiBuildNeedEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiBuildNeed
+}
+
+"""Autogenerated input type of CiCdSettingsUpdate"""
+input CiCdSettingsUpdateInput {
+ """Full Path of the project the settings belong to."""
+ fullPath: ID!
+
+ """Indicates if the latest artifact should be kept for this project."""
+ keepLatestArtifact: Boolean
+
+ """
+ Indicates CI job tokens generated in this project have restricted access to resources.
+ """
+ jobTokenScopeEnabled: Boolean
+
+ """Indicates if merge pipelines are enabled for the project."""
+ mergePipelinesEnabled: Boolean
+
+ """Indicates if merge trains are enabled for the project."""
+ mergeTrainsEnabled: Boolean
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CiCdSettingsUpdate"""
+type CiCdSettingsUpdatePayload {
+ """CI/CD settings after mutation."""
+ ciCdSettings: ProjectCiCdSetting!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+type CiConfig {
+ """Linting errors."""
+ errors: [String!]
+
+ """Merged CI configuration YAML."""
+ mergedYaml: String
+
+ """Stages of the pipeline."""
+ stages(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiConfigStageConnection
+
+ """Status of linting, can be either valid or invalid."""
+ status: CiConfigStatus
+}
+
+type CiConfigGroup {
+ """Jobs in group."""
+ jobs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiConfigJobConnection
+
+ """Name of the job group."""
+ name: String
+
+ """Size of the job group."""
+ size: Int
+}
+
+"""The connection type for CiConfigGroup."""
+type CiConfigGroupConnection {
+ """A list of edges."""
+ edges: [CiConfigGroupEdge]
+
+ """A list of nodes."""
+ nodes: [CiConfigGroup]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiConfigGroupEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiConfigGroup
+}
+
+type CiConfigJob {
+ """Override a set of commands that are executed after the job."""
+ afterScript: [String!]
+
+ """Allow job to fail."""
+ allowFailure: Boolean
+
+ """Override a set of commands that are executed before the job."""
+ beforeScript: [String!]
+
+ """Name of an environment to which the job deploys."""
+ environment: String
+
+ """Limit when jobs are not created."""
+ except: CiConfigJobRestriction
+
+ """Name of the job group."""
+ groupName: String
+
+ """Name of the job."""
+ name: String
+
+ """Builds that must complete before the jobs run."""
+ needs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiConfigNeedConnection
+
+ """Jobs are created when these conditions do not apply."""
+ only: CiConfigJobRestriction
+
+ """Shell script that is executed by a runner."""
+ script: [String!]
+
+ """Name of the job stage."""
+ stage: String
+
+ """List of tags that are used to select a runner."""
+ tags: [String!]
+
+ """When to run the job."""
+ when: String
+}
+
+"""The connection type for CiConfigJob."""
+type CiConfigJobConnection {
+ """A list of edges."""
+ edges: [CiConfigJobEdge]
+
+ """A list of nodes."""
+ nodes: [CiConfigJob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiConfigJobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiConfigJob
+}
+
+type CiConfigJobRestriction {
+ """Git refs the job restriction applies to."""
+ refs: [String!]
+}
+
+type CiConfigNeed {
+ """Name of the need."""
+ name: String
+}
+
+"""The connection type for CiConfigNeed."""
+type CiConfigNeedConnection {
+ """A list of edges."""
+ edges: [CiConfigNeedEdge]
+
+ """A list of nodes."""
+ nodes: [CiConfigNeed]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiConfigNeedEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiConfigNeed
+}
+
+type CiConfigStage {
+ """Groups of jobs for the stage."""
+ groups(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiConfigGroupConnection
+
+ """Name of the stage."""
+ name: String
+}
+
+"""The connection type for CiConfigStage."""
+type CiConfigStageConnection {
+ """A list of edges."""
+ edges: [CiConfigStageEdge]
+
+ """A list of nodes."""
+ nodes: [CiConfigStage]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiConfigStageEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiConfigStage
+}
+
+"""Values for YAML processor result"""
+enum CiConfigStatus {
+ """Configuration file is valid."""
+ VALID
+
+ """Configuration file is not valid."""
+ INVALID
+}
+
+type CiGroup {
+ """Detailed status of the group."""
+ detailedStatus: DetailedStatus
+
+ """ID for a group."""
+ id: String!
+
+ """Jobs in group."""
+ jobs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiJobConnection
+
+ """Name of the job group."""
+ name: String
+
+ """Size of the group."""
+ size: Int
+}
+
+"""The connection type for CiGroup."""
+type CiGroupConnection {
+ """A list of edges."""
+ edges: [CiGroupEdge]
+
+ """A list of nodes."""
+ nodes: [CiGroup]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiGroupEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiGroup
+}
+
+type CiJob {
+ """Indicates the job is active."""
+ active: Boolean!
+
+ """Whether the job is allowed to fail."""
+ allowFailure: Boolean!
+
+ """Artifacts generated by the job."""
+ artifacts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiJobArtifactConnection
+
+ """Indicates the job can be canceled."""
+ cancelable: Boolean!
+
+ """Path to the commit that triggered the job."""
+ commitPath: String
+
+ """Coverage level of the job."""
+ coverage: Float
+
+ """When the job was created."""
+ createdAt: Time!
+
+ """Whether the job was created by a tag."""
+ createdByTag: Boolean!
+
+ """Detailed status of the job."""
+ detailedStatus: DetailedStatus
+
+ """Duration of the job in seconds."""
+ duration: Int
+
+ """When a job has finished running."""
+ finishedAt: Time
+
+ """ID of the job."""
+ id: JobID
+
+ """Whether the job has a manual action."""
+ manualJob: Boolean
+
+ """Name of the job."""
+ name: String
+
+ """References to builds that must complete before the jobs run."""
+ needs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiBuildNeedConnection
+
+ """Pipeline the job belongs to."""
+ pipeline: Pipeline
+
+ """Indicates the job can be played."""
+ playable: Boolean!
+
+ """When the job was enqueued and marked as pending."""
+ queuedAt: Time
+
+ """How long the job was enqueued before starting."""
+ queuedDuration: Duration
+
+ """Ref name of the job."""
+ refName: String
+
+ """Path to the ref."""
+ refPath: String
+
+ """Indicates the job can be retried."""
+ retryable: Boolean!
+
+ """Schedule for the build."""
+ scheduledAt: Time
+
+ """
+ Type of job scheduling. Value is `dag` if the job uses the `needs` keyword, and `stage` otherwise.
+ """
+ schedulingType: String
+
+ """Short SHA1 ID of the commit."""
+ shortSha: String!
+
+ """Stage of the job."""
+ stage: CiStage
+
+ """When the job was started."""
+ startedAt: Time
+
+ """Status of the job."""
+ status: CiJobStatus
+
+ """Indicates the job is stuck."""
+ stuck: Boolean!
+
+ """Tags for the current job."""
+ tags: [String!]
+
+ """Whether the job was triggered."""
+ triggered: Boolean
+
+ """Permissions for the current user on the resource"""
+ userPermissions: JobPermissions!
+}
+
+type CiJobArtifact {
+ """URL for downloading the artifact's file."""
+ downloadPath: String
+
+ """File type of the artifact."""
+ fileType: JobArtifactFileType
+}
+
+"""The connection type for CiJobArtifact."""
+type CiJobArtifactConnection {
+ """A list of edges."""
+ edges: [CiJobArtifactEdge]
+
+ """A list of nodes."""
+ nodes: [CiJobArtifact]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiJobArtifactEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiJobArtifact
+}
+
+"""The connection type for CiJob."""
+type CiJobConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [CiJobEdge]
+
+ """A list of nodes."""
+ nodes: [CiJob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiJobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiJob
+}
+
+enum CiJobStatus {
+ """A job that is created."""
+ CREATED
+
+ """A job that is waiting for resource."""
+ WAITING_FOR_RESOURCE
+
+ """A job that is preparing."""
+ PREPARING
+
+ """A job that is pending."""
+ PENDING
+
+ """A job that is running."""
+ RUNNING
+
+ """A job that is success."""
+ SUCCESS
+
+ """A job that is failed."""
+ FAILED
+
+ """A job that is canceled."""
+ CANCELED
+
+ """A job that is skipped."""
+ SKIPPED
+
+ """A job that is manual."""
+ MANUAL
+
+ """A job that is scheduled."""
+ SCHEDULED
+}
+
+"""Autogenerated input type of CiJobTokenScopeAddProject"""
+input CiJobTokenScopeAddProjectInput {
+ """Project that the CI job token scope belongs to."""
+ projectPath: ID!
+
+ """Project to be added to the CI job token scope."""
+ targetProjectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CiJobTokenScopeAddProject"""
+type CiJobTokenScopeAddProjectPayload {
+ """CI job token's scope of access."""
+ ciJobTokenScope: CiJobTokenScopeType
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CiJobTokenScopeRemoveProject"""
+input CiJobTokenScopeRemoveProjectInput {
+ """Project that the CI job token scope belongs to."""
+ projectPath: ID!
+
+ """Project to be removed from the CI job token scope."""
+ targetProjectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CiJobTokenScopeRemoveProject"""
+type CiJobTokenScopeRemoveProjectPayload {
+ """CI job token's scope of access."""
+ ciJobTokenScope: CiJobTokenScopeType
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+type CiJobTokenScopeType {
+ """
+ Allow list of projects that can be accessed by CI Job tokens created by this project.
+ """
+ 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
+ ): ProjectConnection!
+}
+
+type CiMinutesNamespaceMonthlyUsage {
+ """Total number of minutes used by all projects in the namespace."""
+ minutes: Int
+
+ """Month related to the usage data."""
+ month: String
+
+ """CI minutes usage data for projects in the namespace."""
+ 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
+ ): CiMinutesProjectMonthlyUsageConnection
+}
+
+"""The connection type for CiMinutesNamespaceMonthlyUsage."""
+type CiMinutesNamespaceMonthlyUsageConnection {
+ """A list of edges."""
+ edges: [CiMinutesNamespaceMonthlyUsageEdge]
+
+ """A list of nodes."""
+ nodes: [CiMinutesNamespaceMonthlyUsage]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiMinutesNamespaceMonthlyUsageEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiMinutesNamespaceMonthlyUsage
+}
+
+type CiMinutesProjectMonthlyUsage {
+ """Number of CI minutes used by the project in the month."""
+ minutes: Int
+
+ """Name of the project."""
+ name: String
+}
+
+"""The connection type for CiMinutesProjectMonthlyUsage."""
+type CiMinutesProjectMonthlyUsageConnection {
+ """A list of edges."""
+ edges: [CiMinutesProjectMonthlyUsageEdge]
+
+ """A list of nodes."""
+ nodes: [CiMinutesProjectMonthlyUsage]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiMinutesProjectMonthlyUsageEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiMinutesProjectMonthlyUsage
+}
+
+"""
+A `CiPipelineID` is a global ID. It is encoded as a string.
+
+An example `CiPipelineID` is: `"gid://gitlab/Ci::Pipeline/1"`.
+"""
+scalar CiPipelineID
+
+type CiRunner {
+ """Access level of the runner."""
+ accessLevel: CiRunnerAccessLevel!
+
+ """Indicates the runner is allowed to receive jobs."""
+ active: Boolean!
+
+ """Admin URL of the runner. Only available for adminstrators."""
+ adminUrl: String
+
+ """Last contact from the runner."""
+ contactedAt: Time
+
+ """Description of the runner."""
+ description: String
+
+ """ID of the runner."""
+ id: CiRunnerID!
+
+ """IP address of the runner."""
+ ipAddress: String
+
+ """
+ Number of jobs processed by the runner (limited to 1000, plus one to indicate that more items exist).
+ """
+ jobCount: Int
+
+ """Indicates the runner is locked."""
+ locked: Boolean
+
+ """Maximum timeout (in seconds) for jobs processed by the runner."""
+ maximumTimeout: Int
+
+ """
+ Private projects' "minutes cost factor" associated with the runner (GitLab.com only).
+ """
+ privateProjectsMinutesCostFactor: Float
+
+ """Number of projects that the runner is associated with."""
+ projectCount: Int
+
+ """
+ Public projects' "minutes cost factor" associated with the runner (GitLab.com only).
+ """
+ publicProjectsMinutesCostFactor: Float
+
+ """Revision of the runner."""
+ revision: String
+
+ """Indicates the runner is able to run untagged jobs."""
+ runUntagged: Boolean!
+
+ """Type of the runner."""
+ runnerType: CiRunnerType!
+
+ """
+ First eight characters of the runner's token used to authenticate new job requests. Used as the runner's unique ID.
+ """
+ shortSha: String
+
+ """Status of the runner."""
+ status: CiRunnerStatus!
+
+ """Tags associated with the runner."""
+ tagList: [String!]
+
+ """Permissions for the current user on the resource"""
+ userPermissions: RunnerPermissions!
+
+ """Version of the runner."""
+ version: String
+}
+
+enum CiRunnerAccessLevel {
+ """A runner that is not protected."""
+ NOT_PROTECTED
+
+ """A runner that is ref protected."""
+ REF_PROTECTED
+}
+
+"""The connection type for CiRunner."""
+type CiRunnerConnection {
+ """A list of edges."""
+ edges: [CiRunnerEdge]
+
+ """A list of nodes."""
+ nodes: [CiRunner]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiRunnerEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiRunner
+
+ """
+ Web URL of the runner. The value depends on where you put this field in the query. You can use it for projects or groups.
+ """
+ webUrl: String
+}
+
+"""
+A `CiRunnerID` is a global ID. It is encoded as a string.
+
+An example `CiRunnerID` is: `"gid://gitlab/Ci::Runner/1"`.
+"""
+scalar CiRunnerID
+
+"""Values for sorting runners"""
+enum CiRunnerSort {
+ """Ordered by contacted_at in ascending order."""
+ CONTACTED_ASC
+
+ """Ordered by contacted_at in descending order."""
+ CONTACTED_DESC
+
+ """Ordered by created_at in ascending order."""
+ CREATED_ASC
+
+ """Ordered by created_at in descending order."""
+ CREATED_DESC
+}
+
+enum CiRunnerStatus {
+ """A runner that is not paused."""
+ ACTIVE
+
+ """A runner that is paused."""
+ PAUSED
+
+ """A runner that contacted this instance within the last 2 hours."""
+ ONLINE
+
+ """A runner that has not contacted this instance within the last 2 hours."""
+ OFFLINE
+
+ """A runner that has never contacted this instance."""
+ NOT_CONNECTED
+}
+
+enum CiRunnerType {
+ """A runner that is instance type."""
+ INSTANCE_TYPE
+
+ """A runner that is group type."""
+ GROUP_TYPE
+
+ """A runner that is project type."""
+ PROJECT_TYPE
+}
+
+type CiStage {
+ """Detailed status of the stage."""
+ detailedStatus: DetailedStatus
+
+ """Group of jobs for the stage."""
+ groups(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiGroupConnection
+
+ """ID of the stage."""
+ id: ID!
+
+ """Jobs for the stage."""
+ jobs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiJobConnection
+
+ """Name of the stage."""
+ name: String
+
+ """Status of the pipeline stage."""
+ status: String
+}
+
+"""The connection type for CiStage."""
+type CiStageConnection {
+ """A list of edges."""
+ edges: [CiStageEdge]
+
+ """A list of nodes."""
+ nodes: [CiStage]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CiStageEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CiStage
+}
+
+"""GitLab CI/CD configuration template."""
+type CiTemplate {
+ """Contents of the CI template."""
+ content: String!
+
+ """Name of the CI template."""
+ name: String!
+}
+
+type ClusterAgent {
+ """Active connections for the cluster agent"""
+ connections(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ConnectedAgentConnection
+
+ """Timestamp the cluster agent was created."""
+ createdAt: Time
+
+ """
+ User object, containing information about the person who created the agent.
+ """
+ createdByUser: UserCore
+
+ """ID of the cluster agent."""
+ id: ID!
+
+ """Name of the cluster agent."""
+ name: String
+
+ """Project this cluster agent is associated with."""
+ project: Project
+
+ """Tokens associated with the cluster agent."""
+ tokens(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ClusterAgentTokenConnection
+
+ """Timestamp the cluster agent was updated."""
+ updatedAt: Time
+
+ """Web path of the cluster agent."""
+ webPath: String
+}
+
+"""The connection type for ClusterAgent."""
+type ClusterAgentConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [ClusterAgentEdge]
+
+ """A list of nodes."""
+ nodes: [ClusterAgent]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of ClusterAgentDelete"""
+input ClusterAgentDeleteInput {
+ """Global ID of the cluster agent that will be deleted."""
+ id: ClustersAgentID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ClusterAgentDelete"""
+type ClusterAgentDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type ClusterAgentEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ClusterAgent
+}
+
+type ClusterAgentToken {
+ """Cluster agent this token is associated with."""
+ clusterAgent: ClusterAgent
+
+ """Timestamp the token was created."""
+ createdAt: Time
+
+ """User who created the token."""
+ createdByUser: UserCore
+
+ """Description of the token."""
+ description: String
+
+ """Global ID of the token."""
+ id: ClustersAgentTokenID!
+
+ """Timestamp the token was last used."""
+ lastUsedAt: Time
+
+ """Name given to the token."""
+ name: String
+}
+
+"""The connection type for ClusterAgentToken."""
+type ClusterAgentTokenConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [ClusterAgentTokenEdge]
+
+ """A list of nodes."""
+ nodes: [ClusterAgentToken]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of ClusterAgentTokenCreate"""
+input ClusterAgentTokenCreateInput {
+ """
+ Global ID of the cluster agent that will be associated with the new token.
+ """
+ clusterAgentId: ClustersAgentID!
+
+ """Description of the token."""
+ description: String
+
+ """Name of the token."""
+ name: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ClusterAgentTokenCreate"""
+type ClusterAgentTokenCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Token secret value. Make sure you save it - you won't be able to access it again.
+ """
+ secret: String
+
+ """Token created after mutation."""
+ token: ClusterAgentToken
+}
+
+"""Autogenerated input type of ClusterAgentTokenDelete"""
+input ClusterAgentTokenDeleteInput {
+ """Global ID of the cluster agent token that will be deleted."""
+ id: ClustersAgentTokenID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ClusterAgentTokenDelete"""
+type ClusterAgentTokenDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type ClusterAgentTokenEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ClusterAgentToken
+}
+
+"""
+A `ClustersAgentID` is a global ID. It is encoded as a string.
+
+An example `ClustersAgentID` is: `"gid://gitlab/Clusters::Agent/1"`.
+"""
+scalar ClustersAgentID
+
+"""
+A `ClustersAgentTokenID` is a global ID. It is encoded as a string.
+
+An example `ClustersAgentTokenID` is: `"gid://gitlab/Clusters::AgentToken/1"`.
+"""
+scalar ClustersAgentTokenID
+
+"""
+A `ClustersClusterID` is a global ID. It is encoded as a string.
+
+An example `ClustersClusterID` is: `"gid://gitlab/Clusters::Cluster/1"`.
+"""
+scalar ClustersClusterID
+
+"""Represents the code coverage activity for a group"""
+type CodeCoverageActivity {
+ """
+ Average percentage of the different code coverage results available for the group.
+ """
+ averageCoverage: Float
+
+ """Number of different code coverage results available for the group."""
+ coverageCount: Int
+
+ """Date when the code coverage was created."""
+ date: Date!
+
+ """Number of projects with code coverage results for the group."""
+ projectCount: Int
+}
+
+"""The connection type for CodeCoverageActivity."""
+type CodeCoverageActivityConnection {
+ """A list of edges."""
+ edges: [CodeCoverageActivityEdge]
+
+ """A list of nodes."""
+ nodes: [CodeCoverageActivity]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CodeCoverageActivityEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CodeCoverageActivity
+}
+
+"""Represents the code coverage summary for a project"""
+type CodeCoverageSummary {
+ """
+ Average percentage of the different code coverage results available for the project.
+ """
+ averageCoverage: Float
+
+ """Number of different code coverage results available."""
+ coverageCount: Int
+
+ """Latest date when the code coverage was created for the project."""
+ lastUpdatedOn: Date
+}
+
+"""Represents a code quality degradation on the pipeline."""
+type CodeQualityDegradation {
+ """Description of the code quality degradation."""
+ description: String!
+
+ """
+ Unique fingerprint to identify the code quality degradation. For example, an MD5 hash.
+ """
+ fingerprint: String!
+
+ """Line on which the code quality degradation occurred."""
+ line: Int!
+
+ """Relative path to the file containing the code quality degradation."""
+ path: String!
+
+ """Status of the degradation (BLOCKER, CRITICAL, MAJOR, MINOR, INFO)."""
+ severity: CodeQualityDegradationSeverity!
+}
+
+"""The connection type for CodeQualityDegradation."""
+type CodeQualityDegradationConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [CodeQualityDegradationEdge]
+
+ """A list of nodes."""
+ nodes: [CodeQualityDegradation]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CodeQualityDegradationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CodeQualityDegradation
+}
+
+enum CodeQualityDegradationSeverity {
+ """Code Quality degradation has a status of blocker."""
+ BLOCKER
+
+ """Code Quality degradation has a status of critical."""
+ CRITICAL
+
+ """Code Quality degradation has a status of major."""
+ MAJOR
+
+ """Code Quality degradation has a status of minor."""
+ MINOR
+
+ """Code Quality degradation has a status of info."""
+ INFO
+}
+
+type Commit {
+ """Author of the commit."""
+ author: UserCore
+
+ """Commit authors gravatar."""
+ authorGravatar: String
+
+ """Commit authors name."""
+ authorName: String
+
+ """Timestamp of when the commit was authored."""
+ authoredDate: Time
+
+ """Description of the commit message."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """ID (global ID) of the commit."""
+ id: ID!
+
+ """Raw commit message."""
+ message: String
+
+ """Pipelines of the commit ordered latest first."""
+ pipelines(
+ """Filter pipelines by their status."""
+ status: PipelineStatusEnum
+
+ """Filter pipelines by the ref they are run for."""
+ ref: String
+
+ """Filter pipelines by the sha of the commit they are run for."""
+ sha: String
+
+ """
+ Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled.
+ """
+ source: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """SHA1 ID of the commit."""
+ sha: String!
+
+ """Short SHA1 ID of the commit."""
+ shortId: String!
+
+ """Rendered HTML of the commit signature."""
+ signatureHtml: String
+
+ """Title of the commit message."""
+ title: String
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Web path of the commit."""
+ webPath: String!
+
+ """Web URL of the commit."""
+ webUrl: String!
+}
+
+input CommitAction {
+ """Action to perform: create, delete, move, update, or chmod."""
+ action: CommitActionMode!
+
+ """Full path to the file."""
+ filePath: String!
+
+ """Content of the file."""
+ content: String
+
+ """Original full path to the file being moved."""
+ previousPath: String
+
+ """Last known file commit ID."""
+ lastCommitId: String
+
+ """Enables/disables the execute flag on the file."""
+ executeFilemode: Boolean
+
+ """Encoding of the file. Default is text."""
+ encoding: CommitEncoding
+}
+
+"""Mode of a commit action"""
+enum CommitActionMode {
+ """Create command."""
+ CREATE
+
+ """Delete command."""
+ DELETE
+
+ """Move command."""
+ MOVE
+
+ """Update command."""
+ UPDATE
+
+ """Chmod command."""
+ CHMOD
+}
+
+"""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!
+}
+
+"""Autogenerated input type of CommitCreate"""
+input CommitCreateInput {
+ """Project full path the branch is associated with."""
+ projectPath: ID!
+
+ """Name of the branch to commit into, it can be a new branch."""
+ branch: String!
+
+ """If on a new branch, name of the original branch."""
+ startBranch: String
+
+ """Raw commit message."""
+ message: String!
+
+ """Array of action hashes to commit as a batch."""
+ actions: [CommitAction!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CommitCreate"""
+type CommitCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Commit after mutation."""
+ commit: Commit
+
+ """ETag path for the commit's pipeline."""
+ commitPipelinePath: String
+
+ """Contents of the commit."""
+ content: [String!]
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""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
+}
+
+enum CommitEncoding {
+ """Text encoding."""
+ TEXT
+
+ """Base64 encoding."""
+ BASE64
+}
+
+"""Represents a ComplianceFramework associated with a Project"""
+type ComplianceFramework {
+ """Hexadecimal representation of compliance framework's label color."""
+ color: String!
+
+ """Description of the compliance framework."""
+ description: String!
+
+ """Compliance framework ID."""
+ id: ID!
+
+ """Name of the compliance framework."""
+ name: String!
+
+ """
+ Full path of the compliance pipeline configuration stored in a project
+ repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa`
+ **(ULTIMATE)**.
+ """
+ pipelineConfigurationFullPath: String
+}
+
+"""The connection type for ComplianceFramework."""
+type ComplianceFrameworkConnection {
+ """A list of edges."""
+ edges: [ComplianceFrameworkEdge]
+
+ """A list of nodes."""
+ nodes: [ComplianceFramework]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ComplianceFrameworkEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ComplianceFramework
+}
+
+input ComplianceFrameworkInput {
+ """New name for the compliance framework."""
+ name: String
+
+ """New description for the compliance framework."""
+ description: String
+
+ """
+ New color representation of the compliance framework in hex format. e.g. #FCA121.
+ """
+ color: String
+
+ """
+ Full path of the compliance pipeline configuration stored in a project
+ repository, such as `.gitlab/.compliance-gitlab-ci.yml@compliance/hipaa`
+ **(ULTIMATE)**.
+ """
+ pipelineConfigurationFullPath: String
+}
+
+"""
+A `ComplianceManagementFrameworkID` is a global ID. It is encoded as a string.
+
+An example `ComplianceManagementFrameworkID` is: `"gid://gitlab/ComplianceManagement::Framework/1"`.
+"""
+scalar ComplianceManagementFrameworkID
+
+"""Composer metadata"""
+type ComposerMetadata {
+ """Data of the Composer JSON file."""
+ composerJson: PackageComposerJsonType!
+
+ """Target SHA of the package."""
+ targetSha: String!
+}
+
+"""Conan file metadata"""
+type ConanFileMetadata implements PackageFileMetadata {
+ """Type of the Conan file."""
+ conanFileType: ConanMetadatumFileTypeEnum!
+
+ """Reference of the Conan package."""
+ conanPackageReference: String
+
+ """Date of creation."""
+ createdAt: Time!
+
+ """ID of the metadatum."""
+ id: PackagesConanFileMetadatumID!
+
+ """Revision of the package."""
+ packageRevision: String
+
+ """Revision of the Conan recipe."""
+ recipeRevision: String!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""Conan metadata"""
+type ConanMetadata {
+ """Date of creation."""
+ createdAt: Time!
+
+ """ID of the metadatum."""
+ id: PackagesConanMetadatumID!
+
+ """Channel of the Conan package."""
+ packageChannel: String!
+
+ """Username of the Conan package."""
+ packageUsername: String!
+
+ """Recipe of the Conan package."""
+ recipe: String!
+
+ """Recipe path of the Conan package."""
+ recipePath: String!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""Conan file types"""
+enum ConanMetadatumFileTypeEnum {
+ """A recipe file type."""
+ RECIPE_FILE
+
+ """A package file type."""
+ PACKAGE_FILE
+}
+
+"""Autogenerated input type of ConfigureDependencyScanning"""
+input ConfigureDependencyScanningInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ConfigureDependencyScanning"""
+type ConfigureDependencyScanningPayload {
+ """Branch that has the new/modified `.gitlab-ci.yml` file."""
+ branch: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Redirect path to use when the response is successful."""
+ successPath: String
+}
+
+"""Autogenerated input type of ConfigureSast"""
+input ConfigureSastInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """SAST CI configuration for the project."""
+ configuration: SastCiConfigurationInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ConfigureSast"""
+type ConfigureSastPayload {
+ """Branch that has the new/modified `.gitlab-ci.yml` file."""
+ branch: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Redirect path to use when the response is successful."""
+ successPath: String
+}
+
+"""Autogenerated input type of ConfigureSecretDetection"""
+input ConfigureSecretDetectionInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ConfigureSecretDetection"""
+type ConfigureSecretDetectionPayload {
+ """Branch that has the new/modified `.gitlab-ci.yml` file."""
+ branch: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Redirect path to use when the response is successful."""
+ successPath: String
+}
+
+"""Connection details for an Agent"""
+type ConnectedAgent {
+ """When the connection was established."""
+ connectedAt: Time
+
+ """ID of the connection."""
+ connectionId: BigInt
+
+ """Information about the Agent."""
+ metadata: AgentMetadata
+}
+
+"""The connection type for ConnectedAgent."""
+type ConnectedAgentConnection {
+ """A list of edges."""
+ edges: [ConnectedAgentEdge]
+
+ """A list of nodes."""
+ nodes: [ConnectedAgent]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ConnectedAgentEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ConnectedAgent
+}
+
+"""
+A tag expiration policy designed to keep only the images that matter most
+"""
+type ContainerExpirationPolicy {
+ """This container expiration policy schedule."""
+ cadence: ContainerExpirationPolicyCadenceEnum!
+
+ """Timestamp of when the container expiration policy was created."""
+ createdAt: Time!
+
+ """Indicates whether this container expiration policy is enabled."""
+ enabled: Boolean!
+
+ """Number of tags to retain."""
+ keepN: ContainerExpirationPolicyKeepEnum
+
+ """Tags with names matching this regex pattern will expire."""
+ nameRegex: UntrustedRegexp
+
+ """Tags with names matching this regex pattern will be preserved."""
+ nameRegexKeep: UntrustedRegexp
+
+ """Next time that this container expiration policy will get executed."""
+ nextRunAt: Time
+
+ """Tags older that this will expire."""
+ olderThan: ContainerExpirationPolicyOlderThanEnum
+
+ """Timestamp of when the container expiration policy was updated."""
+ updatedAt: Time!
+}
+
+enum ContainerExpirationPolicyCadenceEnum {
+ """Every day"""
+ EVERY_DAY
+
+ """Every week"""
+ EVERY_WEEK
+
+ """Every two weeks"""
+ EVERY_TWO_WEEKS
+
+ """Every month"""
+ EVERY_MONTH
+
+ """Every three months"""
+ EVERY_THREE_MONTHS
+}
+
+enum ContainerExpirationPolicyKeepEnum {
+ """1 tag per image name"""
+ ONE_TAG
+
+ """5 tags per image name"""
+ FIVE_TAGS
+
+ """10 tags per image name"""
+ TEN_TAGS
+
+ """25 tags per image name"""
+ TWENTY_FIVE_TAGS
+
+ """50 tags per image name"""
+ FIFTY_TAGS
+
+ """100 tags per image name"""
+ ONE_HUNDRED_TAGS
+}
+
+enum ContainerExpirationPolicyOlderThanEnum {
+ """7 days until tags are automatically removed"""
+ SEVEN_DAYS
+
+ """14 days until tags are automatically removed"""
+ FOURTEEN_DAYS
+
+ """30 days until tags are automatically removed"""
+ THIRTY_DAYS
+
+ """60 days until tags are automatically removed"""
+ SIXTY_DAYS
+
+ """90 days until tags are automatically removed"""
+ NINETY_DAYS
+}
+
+"""A container repository"""
+type ContainerRepository {
+ """Can the current user delete the container repository."""
+ canDelete: Boolean!
+
+ """Timestamp when the container repository was created."""
+ createdAt: Time!
+
+ """Tags cleanup status for the container repository."""
+ expirationPolicyCleanupStatus: ContainerRepositoryCleanupStatus
+
+ """
+ Timestamp when the cleanup done by the expiration policy was started on the container repository.
+ """
+ expirationPolicyStartedAt: Time
+
+ """ID of the container repository."""
+ id: ID!
+
+ """URL of the container repository."""
+ location: String!
+
+ """Name of the container repository."""
+ name: String!
+
+ """Path of the container repository."""
+ path: String!
+
+ """Project of the container registry."""
+ project: Project!
+
+ """Status of the container repository."""
+ status: ContainerRepositoryStatus
+
+ """Number of tags associated with this image."""
+ tagsCount: Int!
+
+ """Timestamp when the container repository was updated."""
+ updatedAt: Time!
+}
+
+"""Status of the tags cleanup of a container repository"""
+enum ContainerRepositoryCleanupStatus {
+ """Tags cleanup is not scheduled. This is the default state."""
+ UNSCHEDULED
+
+ """Tags cleanup is scheduled and is going to be executed shortly."""
+ SCHEDULED
+
+ """
+ Tags cleanup has been partially executed. There are still remaining tags to delete.
+ """
+ UNFINISHED
+
+ """Tags cleanup is ongoing."""
+ ONGOING
+}
+
+"""The connection type for ContainerRepository."""
+type ContainerRepositoryConnection {
+ """A list of edges."""
+ edges: [ContainerRepositoryEdge]
+
+ """A list of nodes."""
+ nodes: [ContainerRepository]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Details of a container repository"""
+type ContainerRepositoryDetails {
+ """Can the current user delete the container repository."""
+ canDelete: Boolean!
+
+ """Timestamp when the container repository was created."""
+ createdAt: Time!
+
+ """Tags cleanup status for the container repository."""
+ expirationPolicyCleanupStatus: ContainerRepositoryCleanupStatus
+
+ """
+ Timestamp when the cleanup done by the expiration policy was started on the container repository.
+ """
+ expirationPolicyStartedAt: Time
+
+ """ID of the container repository."""
+ id: ID!
+
+ """URL of the container repository."""
+ location: String!
+
+ """Name of the container repository."""
+ name: String!
+
+ """Path of the container repository."""
+ path: String!
+
+ """Project of the container registry."""
+ project: Project!
+
+ """Status of the container repository."""
+ status: ContainerRepositoryStatus
+
+ """Tags of the container repository."""
+ tags(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ContainerRepositoryTagConnection
+
+ """Number of tags associated with this image."""
+ tagsCount: Int!
+
+ """Timestamp when the container repository was updated."""
+ updatedAt: Time!
+}
+
+"""An edge in a connection."""
+type ContainerRepositoryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ContainerRepository
+}
+
+"""
+A `ContainerRepositoryID` is a global ID. It is encoded as a string.
+
+An example `ContainerRepositoryID` is: `"gid://gitlab/ContainerRepository/1"`.
+"""
+scalar ContainerRepositoryID
+
+"""Values for sorting container repositories"""
+enum ContainerRepositorySort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Name by ascending order."""
+ NAME_ASC
+
+ """Name by descending order."""
+ NAME_DESC
+}
+
+"""Status of a container repository"""
+enum ContainerRepositoryStatus {
+ """Delete Scheduled status."""
+ DELETE_SCHEDULED
+
+ """Delete Failed status."""
+ DELETE_FAILED
+}
+
+"""A tag from a container repository"""
+type ContainerRepositoryTag {
+ """Can the current user delete this tag."""
+ canDelete: Boolean!
+
+ """Timestamp when the tag was created."""
+ createdAt: Time
+
+ """Digest of the tag."""
+ digest: String
+
+ """URL of the tag."""
+ location: String!
+
+ """Name of the tag."""
+ name: String!
+
+ """Path of the tag."""
+ path: String!
+
+ """Revision of the tag."""
+ revision: String
+
+ """Short revision of the tag."""
+ shortRevision: String
+
+ """Size of the tag."""
+ totalSize: BigInt
+}
+
+"""The connection type for ContainerRepositoryTag."""
+type ContainerRepositoryTagConnection {
+ """A list of edges."""
+ edges: [ContainerRepositoryTagEdge]
+
+ """A list of nodes."""
+ nodes: [ContainerRepositoryTag]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ContainerRepositoryTagEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ContainerRepositoryTag
+}
+
+"""Autogenerated input type of CreateAlertIssue"""
+input CreateAlertIssueInput {
+ """Project the alert to mutate is in."""
+ projectPath: ID!
+
+ """IID of the alert to mutate."""
+ iid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateAlertIssue"""
+type CreateAlertIssuePayload {
+ """Alert after mutation."""
+ alert: AlertManagementAlert
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue created after mutation."""
+ issue: Issue
+
+ """To-do item after mutation."""
+ todo: Todo
+}
+
+"""Autogenerated input type of CreateAnnotation"""
+input CreateAnnotationInput {
+ """Global ID of the environment to add an annotation to."""
+ environmentId: EnvironmentID
+
+ """Global ID of the cluster to add an annotation to."""
+ clusterId: ClustersClusterID
+
+ """Timestamp indicating starting moment to which the annotation relates."""
+ startingAt: Time!
+
+ """Timestamp indicating ending moment to which the annotation relates."""
+ endingAt: Time
+
+ """
+ Path to a file defining the dashboard on which the annotation should be added.
+ """
+ dashboardPath: String!
+
+ """Description of the annotation."""
+ description: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateAnnotation"""
+type CreateAnnotationPayload {
+ """Created annotation."""
+ annotation: MetricsDashboardAnnotation
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateBoard"""
+input CreateBoardInput {
+ """Full path of the project with which the resource is associated."""
+ projectPath: ID
+
+ """Full path of the group with which the resource is associated."""
+ groupPath: ID
+
+ """Board name."""
+ name: String
+
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """ID of user to be assigned to the board."""
+ assigneeId: UserID
+
+ """ID of milestone to be assigned to the board."""
+ milestoneId: MilestoneID
+
+ """ID of iteration to be assigned to the board."""
+ iterationId: IterationID
+
+ """ID of iteration cadence to be assigned to the board."""
+ iterationCadenceId: IterationsCadenceID
+
+ """Weight value to be assigned to the board."""
+ weight: Int
+
+ """Labels of the issue."""
+ labels: [String!]
+
+ """IDs of labels to be added to the board."""
+ labelIds: [LabelID!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateBoard"""
+type CreateBoardPayload {
+ """Board after mutation."""
+ board: Board
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateBranch"""
+input CreateBranchInput {
+ """Project full path the branch is associated with."""
+ projectPath: ID!
+
+ """Name of the branch."""
+ name: String!
+
+ """Branch name or commit SHA to create branch from."""
+ ref: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateBranch"""
+type CreateBranchPayload {
+ """Branch after mutation."""
+ branch: Branch
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateClusterAgent"""
+input CreateClusterAgentInput {
+ """Full path of the associated project for this cluster agent."""
+ projectPath: ID!
+
+ """Name of the cluster agent."""
+ name: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateClusterAgent"""
+type CreateClusterAgentPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Cluster agent created after mutation."""
+ clusterAgent: ClusterAgent
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateComplianceFramework"""
+input CreateComplianceFrameworkInput {
+ """Full path of the namespace to add the compliance framework to."""
+ namespacePath: ID!
+
+ """Parameters to update the compliance framework with."""
+ params: ComplianceFrameworkInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateComplianceFramework"""
+type CreateComplianceFrameworkPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Created compliance framework."""
+ framework: ComplianceFramework
+}
+
+"""Autogenerated input type of CreateCustomEmoji"""
+input CreateCustomEmojiInput {
+ """Namespace full path the emoji is associated with."""
+ groupPath: ID!
+
+ """Name of the emoji."""
+ name: String!
+
+ """Location of the emoji file."""
+ url: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateCustomEmoji"""
+type CreateCustomEmojiPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """New custom emoji."""
+ customEmoji: CustomEmoji
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateDiffNote"""
+input CreateDiffNoteInput {
+ """Global ID of the resource to add a note to."""
+ noteableId: NoteableID!
+
+ """Content of the note."""
+ body: String!
+
+ """Confidentiality flag of a note. Default is false."""
+ confidential: Boolean
+
+ """Position of this note on a diff."""
+ position: DiffPositionInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateDiffNote"""
+type CreateDiffNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of CreateEpic"""
+input CreateEpicInput {
+ """Group the epic to mutate is in."""
+ groupPath: ID!
+
+ """Title of the epic."""
+ title: String
+
+ """Description of the epic."""
+ description: String
+
+ """Indicates if the epic is confidential."""
+ confidential: Boolean
+
+ """Start date of the epic."""
+ startDateFixed: String
+
+ """End date of the epic."""
+ dueDateFixed: String
+
+ """
+ Indicates start date should be sourced from start_date_fixed field not the issue milestones.
+ """
+ startDateIsFixed: Boolean
+
+ """
+ Indicates end date should be sourced from due_date_fixed field not the issue milestones.
+ """
+ dueDateIsFixed: Boolean
+
+ """IDs of labels to be added to the epic."""
+ addLabelIds: [ID!]
+
+ """IDs of labels to be removed from the epic."""
+ removeLabelIds: [ID!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateEpic"""
+type CreateEpicPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Created epic."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of CreateImageDiffNote"""
+input CreateImageDiffNoteInput {
+ """Global ID of the resource to add a note to."""
+ noteableId: NoteableID!
+
+ """Content of the note."""
+ body: String!
+
+ """Confidentiality flag of a note. Default is false."""
+ confidential: Boolean
+
+ """Position of this note on a diff."""
+ position: DiffImagePositionInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateImageDiffNote"""
+type CreateImageDiffNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of CreateIssue"""
+input CreateIssueInput {
+ """Description of the issue."""
+ description: String
+
+ """Due date of the issue."""
+ dueDate: ISO8601Date
+
+ """Indicates the issue is confidential."""
+ confidential: Boolean
+
+ """Indicates discussion is locked on the issue."""
+ locked: Boolean
+
+ """Type of the issue."""
+ type: IssueType
+
+ """Project full path the issue is associated with."""
+ projectPath: ID!
+
+ """
+ IID (internal ID) of a project issue. Only admins and project owners can modify.
+ """
+ iid: Int
+
+ """Title of the issue."""
+ title: String!
+
+ """
+ ID of the milestone to assign to the issue. On update milestone will be removed if set to null.
+ """
+ milestoneId: MilestoneID
+
+ """Labels of the issue."""
+ labels: [String!]
+
+ """IDs of labels to be added to the issue."""
+ labelIds: [LabelID!]
+
+ """
+ Timestamp when the issue was created. Available only for admins and project owners.
+ """
+ createdAt: Time
+
+ """IID of a merge request for which to resolve discussions."""
+ mergeRequestToResolveDiscussionsOf: MergeRequestID
+
+ """
+ ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`.
+ """
+ discussionToResolve: String
+
+ """Array of user IDs to assign to the issue."""
+ assigneeIds: [UserID!]
+
+ """Desired health status."""
+ healthStatus: HealthStatus
+
+ """Weight of the issue."""
+ weight: Int
+
+ """ID of an epic to associate the issue with."""
+ epicId: EpicID
+
+ """
+ Global iteration ID. Mutually exlusive argument with `iterationWildcardId`.
+ """
+ iterationId: IterationID
+
+ """
+ Iteration wildcard ID. Supported values are: `CURRENT`. Mutually exclusive
+ argument with `iterationId`. iterationCadenceId also required when this
+ argument is provided.
+ """
+ iterationWildcardId: IssueCreationIterationWildcardId
+
+ """
+ Global iteration cadence ID. Required when `iterationWildcardId` is provided.
+ """
+ iterationCadenceId: IterationsCadenceID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateIssue"""
+type CreateIssuePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of CreateIteration"""
+input CreateIterationInput {
+ """Full path of the project with which the resource is associated."""
+ projectPath: ID
+
+ """Full path of the group with which the resource is associated."""
+ groupPath: ID
+
+ """
+ Global ID of the iterations cadence to be assigned to newly created iteration.
+ """
+ iterationsCadenceId: IterationsCadenceID
+
+ """Title of the iteration."""
+ title: String
+
+ """Description of the iteration."""
+ description: String
+
+ """Start date of the iteration."""
+ startDate: String
+
+ """End date of the iteration."""
+ dueDate: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateIteration"""
+type CreateIterationPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Created iteration."""
+ iteration: Iteration
+}
+
+"""Autogenerated input type of CreateNote"""
+input CreateNoteInput {
+ """Global ID of the resource to add a note to."""
+ noteableId: NoteableID!
+
+ """Content of the note."""
+ body: String!
+
+ """Confidentiality flag of a note. Default is false."""
+ confidential: Boolean
+
+ """Global ID of the discussion this note is in reply to."""
+ discussionId: DiscussionID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateNote"""
+type CreateNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of CreateRequirement"""
+input CreateRequirementInput {
+ """Title of the requirement."""
+ title: String
+
+ """Description of the requirement."""
+ description: String
+
+ """Full project path the requirement is associated with."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateRequirement"""
+type CreateRequirementPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Requirement after mutation."""
+ requirement: Requirement
+}
+
+"""Autogenerated input type of CreateSnippet"""
+input CreateSnippetInput {
+ """Title of the snippet."""
+ title: String!
+
+ """Description of the snippet."""
+ description: String
+
+ """Visibility level of the snippet."""
+ visibilityLevel: VisibilityLevelsEnum!
+
+ """Full path of the project the snippet is associated with."""
+ projectPath: ID
+
+ """Paths to files uploaded in the snippet description."""
+ uploadedFiles: [String!]
+
+ """Actions to perform over the snippet repository and blobs."""
+ blobActions: [SnippetBlobActionInputType!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateSnippet"""
+type CreateSnippetPayload {
+ """
+ CAPTCHA site key which must be used to render a challenge for the user to
+ solve to obtain a valid captchaResponse value. Included only when an operation
+ was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11:
+ Use spam protection with HTTP headers instead.
+ """
+ captchaSiteKey: String @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Indicates whether the operation was detected as possible spam and not
+ completed. If CAPTCHA is enabled, the request must be resubmitted with a valid
+ CAPTCHA response and spam_log_id included for the operation to be completed.
+ Included only when an operation was not completed because
+ "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with
+ HTTP headers instead.
+ """
+ needsCaptchaResponse: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """Snippet after mutation."""
+ snippet: Snippet
+
+ """
+ Indicates whether the operation was detected as definite spam. There is no
+ option to resubmit the request with a CAPTCHA response. Deprecated in 13.11:
+ Use spam protection with HTTP headers instead.
+ """
+ spam: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """
+ Spam log ID which must be passed along with a valid CAPTCHA response for an
+ operation to be completed. Included only when an operation was not completed
+ because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam
+ protection with HTTP headers instead.
+ """
+ spamLogId: Int @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+}
+
+"""Autogenerated input type of CreateTestCase"""
+input CreateTestCaseInput {
+ """Test case title."""
+ title: String!
+
+ """Test case description."""
+ description: String
+
+ """IDs of labels to be added to the test case."""
+ labelIds: [ID!]
+
+ """Project full path to create the test case in."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CreateTestCase"""
+type CreateTestCasePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Test case created."""
+ testCase: Issue
+}
+
+"""Represents the current license"""
+type CurrentLicense {
+ """Date when the license was activated."""
+ activatedAt: Date
+
+ """Number of billable users on the system."""
+ billableUsersCount: Int
+
+ """Date, including grace period, when licensed features will be blocked."""
+ blockChangesAt: Date
+
+ """Company of the licensee."""
+ company: String
+
+ """Email of the licensee."""
+ email: String
+
+ """Date when the license expires."""
+ expiresAt: Date
+
+ """ID of the license."""
+ id: ID!
+
+ """Date when the license was last synced."""
+ lastSync: Time
+
+ """
+ Highest number of billable users on the system during the term of the current license.
+ """
+ maximumUserCount: Int
+
+ """Name of the licensee."""
+ name: String
+
+ """Name of the subscription plan."""
+ plan: String!
+
+ """Date when the license started."""
+ startsAt: Date
+
+ """Type of the license."""
+ type: String!
+
+ """Number of paid users in the license."""
+ usersInLicenseCount: Int
+
+ """Number of users over the paid users in the license."""
+ usersOverLicenseCount: Int
+}
+
+interface CurrentUserTodos {
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+}
+
+"""A custom emoji uploaded by user"""
+type CustomEmoji {
+ """Whether the emoji is an external link."""
+ external: Boolean!
+
+ """ID of the emoji."""
+ id: CustomEmojiID!
+
+ """Name of the emoji."""
+ name: String!
+
+ """Link to file of the emoji."""
+ url: String!
+}
+
+"""The connection type for CustomEmoji."""
+type CustomEmojiConnection {
+ """A list of edges."""
+ edges: [CustomEmojiEdge]
+
+ """A list of nodes."""
+ nodes: [CustomEmoji]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type CustomEmojiEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CustomEmoji
+}
+
+"""
+A `CustomEmojiID` is a global ID. It is encoded as a string.
+
+An example `CustomEmojiID` is: `"gid://gitlab/CustomEmoji/1"`.
+"""
+scalar CustomEmojiID
+
+type CustomerRelationsContact {
+ """Timestamp the contact was created."""
+ createdAt: Time!
+
+ """Description of or notes for the contact."""
+ description: String
+
+ """Email address of the contact."""
+ email: String
+
+ """First name of the contact."""
+ firstName: String!
+
+ """Internal ID of the contact."""
+ id: ID!
+
+ """Last name of the contact."""
+ lastName: String!
+
+ """Organization of the contact."""
+ organization: CustomerRelationsOrganization
+
+ """Phone number of the contact."""
+ phone: String
+
+ """Timestamp the contact was last updated."""
+ updatedAt: Time!
+}
+
+"""The connection type for CustomerRelationsContact."""
+type CustomerRelationsContactConnection {
+ """A list of edges."""
+ edges: [CustomerRelationsContactEdge]
+
+ """A list of nodes."""
+ nodes: [CustomerRelationsContact]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of CustomerRelationsContactCreate"""
+input CustomerRelationsContactCreateInput {
+ """Group for the contact."""
+ groupId: GroupID!
+
+ """Organization for the contact."""
+ organizationId: CustomerRelationsOrganizationID
+
+ """First name of the contact."""
+ firstName: String!
+
+ """Last name of the contact."""
+ lastName: String!
+
+ """Phone number of the contact."""
+ phone: String
+
+ """Email address of the contact."""
+ email: String
+
+ """Description of or notes for the contact."""
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CustomerRelationsContactCreate"""
+type CustomerRelationsContactCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Contact after the mutation."""
+ contact: CustomerRelationsContact
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type CustomerRelationsContactEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CustomerRelationsContact
+}
+
+"""
+A `CustomerRelationsContactID` is a global ID. It is encoded as a string.
+
+An example `CustomerRelationsContactID` is: `"gid://gitlab/CustomerRelations::Contact/1"`.
+"""
+scalar CustomerRelationsContactID
+
+"""Autogenerated input type of CustomerRelationsContactUpdate"""
+input CustomerRelationsContactUpdateInput {
+ """Global ID of the contact."""
+ id: CustomerRelationsContactID!
+
+ """Organization of the contact."""
+ organizationId: CustomerRelationsOrganizationID
+
+ """First name of the contact."""
+ firstName: String
+
+ """Last name of the contact."""
+ lastName: String
+
+ """Phone number of the contact."""
+ phone: String
+
+ """Email address of the contact."""
+ email: String
+
+ """Description of or notes for the contact."""
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CustomerRelationsContactUpdate"""
+type CustomerRelationsContactUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Contact after the mutation."""
+ contact: CustomerRelationsContact
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+type CustomerRelationsOrganization {
+ """Timestamp the organization was created."""
+ createdAt: Time!
+
+ """Standard billing rate for the organization."""
+ defaultRate: Float
+
+ """Description of or notes for the organization."""
+ description: String
+
+ """Internal ID of the organization."""
+ id: ID!
+
+ """Name of the organization."""
+ name: String!
+
+ """Timestamp the organization was last updated."""
+ updatedAt: Time!
+}
+
+"""The connection type for CustomerRelationsOrganization."""
+type CustomerRelationsOrganizationConnection {
+ """A list of edges."""
+ edges: [CustomerRelationsOrganizationEdge]
+
+ """A list of nodes."""
+ nodes: [CustomerRelationsOrganization]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of CustomerRelationsOrganizationCreate"""
+input CustomerRelationsOrganizationCreateInput {
+ """Group for the organization."""
+ groupId: GroupID!
+
+ """Name of the organization."""
+ name: String!
+
+ """Standard billing rate for the organization."""
+ defaultRate: Float
+
+ """Description of or notes for the organization."""
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CustomerRelationsOrganizationCreate"""
+type CustomerRelationsOrganizationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Organization after the mutation."""
+ organization: CustomerRelationsOrganization
+}
+
+"""An edge in a connection."""
+type CustomerRelationsOrganizationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: CustomerRelationsOrganization
+}
+
+"""
+A `CustomerRelationsOrganizationID` is a global ID. It is encoded as a string.
+
+An example `CustomerRelationsOrganizationID` is: `"gid://gitlab/CustomerRelations::Organization/1"`.
+"""
+scalar CustomerRelationsOrganizationID
+
+"""Autogenerated input type of CustomerRelationsOrganizationUpdate"""
+input CustomerRelationsOrganizationUpdateInput {
+ """Global ID of the organization."""
+ id: CustomerRelationsOrganizationID!
+
+ """Name of the organization."""
+ name: String
+
+ """Standard billing rate for the organization."""
+ defaultRate: Float
+
+ """Description of or notes for the organization."""
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of CustomerRelationsOrganizationUpdate"""
+type CustomerRelationsOrganizationUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Organization after the mutation."""
+ organization: CustomerRelationsOrganization!
+}
+
+"""Autogenerated input type of DastOnDemandScanCreate"""
+input DastOnDemandScanCreateInput {
+ """Project the site profile belongs to."""
+ fullPath: ID!
+
+ """ID of the site profile to be used for the scan."""
+ dastSiteProfileId: DastSiteProfileID!
+
+ """ID of the scanner profile to be used for the scan."""
+ dastScannerProfileId: DastScannerProfileID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastOnDemandScanCreate"""
+type DastOnDemandScanCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """URL of the pipeline that was created."""
+ pipelineUrl: String
+}
+
+"""Represents a DAST Profile"""
+type DastProfile {
+ """Associated branch."""
+ branch: DastProfileBranch
+
+ """Associated profile schedule."""
+ dastProfileSchedule: DastProfileSchedule
+
+ """Associated scanner profile."""
+ dastScannerProfile: DastScannerProfile
+
+ """Associated site profile."""
+ dastSiteProfile: DastSiteProfile
+
+ """Description of the scan."""
+ description: String
+
+ """Relative web path to the edit page of a profile."""
+ editPath: String
+
+ """ID of the profile."""
+ id: DastProfileID!
+
+ """Name of the profile."""
+ name: String
+}
+
+"""Represents a DAST Profile Branch"""
+type DastProfileBranch {
+ """Indicates whether or not the branch exists."""
+ exists: Boolean
+
+ """Name of the branch."""
+ name: String
+}
+
+"""Represents DAST Profile Cadence."""
+type DastProfileCadence {
+ """Duration of the DAST profile cadence."""
+ duration: Int
+
+ """Unit for the duration of DAST profile cadence."""
+ unit: DastProfileCadenceUnit
+}
+
+"""Represents DAST Profile Cadence."""
+input DastProfileCadenceInput {
+ """Unit for the duration of DAST Profile Cadence."""
+ unit: DastProfileCadenceUnit
+
+ """Duration of the DAST Profile Cadence."""
+ duration: Int
+}
+
+"""Unit for the duration of Dast Profile Cadence."""
+enum DastProfileCadenceUnit {
+ """DAST Profile Cadence duration in days."""
+ DAY
+
+ """DAST Profile Cadence duration in weeks."""
+ WEEK
+
+ """DAST Profile Cadence duration in months."""
+ MONTH
+
+ """DAST Profile Cadence duration in years."""
+ YEAR
+}
+
+"""The connection type for DastProfile."""
+type DastProfileConnection {
+ """A list of edges."""
+ edges: [DastProfileEdge]
+
+ """A list of nodes."""
+ nodes: [DastProfile]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of DastProfileCreate"""
+input DastProfileCreateInput {
+ """Project the profile belongs to."""
+ fullPath: ID!
+
+ """Represents a DAST Profile Schedule."""
+ dastProfileSchedule: DastProfileScheduleInput
+
+ """Name of the profile."""
+ name: String!
+
+ """Description of the profile. Defaults to an empty string."""
+ description: String = ""
+
+ """Associated branch."""
+ branchName: String
+
+ """ID of the site profile to be associated."""
+ dastSiteProfileId: DastSiteProfileID!
+
+ """ID of the scanner profile to be associated."""
+ dastScannerProfileId: DastScannerProfileID!
+
+ """Run scan using profile after creation. Defaults to false."""
+ runAfterCreate: Boolean = false
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastProfileCreate"""
+type DastProfileCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Created profile."""
+ dastProfile: DastProfile
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ URL of the pipeline that was created. Requires `runAfterCreate` to be set to `true`.
+ """
+ pipelineUrl: String
+}
+
+"""Autogenerated input type of DastProfileDelete"""
+input DastProfileDeleteInput {
+ """ID of the profile to be deleted."""
+ id: DastProfileID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastProfileDelete"""
+type DastProfileDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type DastProfileEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DastProfile
+}
+
+"""
+A `DastProfileID` is a global ID. It is encoded as a string.
+
+An example `DastProfileID` is: `"gid://gitlab/Dast::Profile/1"`.
+"""
+scalar DastProfileID
+
+"""Autogenerated input type of DastProfileRun"""
+input DastProfileRunInput {
+ """ID of the profile to be used for the scan."""
+ id: DastProfileID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastProfileRun"""
+type DastProfileRunPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """URL of the pipeline that was created."""
+ pipelineUrl: String
+}
+
+"""Represents a DAST profile schedule."""
+type DastProfileSchedule {
+ """Status of the DAST profile schedule."""
+ active: Boolean
+
+ """Cadence of the DAST profile schedule."""
+ cadence: DastProfileCadence
+
+ """ID of the DAST profile schedule."""
+ id: DastProfileScheduleID!
+
+ """Next run time of the DAST profile schedule in the given timezone."""
+ nextRunAt: Time
+
+ """Start time of the DAST profile schedule in the given timezone."""
+ startsAt: Time
+
+ """Time zone of the start time of the DAST profile schedule."""
+ timezone: String
+}
+
+"""
+A `DastProfileScheduleID` is a global ID. It is encoded as a string.
+
+An example `DastProfileScheduleID` is: `"gid://gitlab/Dast::ProfileSchedule/1"`.
+"""
+scalar DastProfileScheduleID
+
+"""Input type for DAST Profile Schedules"""
+input DastProfileScheduleInput {
+ """Status of a Dast Profile Schedule."""
+ active: Boolean
+
+ """Start time of a Dast Profile Schedule."""
+ startsAt: Time
+
+ """Time Zone for the Start time of a Dast Profile Schedule."""
+ timezone: String
+
+ """Cadence of a Dast Profile Schedule."""
+ cadence: DastProfileCadenceInput
+}
+
+"""Autogenerated input type of DastProfileUpdate"""
+input DastProfileUpdateInput {
+ """ID of the profile to be deleted."""
+ id: DastProfileID!
+
+ """Represents a DAST profile schedule."""
+ dastProfileSchedule: DastProfileScheduleInput
+
+ """Name of the profile."""
+ name: String
+
+ """Description of the profile. Defaults to an empty string."""
+ description: String = ""
+
+ """Associated branch."""
+ branchName: String
+
+ """ID of the site profile to be associated."""
+ dastSiteProfileId: DastSiteProfileID
+
+ """ID of the scanner profile to be associated."""
+ dastScannerProfileId: DastScannerProfileID
+
+ """Run scan using profile after update. Defaults to false."""
+ runAfterUpdate: Boolean = false
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastProfileUpdate"""
+type DastProfileUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Updated profile."""
+ dastProfile: DastProfile
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ The URL of the pipeline that was created. Requires the input argument
+ `runAfterUpdate` to be set to `true` when calling the mutation, otherwise no
+ pipeline will be created.
+ """
+ pipelineUrl: String
+}
+
+"""Represents a DAST scanner profile"""
+type DastScannerProfile {
+ """Relative web path to the edit page of a scanner profile."""
+ editPath: String
+
+ """ID of the DAST scanner profile."""
+ id: DastScannerProfileID!
+
+ """Name of the DAST scanner profile."""
+ profileName: String
+
+ """List of security policy names that are referencing given project."""
+ referencedInSecurityPolicies: [String!]
+
+ """
+ Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan.
+ """
+ scanType: DastScanTypeEnum
+
+ """
+ Indicates if debug messages should be included in DAST console output. True to include the debug messages.
+ """
+ showDebugMessages: Boolean!
+
+ """Maximum number of minutes allowed for the spider to traverse the site."""
+ spiderTimeout: Int
+
+ """
+ Maximum number of seconds allowed for the site under test to respond to a request.
+ """
+ targetTimeout: Int
+
+ """
+ Indicates if the AJAX spider should be used to crawl the target site. True to
+ run the AJAX spider in addition to the traditional spider, and false to run
+ only the traditional spider.
+ """
+ useAjaxSpider: Boolean!
+}
+
+"""The connection type for DastScannerProfile."""
+type DastScannerProfileConnection {
+ """A list of edges."""
+ edges: [DastScannerProfileEdge]
+
+ """A list of nodes."""
+ nodes: [DastScannerProfile]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of DastScannerProfileCreate"""
+input DastScannerProfileCreateInput {
+ """Project the scanner profile belongs to."""
+ fullPath: ID!
+
+ """Name of the scanner profile."""
+ profileName: String!
+
+ """Maximum number of minutes allowed for the spider to traverse the site."""
+ spiderTimeout: Int
+
+ """
+ Maximum number of seconds allowed for the site under test to respond to a request.
+ """
+ targetTimeout: Int
+
+ """
+ Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan.
+ """
+ scanType: DastScanTypeEnum = PASSIVE
+
+ """
+ Indicates if the AJAX spider should be used to crawl the target site. True to
+ run the AJAX spider in addition to the traditional spider, and false to run
+ only the traditional spider.
+ """
+ useAjaxSpider: Boolean = false
+
+ """
+ Indicates if debug messages should be included in DAST console output. True to include the debug messages.
+ """
+ showDebugMessages: Boolean = false
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastScannerProfileCreate"""
+type DastScannerProfileCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the scanner profile."""
+ id: DastScannerProfileID
+}
+
+"""Autogenerated input type of DastScannerProfileDelete"""
+input DastScannerProfileDeleteInput {
+ """ID of the scanner profile to be deleted."""
+ id: DastScannerProfileID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastScannerProfileDelete"""
+type DastScannerProfileDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type DastScannerProfileEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DastScannerProfile
+}
+
+"""
+A `DastScannerProfileID` is a global ID. It is encoded as a string.
+
+An example `DastScannerProfileID` is: `"gid://gitlab/DastScannerProfile/1"`.
+"""
+scalar DastScannerProfileID
+
+"""Autogenerated input type of DastScannerProfileUpdate"""
+input DastScannerProfileUpdateInput {
+ """ID of the scanner profile to be updated."""
+ id: DastScannerProfileID!
+
+ """Name of the scanner profile."""
+ profileName: String!
+
+ """Maximum number of minutes allowed for the spider to traverse the site."""
+ spiderTimeout: Int!
+
+ """
+ Maximum number of seconds allowed for the site under test to respond to a request.
+ """
+ targetTimeout: Int!
+
+ """
+ Indicates the type of DAST scan that will run. Either a Passive Scan or an Active Scan.
+ """
+ scanType: DastScanTypeEnum
+
+ """
+ Indicates if the AJAX spider should be used to crawl the target site. True to
+ run the AJAX spider in addition to the traditional spider, and false to run
+ only the traditional spider.
+ """
+ useAjaxSpider: Boolean
+
+ """
+ Indicates if debug messages should be included in DAST console output. True to include the debug messages.
+ """
+ showDebugMessages: Boolean
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastScannerProfileUpdate"""
+type DastScannerProfileUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the scanner profile."""
+ id: DastScannerProfileID
+}
+
+enum DastScanTypeEnum {
+ """
+ Passive DAST scan. This scan will not make active attacks against the target site.
+ """
+ PASSIVE
+
+ """
+ Active DAST scan. This scan will make active attacks against the target site.
+ """
+ ACTIVE
+}
+
+"""Represents a DAST Site Profile"""
+type DastSiteProfile {
+ """Target authentication details."""
+ auth: DastSiteProfileAuth
+
+ """Relative web path to the edit page of a site profile."""
+ editPath: String
+
+ """URLs to skip during an authenticated scan."""
+ excludedUrls: [String!]
+
+ """ID of the site profile."""
+ id: DastSiteProfileID!
+
+ """Normalized URL of the target to be scanned."""
+ normalizedTargetUrl: String
+
+ """Name of the site profile."""
+ profileName: String
+
+ """List of security policy names that are referencing given project."""
+ referencedInSecurityPolicies: [String!]
+
+ """
+ Comma-separated list of request header names and values to be added to every request made by DAST.
+ """
+ requestHeaders: String
+
+ """Type of target to be scanned."""
+ targetType: DastTargetTypeEnum
+
+ """URL of the target to be scanned."""
+ targetUrl: String
+
+ """Permissions for the current user on the resource"""
+ userPermissions: DastSiteProfilePermissions!
+
+ """Current validation status of the site profile."""
+ validationStatus: DastSiteProfileValidationStatusEnum
+}
+
+"""Input type for DastSiteProfile authentication"""
+type DastSiteProfileAuth {
+ """Indicates whether authentication is enabled."""
+ enabled: Boolean
+
+ """Redacted password to authenticate with on the target website."""
+ password: String
+
+ """Name of password field at the sign-in HTML form."""
+ passwordField: String
+
+ """
+ The URL of the page containing the sign-in HTML form on the target website.
+ """
+ url: String
+
+ """Username to authenticate with on the target website."""
+ username: String
+
+ """Name of username field at the sign-in HTML form."""
+ usernameField: String
+}
+
+"""Input type for DastSiteProfile authentication"""
+input DastSiteProfileAuthInput {
+ """Indicates whether authentication is enabled."""
+ enabled: Boolean
+
+ """
+ The URL of the page containing the sign-in HTML form on the target website.
+ """
+ url: String
+
+ """Name of username field at the sign-in HTML form."""
+ usernameField: String
+
+ """Name of password field at the sign-in HTML form."""
+ passwordField: String
+
+ """Username to authenticate with on the target website."""
+ username: String
+
+ """Password to authenticate with on the target website."""
+ password: String
+}
+
+"""The connection type for DastSiteProfile."""
+type DastSiteProfileConnection {
+ """A list of edges."""
+ edges: [DastSiteProfileEdge]
+
+ """A list of nodes."""
+ nodes: [DastSiteProfile]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of DastSiteProfileCreate"""
+input DastSiteProfileCreateInput {
+ """Name of the site profile."""
+ profileName: String!
+
+ """URL of the target to be scanned."""
+ targetUrl: String
+
+ """Type of target to be scanned."""
+ targetType: DastTargetTypeEnum
+
+ """
+ Comma-separated list of request header names and values to be added to every request made by DAST.
+ """
+ requestHeaders: String
+
+ """Parameters for authentication."""
+ auth: DastSiteProfileAuthInput
+
+ """Project the site profile belongs to."""
+ fullPath: ID!
+
+ """URLs to skip during an authenticated scan. Defaults to `[]`."""
+ excludedUrls: [String!] = []
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteProfileCreate"""
+type DastSiteProfileCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the site profile."""
+ id: DastSiteProfileID
+}
+
+"""Autogenerated input type of DastSiteProfileDelete"""
+input DastSiteProfileDeleteInput {
+ """ID of the site profile to be deleted."""
+ id: DastSiteProfileID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteProfileDelete"""
+type DastSiteProfileDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type DastSiteProfileEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DastSiteProfile
+}
+
+"""
+A `DastSiteProfileID` is a global ID. It is encoded as a string.
+
+An example `DastSiteProfileID` is: `"gid://gitlab/DastSiteProfile/1"`.
+"""
+scalar DastSiteProfileID
+
+"""Check permissions for the current user on site profile"""
+type DastSiteProfilePermissions {
+ """
+ Indicates the user can perform `create_on_demand_dast_scan` on this resource
+ """
+ createOnDemandDastScan: Boolean!
+}
+
+"""Autogenerated input type of DastSiteProfileUpdate"""
+input DastSiteProfileUpdateInput {
+ """Name of the site profile."""
+ profileName: String!
+
+ """URL of the target to be scanned."""
+ targetUrl: String
+
+ """Type of target to be scanned."""
+ targetType: DastTargetTypeEnum
+
+ """
+ Comma-separated list of request header names and values to be added to every request made by DAST.
+ """
+ requestHeaders: String
+
+ """Parameters for authentication."""
+ auth: DastSiteProfileAuthInput
+
+ """ID of the site profile to be updated."""
+ id: DastSiteProfileID!
+
+ """URLs to skip during an authenticated scan."""
+ excludedUrls: [String!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteProfileUpdate"""
+type DastSiteProfileUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the site profile."""
+ id: DastSiteProfileID
+}
+
+enum DastSiteProfileValidationStatusEnum {
+ """No site validation exists."""
+ NONE
+
+ """Site validation process has not started."""
+ PENDING_VALIDATION
+
+ """Site validation process is in progress."""
+ INPROGRESS_VALIDATION
+
+ """Site validation process finished successfully."""
+ PASSED_VALIDATION
+
+ """Site validation process finished but failed."""
+ FAILED_VALIDATION
+}
+
+"""Autogenerated input type of DastSiteTokenCreate"""
+input DastSiteTokenCreateInput {
+ """Project the site token belongs to."""
+ fullPath: ID!
+
+ """URL of the target to be validated."""
+ targetUrl: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteTokenCreate"""
+type DastSiteTokenCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the site token."""
+ id: DastSiteTokenID
+
+ """Current validation status of the target."""
+ status: DastSiteProfileValidationStatusEnum
+
+ """Token string."""
+ token: String
+}
+
+"""
+A `DastSiteTokenID` is a global ID. It is encoded as a string.
+
+An example `DastSiteTokenID` is: `"gid://gitlab/DastSiteToken/1"`.
+"""
+scalar DastSiteTokenID
+
+"""Represents a DAST Site Validation"""
+type DastSiteValidation {
+ """Global ID of the site validation."""
+ id: DastSiteValidationID!
+
+ """Normalized URL of the target to be validated."""
+ normalizedTargetUrl: String
+
+ """Status of the site validation."""
+ status: DastSiteProfileValidationStatusEnum!
+}
+
+"""The connection type for DastSiteValidation."""
+type DastSiteValidationConnection {
+ """A list of edges."""
+ edges: [DastSiteValidationEdge]
+
+ """A list of nodes."""
+ nodes: [DastSiteValidation]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of DastSiteValidationCreate"""
+input DastSiteValidationCreateInput {
+ """Project the site profile belongs to."""
+ fullPath: ID!
+
+ """ID of the site token."""
+ dastSiteTokenId: DastSiteTokenID!
+
+ """Path to be requested during validation."""
+ validationPath: String!
+
+ """Validation strategy to be used."""
+ strategy: DastSiteValidationStrategyEnum
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteValidationCreate"""
+type DastSiteValidationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """ID of the site validation."""
+ id: DastSiteValidationID
+
+ """Current validation status."""
+ status: DastSiteProfileValidationStatusEnum
+}
+
+"""An edge in a connection."""
+type DastSiteValidationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DastSiteValidation
+}
+
+"""
+A `DastSiteValidationID` is a global ID. It is encoded as a string.
+
+An example `DastSiteValidationID` is: `"gid://gitlab/DastSiteValidation/1"`.
+"""
+scalar DastSiteValidationID
+
+"""Autogenerated input type of DastSiteValidationRevoke"""
+input DastSiteValidationRevokeInput {
+ """Project the site validation belongs to."""
+ fullPath: ID!
+
+ """Normalized URL of the target to be revoked."""
+ normalizedTargetUrl: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DastSiteValidationRevoke"""
+type DastSiteValidationRevokePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+enum DastSiteValidationStatusEnum {
+ """Site validation process has not started."""
+ PENDING_VALIDATION
+
+ """Site validation process is in progress."""
+ INPROGRESS_VALIDATION
+
+ """Site validation process finished successfully."""
+ PASSED_VALIDATION
+
+ """Site validation process finished but failed."""
+ FAILED_VALIDATION
+}
+
+enum DastSiteValidationStrategyEnum {
+ """Text file validation."""
+ TEXT_FILE
+
+ """Header validation."""
+ HEADER
+
+ """Meta tag validation."""
+ META_TAG
+}
+
+enum DastTargetTypeEnum {
+ """Website target."""
+ WEBSITE
+
+ """API target."""
+ API
+}
+
+"""Color of the data visualization palette"""
+enum DataVisualizationColorEnum {
+ """Blue color"""
+ BLUE
+
+ """Orange color"""
+ ORANGE
+
+ """Aqua color"""
+ AQUA
+
+ """Green color"""
+ GREEN
+
+ """Magenta color"""
+ MAGENTA
+}
+
+"""Weight of the data visualization palette"""
+enum DataVisualizationWeightEnum {
+ """50 weight"""
+ WEIGHT_50
+
+ """100 weight"""
+ WEIGHT_100
+
+ """200 weight"""
+ WEIGHT_200
+
+ """300 weight"""
+ WEIGHT_300
+
+ """400 weight"""
+ WEIGHT_400
+
+ """500 weight"""
+ WEIGHT_500
+
+ """600 weight"""
+ WEIGHT_600
+
+ """700 weight"""
+ WEIGHT_700
+
+ """800 weight"""
+ WEIGHT_800
+
+ """900 weight"""
+ WEIGHT_900
+
+ """950 weight"""
+ WEIGHT_950
+}
+
+"""Date represented in ISO 8601"""
+scalar Date
+
+"""Autogenerated input type of DeleteAnnotation"""
+input DeleteAnnotationInput {
+ """Global ID of the annotation to delete."""
+ id: MetricsDashboardAnnotationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DeleteAnnotation"""
+type DeleteAnnotationPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""The response from the AdminSidekiqQueuesDeleteJobs mutation"""
+type DeleteJobsResponse {
+ """
+ Whether or not the entire queue was processed in time; if not, retrying the same request is safe.
+ """
+ completed: Boolean
+
+ """Number of matching jobs deleted."""
+ deletedJobs: Int
+
+ """Queue size after processing."""
+ queueSize: Int
+}
+
+"""Represents metadata associated with a dependency link"""
+union DependencyLinkMetadata = NugetDependencyLinkMetadata
+
+"""Dependency proxy blob"""
+type DependencyProxyBlob {
+ """Date of creation."""
+ createdAt: Time!
+
+ """Name of the blob."""
+ fileName: String!
+
+ """Size of the blob file."""
+ size: String!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""The connection type for DependencyProxyBlob."""
+type DependencyProxyBlobConnection {
+ """A list of edges."""
+ edges: [DependencyProxyBlobEdge]
+
+ """A list of nodes."""
+ nodes: [DependencyProxyBlob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DependencyProxyBlobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DependencyProxyBlob
+}
+
+"""Group-level Dependency Proxy TTL policy settings"""
+type DependencyProxyImageTtlGroupPolicy {
+ """Timestamp of creation."""
+ createdAt: Time
+
+ """Indicates whether the policy is enabled or disabled."""
+ enabled: Boolean!
+
+ """Number of days to retain a cached image file."""
+ ttl: Int
+
+ """Timestamp of the most recent update."""
+ updatedAt: Time
+}
+
+"""Dependency proxy manifest"""
+type DependencyProxyManifest {
+ """Date of creation."""
+ createdAt: Time!
+
+ """Digest of the manifest."""
+ digest: String!
+
+ """Name of the manifest."""
+ fileName: String!
+
+ """Name of the image."""
+ imageName: String!
+
+ """Size of the manifest file."""
+ size: String!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""The connection type for DependencyProxyManifest."""
+type DependencyProxyManifestConnection {
+ """A list of edges."""
+ edges: [DependencyProxyManifestEdge]
+
+ """A list of nodes."""
+ nodes: [DependencyProxyManifest]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DependencyProxyManifestEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DependencyProxyManifest
+}
+
+"""Group-level Dependency Proxy settings"""
+type DependencyProxySetting {
+ """Indicates whether the dependency proxy is enabled for the group."""
+ enabled: Boolean!
+}
+
+"""All environment deployment tiers."""
+enum DeploymentTier {
+ """Production."""
+ PRODUCTION
+
+ """Staging."""
+ STAGING
+
+ """Testing."""
+ TESTING
+
+ """Development."""
+ DEVELOPMENT
+
+ """Other."""
+ OTHER
+}
+
+"""A single design"""
+type Design implements NoteableInterface & DesignFields & CurrentUserTodos {
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Diff refs for this design."""
+ diffRefs: DiffRefs!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """How this design was changed in the current version."""
+ event: DesignVersionEvent!
+
+ """Filename of the design."""
+ filename: String!
+
+ """Full path to the design file."""
+ fullPath: String!
+
+ """ID of this design."""
+ id: ID!
+
+ """URL of the full-sized image."""
+ image: String!
+
+ """
+ The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated
+ """
+ imageV432x230: String
+
+ """Issue the design belongs to."""
+ issue: Issue!
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Total count of user-created notes for this design."""
+ notesCount: Int!
+
+ """Project the design belongs to."""
+ project: Project!
+
+ """All versions related to this design ordered newest first."""
+ versions(
+ """SHA256 of the most recent acceptable version."""
+ earlierOrEqualToSha: String
+
+ """Global ID of the most recent acceptable version."""
+ earlierOrEqualToId: DesignManagementVersionID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DesignVersionConnection!
+}
+
+"""
+A design pinned to a specific version. The image field reflects the design as of the associated version
+"""
+type DesignAtVersion implements DesignFields {
+ """Underlying design."""
+ design: Design!
+
+ """Diff refs for this design."""
+ diffRefs: DiffRefs!
+
+ """How this design was changed in the current version."""
+ event: DesignVersionEvent!
+
+ """Filename of the design."""
+ filename: String!
+
+ """Full path to the design file."""
+ fullPath: String!
+
+ """ID of this design."""
+ id: ID!
+
+ """URL of the full-sized image."""
+ image: String!
+
+ """
+ The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated
+ """
+ imageV432x230: String
+
+ """Issue the design belongs to."""
+ issue: Issue!
+
+ """Total count of user-created notes for this design."""
+ notesCount: Int!
+
+ """Project the design belongs to."""
+ project: Project!
+
+ """Version this design-at-versions is pinned to."""
+ version: DesignVersion!
+}
+
+"""The connection type for DesignAtVersion."""
+type DesignAtVersionConnection {
+ """A list of edges."""
+ edges: [DesignAtVersionEdge]
+
+ """A list of nodes."""
+ nodes: [DesignAtVersion]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DesignAtVersionEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DesignAtVersion
+}
+
+"""A collection of designs"""
+type DesignCollection {
+ """Copy state of the design collection."""
+ copyState: DesignCollectionCopyState
+
+ """Find a specific design."""
+ design(
+ """Find a design by its ID."""
+ id: DesignManagementDesignID
+
+ """Find a design by its filename."""
+ filename: String
+ ): Design
+
+ """Find a design as of a version."""
+ designAtVersion(
+ """Global ID of the design at this version."""
+ id: DesignManagementDesignAtVersionID!
+ ): DesignAtVersion
+
+ """All designs for the design collection."""
+ designs(
+ """Filters designs by their ID."""
+ ids: [DesignManagementDesignID!]
+
+ """Filters designs by their filename."""
+ filenames: [String!]
+
+ """
+ Filters designs to only those that existed at the version. If argument is
+ omitted or nil then all designs will reflect the latest version
+ """
+ atVersion: DesignManagementVersionID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DesignConnection!
+
+ """Issue associated with the design collection."""
+ issue: Issue!
+
+ """Project associated with the design collection."""
+ project: Project!
+
+ """A specific version."""
+ version(
+ """SHA256 of a specific version."""
+ sha: String
+
+ """Global ID of the version."""
+ id: DesignManagementVersionID
+ ): DesignVersion
+
+ """All versions related to all designs, ordered newest first."""
+ versions(
+ """SHA256 of the most recent acceptable version."""
+ earlierOrEqualToSha: String
+
+ """Global ID of the most recent acceptable version."""
+ earlierOrEqualToId: DesignManagementVersionID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DesignVersionConnection!
+}
+
+"""Copy state of a DesignCollection"""
+enum DesignCollectionCopyState {
+ """The DesignCollection has no copy in progress"""
+ READY
+
+ """The DesignCollection is being copied"""
+ IN_PROGRESS
+
+ """The DesignCollection encountered an error during a copy"""
+ ERROR
+}
+
+"""The connection type for Design."""
+type DesignConnection {
+ """A list of edges."""
+ edges: [DesignEdge]
+
+ """A list of nodes."""
+ nodes: [Design]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DesignEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Design
+}
+
+interface DesignFields {
+ """Diff refs for this design."""
+ diffRefs: DiffRefs!
+
+ """How this design was changed in the current version."""
+ event: DesignVersionEvent!
+
+ """Filename of the design."""
+ filename: String!
+
+ """Full path to the design file."""
+ fullPath: String!
+
+ """ID of this design."""
+ id: ID!
+
+ """URL of the full-sized image."""
+ image: String!
+
+ """
+ The URL of the design resized to fit within the bounds of 432x230. This will be `null` if the image has not been generated
+ """
+ imageV432x230: String
+
+ """Issue the design belongs to."""
+ issue: Issue!
+
+ """Total count of user-created notes for this design."""
+ notesCount: Int!
+
+ """Project the design belongs to."""
+ project: Project!
+}
+
+type DesignManagement {
+ """Find a design as of a version."""
+ designAtVersion(
+ """Global ID of the design at this version."""
+ id: DesignManagementDesignAtVersionID!
+ ): DesignAtVersion
+
+ """Find a version."""
+ version(
+ """Global ID of the version."""
+ id: DesignManagementVersionID!
+ ): DesignVersion
+}
+
+"""Autogenerated input type of DesignManagementDelete"""
+input DesignManagementDeleteInput {
+ """Project where the issue is to upload designs for."""
+ projectPath: ID!
+
+ """IID of the issue to modify designs for."""
+ iid: ID!
+
+ """Filenames of the designs to delete."""
+ filenames: [String!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DesignManagementDelete"""
+type DesignManagementDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """New version in which the designs are deleted."""
+ version: DesignVersion
+}
+
+"""
+A `DesignManagementDesignAtVersionID` is a global ID. It is encoded as a string.
+
+An example `DesignManagementDesignAtVersionID` is: `"gid://gitlab/DesignManagement::DesignAtVersion/1"`.
+"""
+scalar DesignManagementDesignAtVersionID
+
+"""
+A `DesignManagementDesignID` is a global ID. It is encoded as a string.
+
+An example `DesignManagementDesignID` is: `"gid://gitlab/DesignManagement::Design/1"`.
+"""
+scalar DesignManagementDesignID
+
+"""Autogenerated input type of DesignManagementMove"""
+input DesignManagementMoveInput {
+ """ID of the design to move."""
+ id: DesignManagementDesignID!
+
+ """ID of the immediately preceding design."""
+ previous: DesignManagementDesignID
+
+ """ID of the immediately following design."""
+ next: DesignManagementDesignID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DesignManagementMove"""
+type DesignManagementMovePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Current state of the collection."""
+ designCollection: DesignCollection
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DesignManagementUpload"""
+input DesignManagementUploadInput {
+ """Project where the issue is to upload designs for."""
+ projectPath: ID!
+
+ """IID of the issue to modify designs for."""
+ iid: ID!
+
+ """Files to upload."""
+ files: [Upload!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DesignManagementUpload"""
+type DesignManagementUploadPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Designs that were uploaded by the mutation."""
+ designs: [Design!]!
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Any designs that were skipped from the upload due to there being no change to their content since their last version
+ """
+ skippedDesigns: [Design!]!
+}
+
+"""
+A `DesignManagementVersionID` is a global ID. It is encoded as a string.
+
+An example `DesignManagementVersionID` is: `"gid://gitlab/DesignManagement::Version/1"`.
+"""
+scalar DesignManagementVersionID
+
+"""A specific version in which designs were added, modified or deleted"""
+type DesignVersion {
+ """Author of the version."""
+ author: UserCore!
+
+ """Timestamp of when the version was created."""
+ createdAt: Time!
+
+ """
+ A particular design as of this version, provided it is visible at this version.
+ """
+ designAtVersion(
+ """ID of the DesignAtVersion."""
+ id: DesignManagementDesignAtVersionID
+
+ """ID of a specific design."""
+ designId: DesignManagementDesignID
+
+ """Filename of a specific design."""
+ filename: String
+ ): DesignAtVersion!
+
+ """All designs that were changed in the version."""
+ designs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DesignConnection!
+
+ """All designs that are visible at this version, as of this version."""
+ designsAtVersion(
+ """Filters designs by their ID."""
+ ids: [DesignManagementDesignID!]
+
+ """Filters designs by their filename."""
+ filenames: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DesignAtVersionConnection!
+
+ """ID of the design version."""
+ id: ID!
+
+ """SHA of the design version."""
+ sha: ID!
+}
+
+"""The connection type for DesignVersion."""
+type DesignVersionConnection {
+ """A list of edges."""
+ edges: [DesignVersionEdge]
+
+ """A list of nodes."""
+ nodes: [DesignVersion]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DesignVersionEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DesignVersion
+}
+
+"""Mutation event of a design within a version"""
+enum DesignVersionEvent {
+ """No change."""
+ NONE
+
+ """A creation event"""
+ CREATION
+
+ """A modification event"""
+ MODIFICATION
+
+ """A deletion event"""
+ DELETION
+}
+
+"""Autogenerated input type of DestroyBoard"""
+input DestroyBoardInput {
+ """Global ID of the board to destroy."""
+ id: BoardID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated input type of DestroyBoardList"""
+input DestroyBoardListInput {
+ """Global ID of the list to destroy. Only label lists are accepted."""
+ listId: ListID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyBoardList"""
+type DestroyBoardListPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """List after mutation."""
+ list: BoardList
+}
+
+"""Autogenerated return type of DestroyBoard"""
+type DestroyBoardPayload {
+ """Board after mutation."""
+ board: Board
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyComplianceFramework"""
+input DestroyComplianceFrameworkInput {
+ """Global ID of the compliance framework to destroy."""
+ id: ComplianceManagementFrameworkID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyComplianceFramework"""
+type DestroyComplianceFrameworkPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyContainerRepository"""
+input DestroyContainerRepositoryInput {
+ """ID of the container repository."""
+ id: ContainerRepositoryID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyContainerRepository"""
+type DestroyContainerRepositoryPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Container repository policy after scheduling the deletion."""
+ containerRepository: ContainerRepository!
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyContainerRepositoryTags"""
+input DestroyContainerRepositoryTagsInput {
+ """ID of the container repository."""
+ id: ContainerRepositoryID!
+
+ """
+ Container repository tag(s) to delete. Total number can't be greater than 20
+ """
+ tagNames: [String!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyContainerRepositoryTags"""
+type DestroyContainerRepositoryTagsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Deleted container repository tags."""
+ deletedTagNames: [String!]!
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyCustomEmoji"""
+input DestroyCustomEmojiInput {
+ """Global ID of the custom emoji to destroy."""
+ id: CustomEmojiID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyCustomEmoji"""
+type DestroyCustomEmojiPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Deleted custom emoji."""
+ customEmoji: CustomEmoji
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyEpicBoard"""
+input DestroyEpicBoardInput {
+ """Global ID of the board to destroy."""
+ id: BoardsEpicBoardID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyEpicBoard"""
+type DestroyEpicBoardPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic board after mutation."""
+ epicBoard: EpicBoard
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyNote"""
+input DestroyNoteInput {
+ """Global ID of the note to destroy."""
+ id: NoteID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyNote"""
+type DestroyNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of DestroyPackageFile"""
+input DestroyPackageFileInput {
+ """ID of the Package file."""
+ id: PackagesPackageFileID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyPackageFile"""
+type DestroyPackageFilePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroyPackage"""
+input DestroyPackageInput {
+ """ID of the Package."""
+ id: PackagesPackageID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroyPackage"""
+type DestroyPackagePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of DestroySnippet"""
+input DestroySnippetInput {
+ """Global ID of the snippet to destroy."""
+ id: SnippetID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DestroySnippet"""
+type DestroySnippetPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Snippet after mutation."""
+ snippet: Snippet
+}
+
+type DetailedStatus {
+ """
+ Action information for the status. This includes method, button title, icon, path, and title.
+ """
+ action: StatusAction
+
+ """Path of the details for the status."""
+ detailsPath: String
+
+ """Favicon of the status."""
+ favicon: String
+
+ """Group of the status."""
+ group: String
+
+ """Indicates if the status has further details."""
+ hasDetails: Boolean
+
+ """Icon of the status."""
+ icon: String
+
+ """ID for a detailed status."""
+ id: String!
+
+ """Label of the status."""
+ label: String
+
+ """Text of the status."""
+ text: String
+
+ """Tooltip associated with the status."""
+ tooltip: String
+}
+
+"""Enabled namespace for DevopsAdoption"""
+type DevopsAdoptionEnabledNamespace {
+ """Namespace where data should be displayed."""
+ displayNamespace: Namespace
+
+ """ID of the enabled namespace."""
+ id: ID!
+
+ """Metrics snapshot for previous month for the enabled namespace."""
+ latestSnapshot: DevopsAdoptionSnapshot
+
+ """Namespace which should be calculated."""
+ namespace: Namespace
+
+ """Data snapshots of the namespace."""
+ snapshots(
+ """Filter to snapshots with month end before the provided date."""
+ endTimeBefore: Time
+
+ """Filter to snapshots with month end after the provided date."""
+ endTimeAfter: Time
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DevopsAdoptionSnapshotConnection
+}
+
+"""The connection type for DevopsAdoptionEnabledNamespace."""
+type DevopsAdoptionEnabledNamespaceConnection {
+ """A list of edges."""
+ edges: [DevopsAdoptionEnabledNamespaceEdge]
+
+ """A list of nodes."""
+ nodes: [DevopsAdoptionEnabledNamespace]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DevopsAdoptionEnabledNamespaceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DevopsAdoptionEnabledNamespace
+}
+
+"""Snapshot"""
+type DevopsAdoptionSnapshot {
+ """Total number of projects with existing CODEOWNERS file."""
+ codeOwnersUsedCount: Int
+
+ """Total number of projects with enabled coverage fuzzing."""
+ coverageFuzzingEnabledCount: Int
+
+ """Total number of projects with enabled DAST."""
+ dastEnabledCount: Int
+
+ """Total number of projects with enabled dependency scanning."""
+ dependencyScanningEnabledCount: Int
+
+ """At least one deployment succeeded."""
+ deploySucceeded: Boolean!
+
+ """End time for the snapshot where the data points were collected."""
+ endTime: Time!
+
+ """At least one issue was opened."""
+ issueOpened: Boolean!
+
+ """At least one merge request was approved."""
+ mergeRequestApproved: Boolean!
+
+ """At least one merge request was opened."""
+ mergeRequestOpened: Boolean!
+
+ """At least one pipeline succeeded."""
+ pipelineSucceeded: Boolean!
+
+ """Time the snapshot was recorded."""
+ recordedAt: Time!
+
+ """At least one runner was used."""
+ runnerConfigured: Boolean!
+
+ """Total number of projects with enabled SAST."""
+ sastEnabledCount: Int
+
+ """
+ At least one security scan succeeded. Deprecated in 14.1: Substituted with specific security metrics. Always false.
+ """
+ securityScanSucceeded: Boolean! @deprecated(reason: "Substituted with specific security metrics. Always false. Deprecated in 14.1.")
+
+ """Start time for the snapshot where the data points were collected."""
+ startTime: Time!
+
+ """Total number of projects."""
+ totalProjectsCount: Int
+
+ """
+ Total number of projects with vulnerability management used at least once.
+ """
+ vulnerabilityManagementUsedCount: Int
+}
+
+"""The connection type for DevopsAdoptionSnapshot."""
+type DevopsAdoptionSnapshotConnection {
+ """A list of edges."""
+ edges: [DevopsAdoptionSnapshotEdge]
+
+ """A list of nodes."""
+ nodes: [DevopsAdoptionSnapshot]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type DevopsAdoptionSnapshotEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: DevopsAdoptionSnapshot
+}
+
+input DiffImagePositionInput {
+ """SHA of the HEAD at the time the comment was made."""
+ headSha: String!
+
+ """Merge base of the branch the comment was made on."""
+ baseSha: String
+
+ """SHA of the branch being compared against."""
+ startSha: String!
+
+ """
+ The paths of the file that was changed. Both of the properties of this input
+ are optional, but at least one of them is required
+ """
+ paths: DiffPathsInput!
+
+ """X position of the note."""
+ x: Int!
+
+ """Y position of the note."""
+ y: Int!
+
+ """Total width of the image."""
+ width: Int!
+
+ """Total height of the image."""
+ height: Int!
+}
+
+"""
+A `DiffNoteID` is a global ID. It is encoded as a string.
+
+An example `DiffNoteID` is: `"gid://gitlab/DiffNote/1"`.
+"""
+scalar DiffNoteID
+
+input DiffPathsInput {
+ """Path of the file on the start SHA."""
+ oldPath: String
+
+ """Path of the file on the HEAD SHA."""
+ newPath: String
+}
+
+type DiffPosition {
+ """
+ Information about the branch, HEAD, and base at the time of commenting.
+ """
+ diffRefs: DiffRefs!
+
+ """Path of the file that was changed."""
+ filePath: String!
+
+ """Total height of the image."""
+ height: Int
+
+ """Line on HEAD SHA that was changed."""
+ newLine: Int
+
+ """Path of the file on the HEAD SHA."""
+ newPath: String
+
+ """Line on start SHA that was changed."""
+ oldLine: Int
+
+ """Path of the file on the start SHA."""
+ oldPath: String
+
+ """Type of file the position refers to."""
+ positionType: DiffPositionType!
+
+ """Total width of the image."""
+ width: Int
+
+ """X position of the note."""
+ x: Int
+
+ """Y position of the note."""
+ y: Int
+}
+
+input DiffPositionInput {
+ """SHA of the HEAD at the time the comment was made."""
+ headSha: String!
+
+ """Merge base of the branch the comment was made on."""
+ baseSha: String
+
+ """SHA of the branch being compared against."""
+ startSha: String!
+
+ """
+ The paths of the file that was changed. Both of the properties of this input
+ are optional, but at least one of them is required
+ """
+ paths: DiffPathsInput!
+
+ """Line on start SHA that was changed."""
+ oldLine: Int
+
+ """Line on HEAD SHA that was changed."""
+ newLine: Int
+}
+
+"""Type of file the position refers to"""
+enum DiffPositionType {
+ """Text file."""
+ text
+
+ """An image."""
+ image
+}
+
+type DiffRefs {
+ """Merge base of the branch the comment was made on."""
+ baseSha: String
+
+ """SHA of the HEAD at the time the comment was made."""
+ headSha: String!
+
+ """SHA of the branch being compared against."""
+ startSha: String!
+}
+
+"""Changes to a single file"""
+type DiffStats {
+ """Number of lines added to this file."""
+ additions: Int!
+
+ """Number of lines deleted from this file."""
+ deletions: Int!
+
+ """File path, relative to repository root."""
+ path: String!
+}
+
+"""Aggregated summary of changes"""
+type DiffStatsSummary {
+ """Number of lines added."""
+ additions: Int!
+
+ """Number of lines changed."""
+ changes: Int!
+
+ """Number of lines deleted."""
+ deletions: Int!
+
+ """Number of files changed."""
+ fileCount: Int!
+}
+
+"""Autogenerated input type of DisableDevopsAdoptionNamespace"""
+input DisableDevopsAdoptionNamespaceInput {
+ """One or many IDs of the enabled namespaces to disable."""
+ id: [AnalyticsDevopsAdoptionEnabledNamespaceID!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DisableDevopsAdoptionNamespace"""
+type DisableDevopsAdoptionNamespacePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+type Discussion implements ResolvableInterface {
+ """Timestamp of the discussion's creation."""
+ createdAt: Time!
+
+ """ID of this discussion."""
+ id: DiscussionID!
+
+ """Object which the discussion belongs to."""
+ noteable: NoteableType
+
+ """All notes in the discussion."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """ID used to reply to this discussion."""
+ replyId: DiscussionID!
+
+ """Indicates if the object can be resolved."""
+ resolvable: Boolean!
+
+ """Indicates if the object is resolved."""
+ resolved: Boolean!
+
+ """Timestamp of when the object was resolved."""
+ resolvedAt: Time
+
+ """User who resolved the object."""
+ resolvedBy: UserCore
+}
+
+"""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!
+}
+
+"""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
+}
+
+"""
+A `DiscussionID` is a global ID. It is encoded as a string.
+
+An example `DiscussionID` is: `"gid://gitlab/Discussion/1"`.
+"""
+scalar DiscussionID
+
+"""Autogenerated input type of DiscussionToggleResolve"""
+input DiscussionToggleResolveInput {
+ """Global ID of the discussion."""
+ id: DiscussionID!
+
+ """
+ Will resolve the discussion when true, and unresolve the discussion when false.
+ """
+ resolve: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of DiscussionToggleResolve"""
+type DiscussionToggleResolvePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Discussion after mutation."""
+ discussion: Discussion
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""All information related to DORA metrics."""
+type Dora {
+ """DORA metrics for the current group or project."""
+ metrics(
+ """Type of metric to return."""
+ metric: DoraMetricType!
+
+ """Date range to start from. Default is 3 months ago."""
+ startDate: Date
+
+ """Date range to end at. Default is the current date."""
+ endDate: Date
+
+ """
+ How the metric should be aggregrated. Defaults to `DAILY`. In the case of
+ `ALL`, the `date` field in the response will be `null`.
+ """
+ interval: DoraMetricBucketingInterval
+
+ """
+ Deployment tier of the environments to return. Defaults to `PRODUCTION`.
+ """
+ environmentTier: DeploymentTier
+ ): [DoraMetric!]
+}
+
+type DoraMetric {
+ """Date of the data point."""
+ date: String
+
+ """Value of the data point."""
+ value: Int
+}
+
+"""All possible ways that DORA metrics can be aggregated."""
+enum DoraMetricBucketingInterval {
+ """All data points are combined into a single value."""
+ ALL
+
+ """Data points are combined into chunks by month."""
+ MONTHLY
+
+ """Data points are combined into chunks by day."""
+ DAILY
+}
+
+"""All supported DORA metric types."""
+enum DoraMetricType {
+ """Deployment frequency."""
+ DEPLOYMENT_FREQUENCY
+
+ """Lead time for changes."""
+ LEAD_TIME_FOR_CHANGES
+}
+
+"""
+Duration between two instants, represented as a fractional number of seconds.
+
+For example: 12.3334
+
+"""
+scalar Duration
+
+"""Autogenerated input type of EchoCreate"""
+input EchoCreateInput {
+ """Errors to return to the user."""
+ errors: [String!]
+
+ """Messages to return to the user."""
+ messages: [String!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EchoCreate"""
+type EchoCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Messages returned to the user."""
+ echoes: [String!]
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of EnableDevopsAdoptionNamespace"""
+input EnableDevopsAdoptionNamespaceInput {
+ """Namespace ID."""
+ namespaceId: NamespaceID!
+
+ """Display namespace ID."""
+ displayNamespaceId: NamespaceID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EnableDevopsAdoptionNamespace"""
+type EnableDevopsAdoptionNamespacePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Enabled namespace after mutation."""
+ enabledNamespace: DevopsAdoptionEnabledNamespace
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+interface Entry {
+ """Flat path of the entry."""
+ flatPath: String!
+
+ """ID of the entry."""
+ id: ID!
+
+ """Name of the entry."""
+ name: String!
+
+ """Path of the entry."""
+ path: String!
+
+ """Last commit SHA for the entry."""
+ sha: String!
+
+ """Type of tree entry."""
+ type: EntryType!
+}
+
+"""Type of a tree entry"""
+enum EntryType {
+ """Directory tree type."""
+ tree
+
+ """File tree type."""
+ blob
+
+ """Commit tree type."""
+ commit
+}
+
+"""Describes where code is deployed for a project"""
+type Environment {
+ """ID of the environment."""
+ id: ID!
+
+ """
+ Most severe open alert for the environment. If multiple alerts have equal severity, the most recent is returned.
+ """
+ latestOpenedMostSevereAlert: AlertManagementAlert
+
+ """Metrics dashboard schema for the environment."""
+ metricsDashboard(
+ """
+ Path to a file which defines a metrics dashboard eg: `"config/prometheus/common_metrics.yml"`.
+
+ """
+ path: String!
+ ): MetricsDashboard
+
+ """Human-readable name of the environment."""
+ name: String!
+
+ """Path to the environment."""
+ path: String!
+
+ """State of the environment, for example: available/stopped."""
+ state: String!
+}
+
+"""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!
+}
+
+"""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
+}
+
+"""
+A `EnvironmentID` is a global ID. It is encoded as a string.
+
+An example `EnvironmentID` is: `"gid://gitlab/Environment/1"`.
+"""
+scalar EnvironmentID
+
+"""Autogenerated input type of EnvironmentsCanaryIngressUpdate"""
+input EnvironmentsCanaryIngressUpdateInput {
+ """Global ID of the environment to update."""
+ id: EnvironmentID!
+
+ """Weight of the Canary Ingress."""
+ weight: Int!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EnvironmentsCanaryIngressUpdate"""
+type EnvironmentsCanaryIngressUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Represents an epic"""
+type Epic implements NoteableInterface & CurrentUserTodos & Eventable {
+ """Ancestors (parents) of the epic."""
+ ancestors(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = true
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Author of the epic."""
+ author: UserCore!
+
+ """List of award emojis associated with the epic."""
+ awardEmoji(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AwardEmojiConnection
+
+ """Children (sub-epics) of the epic."""
+ children(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Timestamp of when the epic was closed."""
+ closedAt: Time
+
+ """Indicates if the epic is confidential."""
+ confidential: Boolean
+
+ """Timestamp of when the epic was created."""
+ createdAt: Time
+
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Number of open and closed descendant epics and issues."""
+ descendantCounts: EpicDescendantCount
+
+ """
+ Total weight of open and closed issues in the epic and its descendants.
+ """
+ descendantWeightSum: EpicDescendantWeights
+
+ """Description of the epic."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Number of downvotes the epic has received."""
+ downvotes: Int!
+
+ """Due date of the epic."""
+ dueDate: Time
+
+ """Fixed due date of the epic."""
+ dueDateFixed: Time
+
+ """Inherited due date of the epic from milestones."""
+ dueDateFromMilestones: Time
+
+ """Indicates if the due date has been manually set."""
+ dueDateIsFixed: Boolean
+
+ """List of events associated with the object."""
+ events(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EventConnection
+
+ """Group to which the epic belongs."""
+ group: Group!
+
+ """Indicates if the epic has children."""
+ hasChildren: Boolean!
+
+ """Indicates if the epic has direct issues."""
+ hasIssues: Boolean!
+
+ """Indicates if the epic has a parent epic."""
+ hasParent: Boolean!
+
+ """Current health status of the epic."""
+ healthStatus: EpicHealthStatus
+
+ """ID of the epic."""
+ id: ID!
+
+ """Internal ID of the epic."""
+ iid: ID!
+
+ """A list of issues associated with the epic."""
+ 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
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicIssueConnection
+
+ """Labels assigned to the epic."""
+ 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
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Parent epic of the epic."""
+ parent: Epic
+
+ """List of participants for the epic."""
+ 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
+ ): UserCoreConnection
+
+ """
+ Internal reference of the epic. Returned in shortened format by default.
+ """
+ reference(
+ """Indicates if the reference should be returned in full."""
+ full: Boolean = false
+ ): String!
+
+ """URI path of the epic-issue relationship."""
+ relationPath: String
+
+ """Relative position of the epic in the epic tree."""
+ relativePosition: Int
+
+ """Start date of the epic."""
+ startDate: Time
+
+ """Fixed start date of the epic."""
+ startDateFixed: Time
+
+ """Inherited start date of the epic from milestones."""
+ startDateFromMilestones: Time
+
+ """Indicates if the start date has been manually set."""
+ startDateIsFixed: Boolean
+
+ """State of the epic."""
+ state: EpicState!
+
+ """Indicates the currently logged in user is subscribed to the epic."""
+ subscribed: Boolean!
+
+ """Title of the epic."""
+ title: String
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Timestamp of when the epic was updated."""
+ updatedAt: Time
+
+ """Number of upvotes the epic has received."""
+ upvotes: Int!
+
+ """Number of user discussions in the epic."""
+ userDiscussionsCount: Int!
+
+ """Number of user notes of the epic."""
+ userNotesCount: Int!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: EpicPermissions!
+
+ """Web path of the epic."""
+ webPath: String!
+
+ """Web URL of the epic."""
+ webUrl: String!
+}
+
+"""Autogenerated input type of EpicAddIssue"""
+input EpicAddIssueInput {
+ """IID of the epic to mutate."""
+ iid: ID!
+
+ """Group the epic to mutate belongs to."""
+ groupPath: ID!
+
+ """Full path of the project the issue belongs to."""
+ projectPath: ID!
+
+ """IID of the issue to be added."""
+ issueIid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicAddIssue"""
+type EpicAddIssuePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after mutation."""
+ epic: Epic
+
+ """Epic-issue relationship."""
+ epicIssue: EpicIssue
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Represents an epic board"""
+type EpicBoard {
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """Global ID of the epic board."""
+ id: BoardsEpicBoardID!
+
+ """Labels of the board."""
+ 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
+
+ """Epic board lists."""
+ lists(
+ """Find an epic board list by ID."""
+ id: BoardsEpicListID
+
+ """Filters applied when getting epic metadata in the epic board list."""
+ epicFilters: EpicFilters
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicListConnection
+
+ """Name of the epic board."""
+ name: String
+
+ """Web path of the epic board."""
+ webPath: String!
+
+ """Web URL of the epic board."""
+ webUrl: String!
+}
+
+"""The connection type for EpicBoard."""
+type EpicBoardConnection {
+ """A list of edges."""
+ edges: [EpicBoardEdge]
+
+ """A list of nodes."""
+ nodes: [EpicBoard]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of EpicBoardCreate"""
+input EpicBoardCreateInput {
+ """Board name."""
+ name: String
+
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """Labels of the issue."""
+ labels: [String!]
+
+ """IDs of labels to be added to the board."""
+ labelIds: [LabelID!]
+
+ """Full path of the group with which the resource is associated."""
+ groupPath: ID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicBoardCreate"""
+type EpicBoardCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Created epic board."""
+ epicBoard: EpicBoard
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type EpicBoardEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: EpicBoard
+}
+
+"""Autogenerated input type of EpicBoardListCreate"""
+input EpicBoardListCreateInput {
+ """Create the backlog list."""
+ backlog: Boolean
+
+ """Global ID of an existing label."""
+ labelId: LabelID
+
+ """Global ID of the issue board to mutate."""
+ boardId: BoardsEpicBoardID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicBoardListCreate"""
+type EpicBoardListCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Epic list in the epic board."""
+ list: EpicList
+}
+
+"""Autogenerated input type of EpicBoardListDestroy"""
+input EpicBoardListDestroyInput {
+ """Global ID of the epic board list to destroy."""
+ listId: BoardsEpicListID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicBoardListDestroy"""
+type EpicBoardListDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Epic board list. `null` if the board was destroyed successfully."""
+ list: EpicList
+}
+
+"""Autogenerated input type of EpicBoardUpdate"""
+input EpicBoardUpdateInput {
+ """Board name."""
+ name: String
+
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """Labels of the issue."""
+ labels: [String!]
+
+ """IDs of labels to be added to the board."""
+ labelIds: [LabelID!]
+
+ """Epic board global ID."""
+ id: BoardsEpicBoardID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicBoardUpdate"""
+type EpicBoardUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Updated epic board."""
+ epicBoard: EpicBoard
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""The connection type for Epic."""
+type EpicConnection {
+ """A list of edges."""
+ edges: [EpicEdge]
+
+ """A list of nodes."""
+ nodes: [Epic]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Counts of descendent epics"""
+type EpicDescendantCount {
+ """Number of closed child epics."""
+ closedEpics: Int
+
+ """Number of closed epic issues."""
+ closedIssues: Int
+
+ """Number of opened child epics."""
+ openedEpics: Int
+
+ """Number of opened epic issues."""
+ openedIssues: Int
+}
+
+"""Total weight of open and closed descendant issues"""
+type EpicDescendantWeights {
+ """
+ Total weight of completed (closed) issues in this epic, including epic descendants.
+ """
+ closedIssues: Int
+
+ """
+ Total weight of opened issues in this epic, including epic descendants.
+ """
+ openedIssues: Int
+}
+
+"""An edge in a connection."""
+type EpicEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Epic
+}
+
+input EpicFilters {
+ """Filter by label name."""
+ labelName: [String]
+
+ """Filter by author username."""
+ authorUsername: String
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicBoardIssueInput
+
+ """Search query for epic title or description."""
+ search: String
+}
+
+"""Health status of child issues"""
+type EpicHealthStatus {
+ """Number of issues at risk."""
+ issuesAtRisk: Int
+
+ """Number of issues that need attention."""
+ issuesNeedingAttention: Int
+
+ """Number of issues on track."""
+ issuesOnTrack: Int
+}
+
+"""
+A `EpicID` is a global ID. It is encoded as a string.
+
+An example `EpicID` is: `"gid://gitlab/Epic/1"`.
+"""
+scalar EpicID
+
+"""Relationship between an epic and an issue"""
+type EpicIssue implements NoteableInterface & CurrentUserTodos {
+ """Alert associated to this issue."""
+ alertManagementAlert: AlertManagementAlert
+
+ """Assignees of the 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
+ ): UserCoreConnection
+
+ """User that created the issue."""
+ author: UserCore!
+
+ """Indicates the issue is blocked."""
+ blocked: Boolean!
+
+ """Count of issues blocking this issue."""
+ blockedByCount: Int
+
+ """Issues blocking this issue."""
+ blockedByIssues(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Count of issues this issue is blocking."""
+ blockingCount: Int!
+
+ """Timestamp of when the issue was closed."""
+ closedAt: Time
+
+ """Indicates the issue is confidential."""
+ confidential: Boolean!
+
+ """User specific email address for the issue."""
+ createNoteEmail: String
+
+ """Timestamp of when the issue was created."""
+ createdAt: Time!
+
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Customer relations contacts of the issue."""
+ customerRelationsContacts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CustomerRelationsContactConnection
+
+ """Description of the issue."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Collection of design images associated with this issue."""
+ designCollection: DesignCollection
+
+ """Indicates discussion is locked on the issue."""
+ discussionLocked: Boolean!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Number of downvotes the issue has received."""
+ downvotes: Int!
+
+ """Due date of the issue."""
+ dueDate: Time
+
+ """
+ Indicates if a project has email notifications disabled: `true` if email notifications are disabled.
+ """
+ emailsDisabled: Boolean!
+
+ """Epic to which this issue belongs."""
+ epic: Epic
+
+ """ID of the epic-issue relation."""
+ epicIssueId: ID!
+
+ """Current health status."""
+ healthStatus: HealthStatus
+
+ """
+ Indicates the issue is hidden because the author has been banned. Will always
+ return `null` if `ban_user_feature_flag` feature flag is disabled.
+ """
+ hidden: Boolean
+
+ """Human-readable time estimate of the issue."""
+ humanTimeEstimate: String
+
+ """Human-readable total time reported as spent on the issue."""
+ humanTotalTimeSpent: String
+
+ """Global ID of the epic-issue relation."""
+ id: ID
+
+ """Internal ID of the issue."""
+ iid: ID!
+
+ """Iteration of the issue."""
+ iteration: Iteration
+
+ """Labels of the issue."""
+ 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
+
+ """Number of merge requests that close the issue on merge."""
+ mergeRequestsCount: Int!
+
+ """Metric images associated to the issue."""
+ metricImages: [MetricImage!]
+
+ """Milestone of the issue."""
+ milestone: Milestone
+
+ """Indicates if issue got moved from other project."""
+ moved: Boolean
+
+ """Updated Issue after it got moved to another project."""
+ movedTo: Issue
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """List of participants in the issue."""
+ 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
+ ): UserCoreConnection
+
+ """ID of the issue project."""
+ projectId: Int!
+
+ """
+ Internal reference of the issue. Returned in shortened format by default.
+ """
+ reference(
+ """
+ Boolean option specifying whether the reference should be returned in full.
+ """
+ full: Boolean = false
+ ): String!
+
+ """URI path of the epic-issue relation."""
+ relationPath: String
+
+ """
+ Relative position of the issue (used for positioning in epic tree and issue boards).
+ """
+ relativePosition: Int
+
+ """Severity level of the incident."""
+ severity: IssuableSeverity
+
+ """Timestamp of when the issue SLA expires."""
+ slaDueAt: Time
+
+ """State of the issue."""
+ state: IssueState!
+
+ """Indicates whether an issue is published to the status page."""
+ statusPagePublishedIncident: Boolean
+
+ """Indicates the currently logged in user is subscribed to the issue."""
+ subscribed: Boolean!
+
+ """Task completion status of the issue."""
+ taskCompletionStatus: TaskCompletionStatus!
+
+ """Time estimate of the issue."""
+ timeEstimate: Int!
+
+ """Timelogs on the issue."""
+ timelogs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection!
+
+ """Title of the issue."""
+ title: String!
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Total time reported as spent on the issue."""
+ totalTimeSpent: Int!
+
+ """Type of the issue."""
+ type: IssueType
+
+ """Timestamp of when the issue was last updated."""
+ updatedAt: Time!
+
+ """User that last updated the issue."""
+ updatedBy: UserCore
+
+ """Number of upvotes the issue has received."""
+ upvotes: Int!
+
+ """Number of user discussions in the issue."""
+ userDiscussionsCount: Int!
+
+ """Number of user notes of the issue."""
+ userNotesCount: Int!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: IssuePermissions!
+
+ """Web path of the issue."""
+ webPath: String!
+
+ """Web URL of the issue."""
+ webUrl: String!
+
+ """Weight of the issue."""
+ weight: Int
+}
+
+"""The connection type for EpicIssue."""
+type EpicIssueConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [EpicIssueEdge]
+
+ """A list of nodes."""
+ nodes: [EpicIssue]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+
+ """Total weight of issues collection."""
+ weight: Int!
+}
+
+"""An edge in a connection."""
+type EpicIssueEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: EpicIssue
+}
+
+"""Represents an epic board list"""
+type EpicList {
+ """Indicates if this list is collapsed for this user."""
+ collapsed: Boolean
+
+ """List epics."""
+ epics(
+ """Filters applied when selecting epics in the board list."""
+ filters: EpicFilters
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Count of epics in the list."""
+ epicsCount: Int
+
+ """Global ID of the board list."""
+ id: BoardsEpicListID!
+
+ """Label of the list."""
+ label: Label
+
+ """Type of the list."""
+ listType: String!
+
+ """Position of the list within the board."""
+ position: Int
+
+ """Title of the list."""
+ title: String!
+}
+
+"""The connection type for EpicList."""
+type EpicListConnection {
+ """A list of edges."""
+ edges: [EpicListEdge]
+
+ """A list of nodes."""
+ nodes: [EpicList]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type EpicListEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: EpicList
+}
+
+"""Autogenerated input type of EpicMoveList"""
+input EpicMoveListInput {
+ """Global ID of the board that the epic is in."""
+ boardId: BoardsEpicBoardID!
+
+ """ID of the epic to mutate."""
+ epicId: EpicID!
+
+ """
+ ID of the board list that the epic will be moved from. Required if moving between lists.
+ """
+ fromListId: BoardsEpicListID
+
+ """ID of the list the epic will be in after mutation."""
+ toListId: BoardsEpicListID!
+
+ """ID of epic that should be placed before the current epic."""
+ moveBeforeId: EpicID
+
+ """ID of epic that should be placed after the current epic."""
+ moveAfterId: EpicID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicMoveList"""
+type EpicMoveListPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after mutation."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Check permissions for the current user on an epic"""
+type EpicPermissions {
+ """Indicates the user can perform `admin_epic` on this resource"""
+ adminEpic: Boolean!
+
+ """Indicates the user can perform `award_emoji` on this resource"""
+ awardEmoji: Boolean!
+
+ """Indicates the user can perform `create_epic` on this resource"""
+ createEpic: Boolean!
+
+ """Indicates the user can perform `create_note` on this resource"""
+ createNote: Boolean!
+
+ """Indicates the user can perform `destroy_epic` on this resource"""
+ destroyEpic: Boolean!
+
+ """Indicates the user can perform `read_epic` on this resource"""
+ readEpic: Boolean!
+
+ """Indicates the user can perform `read_epic_iid` on this resource"""
+ readEpicIid: Boolean!
+
+ """Indicates the user can perform `update_epic` on this resource"""
+ updateEpic: Boolean!
+}
+
+"""Autogenerated input type of EpicSetSubscription"""
+input EpicSetSubscriptionInput {
+ """IID of the epic to mutate."""
+ iid: ID!
+
+ """Group the epic to mutate belongs to."""
+ groupPath: ID!
+
+ """Desired state of the subscription."""
+ subscribedState: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicSetSubscription"""
+type EpicSetSubscriptionPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after mutation."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Roadmap sort values"""
+enum EpicSort {
+ """Start date at descending order."""
+ start_date_desc @deprecated(reason: "Use START_DATE_DESC. Deprecated in 13.11.")
+
+ """Start date at ascending order."""
+ start_date_asc @deprecated(reason: "Use START_DATE_ASC. Deprecated in 13.11.")
+
+ """End date at descending order."""
+ end_date_desc @deprecated(reason: "Use END_DATE_DESC. Deprecated in 13.11.")
+
+ """End date at ascending order."""
+ end_date_asc @deprecated(reason: "Use END_DATE_ASC. Deprecated in 13.11.")
+
+ """Sort by start date in descending order."""
+ START_DATE_DESC
+
+ """Sort by start date in ascending order."""
+ START_DATE_ASC
+
+ """Sort by end date in descending order."""
+ END_DATE_DESC
+
+ """Sort by end date in ascending order."""
+ END_DATE_ASC
+
+ """Sort by title in descending order."""
+ TITLE_DESC
+
+ """Sort by title in ascending order."""
+ TITLE_ASC
+}
+
+"""State of an epic"""
+enum EpicState {
+ """All epics."""
+ all
+
+ """Open epics."""
+ opened
+
+ """Closed epics."""
+ closed
+}
+
+"""State event of an epic"""
+enum EpicStateEvent {
+ """Reopen the epic."""
+ REOPEN
+
+ """Close the epic."""
+ CLOSE
+}
+
+"""A node of an epic tree."""
+input EpicTreeNodeFieldsInputType {
+ """ID of the epic issue or epic that is being moved."""
+ id: EpicTreeSortingID!
+
+ """ID of the epic issue or issue the epic or issue is switched with."""
+ adjacentReferenceId: EpicTreeSortingID
+
+ """Type of switch. Valid values are `after` or `before`."""
+ relativePosition: MoveType
+
+ """ID of the new parent epic."""
+ newParentId: EpicID
+}
+
+"""Autogenerated input type of EpicTreeReorder"""
+input EpicTreeReorderInput {
+ """ID of the base epic of the tree."""
+ baseEpicId: EpicID!
+
+ """Parameters for updating the tree positions."""
+ moved: EpicTreeNodeFieldsInputType!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EpicTreeReorder"""
+type EpicTreeReorderPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""
+A `EpicTreeSortingID` is a global ID. It is encoded as a string.
+
+An example `EpicTreeSortingID` is: `"gid://gitlab/EpicTreeSorting/1"`.
+"""
+scalar EpicTreeSortingID
+
+"""Epic ID wildcard values"""
+enum EpicWildcardId {
+ """No epic is assigned."""
+ NONE
+
+ """Any epic is assigned."""
+ ANY
+}
+
+"""Autogenerated input type of EscalationPolicyCreate"""
+input EscalationPolicyCreateInput {
+ """Project to create the escalation policy for."""
+ projectPath: ID!
+
+ """Name of the escalation policy."""
+ name: String!
+
+ """Description of the escalation policy."""
+ description: String
+
+ """Steps of the escalation policy."""
+ rules: [EscalationRuleInput!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EscalationPolicyCreate"""
+type EscalationPolicyCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Escalation policy."""
+ escalationPolicy: EscalationPolicyType
+}
+
+"""Autogenerated input type of EscalationPolicyDestroy"""
+input EscalationPolicyDestroyInput {
+ """Escalation policy internal ID to remove."""
+ id: IncidentManagementEscalationPolicyID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EscalationPolicyDestroy"""
+type EscalationPolicyDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Escalation policy."""
+ escalationPolicy: EscalationPolicyType
+}
+
+"""Represents an escalation policy"""
+type EscalationPolicyType {
+ """Description of the escalation policy."""
+ description: String
+
+ """ID of the escalation policy."""
+ id: IncidentManagementEscalationPolicyID
+
+ """Name of the escalation policy."""
+ name: String
+
+ """Steps of the escalation policy."""
+ rules: [EscalationRuleType!]
+}
+
+"""The connection type for EscalationPolicyType."""
+type EscalationPolicyTypeConnection {
+ """A list of edges."""
+ edges: [EscalationPolicyTypeEdge]
+
+ """A list of nodes."""
+ nodes: [EscalationPolicyType]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type EscalationPolicyTypeEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: EscalationPolicyType
+}
+
+"""Autogenerated input type of EscalationPolicyUpdate"""
+input EscalationPolicyUpdateInput {
+ """ID of the on-call schedule to create the on-call rotation in."""
+ id: IncidentManagementEscalationPolicyID!
+
+ """Name of the escalation policy."""
+ name: String
+
+ """Description of the escalation policy."""
+ description: String
+
+ """Steps of the escalation policy."""
+ rules: [EscalationRuleInput!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of EscalationPolicyUpdate"""
+type EscalationPolicyUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Escalation policy."""
+ escalationPolicy: EscalationPolicyType
+}
+
+"""Represents an escalation rule"""
+input EscalationRuleInput {
+ """On-call schedule to notify."""
+ oncallScheduleIid: ID
+
+ """Username of the user to notify."""
+ username: String
+
+ """Time in seconds before the rule is activated."""
+ elapsedTimeSeconds: Int!
+
+ """Status required to prevent the rule from activating."""
+ status: EscalationRuleStatus!
+}
+
+"""Escalation rule statuses"""
+enum EscalationRuleStatus {
+ """."""
+ ACKNOWLEDGED
+
+ """."""
+ RESOLVED
+}
+
+"""Represents an escalation rule for an escalation policy"""
+type EscalationRuleType {
+ """Time in seconds before the rule is activated."""
+ elapsedTimeSeconds: Int
+
+ """ID of the escalation policy."""
+ id: IncidentManagementEscalationRuleID
+
+ """On-call schedule to notify."""
+ oncallSchedule: IncidentManagementOncallSchedule
+
+ """Status required to prevent the rule from activating."""
+ status: EscalationRuleStatus
+
+ """User to notify."""
+ user: UserCore
+}
+
+"""Representing an event"""
+type Event {
+ """Action of the event."""
+ action: EventAction!
+
+ """Author of this event."""
+ author: UserCore!
+
+ """When this event was created."""
+ createdAt: Time!
+
+ """ID of the event."""
+ id: ID!
+
+ """When this event was updated."""
+ updatedAt: Time!
+}
+
+interface Eventable {
+ """List of events associated with the object."""
+ events(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EventConnection
+}
+
+"""Event action"""
+enum EventAction {
+ """Created action"""
+ CREATED
+
+ """Updated action"""
+ UPDATED
+
+ """Closed action"""
+ CLOSED
+
+ """Reopened action"""
+ REOPENED
+
+ """Pushed action"""
+ PUSHED
+
+ """Commented action"""
+ COMMENTED
+
+ """Merged action"""
+ MERGED
+
+ """Joined action"""
+ JOINED
+
+ """Left action"""
+ LEFT
+
+ """Destroyed action"""
+ DESTROYED
+
+ """Expired action"""
+ EXPIRED
+
+ """Approved action"""
+ APPROVED
+}
+
+"""The connection type for Event."""
+type EventConnection {
+ """A list of edges."""
+ edges: [EventEdge]
+
+ """A list of nodes."""
+ nodes: [Event]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type EventEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Event
+}
+
+"""Autogenerated input type of ExportRequirements"""
+input ExportRequirementsInput {
+ """List requirements by sort order."""
+ sort: Sort
+
+ """Filter requirements by state."""
+ state: RequirementState
+
+ """Search query for requirement title."""
+ search: String
+
+ """Filter requirements by author username."""
+ authorUsername: [String!]
+
+ """Full project path the requirements are associated with."""
+ projectPath: ID!
+
+ """List of selected requirements fields to be exported."""
+ selectedFields: [String!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ExportRequirements"""
+type ExportRequirementsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Represents an external resource to send audit events to"""
+type ExternalAuditEventDestination {
+ """External destination to send audit events to."""
+ destinationUrl: String!
+
+ """Group the destination belongs to."""
+ group: Group!
+
+ """ID of the destination."""
+ id: ID!
+}
+
+"""Autogenerated input type of ExternalAuditEventDestinationCreate"""
+input ExternalAuditEventDestinationCreateInput {
+ """Destination URL."""
+ destinationUrl: String!
+
+ """Group path."""
+ groupPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ExternalAuditEventDestinationCreate"""
+type ExternalAuditEventDestinationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Destination created."""
+ externalAuditEventDestination: ExternalAuditEventDestination
+}
+
+"""Autogenerated input type of ExternalAuditEventDestinationDestroy"""
+input ExternalAuditEventDestinationDestroyInput {
+ """ID of external audit event destination to destroy."""
+ id: AuditEventsExternalAuditEventDestinationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ExternalAuditEventDestinationDestroy"""
+type ExternalAuditEventDestinationDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of ExternalAuditEventDestinationUpdate"""
+input ExternalAuditEventDestinationUpdateInput {
+ """ID of external audit event destination to destroy."""
+ id: AuditEventsExternalAuditEventDestinationID!
+
+ """Destination URL to change."""
+ destinationUrl: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ExternalAuditEventDestinationUpdate"""
+type ExternalAuditEventDestinationUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated destination."""
+ externalAuditEventDestination: ExternalAuditEventDestination
+}
+
+"""Represents an external issue"""
+type ExternalIssue {
+ """Timestamp of when the issue was created."""
+ createdAt: Time
+
+ """Type of external tracker."""
+ externalTracker: String
+
+ """Relative reference of the issue in the external tracker."""
+ relativeReference: String
+
+ """Status of the issue in the external tracker."""
+ status: String
+
+ """Title of the issue in the external tracker."""
+ title: String
+
+ """Timestamp of when the issue was updated."""
+ updatedAt: Time
+
+ """URL to the issue in the external tracker."""
+ webUrl: String
+}
+
+type GeoNode {
+ """
+ Maximum concurrency of container repository sync for this secondary node.
+ """
+ containerRepositoriesMaxCapacity: Int
+
+ """Indicates whether this Geo node is enabled."""
+ enabled: Boolean
+
+ """
+ Maximum concurrency of LFS/attachment backfill for this secondary node.
+ """
+ filesMaxCapacity: Int
+
+ """Find group wiki repository registries on this Geo node."""
+ groupWikiRepositoryRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupWikiRepositoryRegistryConnection
+
+ """ID of this GeoNode."""
+ id: ID!
+
+ """
+ URL defined on the primary node secondary nodes should use to contact it.
+ """
+ internalUrl: String
+
+ """Find LFS object registries on this Geo node."""
+ lfsObjectRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): LfsObjectRegistryConnection
+
+ """Find merge request diff registries on this Geo node."""
+ mergeRequestDiffRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestDiffRegistryConnection
+
+ """
+ Interval (in days) in which the repository verification is valid. After expiry, it is reverted.
+ """
+ minimumReverificationInterval: Int
+
+ """Unique identifier for this Geo node."""
+ name: String
+
+ """Package file registries of the GeoNode."""
+ packageFileRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageFileRegistryConnection
+
+ """Find Pages Deployment registries on this Geo node"""
+ pagesDeploymentRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PagesDeploymentRegistryConnection
+
+ """Find pipeline artifact registries on this Geo node."""
+ pipelineArtifactRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineArtifactRegistryConnection
+
+ """Indicates whether this Geo node is the primary."""
+ primary: Boolean
+
+ """Maximum concurrency of repository backfill for this secondary node."""
+ reposMaxCapacity: Int
+
+ """
+ Namespaces that should be synced, if `selective_sync_type` == `namespaces`.
+ """
+ selectiveSyncNamespaces(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NamespaceConnection
+
+ """
+ Repository storages whose projects should be synced, if `selective_sync_type` == `shards`.
+ """
+ selectiveSyncShards: [String!]
+
+ """Indicates if syncing is limited to only specific groups, or shards."""
+ selectiveSyncType: String
+
+ """Find snippet repository registries on this Geo node."""
+ snippetRepositoryRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetRepositoryRegistryConnection
+
+ """
+ Indicates if this secondary node will replicate blobs in Object Storage.
+ """
+ syncObjectStorage: Boolean
+
+ """Find terraform state version registries on this Geo node."""
+ terraformStateVersionRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TerraformStateVersionRegistryConnection
+
+ """Find Upload registries on this Geo node"""
+ uploadRegistries(
+ """Filters registries by their ID."""
+ ids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UploadRegistryConnection
+
+ """User-facing URL for this Geo node."""
+ url: String
+
+ """
+ Maximum concurrency of repository verification for this secondary node.
+ """
+ verificationMaxCapacity: Int
+}
+
+"""
+A `GitlabErrorTrackingDetailedErrorID` is a global ID. It is encoded as a string.
+
+An example `GitlabErrorTrackingDetailedErrorID` is: `"gid://gitlab/Gitlab::ErrorTracking::DetailedError/1"`.
+"""
+scalar GitlabErrorTrackingDetailedErrorID
+
+"""Autogenerated input type of GitlabSubscriptionActivate"""
+input GitlabSubscriptionActivateInput {
+ """Activation code received after purchasing a GitLab subscription."""
+ activationCode: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of GitlabSubscriptionActivate"""
+type GitlabSubscriptionActivatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Current license."""
+ license: CurrentLicense
+}
+
+"""
+A global identifier.
+
+A global identifier represents an object uniquely across the application.
+An example of such an identifier is `"gid://gitlab/User/1"`.
+
+Global identifiers are encoded as strings.
+
+"""
+scalar GlobalID
+
+type GrafanaIntegration {
+ """Timestamp of the issue's creation."""
+ createdAt: Time!
+
+ """Indicates whether Grafana integration is enabled."""
+ enabled: Boolean!
+
+ """URL for the Grafana host for the Grafana integration."""
+ grafanaUrl: String!
+
+ """Internal ID of the Grafana integration."""
+ id: ID!
+
+ """Timestamp of the issue's last activity."""
+ updatedAt: Time!
+}
+
+type Group {
+ """Size limit for repositories in the namespace in bytes."""
+ actualRepositorySizeLimit: Float
+
+ """Additional storage purchased for the root namespace in bytes."""
+ additionalPurchasedStorageSize: Float
+
+ """
+ Indicates whether Auto DevOps is enabled for all projects within this group.
+ """
+ autoDevopsEnabled: Boolean
+
+ """Avatar URL of the group."""
+ avatarUrl: String
+
+ """Number of billable users in the group."""
+ billableMembersCount: Int
+
+ """A single board of the group."""
+ board(
+ """ID of the board."""
+ id: BoardID!
+ ): Board
+
+ """Boards of the group."""
+ boards(
+ """Find a board by its ID."""
+ id: BoardID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): BoardConnection
+
+ """Represents the code coverage activity for this group."""
+ codeCoverageActivities(
+ """
+ First day for which to fetch code coverage activity (maximum time window is set to 90 days).
+ """
+ startDate: Date!
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CodeCoverageActivityConnection
+
+ """Compliance frameworks available to projects in this namespace."""
+ complianceFrameworks(
+ """Global ID of a specific compliance framework to return."""
+ id: ComplianceManagementFrameworkID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ComplianceFrameworkConnection
+
+ """Find contacts of this group."""
+ contacts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CustomerRelationsContactConnection
+
+ """Container repositories of the group."""
+ containerRepositories(
+ """Filter the container repositories by their name."""
+ name: String
+
+ """Sort container repositories by this criteria."""
+ sort: ContainerRepositorySort = created_desc
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ContainerRepositoryConnection
+
+ """Number of container repositories in the group."""
+ containerRepositoriesCount: Int!
+
+ """
+ Includes at least one project where the repository size exceeds the limit.
+ """
+ containsLockedProjects: Boolean!
+
+ """
+ Custom emoji within this namespace. Available only when feature flag
+ `custom_emoji` is enabled. This flag is disabled by default, because the
+ feature is experimental and is subject to change without notice.
+ """
+ customEmoji(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CustomEmojiConnection
+
+ """Number of dependency proxy blobs cached in the group."""
+ dependencyProxyBlobCount: Int!
+
+ """Dependency Proxy blobs."""
+ dependencyProxyBlobs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DependencyProxyBlobConnection
+
+ """Number of dependency proxy images cached in the group."""
+ dependencyProxyImageCount: Int!
+
+ """Prefix for pulling images when using the dependency proxy."""
+ dependencyProxyImagePrefix: String!
+
+ """Dependency proxy TTL policy for the group."""
+ dependencyProxyImageTtlPolicy: DependencyProxyImageTtlGroupPolicy
+
+ """Dependency Proxy manifests."""
+ dependencyProxyManifests(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DependencyProxyManifestConnection
+
+ """Dependency Proxy settings for the group."""
+ dependencyProxySetting: DependencyProxySetting
+
+ """Total size of the dependency proxy cached images."""
+ dependencyProxyTotalSize: String!
+
+ """List of descendant groups of this group."""
+ descendantGroups(
+ """List of descendant groups of the parent group."""
+ includeParentDescendants: Boolean = true
+
+ """Limit result to groups owned by authenticated user."""
+ owned: Boolean
+
+ """Search query for group name or group full path."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """Description of the namespace."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Group's DORA metrics."""
+ dora: Dora
+
+ """Indicates if a group has email notifications disabled."""
+ emailsDisabled: Boolean
+
+ """Find a single epic."""
+ epic(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+ ): Epic
+
+ """Find a single epic board."""
+ epicBoard(
+ """Find an epic board by ID."""
+ id: BoardsEpicBoardID!
+ ): EpicBoard
+
+ """Find epic boards."""
+ epicBoards(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicBoardConnection
+
+ """Find epics."""
+ epics(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Search query for title or description."""
+ search: String
+
+ """IID of the epic, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of epics, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """Filter epics by state."""
+ state: EpicState
+
+ """
+ Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.
+ """
+ in: [IssuableSearchableField!]
+
+ """List epics by sort order."""
+ sort: EpicSort
+
+ """Filter epics by author."""
+ authorUsername: String
+
+ """Filter epics by labels."""
+ labelName: [String!]
+
+ """Filter epics by milestone title, computed from epic's issues."""
+ milestoneTitle: String
+
+ """Filter epics by IID for autocomplete."""
+ iidStartsWith: String
+
+ """Include epics from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Include epics from descendant groups."""
+ includeDescendantGroups: Boolean = true
+
+ """Filter epics by given confidentiality."""
+ confidential: Boolean
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Negated epic arguments."""
+ not: NegatedEpicFilterInput
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EpicConnection
+
+ """Indicates if Epics are enabled for namespace"""
+ epicsEnabled: Boolean
+
+ """Full name of the namespace."""
+ fullName: String!
+
+ """Full path of the namespace."""
+ fullPath: ID!
+
+ """A membership of a user within this group."""
+ groupMembers(
+ """Search query."""
+ search: String
+
+ """Filter members by the given member relations."""
+ relations: [GroupMemberRelation!] = [DIRECT, INHERITED]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupMemberConnection
+
+ """ID of the namespace."""
+ id: ID!
+
+ """Status of the temporary storage increase."""
+ isTemporaryStorageIncreaseEnabled: Boolean!
+
+ """Issues for projects in this group."""
+ issues(
+ """Search query for title or description."""
+ search: String
+
+ """IID of the issue. For example, "1"."""
+ iid: String
+
+ """List of IIDs of issues. For example, `["1", "2"]`."""
+ iids: [String!]
+
+ """Labels applied to this issue."""
+ labelName: [String]
+
+ """Milestone applied to this issue."""
+ milestoneTitle: [String]
+
+ """Username of the author of the issue."""
+ authorUsername: String
+
+ """Usernames of users assigned to the issue."""
+ assigneeUsernames: [String!]
+
+ """
+ ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported.
+ """
+ assigneeId: String
+
+ """Issues created before this date."""
+ createdBefore: Time
+
+ """Issues created after this date."""
+ createdAfter: Time
+
+ """Issues updated before this date."""
+ updatedBefore: Time
+
+ """Issues updated after this date."""
+ updatedAfter: Time
+
+ """Issues closed before this date."""
+ closedBefore: Time
+
+ """Issues closed after this date."""
+ closedAfter: Time
+
+ """Filter issues by the given issue types."""
+ types: [IssueType!]
+
+ """Filter issues by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """
+ Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues.
+ """
+ confidential: Boolean
+
+ """Negated arguments."""
+ not: NegatedIssueFilterInput
+
+ """Current state of this issue."""
+ state: IssuableState
+
+ """Sort issues by this criteria."""
+ sort: IssueSort = created_desc
+
+ """List of iteration Global IDs applied to the issue."""
+ iterationId: [ID]
+
+ """Filter by iteration ID wildcard."""
+ iterationWildcardId: IterationWildcardId
+
+ """
+ ID of an epic associated with the issues, "none" and "any" values are supported.
+ """
+ epicId: String
+
+ """Whether to include subepics when filtering issues by epicId."""
+ includeSubepics: Boolean
+
+ """Weight applied to the issue, "none" and "any" values are supported."""
+ weight: String
+
+ """Include issues belonging to subgroups"""
+ includeSubgroups: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Find iteration cadences."""
+ iterationCadences(
+ """Global ID of the iteration cadence to look up."""
+ id: IterationsCadenceID
+
+ """Fuzzy search by title."""
+ title: String
+
+ """Duration in weeks of the iterations within this cadence."""
+ durationInWeeks: Int
+
+ """
+ Whether the iteration cadence should automatically generate future iterations.
+ """
+ automatic: Boolean
+
+ """Whether the iteration cadence is active."""
+ active: Boolean
+
+ """Whether to include ancestor groups to search iterations cadences in."""
+ includeAncestorGroups: Boolean
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IterationCadenceConnection
+
+ """Find iterations."""
+ iterations(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Filter iterations by state."""
+ state: IterationState
+
+ """Fuzzy search by title."""
+ title: String
+
+ """Global ID of the Iteration to look up."""
+ id: ID
+
+ """Internal ID of the Iteration to look up."""
+ iid: ID
+
+ """Whether to include ancestor iterations. Defaults to true."""
+ includeAncestors: Boolean
+
+ """Global iteration cadence IDs by which to look up the iterations."""
+ iterationCadenceIds: [IterationsCadenceID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IterationConnection
+
+ """Label available on this group."""
+ label(
+ """Title of the label."""
+ title: String!
+ ): Label
+
+ """Labels available on this group."""
+ labels(
+ """Search term to find labels with."""
+ searchTerm: String
+
+ """Include labels from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Include labels from descendant groups."""
+ includeDescendantGroups: Boolean = false
+
+ """Include only group level labels."""
+ onlyGroupLabels: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Indicates if Large File Storage (LFS) is enabled for namespace."""
+ lfsEnabled: Boolean
+
+ """Indicates if a group is disabled from getting mentioned."""
+ mentionsDisabled: Boolean
+
+ """Merge requests for projects in this group."""
+ mergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """Include merge requests belonging to subgroups"""
+ includeSubgroups: Boolean = false
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Milestones of the group."""
+ milestones(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`."""
+ ids: [ID!]
+
+ """Filter milestones by state."""
+ state: MilestoneStateEnum
+
+ """Title of the milestone."""
+ title: String
+
+ """Search string for the title."""
+ searchTitle: String
+
+ """Date the milestone contains."""
+ containingDate: Time
+
+ """Sort milestones by this criteria."""
+ sort: MilestoneSort = DUE_DATE_ASC
+
+ """Include milestones from all subgroups and subprojects."""
+ includeDescendants: Boolean
+
+ """Include milestones from all parent groups."""
+ includeAncestors: Boolean
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MilestoneConnection
+
+ """Name of the namespace."""
+ name: String!
+
+ """Find organizations of this group."""
+ 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
+ ): CustomerRelationsOrganizationConnection
+
+ """Package settings for the namespace."""
+ packageSettings: PackageSettings
+
+ """Packages of the group."""
+ packages(
+ """Sort packages by this criteria."""
+ sort: PackageGroupSort = CREATED_DESC
+
+ """Search a package by name."""
+ packageName: String = null
+
+ """Filter a package by type."""
+ packageType: PackageTypeEnum = null
+
+ """Filter a package by status."""
+ status: PackageStatus = null
+
+ """Include versionless packages."""
+ includeVersionless: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageConnection
+
+ """Parent group."""
+ parent: Group
+
+ """Path of the namespace."""
+ path: String!
+
+ """Permission level required to create projects in the group."""
+ projectCreationLevel: String
+
+ """Projects within this namespace."""
+ projects(
+ """Include also subgroup projects."""
+ includeSubgroups: Boolean = false
+
+ """Search project with most similar names or paths."""
+ search: String = null
+
+ """Sort projects by this criteria."""
+ sort: NamespaceProjectSort = null
+
+ """Filter projects by IDs."""
+ ids: [ID!] = null
+
+ """Returns only the projects which have code coverage."""
+ hasCodeCoverage: Boolean = false
+
+ """Returns only the projects which have vulnerabilities."""
+ hasVulnerabilities: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection!
+
+ """
+ Number of projects in the root namespace where the repository size exceeds the limit.
+ """
+ repositorySizeExcessProjectCount: Int!
+
+ """Indicates if users can request access to namespace."""
+ requestAccessEnabled: Boolean
+
+ """
+ Indicates if all users in this group are required to set up two-factor authentication.
+ """
+ requireTwoFactorAuthentication: Boolean
+
+ """
+ Aggregated storage statistics of the namespace. Only available for root namespaces.
+ """
+ rootStorageStatistics: RootStorageStatistics
+
+ """Find runners visible to the current user."""
+ runners(
+ """Filter runners by status."""
+ status: CiRunnerStatus
+
+ """Filter runners by type."""
+ type: CiRunnerType
+
+ """Filter by tags associated with the runner (comma-separated or array)."""
+ tagList: [String!]
+
+ """Filter by full token or partial text in description field."""
+ search: String
+
+ """Sort order of results."""
+ sort: CiRunnerSort
+
+ """Control which runners to include in the results."""
+ membership: RunnerMembershipFilter = DESCENDANTS
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiRunnerConnection
+
+ """
+ Indicates if sharing a project with another group within this group is prevented.
+ """
+ shareWithGroupLock: Boolean
+
+ """Shared runners availability for the namespace and its descendants."""
+ sharedRunnersSetting: SharedRunnersSetting
+
+ """Group statistics."""
+ stats: GroupStats
+
+ """Total storage limit of the root namespace in bytes."""
+ storageSizeLimit: Float
+
+ """Permission level required to create subgroups within the group."""
+ subgroupCreationLevel: String
+
+ """Date until the temporary storage increase is active."""
+ temporaryStorageIncreaseEndsOn: Time
+
+ """
+ Time logged on issues and merge requests in the group and its subgroups.
+ """
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection!
+
+ """Total repository size of all projects in the root namespace in bytes."""
+ totalRepositorySize: Float
+
+ """
+ Total excess repository size of all projects in the root namespace in bytes.
+ """
+ totalRepositorySizeExcess: Float
+
+ """Time before two-factor authentication is enforced."""
+ twoFactorGracePeriod: Int
+
+ """Permissions for the current user on the resource"""
+ userPermissions: GroupPermissions!
+
+ """Visibility of the namespace."""
+ visibility: String
+
+ """
+ Vulnerabilities reported on the projects in the group and its subgroups.
+ """
+ vulnerabilities(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by VulnerabilityScanner.externalId."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """List vulnerabilities by sort order."""
+ sort: VulnerabilitySort = severity_desc
+
+ """
+ Returns only the vulnerabilities which have been resolved on default branch.
+ """
+ hasResolution: Boolean
+
+ """Returns only the vulnerabilities which have linked issues."""
+ hasIssues: Boolean
+
+ """
+ Filter vulnerabilities by location image. When this filter is present, the
+ response only matches entries for a `reportType` that includes
+ `container_scanning`, `cluster_image_scanning`.
+ """
+ image: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityConnection
+
+ """
+ The historical number of vulnerabilities per day for the projects in the group and its subgroups.
+ """
+ vulnerabilitiesCountByDay(
+ """First day for which to fetch vulnerability history."""
+ startDate: ISO8601Date!
+
+ """Last day for which to fetch vulnerability history."""
+ endDate: ISO8601Date!
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilitiesCountByDayConnection
+
+ """Represents vulnerable project counts for each grade."""
+ vulnerabilityGrades(
+ """Include grades belonging to subgroups."""
+ includeSubgroups: Boolean = false
+ ): [VulnerableProjectsByGrade!]!
+
+ """
+ Vulnerability scanners reported on the project vulnerabilities of the group and its subgroups.
+ """
+ vulnerabilityScanners(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityScannerConnection
+
+ """Counts for each vulnerability severity in the group and its subgroups."""
+ vulnerabilitySeveritiesCount(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by scanner."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """Filter vulnerabilities that do or do not have issues."""
+ hasIssues: Boolean
+
+ """Filter vulnerabilities that do or do not have a resolution."""
+ hasResolution: Boolean
+ ): VulnerabilitySeveritiesCount
+
+ """Web URL of the group."""
+ webUrl: String!
+}
+
+"""The connection type for Group."""
+type GroupConnection {
+ """A list of edges."""
+ edges: [GroupEdge]
+
+ """A list of nodes."""
+ nodes: [Group]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type GroupEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Group
+}
+
+"""
+A `GroupID` is a global ID. It is encoded as a string.
+
+An example `GroupID` is: `"gid://gitlab/Group/1"`.
+"""
+scalar GroupID
+
+"""Represents a Group Membership"""
+type GroupMember implements MemberInterface {
+ """GitLab::Access level."""
+ accessLevel: AccessLevel
+
+ """Date and time the membership was created."""
+ createdAt: Time
+
+ """User that authorized membership."""
+ createdBy: UserCore
+
+ """Date and time the membership expires."""
+ expiresAt: Time
+
+ """Group that a User is a member of."""
+ group: Group
+
+ """ID of the member."""
+ id: ID!
+
+ """Date and time the membership was last updated."""
+ updatedAt: Time
+
+ """User that is associated with the member object."""
+ user: UserCore
+
+ """Permissions for the current user on the resource"""
+ userPermissions: GroupPermissions!
+}
+
+"""The connection type for GroupMember."""
+type GroupMemberConnection {
+ """A list of edges."""
+ edges: [GroupMemberEdge]
+
+ """A list of nodes."""
+ nodes: [GroupMember]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type GroupMemberEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: GroupMember
+}
+
+"""Group member relation"""
+enum GroupMemberRelation {
+ """Members in the group itself."""
+ DIRECT
+
+ """Members in the group's ancestor groups."""
+ INHERITED
+
+ """Members in the group's subgroups."""
+ DESCENDANTS
+}
+
+"""User permission on groups"""
+enum GroupPermission {
+ """Groups where the user can create projects."""
+ CREATE_PROJECTS
+}
+
+type GroupPermissions {
+ """Indicates the user can perform `create_projects` on this resource"""
+ createProjects: Boolean!
+
+ """Indicates the user can perform `read_group` on this resource"""
+ readGroup: Boolean!
+}
+
+"""Contains release-related statistics about a group"""
+type GroupReleaseStats {
+ """Total number of releases in all descendant projects of the group."""
+ releasesCount: Int
+
+ """
+ Percentage of the group's descendant projects that have at least one release.
+ """
+ releasesPercentage: Int
+}
+
+"""Contains statistics about a group"""
+type GroupStats {
+ """Statistics related to releases within the group."""
+ releaseStats: GroupReleaseStats
+}
+
+"""Autogenerated input type of GroupUpdate"""
+input GroupUpdateInput {
+ """Full path of the group that will be updated."""
+ fullPath: ID!
+
+ """Shared runners availability for the namespace and its descendants."""
+ sharedRunnersSetting: SharedRunnersSetting!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of GroupUpdate"""
+type GroupUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Group after update."""
+ group: Group
+}
+
+"""
+Represents the Geo sync and verification state of a group wiki repository
+"""
+type GroupWikiRepositoryRegistry {
+ """Timestamp when the GroupWikiRepositoryRegistry was created"""
+ createdAt: Time
+
+ """ID of the Group Wiki Repository."""
+ groupWikiRepositoryId: ID!
+
+ """ID of the GroupWikiRepositoryRegistry"""
+ id: ID!
+
+ """Error message during sync of the GroupWikiRepositoryRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the GroupWikiRepositoryRegistry
+ """
+ lastSyncedAt: Time
+
+ """
+ Timestamp after which the GroupWikiRepositoryRegistry should be resynced
+ """
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the GroupWikiRepositoryRegistry
+ """
+ retryCount: Int
+
+ """Sync state of the GroupWikiRepositoryRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for GroupWikiRepositoryRegistry."""
+type GroupWikiRepositoryRegistryConnection {
+ """A list of edges."""
+ edges: [GroupWikiRepositoryRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [GroupWikiRepositoryRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type GroupWikiRepositoryRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: GroupWikiRepositoryRegistry
+}
+
+"""Health status of an issue or epic"""
+enum HealthStatus {
+ """On track"""
+ onTrack
+
+ """Needs attention"""
+ needsAttention
+
+ """At risk"""
+ atRisk
+}
+
+"""Autogenerated input type of HttpIntegrationCreate"""
+input HttpIntegrationCreateInput {
+ """Project to create the integration in."""
+ projectPath: ID!
+
+ """Name of the integration."""
+ name: String!
+
+ """Whether the integration is receiving alerts."""
+ active: Boolean!
+
+ """Example of an alert payload."""
+ payloadExample: JsonString
+
+ """
+ Custom mapping of GitLab alert attributes to fields from the payload example.
+ """
+ payloadAttributeMappings: [AlertManagementPayloadAlertFieldInput!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of HttpIntegrationCreate"""
+type HttpIntegrationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """HTTP integration."""
+ integration: AlertManagementHttpIntegration
+}
+
+"""Autogenerated input type of HttpIntegrationDestroy"""
+input HttpIntegrationDestroyInput {
+ """ID of the integration to remove."""
+ id: AlertManagementHttpIntegrationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of HttpIntegrationDestroy"""
+type HttpIntegrationDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """HTTP integration."""
+ integration: AlertManagementHttpIntegration
+}
+
+"""Autogenerated input type of HttpIntegrationResetToken"""
+input HttpIntegrationResetTokenInput {
+ """ID of the integration to mutate."""
+ id: AlertManagementHttpIntegrationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of HttpIntegrationResetToken"""
+type HttpIntegrationResetTokenPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """HTTP integration."""
+ integration: AlertManagementHttpIntegration
+}
+
+"""Autogenerated input type of HttpIntegrationUpdate"""
+input HttpIntegrationUpdateInput {
+ """ID of the integration to mutate."""
+ id: AlertManagementHttpIntegrationID!
+
+ """Name of the integration."""
+ name: String
+
+ """Whether the integration is receiving alerts."""
+ active: Boolean
+
+ """Example of an alert payload."""
+ payloadExample: JsonString
+
+ """
+ Custom mapping of GitLab alert attributes to fields from the payload example.
+ """
+ payloadAttributeMappings: [AlertManagementPayloadAlertFieldInput!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of HttpIntegrationUpdate"""
+type HttpIntegrationUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """HTTP integration."""
+ integration: AlertManagementHttpIntegration
+}
+
+"""
+A `IncidentManagementEscalationPolicyID` is a global ID. It is encoded as a string.
+
+An example `IncidentManagementEscalationPolicyID` is: `"gid://gitlab/IncidentManagement::EscalationPolicy/1"`.
+"""
+scalar IncidentManagementEscalationPolicyID
+
+"""
+A `IncidentManagementEscalationRuleID` is a global ID. It is encoded as a string.
+
+An example `IncidentManagementEscalationRuleID` is: `"gid://gitlab/IncidentManagement::EscalationRule/1"`.
+"""
+scalar IncidentManagementEscalationRuleID
+
+"""
+A `IncidentManagementOncallParticipantID` is a global ID. It is encoded as a string.
+
+An example `IncidentManagementOncallParticipantID` is: `"gid://gitlab/IncidentManagement::OncallParticipant/1"`.
+"""
+scalar IncidentManagementOncallParticipantID
+
+"""Describes an incident management on-call rotation"""
+type IncidentManagementOncallRotation {
+ """Active period for the on-call rotation."""
+ activePeriod: OncallRotationActivePeriodType
+
+ """End date and time of the on-call rotation."""
+ endsAt: Time
+
+ """ID of the on-call rotation."""
+ id: IncidentManagementOncallRotationID!
+
+ """Length of the on-call schedule, in the units specified by lengthUnit."""
+ length: Int
+
+ """Unit of the on-call rotation length."""
+ lengthUnit: OncallRotationUnitEnum
+
+ """Name of the on-call rotation."""
+ name: String!
+
+ """Participants of the on-call rotation."""
+ 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
+ ): OncallParticipantTypeConnection
+
+ """
+ Blocks of time for which a participant is on-call within a given time frame. Time frame cannot exceed one month.
+ """
+ shifts(
+ """Start of timeframe to include shifts for."""
+ startTime: Time!
+
+ """
+ End of timeframe to include shifts for. Cannot exceed one month after start.
+ """
+ endTime: Time!
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IncidentManagementOncallShiftConnection
+
+ """Start date of the on-call rotation."""
+ startsAt: Time
+}
+
+"""The connection type for IncidentManagementOncallRotation."""
+type IncidentManagementOncallRotationConnection {
+ """A list of edges."""
+ edges: [IncidentManagementOncallRotationEdge]
+
+ """A list of nodes."""
+ nodes: [IncidentManagementOncallRotation]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type IncidentManagementOncallRotationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: IncidentManagementOncallRotation
+}
+
+"""
+A `IncidentManagementOncallRotationID` is a global ID. It is encoded as a string.
+
+An example `IncidentManagementOncallRotationID` is: `"gid://gitlab/IncidentManagement::OncallRotation/1"`.
+"""
+scalar IncidentManagementOncallRotationID
+
+"""Describes an incident management on-call schedule"""
+type IncidentManagementOncallSchedule {
+ """Description of the on-call schedule."""
+ description: String
+
+ """Internal ID of the on-call schedule."""
+ iid: ID!
+
+ """Name of the on-call schedule."""
+ name: String!
+ oncallUsers: [UserCore!]
+
+ """On-call rotation for the on-call schedule."""
+ rotation(
+ """ID of the on-call rotation."""
+ id: IncidentManagementOncallRotationID!
+ ): IncidentManagementOncallRotation
+
+ """On-call rotations for the on-call schedule."""
+ rotations(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IncidentManagementOncallRotationConnection!
+
+ """Time zone of the on-call schedule."""
+ timezone: String!
+}
+
+"""The connection type for IncidentManagementOncallSchedule."""
+type IncidentManagementOncallScheduleConnection {
+ """A list of edges."""
+ edges: [IncidentManagementOncallScheduleEdge]
+
+ """A list of nodes."""
+ nodes: [IncidentManagementOncallSchedule]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type IncidentManagementOncallScheduleEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: IncidentManagementOncallSchedule
+}
+
+"""A block of time for which a participant is on-call."""
+type IncidentManagementOncallShift {
+ """End time of the on-call shift."""
+ endsAt: Time
+
+ """Participant assigned to the on-call shift."""
+ participant: OncallParticipantType
+
+ """Start time of the on-call shift."""
+ startsAt: Time
+}
+
+"""The connection type for IncidentManagementOncallShift."""
+type IncidentManagementOncallShiftConnection {
+ """A list of edges."""
+ edges: [IncidentManagementOncallShiftEdge]
+
+ """A list of nodes."""
+ nodes: [IncidentManagementOncallShift]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type IncidentManagementOncallShiftEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: IncidentManagementOncallShift
+}
+
+type InstanceSecurityDashboard {
+ """Projects selected in Instance Security Dashboard."""
+ projects(
+ """Search query for project name, path, or description."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection!
+
+ """Represents vulnerable project counts for each grade."""
+ vulnerabilityGrades: [VulnerableProjectsByGrade!]!
+
+ """
+ Vulnerability scanners reported on the vulnerabilities from projects selected in Instance Security Dashboard.
+ """
+ vulnerabilityScanners(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityScannerConnection
+
+ """
+ Counts for each vulnerability severity from projects selected in Instance Security Dashboard.
+ """
+ vulnerabilitySeveritiesCount(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by scanner."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """Filter vulnerabilities that do or do not have issues."""
+ hasIssues: Boolean
+
+ """Filter vulnerabilities that do or do not have a resolution."""
+ hasResolution: Boolean
+ ): VulnerabilitySeveritiesCount
+}
+
+"""
+A `IntegrationsPrometheusID` is a global ID. It is encoded as a string.
+
+An example `IntegrationsPrometheusID` is: `"gid://gitlab/Integrations::Prometheus/1"`.
+The older format `"gid://gitlab/PrometheusService/1"` was deprecated in 14.1.
+"""
+scalar IntegrationsPrometheusID
+
+"""An ISO 8601-encoded date"""
+scalar ISO8601Date
+
+"""Represents an issuable."""
+union Issuable = Epic | Issue | MergeRequest
+
+"""
+A `IssuableID` is a global ID. It is encoded as a string.
+
+An example `IssuableID` is: `"gid://gitlab/Issuable/1"`.
+"""
+scalar IssuableID
+
+"""Fields to perform the search in"""
+enum IssuableSearchableField {
+ """Search in title field."""
+ TITLE
+
+ """Search in description field."""
+ DESCRIPTION
+}
+
+"""Incident severity"""
+enum IssuableSeverity {
+ """Unknown severity"""
+ UNKNOWN
+
+ """Low severity"""
+ LOW
+
+ """Medium severity"""
+ MEDIUM
+
+ """High severity"""
+ HIGH
+
+ """Critical severity"""
+ CRITICAL
+}
+
+"""State of a GitLab issue or merge request"""
+enum IssuableState {
+ """In open state."""
+ opened
+
+ """In closed state."""
+ closed
+
+ """Discussion has been locked."""
+ locked
+
+ """All available."""
+ all
+}
+
+type Issue implements NoteableInterface & CurrentUserTodos {
+ """Alert associated to this issue."""
+ alertManagementAlert: AlertManagementAlert
+
+ """Assignees of the 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
+ ): UserCoreConnection
+
+ """User that created the issue."""
+ author: UserCore!
+
+ """Indicates the issue is blocked."""
+ blocked: Boolean!
+
+ """Count of issues blocking this issue."""
+ blockedByCount: Int
+
+ """Issues blocking this issue."""
+ blockedByIssues(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Count of issues this issue is blocking."""
+ blockingCount: Int!
+
+ """Timestamp of when the issue was closed."""
+ closedAt: Time
+
+ """Indicates the issue is confidential."""
+ confidential: Boolean!
+
+ """User specific email address for the issue."""
+ createNoteEmail: String
+
+ """Timestamp of when the issue was created."""
+ createdAt: Time!
+
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Customer relations contacts of the issue."""
+ customerRelationsContacts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CustomerRelationsContactConnection
+
+ """Description of the issue."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Collection of design images associated with this issue."""
+ designCollection: DesignCollection
+
+ """Indicates discussion is locked on the issue."""
+ discussionLocked: Boolean!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Number of downvotes the issue has received."""
+ downvotes: Int!
+
+ """Due date of the issue."""
+ dueDate: Time
+
+ """
+ Indicates if a project has email notifications disabled: `true` if email notifications are disabled.
+ """
+ emailsDisabled: Boolean!
+
+ """Epic to which this issue belongs."""
+ epic: Epic
+
+ """Current health status."""
+ healthStatus: HealthStatus
+
+ """
+ Indicates the issue is hidden because the author has been banned. Will always
+ return `null` if `ban_user_feature_flag` feature flag is disabled.
+ """
+ hidden: Boolean
+
+ """Human-readable time estimate of the issue."""
+ humanTimeEstimate: String
+
+ """Human-readable total time reported as spent on the issue."""
+ humanTotalTimeSpent: String
+
+ """ID of the issue."""
+ id: ID!
+
+ """Internal ID of the issue."""
+ iid: ID!
+
+ """Iteration of the issue."""
+ iteration: Iteration
+
+ """Labels of the issue."""
+ 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
+
+ """Number of merge requests that close the issue on merge."""
+ mergeRequestsCount: Int!
+
+ """Metric images associated to the issue."""
+ metricImages: [MetricImage!]
+
+ """Milestone of the issue."""
+ milestone: Milestone
+
+ """Indicates if issue got moved from other project."""
+ moved: Boolean
+
+ """Updated Issue after it got moved to another project."""
+ movedTo: Issue
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """List of participants in the issue."""
+ 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
+ ): UserCoreConnection
+
+ """ID of the issue project."""
+ projectId: Int!
+
+ """
+ Internal reference of the issue. Returned in shortened format by default.
+ """
+ reference(
+ """
+ Boolean option specifying whether the reference should be returned in full.
+ """
+ full: Boolean = false
+ ): String!
+
+ """
+ Relative position of the issue (used for positioning in epic tree and issue boards).
+ """
+ relativePosition: Int
+
+ """Severity level of the incident."""
+ severity: IssuableSeverity
+
+ """Timestamp of when the issue SLA expires."""
+ slaDueAt: Time
+
+ """State of the issue."""
+ state: IssueState!
+
+ """Indicates whether an issue is published to the status page."""
+ statusPagePublishedIncident: Boolean
+
+ """Indicates the currently logged in user is subscribed to the issue."""
+ subscribed: Boolean!
+
+ """Task completion status of the issue."""
+ taskCompletionStatus: TaskCompletionStatus!
+
+ """Time estimate of the issue."""
+ timeEstimate: Int!
+
+ """Timelogs on the issue."""
+ timelogs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection!
+
+ """Title of the issue."""
+ title: String!
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Total time reported as spent on the issue."""
+ totalTimeSpent: Int!
+
+ """Type of the issue."""
+ type: IssueType
+
+ """Timestamp of when the issue was last updated."""
+ updatedAt: Time!
+
+ """User that last updated the issue."""
+ updatedBy: UserCore
+
+ """Number of upvotes the issue has received."""
+ upvotes: Int!
+
+ """Number of user discussions in the issue."""
+ userDiscussionsCount: Int!
+
+ """Number of user notes of the issue."""
+ userNotesCount: Int!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: IssuePermissions!
+
+ """Web path of the issue."""
+ webPath: String!
+
+ """Web URL of the issue."""
+ webUrl: String!
+
+ """Weight of the issue."""
+ weight: Int
+}
+
+"""The connection type for Issue."""
+type IssueConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [IssueEdge]
+
+ """A list of nodes."""
+ nodes: [Issue]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+
+ """Total weight of issues collection."""
+ weight: Int!
+}
+
+"""Iteration ID wildcard values for issue creation"""
+enum IssueCreationIterationWildcardId {
+ """Current iteration."""
+ CURRENT
+}
+
+"""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
+}
+
+"""
+A `IssueID` is a global ID. It is encoded as a string.
+
+An example `IssueID` is: `"gid://gitlab/Issue/1"`.
+"""
+scalar IssueID
+
+"""Autogenerated input type of IssueMove"""
+input IssueMoveInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Project to move the issue to."""
+ targetProjectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated input type of IssueMoveList"""
+input IssueMoveListInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Global ID of the board that the issue is in."""
+ boardId: BoardID!
+
+ """ID of the board list that the issue will be moved from."""
+ fromListId: ID
+
+ """ID of the board list that the issue will be moved to."""
+ toListId: ID
+
+ """ID of issue that should be placed before the current issue."""
+ moveBeforeId: ID
+
+ """ID of issue that should be placed after the current issue."""
+ moveAfterId: ID
+
+ """ID of the parent epic. NULL when removing the association."""
+ epicId: EpicID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueMoveList"""
+type IssueMoveListPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated return type of IssueMove"""
+type IssueMovePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Check permissions for the current user on a issue"""
+type IssuePermissions {
+ """Indicates the user can perform `admin_issue` on this resource"""
+ adminIssue: Boolean!
+
+ """Indicates the user can perform `create_design` on this resource"""
+ createDesign: Boolean!
+
+ """Indicates the user can perform `create_note` on this resource"""
+ createNote: Boolean!
+
+ """Indicates the user can perform `destroy_design` on this resource"""
+ destroyDesign: Boolean!
+
+ """Indicates the user can perform `read_design` on this resource"""
+ readDesign: Boolean!
+
+ """Indicates the user can perform `read_issue` on this resource"""
+ readIssue: Boolean!
+
+ """Indicates the user can perform `reopen_issue` on this resource"""
+ reopenIssue: Boolean!
+
+ """Indicates the user can perform `update_issue` on this resource"""
+ updateIssue: Boolean!
+}
+
+"""Autogenerated input type of IssueSetAssignees"""
+input IssueSetAssigneesInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """
+ Usernames to assign to the resource. Replaces existing assignees by default.
+ """
+ assigneeUsernames: [String!]!
+
+ """Operation to perform. Defaults to REPLACE."""
+ operationMode: MutationOperationMode = REPLACE
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetAssignees"""
+type IssueSetAssigneesPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetConfidential"""
+input IssueSetConfidentialInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Whether or not to set the issue as a confidential."""
+ confidential: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetConfidential"""
+type IssueSetConfidentialPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetDueDate"""
+input IssueSetDueDateInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Desired due date for the issue. Due date is removed if null."""
+ dueDate: Time
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetDueDate"""
+type IssueSetDueDatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetEpic"""
+input IssueSetEpicInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """
+ Global ID of the epic to be assigned to the issue, epic will be removed if absent or set to null
+ """
+ epicId: EpicID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetEpic"""
+type IssueSetEpicPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetIteration"""
+input IssueSetIterationInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """
+ Iteration to assign to the issue.
+
+ """
+ iterationId: IterationID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetIteration"""
+type IssueSetIterationPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetLocked"""
+input IssueSetLockedInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Whether or not to lock discussion on the issue."""
+ locked: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetLocked"""
+type IssueSetLockedPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetSeverity"""
+input IssueSetSeverityInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Set the incident severity level."""
+ severity: IssuableSeverity!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetSeverity"""
+type IssueSetSeverityPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetSubscription"""
+input IssueSetSubscriptionInput {
+ """Desired state of the subscription."""
+ subscribedState: Boolean!
+
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetSubscription"""
+type IssueSetSubscriptionPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of IssueSetWeight"""
+input IssueSetWeightInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """The desired weight for the issue. If set to null, weight is removed."""
+ weight: Int
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IssueSetWeight"""
+type IssueSetWeightPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Values for sorting issues"""
+enum IssueSort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Priority by ascending order."""
+ PRIORITY_ASC
+
+ """Priority by descending order."""
+ PRIORITY_DESC
+
+ """Label priority by ascending order."""
+ LABEL_PRIORITY_ASC
+
+ """Label priority by descending order."""
+ LABEL_PRIORITY_DESC
+
+ """Milestone due date by ascending order."""
+ MILESTONE_DUE_ASC
+
+ """Milestone due date by descending order."""
+ MILESTONE_DUE_DESC
+
+ """Due date by ascending order."""
+ DUE_DATE_ASC
+
+ """Due date by descending order."""
+ DUE_DATE_DESC
+
+ """Relative position by ascending order."""
+ RELATIVE_POSITION_ASC
+
+ """Severity from less critical to more critical."""
+ SEVERITY_ASC
+
+ """Severity from more critical to less critical."""
+ SEVERITY_DESC
+
+ """Title by ascending order."""
+ TITLE_ASC
+
+ """Title by descending order."""
+ TITLE_DESC
+
+ """Number of upvotes (awarded "thumbs up" emoji) by ascending order."""
+ POPULARITY_ASC
+
+ """Number of upvotes (awarded "thumbs up" emoji) by descending order."""
+ POPULARITY_DESC
+
+ """Weight by ascending order."""
+ WEIGHT_ASC
+
+ """Weight by descending order."""
+ WEIGHT_DESC
+
+ """Published issues shown last."""
+ PUBLISHED_ASC
+
+ """Published issues shown first."""
+ PUBLISHED_DESC
+
+ """Issues with earliest SLA due time shown first."""
+ SLA_DUE_AT_ASC
+
+ """Issues with latest SLA due time shown first."""
+ SLA_DUE_AT_DESC
+
+ """Blocking issues count by ascending order."""
+ BLOCKING_ISSUES_ASC
+
+ """Blocking issues count by descending order."""
+ BLOCKING_ISSUES_DESC
+}
+
+"""State of a GitLab issue"""
+enum IssueState {
+ """In open state."""
+ opened
+
+ """In closed state."""
+ closed
+
+ """Discussion has been locked."""
+ locked
+
+ """All available."""
+ all
+}
+
+"""Values for issue state events"""
+enum IssueStateEvent {
+ """Reopens the issue."""
+ REOPEN
+
+ """Closes the issue."""
+ CLOSE
+}
+
+"""Represents total number of issues for the represented statuses"""
+type IssueStatusCountsType {
+ """Number of issues with status ALL for the project"""
+ all: Int
+
+ """Number of issues with status CLOSED for the project"""
+ closed: Int
+
+ """Number of issues with status OPENED for the project"""
+ opened: Int
+}
+
+"""Issue type"""
+enum IssueType {
+ """Issue issue type"""
+ ISSUE
+
+ """Incident issue type"""
+ INCIDENT
+
+ """Test Case issue type"""
+ TEST_CASE
+
+ """Requirement issue type"""
+ REQUIREMENT
+}
+
+"""Represents an iteration object"""
+type Iteration implements TimeboxReportInterface {
+ """Timestamp of iteration creation."""
+ createdAt: Time!
+
+ """Description of the iteration."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Timestamp of the iteration due date."""
+ dueDate: Time
+
+ """ID of the iteration."""
+ id: ID!
+
+ """Internal ID of the iteration."""
+ iid: ID!
+
+ """Cadence of the iteration."""
+ iterationCadence: IterationCadence!
+
+ """Historically accurate report about the timebox."""
+ report: TimeboxReport
+
+ """
+ Web path of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts.
+ """
+ scopedPath: String
+
+ """
+ Web URL of the iteration, scoped to the query parent. Only valid for Project parents. Returns null in other contexts.
+ """
+ scopedUrl: String
+
+ """Timestamp of the iteration start date."""
+ startDate: Time
+
+ """State of the iteration."""
+ state: IterationState!
+
+ """Title of the iteration."""
+ title: String!
+
+ """Timestamp of last iteration update."""
+ updatedAt: Time!
+
+ """Web path of the iteration."""
+ webPath: String!
+
+ """Web URL of the iteration."""
+ webUrl: String!
+}
+
+"""Represents an iteration cadence"""
+type IterationCadence {
+ """Whether the iteration cadence is active."""
+ active: Boolean
+
+ """
+ Whether the iteration cadence should automatically generate future iterations.
+ """
+ automatic: Boolean
+
+ """
+ Description of the iteration cadence. Maximum length is 5000 characters.
+ """
+ description: String
+
+ """Duration in weeks of the iterations within this cadence."""
+ durationInWeeks: Int
+
+ """Global ID of the iteration cadence."""
+ id: IterationsCadenceID!
+
+ """
+ Future iterations to be created when iteration cadence is set to automatic.
+ """
+ iterationsInAdvance: Int
+
+ """
+ Whether the iteration cadence should roll over issues to the next iteration or not.
+ """
+ rollOver: Boolean!
+
+ """Timestamp of the iteration cadence start date."""
+ startDate: Time
+
+ """Title of the iteration cadence."""
+ title: String!
+}
+
+"""The connection type for IterationCadence."""
+type IterationCadenceConnection {
+ """A list of edges."""
+ edges: [IterationCadenceEdge]
+
+ """A list of nodes."""
+ nodes: [IterationCadence]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of IterationCadenceCreate"""
+input IterationCadenceCreateInput {
+ """Group where the iteration cadence is created."""
+ groupPath: ID!
+
+ """Title of the iteration cadence."""
+ title: String
+
+ """Duration in weeks of the iterations within this cadence."""
+ durationInWeeks: Int
+
+ """
+ Future iterations to be created when iteration cadence is set to automatic.
+ """
+ iterationsInAdvance: Int
+
+ """Timestamp of the iteration cadence start date."""
+ startDate: Time
+
+ """
+ Whether the iteration cadence should automatically generate future iterations.
+ """
+ automatic: Boolean!
+
+ """Whether the iteration cadence is active."""
+ active: Boolean!
+
+ """
+ Whether the iteration cadence should roll over issues to the next iteration or not.
+ """
+ rollOver: Boolean
+
+ """
+ Description of the iteration cadence. Maximum length is 5000 characters.
+ """
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IterationCadenceCreate"""
+type IterationCadenceCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Created iteration cadence."""
+ iterationCadence: IterationCadence
+}
+
+"""Autogenerated input type of IterationCadenceDestroy"""
+input IterationCadenceDestroyInput {
+ """Global ID of the iteration cadence."""
+ id: IterationsCadenceID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IterationCadenceDestroy"""
+type IterationCadenceDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Group the iteration cadence belongs to."""
+ group: Group!
+}
+
+"""An edge in a connection."""
+type IterationCadenceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: IterationCadence
+}
+
+"""Autogenerated input type of IterationCadenceUpdate"""
+input IterationCadenceUpdateInput {
+ """Global ID of the iteration cadence."""
+ id: IterationsCadenceID!
+
+ """Title of the iteration cadence."""
+ title: String
+
+ """Duration in weeks of the iterations within this cadence."""
+ durationInWeeks: Int
+
+ """
+ Future iterations to be created when iteration cadence is set to automatic.
+ """
+ iterationsInAdvance: Int
+
+ """Timestamp of the iteration cadence start date."""
+ startDate: Time
+
+ """
+ Whether the iteration cadence should automatically generate future iterations.
+ """
+ automatic: Boolean
+
+ """Whether the iteration cadence is active."""
+ active: Boolean
+
+ """
+ Whether the iteration cadence should roll over issues to the next iteration or not.
+ """
+ rollOver: Boolean
+
+ """
+ Description of the iteration cadence. Maximum length is 5000 characters.
+ """
+ description: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IterationCadenceUpdate"""
+type IterationCadenceUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated iteration cadence."""
+ iterationCadence: IterationCadence
+}
+
+"""The connection type for Iteration."""
+type IterationConnection {
+ """A list of edges."""
+ edges: [IterationEdge]
+
+ """A list of nodes."""
+ nodes: [Iteration]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of iterationCreate"""
+input iterationCreateInput {
+ """Full path of the project with which the resource is associated."""
+ projectPath: ID
+
+ """Full path of the group with which the resource is associated."""
+ groupPath: ID
+
+ """
+ Global ID of the iterations cadence to be assigned to newly created iteration.
+ """
+ iterationsCadenceId: IterationsCadenceID
+
+ """Title of the iteration."""
+ title: String
+
+ """Description of the iteration."""
+ description: String
+
+ """Start date of the iteration."""
+ startDate: String
+
+ """End date of the iteration."""
+ dueDate: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of iterationCreate"""
+type iterationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Created iteration."""
+ iteration: Iteration
+}
+
+"""Autogenerated input type of IterationDelete"""
+input IterationDeleteInput {
+ """ID of the iteration."""
+ id: IterationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of IterationDelete"""
+type IterationDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Group the iteration belongs to."""
+ group: Group!
+}
+
+"""An edge in a connection."""
+type IterationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Iteration
+}
+
+"""
+A `IterationID` is a global ID. It is encoded as a string.
+
+An example `IterationID` is: `"gid://gitlab/Iteration/1"`.
+The older format `"gid://gitlab/EEIteration/1"` was deprecated in 13.3.
+"""
+scalar IterationID
+
+"""
+A `IterationsCadenceID` is a global ID. It is encoded as a string.
+
+An example `IterationsCadenceID` is: `"gid://gitlab/Iterations::Cadence/1"`.
+"""
+scalar IterationsCadenceID
+
+"""State of a GitLab iteration"""
+enum IterationState {
+ """Upcoming iteration."""
+ upcoming
+
+ """Started iteration. Deprecated in 14.1: Use current instead."""
+ started @deprecated(reason: "Use current instead. Deprecated in 14.1.")
+
+ """Current iteration."""
+ current
+
+ """Open iteration."""
+ opened
+
+ """Closed iteration."""
+ closed
+
+ """Any iteration."""
+ all
+}
+
+"""Iteration ID wildcard values"""
+enum IterationWildcardId {
+ """No iteration is assigned."""
+ NONE
+
+ """An iteration is assigned."""
+ ANY
+
+ """Current iteration."""
+ CURRENT
+}
+
+type JiraImport {
+ """Timestamp of when the Jira import was created."""
+ createdAt: Time
+
+ """Count of issues that failed to import."""
+ failedToImportCount: Int!
+
+ """Count of issues that were successfully imported."""
+ importedIssuesCount: Int!
+
+ """Project key for the imported Jira project."""
+ jiraProjectKey: String!
+
+ """Timestamp of when the Jira import was scheduled."""
+ scheduledAt: Time
+
+ """User that started the Jira import."""
+ scheduledBy: UserCore
+
+ """Total count of issues that were attempted to import."""
+ totalIssueCount: Int!
+}
+
+"""The connection type for JiraImport."""
+type JiraImportConnection {
+ """A list of edges."""
+ edges: [JiraImportEdge]
+
+ """A list of nodes."""
+ nodes: [JiraImport]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type JiraImportEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: JiraImport
+}
+
+"""Autogenerated input type of JiraImportStart"""
+input JiraImportStartInput {
+ """Project to import the Jira project into."""
+ projectPath: ID!
+
+ """Project key of the importer Jira project."""
+ jiraProjectKey: String!
+
+ """Project name of the importer Jira project."""
+ jiraProjectName: String
+
+ """Mapping of Jira to GitLab users."""
+ usersMapping: [JiraUsersMappingInputType!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JiraImportStart"""
+type JiraImportStartPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Jira import data after mutation."""
+ jiraImport: JiraImport
+}
+
+"""Autogenerated input type of JiraImportUsers"""
+input JiraImportUsersInput {
+ """Project to import the Jira users into."""
+ projectPath: ID!
+
+ """
+ Index of the record the import should started at, default 0 (50 records returned).
+ """
+ startAt: Int
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JiraImportUsers"""
+type JiraImportUsersPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Users returned from Jira, matched by email and name if possible."""
+ jiraUsers: [JiraUser!]
+}
+
+type JiraProject {
+ """Key of the Jira project."""
+ key: String!
+
+ """Name of the Jira project."""
+ name: String
+
+ """ID of the Jira project."""
+ projectId: Int!
+}
+
+"""The connection type for JiraProject."""
+type JiraProjectConnection {
+ """A list of edges."""
+ edges: [JiraProjectEdge]
+
+ """A list of nodes."""
+ nodes: [JiraProject]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type JiraProjectEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: JiraProject
+}
+
+type JiraService implements Service {
+ """Indicates if the service is active."""
+ active: Boolean
+
+ """List of all Jira projects fetched through Jira REST API."""
+ projects(
+ """Project name or key."""
+ name: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): JiraProjectConnection
+
+ """Class name of the service."""
+ type: String
+}
+
+type JiraUser {
+ """ID of the matched GitLab user."""
+ gitlabId: Int
+
+ """Name of the matched GitLab user."""
+ gitlabName: String
+
+ """Username of the matched GitLab user."""
+ gitlabUsername: String
+
+ """Account ID of the Jira user."""
+ jiraAccountId: String!
+
+ """Display name of the Jira user."""
+ jiraDisplayName: String!
+
+ """Email of the Jira user, returned only for users with public emails."""
+ jiraEmail: String
+}
+
+input JiraUsersMappingInputType {
+ """Jira account ID of the user."""
+ jiraAccountId: String!
+
+ """ID of the GitLab user."""
+ gitlabId: Int
+}
+
+enum JobArtifactFileType {
+ """ARCHIVE job artifact file type."""
+ ARCHIVE
+
+ """METADATA job artifact file type."""
+ METADATA
+
+ """TRACE job artifact file type."""
+ TRACE
+
+ """JUNIT job artifact file type."""
+ JUNIT
+
+ """METRICS job artifact file type."""
+ METRICS
+
+ """METRICS REFEREE job artifact file type."""
+ METRICS_REFEREE
+
+ """NETWORK REFEREE job artifact file type."""
+ NETWORK_REFEREE
+
+ """DOTENV job artifact file type."""
+ DOTENV
+
+ """COBERTURA job artifact file type."""
+ COBERTURA
+
+ """CLUSTER APPLICATIONS job artifact file type."""
+ CLUSTER_APPLICATIONS
+
+ """LSIF job artifact file type."""
+ LSIF
+
+ """SAST job artifact file type."""
+ SAST
+
+ """SECRET DETECTION job artifact file type."""
+ SECRET_DETECTION
+
+ """DEPENDENCY SCANNING job artifact file type."""
+ DEPENDENCY_SCANNING
+
+ """CONTAINER SCANNING job artifact file type."""
+ CONTAINER_SCANNING
+
+ """CLUSTER IMAGE SCANNING job artifact file type."""
+ CLUSTER_IMAGE_SCANNING
+
+ """DAST job artifact file type."""
+ DAST
+
+ """LICENSE SCANNING job artifact file type."""
+ LICENSE_SCANNING
+
+ """ACCESSIBILITY job artifact file type."""
+ ACCESSIBILITY
+
+ """CODE QUALITY job artifact file type."""
+ CODEQUALITY
+
+ """PERFORMANCE job artifact file type."""
+ PERFORMANCE
+
+ """BROWSER PERFORMANCE job artifact file type."""
+ BROWSER_PERFORMANCE
+
+ """LOAD PERFORMANCE job artifact file type."""
+ LOAD_PERFORMANCE
+
+ """TERRAFORM job artifact file type."""
+ TERRAFORM
+
+ """REQUIREMENTS job artifact file type."""
+ REQUIREMENTS
+
+ """COVERAGE FUZZING job artifact file type."""
+ COVERAGE_FUZZING
+
+ """API FUZZING job artifact file type."""
+ API_FUZZING
+}
+
+"""Autogenerated input type of JobCancel"""
+input JobCancelInput {
+ """ID of the job to mutate."""
+ id: CiBuildID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JobCancel"""
+type JobCancelPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Job after the mutation."""
+ job: CiJob
+}
+
+"""
+A `CommitStatusID` is a global ID. It is encoded as a string.
+
+An example `CommitStatusID` is: `"gid://gitlab/CommitStatus/1"`.
+"""
+scalar JobID
+
+type JobPermissions {
+ """Indicates the user can perform `read_build` on this resource"""
+ readBuild: Boolean!
+
+ """Indicates the user can perform `read_job_artifacts` on this resource"""
+ readJobArtifacts: Boolean!
+
+ """Indicates the user can perform `update_build` on this resource"""
+ updateBuild: Boolean!
+}
+
+"""Autogenerated input type of JobPlay"""
+input JobPlayInput {
+ """ID of the job to mutate."""
+ id: CiBuildID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JobPlay"""
+type JobPlayPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Job after the mutation."""
+ job: CiJob
+}
+
+"""Autogenerated input type of JobRetry"""
+input JobRetryInput {
+ """ID of the job to mutate."""
+ id: CiBuildID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JobRetry"""
+type JobRetryPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Job after the mutation."""
+ job: CiJob
+}
+
+"""Autogenerated input type of JobUnschedule"""
+input JobUnscheduleInput {
+ """ID of the job to mutate."""
+ id: CiBuildID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of JobUnschedule"""
+type JobUnschedulePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Job after the mutation."""
+ job: CiJob
+}
+
+"""Represents untyped JSON"""
+scalar JSON
+
+"""JSON object as raw string"""
+scalar JsonString
+
+type Kas {
+ """Indicates whether the Kubernetes Agent Server is enabled."""
+ enabled: Boolean!
+
+ """URL used by the Agents to communicate with KAS."""
+ externalUrl: String
+
+ """KAS version."""
+ version: String
+}
+
+type Label {
+ """Background color of the label."""
+ color: String!
+
+ """When this label was created."""
+ createdAt: Time!
+
+ """Description of the label (Markdown rendered as HTML for caching)."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Label ID."""
+ id: ID!
+
+ """Text color of the label."""
+ textColor: String!
+
+ """Content of the label."""
+ title: String!
+
+ """When this label was last updated."""
+ updatedAt: Time!
+}
+
+"""The connection type for Label."""
+type LabelConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [LabelEdge]
+
+ """A list of nodes."""
+ nodes: [Label]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of LabelCreate"""
+input LabelCreateInput {
+ """Full path of the project with which the resource is associated."""
+ projectPath: ID
+
+ """Full path of the group with which the resource is associated."""
+ groupPath: ID
+
+ """Title of the label."""
+ title: String!
+
+ """Description of the label."""
+ description: String
+
+ """
+ The color of the label given in 6-digit hex notation with leading '#' sign
+ (for example, `#FFAABB`) or one of the CSS color names.
+
+ """
+ color: String = "#6699cc"
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of LabelCreate"""
+type LabelCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Label after mutation."""
+ label: Label
+}
+
+"""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
+}
+
+"""
+A `LabelID` is a global ID. It is encoded as a string.
+
+An example `LabelID` is: `"gid://gitlab/Label/1"`.
+"""
+scalar LabelID
+
+"""Represents the Geo sync and verification state of an LFS object"""
+type LfsObjectRegistry {
+ """Timestamp when the LfsObjectRegistry was created"""
+ createdAt: Time
+
+ """ID of the LfsObjectRegistry"""
+ id: ID!
+
+ """Error message during sync of the LfsObjectRegistry"""
+ lastSyncFailure: String
+
+ """Timestamp of the most recent successful sync of the LfsObjectRegistry"""
+ lastSyncedAt: Time
+
+ """ID of the LFS object."""
+ lfsObjectId: ID!
+
+ """Timestamp after which the LfsObjectRegistry should be resynced"""
+ retryAt: Time
+
+ """Number of consecutive failed sync attempts of the LfsObjectRegistry"""
+ retryCount: Int
+
+ """Sync state of the LfsObjectRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for LfsObjectRegistry."""
+type LfsObjectRegistryConnection {
+ """A list of edges."""
+ edges: [LfsObjectRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [LfsObjectRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type LfsObjectRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: LfsObjectRegistry
+}
+
+"""Represents an entry from the Cloud License history"""
+type LicenseHistoryEntry {
+ """Date when the license was activated."""
+ activatedAt: Date
+
+ """Date, including grace period, when licensed features will be blocked."""
+ blockChangesAt: Date
+
+ """Company of the licensee."""
+ company: String
+
+ """Email of the licensee."""
+ email: String
+
+ """Date when the license expires."""
+ expiresAt: Date
+
+ """ID of the license."""
+ id: ID!
+
+ """Name of the licensee."""
+ name: String
+
+ """Name of the subscription plan."""
+ plan: String!
+
+ """Date when the license started."""
+ startsAt: Date
+
+ """Type of the license."""
+ type: String!
+
+ """Number of paid users in the license."""
+ usersInLicenseCount: Int
+}
+
+"""The connection type for LicenseHistoryEntry."""
+type LicenseHistoryEntryConnection {
+ """A list of edges."""
+ edges: [LicenseHistoryEntryEdge]
+
+ """A list of nodes."""
+ nodes: [LicenseHistoryEntry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type LicenseHistoryEntryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: LicenseHistoryEntry
+}
+
+"""
+A `ListID` is a global ID. It is encoded as a string.
+
+An example `ListID` is: `"gid://gitlab/List/1"`.
+"""
+scalar ListID
+
+"""List limit metric setting"""
+enum ListLimitMetric {
+ """Limit list by number and total weight of issues."""
+ all_metrics
+
+ """Limit list by number of issues."""
+ issue_count
+
+ """Limit list by total weight of issues."""
+ issue_weights
+}
+
+"""Autogenerated input type of MarkAsSpamSnippet"""
+input MarkAsSpamSnippetInput {
+ """Global ID of the snippet to update."""
+ id: SnippetID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MarkAsSpamSnippet"""
+type MarkAsSpamSnippetPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Snippet after mutation."""
+ snippet: Snippet
+}
+
+"""Maven metadata"""
+type MavenMetadata {
+ """App group of the Maven package."""
+ appGroup: String!
+
+ """App name of the Maven package."""
+ appName: String!
+
+ """App version of the Maven package."""
+ appVersion: String
+
+ """Date of creation."""
+ createdAt: Time!
+
+ """ID of the metadatum."""
+ id: PackagesMavenMetadatumID!
+
+ """Path of the Maven package."""
+ path: String!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""Possible identifier types for a measurement"""
+enum MeasurementIdentifier {
+ """Project count."""
+ PROJECTS
+
+ """User count."""
+ USERS
+
+ """Issue count."""
+ ISSUES
+
+ """Merge request count."""
+ MERGE_REQUESTS
+
+ """Group count."""
+ GROUPS
+
+ """Pipeline count."""
+ PIPELINES
+
+ """Pipeline count with success status."""
+ PIPELINES_SUCCEEDED
+
+ """Pipeline count with failed status."""
+ PIPELINES_FAILED
+
+ """Pipeline count with canceled status."""
+ PIPELINES_CANCELED
+
+ """Pipeline count with skipped status."""
+ PIPELINES_SKIPPED
+}
+
+interface MemberInterface {
+ """GitLab::Access level."""
+ accessLevel: AccessLevel
+
+ """Date and time the membership was created."""
+ createdAt: Time
+
+ """User that authorized membership."""
+ createdBy: UserCore
+
+ """Date and time the membership expires."""
+ expiresAt: Time
+
+ """ID of the member."""
+ id: ID!
+
+ """Date and time the membership was last updated."""
+ updatedAt: Time
+
+ """User that is associated with the member object."""
+ user: UserCore
+}
+
+"""The connection type for MemberInterface."""
+type MemberInterfaceConnection {
+ """A list of edges."""
+ edges: [MemberInterfaceEdge]
+
+ """A list of nodes."""
+ nodes: [MemberInterface]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type MemberInterfaceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MemberInterface
+}
+
+type MergeRequest implements NoteableInterface & CurrentUserTodos {
+ """Indicates if members of the target project can push to the fork."""
+ allowCollaboration: Boolean
+
+ """
+ Information relating to rules that must be satisfied to merge this merge request.
+ """
+ approvalState: MergeRequestApprovalState!
+
+ """Number of approvals left."""
+ approvalsLeft: Int
+
+ """Number of approvals required."""
+ approvalsRequired: Int
+
+ """
+ Indicates if the merge request has all the required approvals. Returns true if no required approvals are configured.
+ """
+ approved: Boolean!
+
+ """Users who approved the merge request."""
+ approvedBy(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCoreConnection
+
+ """Assignees of the merge request."""
+ 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
+ ): MergeRequestAssigneeConnection
+
+ """User who created this merge request."""
+ author: UserCore
+
+ """Indicates if auto merge is enabled for the merge request."""
+ autoMergeEnabled: Boolean!
+
+ """Selected auto merge strategy."""
+ autoMergeStrategy: String
+
+ """Array of available auto merge strategies."""
+ availableAutoMergeStrategies: [String!]
+
+ """Number of commits in the merge request."""
+ commitCount: Int
+
+ """Merge request commits excluding merge commits."""
+ commitsWithoutMergeCommits(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Indicates if the merge request has conflicts."""
+ conflicts: Boolean!
+
+ """Timestamp of when the merge request was created."""
+ createdAt: Time!
+
+ """To-do items for the current user."""
+ currentUserTodos(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+
+ """State of the to-do items."""
+ state: TodoStateEnum
+ ): TodoConnection!
+
+ """Default merge commit message of the merge request."""
+ defaultMergeCommitMessage: String
+
+ """Default merge commit message of the merge request with description."""
+ defaultMergeCommitMessageWithDescription: String
+
+ """Default squash commit message of the merge request."""
+ defaultSquashCommitMessage: String
+
+ """
+ Description of the merge request (Markdown rendered as HTML for caching).
+ """
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Diff head SHA of the merge request."""
+ diffHeadSha: String
+
+ """
+ References of the base SHA, the head SHA, and the start SHA for this merge request.
+ """
+ diffRefs: DiffRefs
+
+ """Details about which files were changed in this merge request."""
+ diffStats(
+ """Specific file path."""
+ path: String
+ ): [DiffStats!]
+
+ """Summary of which files were changed in this merge request."""
+ diffStatsSummary: DiffStatsSummary
+
+ """Indicates if comments on the merge request are locked to members only."""
+ discussionLocked: Boolean!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Indicates if the source branch is behind the target branch."""
+ divergedFromTargetBranch: Boolean!
+
+ """Number of downvotes for the merge request."""
+ downvotes: Int!
+
+ """Indicates if the merge request is a draft."""
+ draft: Boolean!
+
+ """
+ Indicates if the project settings will lead to source branch deletion after merge.
+ """
+ forceRemoveSourceBranch: Boolean
+
+ """Indicates if the merge request has CI."""
+ hasCi: Boolean!
+
+ """Indicates if the source branch has any security reports."""
+ hasSecurityReports: Boolean!
+
+ """Pipeline running on the branch HEAD of the merge request."""
+ headPipeline: Pipeline
+
+ """Human-readable time estimate of the merge request."""
+ humanTimeEstimate: String
+
+ """Human-readable total time reported as spent on the merge request."""
+ humanTotalTimeSpent: String
+
+ """ID of the merge request."""
+ id: ID!
+
+ """Internal ID of the merge request."""
+ iid: String!
+
+ """Commit SHA of the merge request if merge is in progress."""
+ inProgressMergeCommitSha: String
+
+ """Labels of the merge request."""
+ 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
+
+ """SHA of the merge request commit (set once merged)."""
+ mergeCommitSha: String
+
+ """Error message due to a merge error."""
+ mergeError: String
+
+ """Indicates if a merge is currently occurring."""
+ mergeOngoing: Boolean!
+
+ """Status of the merge request. Deprecated in 14.0: This was renamed."""
+ mergeStatus: String @deprecated(reason: "This was renamed. Please use `MergeRequest.mergeStatusEnum`. Deprecated in 14.0.")
+
+ """Merge status of the merge request."""
+ mergeStatusEnum: MergeStatus
+
+ """Number of merge requests in the merge train."""
+ mergeTrainsCount: Int
+
+ """User who merged this merge request."""
+ mergeUser: UserCore
+
+ """
+ Indicates if the merge has been set to be merged when its pipeline succeeds (MWPS).
+ """
+ mergeWhenPipelineSucceeds: Boolean
+
+ """Indicates if the merge request is mergeable."""
+ mergeable: Boolean!
+
+ """
+ Indicates if all discussions in the merge request have been resolved, allowing the merge request to be merged.
+ """
+ mergeableDiscussionsState: Boolean
+
+ """Timestamp of when the merge request was merged, null if not merged."""
+ mergedAt: Time
+
+ """Milestone of the merge request."""
+ milestone: Milestone
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """
+ Participants in the merge request. This includes the author, assignees, reviewers, and users mentioned in notes.
+ """
+ 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
+ ): UserCoreConnection
+
+ """
+ Pipelines for the merge request. Note: for performance reasons, no more than
+ the most recent 500 pipelines will be returned.
+ """
+ pipelines(
+ """Filter pipelines by their status."""
+ status: PipelineStatusEnum
+
+ """Filter pipelines by the ref they are run for."""
+ ref: String
+
+ """Filter pipelines by the sha of the commit they are run for."""
+ sha: String
+
+ """
+ Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled.
+ """
+ source: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """Alias for target_project."""
+ project: Project!
+
+ """ID of the merge request project."""
+ projectId: Int!
+
+ """Rebase commit SHA of the merge request."""
+ rebaseCommitSha: String
+
+ """
+ Indicates if there is a rebase currently in progress for the merge request.
+ """
+ rebaseInProgress: Boolean!
+
+ """
+ Internal reference of the merge request. Returned in shortened format by default.
+ """
+ reference(
+ """
+ Boolean option specifying whether the reference should be returned in full.
+ """
+ full: Boolean = false
+ ): String!
+
+ """Users from whom a review has been requested."""
+ 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
+ ): MergeRequestReviewerConnection
+
+ """Indicates if the merge request is created by @GitLab-Security-Bot."""
+ securityAutoFix: Boolean
+
+ """Indicates if the target branch security reports are out of date."""
+ securityReportsUpToDateOnTargetBranch: Boolean!
+
+ """Indicates if the merge request will be rebased."""
+ shouldBeRebased: Boolean!
+
+ """
+ Indicates if the source branch of the merge request will be deleted after merge.
+ """
+ shouldRemoveSourceBranch: Boolean
+
+ """Source branch of the merge request."""
+ sourceBranch: String!
+
+ """Indicates if the source branch of the merge request exists."""
+ sourceBranchExists: Boolean!
+
+ """Indicates if the source branch is protected."""
+ sourceBranchProtected: Boolean!
+
+ """Source project of the merge request."""
+ sourceProject: Project
+
+ """ID of the merge request source project."""
+ sourceProjectId: Int
+
+ """Indicates if squash on merge is enabled."""
+ squash: Boolean!
+
+ """Indicates if squash on merge is enabled."""
+ squashOnMerge: Boolean!
+
+ """State of the merge request."""
+ state: MergeRequestState!
+
+ """
+ Indicates if the currently logged in user is subscribed to this merge request.
+ """
+ subscribed: Boolean!
+
+ """Target branch of the merge request."""
+ targetBranch: String!
+
+ """Indicates if the target branch of the merge request exists."""
+ targetBranchExists: Boolean!
+
+ """Target project of the merge request."""
+ targetProject: Project!
+
+ """ID of the merge request target project."""
+ targetProjectId: Int!
+
+ """Completion status of tasks"""
+ taskCompletionStatus: TaskCompletionStatus!
+
+ """Time estimate of the merge request."""
+ timeEstimate: Int!
+
+ """Timelogs on the merge request."""
+ timelogs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection!
+
+ """Title of the merge request."""
+ title: String!
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Total time reported as spent on the merge request."""
+ totalTimeSpent: Int!
+
+ """Timestamp of when the merge request was last updated."""
+ updatedAt: Time!
+
+ """Number of upvotes for the merge request."""
+ upvotes: Int!
+
+ """Number of user discussions in the merge request."""
+ userDiscussionsCount: Int
+
+ """User notes count of the merge request."""
+ userNotesCount: Int
+
+ """Permissions for the current user on the resource"""
+ userPermissions: MergeRequestPermissions!
+
+ """Web URL of the merge request."""
+ webUrl: String
+
+ """
+ Indicates if the merge request is a draft. Deprecated in 13.12: Use `draft`.
+ """
+ workInProgress: Boolean! @deprecated(reason: "Use `draft`. Deprecated in 13.12.")
+}
+
+"""Autogenerated input type of MergeRequestAccept"""
+input MergeRequestAcceptInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """How to merge this merge request."""
+ strategy: MergeStrategyEnum
+
+ """Custom merge commit message."""
+ commitMessage: String
+
+ """Custom squash commit message (if squash is true)."""
+ squashCommitMessage: String
+
+ """HEAD SHA at the time when this merge was requested."""
+ sha: String!
+
+ """Should the source branch be removed."""
+ shouldRemoveSourceBranch: Boolean
+
+ """Squash commits on the source branch before merge."""
+ squash: Boolean = false
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestAccept"""
+type MergeRequestAcceptPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""
+Information relating to rules that must be satisfied to merge this merge request.
+"""
+type MergeRequestApprovalState {
+ """
+ Indicates if the merge request approval rules are overwritten for the merge request.
+ """
+ approvalRulesOverwritten: Boolean
+
+ """List of approval rules associated with the merge request."""
+ rules: [ApprovalRule!]
+}
+
+"""A user assigned to a merge request."""
+type MergeRequestAssignee implements User {
+ """Merge requests assigned to the user."""
+ assignedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Merge requests authored by the user."""
+ authoredMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """URL of the user's avatar."""
+ avatarUrl: String
+
+ """Indicates if the user is a bot."""
+ bot: Boolean!
+
+ """User callouts that belong to the user."""
+ callouts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCalloutConnection
+
+ """User email. Deprecated in 13.7: This was renamed."""
+ email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.")
+
+ """Group count for the user."""
+ groupCount: Int
+
+ """Group memberships of the user."""
+ groupMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupMemberConnection
+
+ """
+ Groups where the user has access. Will always return `null` if
+ `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+ """
+ groups(
+ """Search by group name or path."""
+ search: String
+
+ """Filter by permissions the user has on groups."""
+ permissionScope: GroupPermission
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """ID of the user."""
+ id: ID!
+
+ """Location of the user."""
+ location: String
+
+ """Details of this user's interactions with the merge request."""
+ mergeRequestInteraction: UserMergeRequestInteraction
+
+ """Human-readable name of the user."""
+ name: String!
+
+ """Personal namespace of the user."""
+ namespace: Namespace
+
+ """Project memberships of the user."""
+ projectMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectMemberConnection
+
+ """User's public email."""
+ publicEmail: String
+
+ """Merge requests assigned to the user for review."""
+ reviewRequestedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Snippets authored by the user."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """Type of snippet."""
+ type: TypeEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Projects starred by the user."""
+ starredProjects(
+ """Search query."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection
+
+ """State of the user."""
+ state: UserState!
+
+ """User status."""
+ status: UserStatus
+
+ """Time logged by the user."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """To-do items of the user."""
+ todos(
+ """Action to be filtered."""
+ action: [TodoActionEnum!]
+
+ """ID of an author."""
+ authorId: [ID!]
+
+ """ID of a project."""
+ projectId: [ID!]
+
+ """ID of a group."""
+ groupId: [ID!]
+
+ """State of the todo."""
+ state: [TodoStateEnum!]
+
+ """Type of the todo."""
+ type: [TodoTargetEnum!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TodoConnection
+
+ """Permissions for the current user on the resource."""
+ userPermissions: UserPermissions!
+
+ """Username of the user. Unique within this instance of GitLab."""
+ username: String!
+
+ """Web path of the user."""
+ webPath: String!
+
+ """Web URL of the user."""
+ webUrl: String!
+}
+
+"""The connection type for MergeRequestAssignee."""
+type MergeRequestAssigneeConnection {
+ """A list of edges."""
+ edges: [MergeRequestAssigneeEdge]
+
+ """A list of nodes."""
+ nodes: [MergeRequestAssignee]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type MergeRequestAssigneeEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MergeRequestAssignee
+}
+
+"""The connection type for MergeRequest."""
+type MergeRequestConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [MergeRequestEdge]
+
+ """A list of nodes."""
+ nodes: [MergeRequest]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+
+ """
+ Total sum of time to merge, in seconds, for the collection of merge requests.
+ """
+ totalTimeToMerge: Float
+}
+
+"""Autogenerated input type of MergeRequestCreate"""
+input MergeRequestCreateInput {
+ """Project full path the merge request is associated with."""
+ projectPath: ID!
+
+ """Title of the merge request."""
+ title: String!
+
+ """Source branch of the merge request."""
+ sourceBranch: String!
+
+ """Target branch of the merge request."""
+ targetBranch: String!
+
+ """
+ Description of the merge request (Markdown rendered as HTML for caching).
+ """
+ description: String
+
+ """Labels of the merge request."""
+ labels: [String!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestCreate"""
+type MergeRequestCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Represents the Geo sync and verification state of a Merge Request diff"""
+type MergeRequestDiffRegistry {
+ """Timestamp when the MergeRequestDiffRegistry was created"""
+ createdAt: Time
+
+ """ID of the MergeRequestDiffRegistry"""
+ id: ID!
+
+ """Error message during sync of the MergeRequestDiffRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the MergeRequestDiffRegistry
+ """
+ lastSyncedAt: Time
+
+ """ID of the Merge Request diff."""
+ mergeRequestDiffId: ID!
+
+ """Timestamp after which the MergeRequestDiffRegistry should be resynced"""
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the MergeRequestDiffRegistry
+ """
+ retryCount: Int
+
+ """Sync state of the MergeRequestDiffRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for MergeRequestDiffRegistry."""
+type MergeRequestDiffRegistryConnection {
+ """A list of edges."""
+ edges: [MergeRequestDiffRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [MergeRequestDiffRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type MergeRequestDiffRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MergeRequestDiffRegistry
+}
+
+"""An edge in a connection."""
+type MergeRequestEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MergeRequest
+}
+
+"""
+A `MergeRequestID` is a global ID. It is encoded as a string.
+
+An example `MergeRequestID` is: `"gid://gitlab/MergeRequest/1"`.
+"""
+scalar MergeRequestID
+
+"""New state to apply to a merge request."""
+enum MergeRequestNewState {
+ """Open the merge request if it is closed."""
+ OPEN
+
+ """Close the merge request if it is open."""
+ CLOSED
+}
+
+"""Check permissions for the current user on a merge request"""
+type MergeRequestPermissions {
+ """Indicates the user can perform `admin_merge_request` on this resource"""
+ adminMergeRequest: Boolean!
+
+ """Indicates the user can perform `can_merge` on this resource"""
+ canMerge: Boolean!
+
+ """
+ Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource
+ """
+ cherryPickOnCurrentMergeRequest: Boolean!
+
+ """Indicates the user can perform `create_note` on this resource"""
+ createNote: Boolean!
+
+ """
+ Indicates the user can perform `push_to_source_branch` on this resource
+ """
+ pushToSourceBranch: Boolean!
+
+ """Indicates the user can perform `read_merge_request` on this resource"""
+ readMergeRequest: Boolean!
+
+ """Indicates the user can perform `remove_source_branch` on this resource"""
+ removeSourceBranch: Boolean!
+
+ """
+ Indicates the user can perform `revert_on_current_merge_request` on this resource
+ """
+ revertOnCurrentMergeRequest: Boolean!
+
+ """Indicates the user can perform `update_merge_request` on this resource"""
+ updateMergeRequest: Boolean!
+}
+
+"""A user assigned to a merge request as a reviewer."""
+type MergeRequestReviewer implements User {
+ """Merge requests assigned to the user."""
+ assignedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Merge requests authored by the user."""
+ authoredMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """URL of the user's avatar."""
+ avatarUrl: String
+
+ """Indicates if the user is a bot."""
+ bot: Boolean!
+
+ """User callouts that belong to the user."""
+ callouts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCalloutConnection
+
+ """User email. Deprecated in 13.7: This was renamed."""
+ email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.")
+
+ """Group count for the user."""
+ groupCount: Int
+
+ """Group memberships of the user."""
+ groupMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupMemberConnection
+
+ """
+ Groups where the user has access. Will always return `null` if
+ `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+ """
+ groups(
+ """Search by group name or path."""
+ search: String
+
+ """Filter by permissions the user has on groups."""
+ permissionScope: GroupPermission
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """ID of the user."""
+ id: ID!
+
+ """Location of the user."""
+ location: String
+
+ """Details of this user's interactions with the merge request."""
+ mergeRequestInteraction: UserMergeRequestInteraction
+
+ """Human-readable name of the user."""
+ name: String!
+
+ """Personal namespace of the user."""
+ namespace: Namespace
+
+ """Project memberships of the user."""
+ projectMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectMemberConnection
+
+ """User's public email."""
+ publicEmail: String
+
+ """Merge requests assigned to the user for review."""
+ reviewRequestedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Snippets authored by the user."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """Type of snippet."""
+ type: TypeEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Projects starred by the user."""
+ starredProjects(
+ """Search query."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection
+
+ """State of the user."""
+ state: UserState!
+
+ """User status."""
+ status: UserStatus
+
+ """Time logged by the user."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """To-do items of the user."""
+ todos(
+ """Action to be filtered."""
+ action: [TodoActionEnum!]
+
+ """ID of an author."""
+ authorId: [ID!]
+
+ """ID of a project."""
+ projectId: [ID!]
+
+ """ID of a group."""
+ groupId: [ID!]
+
+ """State of the todo."""
+ state: [TodoStateEnum!]
+
+ """Type of the todo."""
+ type: [TodoTargetEnum!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TodoConnection
+
+ """Permissions for the current user on the resource."""
+ userPermissions: UserPermissions!
+
+ """Username of the user. Unique within this instance of GitLab."""
+ username: String!
+
+ """Web path of the user."""
+ webPath: String!
+
+ """Web URL of the user."""
+ webUrl: String!
+}
+
+"""The connection type for MergeRequestReviewer."""
+type MergeRequestReviewerConnection {
+ """A list of edges."""
+ edges: [MergeRequestReviewerEdge]
+
+ """A list of nodes."""
+ nodes: [MergeRequestReviewer]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type MergeRequestReviewerEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MergeRequestReviewer
+}
+
+"""Autogenerated input type of MergeRequestReviewerRereview"""
+input MergeRequestReviewerRereviewInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ User ID for the user that has been requested for a new review.
+
+ """
+ userId: UserID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestReviewerRereview"""
+type MergeRequestReviewerRereviewPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""State of a review of a GitLab merge request."""
+enum MergeRequestReviewState {
+ """The merge request is unreviewed."""
+ UNREVIEWED
+
+ """The merge request is reviewed."""
+ REVIEWED
+
+ """The merge request is attention_required."""
+ ATTENTION_REQUIRED
+}
+
+"""Autogenerated input type of MergeRequestSetAssignees"""
+input MergeRequestSetAssigneesInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Usernames to assign to the resource. Replaces existing assignees by default.
+ """
+ assigneeUsernames: [String!]!
+
+ """Operation to perform. Defaults to REPLACE."""
+ operationMode: MutationOperationMode = REPLACE
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetAssignees"""
+type MergeRequestSetAssigneesPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetDraft"""
+input MergeRequestSetDraftInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Whether or not to set the merge request as a draft.
+
+ """
+ draft: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetDraft"""
+type MergeRequestSetDraftPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetLabels"""
+input MergeRequestSetLabelsInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Label IDs to set. Replaces existing labels by default.
+
+ """
+ labelIds: [LabelID!]!
+
+ """
+ Changes the operation mode. Defaults to REPLACE.
+
+ """
+ operationMode: MutationOperationMode
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetLabels"""
+type MergeRequestSetLabelsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetLocked"""
+input MergeRequestSetLockedInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Whether or not to lock the merge request.
+
+ """
+ locked: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetLocked"""
+type MergeRequestSetLockedPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetMilestone"""
+input MergeRequestSetMilestoneInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Milestone to assign to the merge request.
+
+ """
+ milestoneId: MilestoneID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetMilestone"""
+type MergeRequestSetMilestonePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetSubscription"""
+input MergeRequestSetSubscriptionInput {
+ """Desired state of the subscription."""
+ subscribedState: Boolean!
+
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetSubscription"""
+type MergeRequestSetSubscriptionPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Autogenerated input type of MergeRequestSetWip"""
+input MergeRequestSetWipInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """
+ Whether or not to set the merge request as a draft.
+
+ """
+ wip: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestSetWip"""
+type MergeRequestSetWipPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Values for sorting merge requests"""
+enum MergeRequestSort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Priority by ascending order."""
+ PRIORITY_ASC
+
+ """Priority by descending order."""
+ PRIORITY_DESC
+
+ """Label priority by ascending order."""
+ LABEL_PRIORITY_ASC
+
+ """Label priority by descending order."""
+ LABEL_PRIORITY_DESC
+
+ """Milestone due date by ascending order."""
+ MILESTONE_DUE_ASC
+
+ """Milestone due date by descending order."""
+ MILESTONE_DUE_DESC
+
+ """Merge time by ascending order."""
+ MERGED_AT_ASC
+
+ """Merge time by descending order."""
+ MERGED_AT_DESC
+
+ """Closed time by ascending order."""
+ CLOSED_AT_ASC
+
+ """Closed time by descending order."""
+ CLOSED_AT_DESC
+}
+
+input MergeRequestsResolverNegatedParams {
+ """
+ Array of label names. All resolved merge requests will not have these labels.
+ """
+ labels: [String!]
+
+ """Title of the milestone."""
+ milestoneTitle: String
+}
+
+"""State of a GitLab merge request"""
+enum MergeRequestState {
+ """In open state."""
+ opened
+
+ """In closed state."""
+ closed
+
+ """Discussion has been locked."""
+ locked
+
+ """All available."""
+ all
+
+ """Merge request has been merged."""
+ merged
+}
+
+"""Autogenerated input type of MergeRequestUpdate"""
+input MergeRequestUpdateInput {
+ """Project the merge request to mutate is in."""
+ projectPath: ID!
+
+ """IID of the merge request to mutate."""
+ iid: String!
+
+ """Title of the merge request."""
+ title: String
+
+ """Target branch of the merge request."""
+ targetBranch: String
+
+ """
+ Description of the merge request (Markdown rendered as HTML for caching).
+ """
+ description: String
+
+ """Action to perform to change the state."""
+ state: MergeRequestNewState
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of MergeRequestUpdate"""
+type MergeRequestUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Merge request after mutation."""
+ mergeRequest: MergeRequest
+}
+
+"""Representation of whether a GitLab merge request can be merged."""
+enum MergeStatus {
+ """Merge status has not been checked."""
+ UNCHECKED
+
+ """Currently checking for mergeability."""
+ CHECKING
+
+ """There are no conflicts between the source and target branches."""
+ CAN_BE_MERGED
+
+ """There are conflicts between the source and target branches."""
+ CANNOT_BE_MERGED
+
+ """Currently unchecked. The previous state was `CANNOT_BE_MERGED`."""
+ CANNOT_BE_MERGED_RECHECK
+}
+
+enum MergeStrategyEnum {
+ """Use the merge_train merge strategy."""
+ MERGE_TRAIN
+
+ """Use the add_to_merge_train_when_pipeline_succeeds merge strategy."""
+ ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS
+
+ """Use the merge_when_pipeline_succeeds merge strategy."""
+ MERGE_WHEN_PIPELINE_SUCCEEDS
+}
+
+type Metadata {
+ """Metadata about KAS."""
+ kas: Kas!
+
+ """Revision."""
+ revision: String!
+
+ """Version."""
+ version: String!
+}
+
+"""Represents a metric image upload"""
+type MetricImage {
+ """File name of the metric image."""
+ fileName: String
+
+ """File path of the metric image."""
+ filePath: String
+
+ """ID of the metric upload."""
+ id: ID!
+
+ """Internal ID of the metric upload."""
+ iid: ID!
+
+ """URL of the metric source."""
+ url: String!
+}
+
+type MetricsDashboard {
+ """Annotations added to the dashboard."""
+ annotations(
+ """
+ Timestamp marking date and time from which annotations need to be fetched.
+ """
+ from: Time!
+
+ """
+ Timestamp marking date and time to which annotations need to be fetched.
+ """
+ to: Time
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MetricsDashboardAnnotationConnection
+
+ """Path to a file with the dashboard definition."""
+ path: String
+
+ """Dashboard schema validation warnings."""
+ schemaValidationWarnings: [String!]
+}
+
+type MetricsDashboardAnnotation {
+ """Description of the annotation."""
+ description: String
+
+ """Timestamp marking end of annotated time span."""
+ endingAt: Time
+
+ """ID of the annotation."""
+ id: ID!
+
+ """ID of a dashboard panel to which the annotation should be scoped."""
+ panelId: String
+
+ """Timestamp marking start of annotated time span."""
+ startingAt: Time
+}
+
+"""The connection type for MetricsDashboardAnnotation."""
+type MetricsDashboardAnnotationConnection {
+ """A list of edges."""
+ edges: [MetricsDashboardAnnotationEdge]
+
+ """A list of nodes."""
+ nodes: [MetricsDashboardAnnotation]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type MetricsDashboardAnnotationEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: MetricsDashboardAnnotation
+}
+
+"""
+A `MetricsDashboardAnnotationID` is a global ID. It is encoded as a string.
+
+An example `MetricsDashboardAnnotationID` is: `"gid://gitlab/Metrics::Dashboard::Annotation/1"`.
+"""
+scalar MetricsDashboardAnnotationID
+
+"""Represents a milestone"""
+type Milestone implements TimeboxReportInterface {
+ """Timestamp of milestone creation."""
+ createdAt: Time!
+
+ """Description of the milestone."""
+ description: String
+
+ """Timestamp of the milestone due date."""
+ dueDate: Time
+
+ """
+ Expired state of the milestone (a milestone is expired when the due date is
+ past the current date). Defaults to `false` when due date has not been set.
+ """
+ expired: Boolean!
+
+ """Indicates if milestone is at group level."""
+ groupMilestone: Boolean!
+
+ """ID of the milestone."""
+ id: ID!
+
+ """Internal ID of the milestone."""
+ iid: ID!
+
+ """Indicates if milestone is at project level."""
+ projectMilestone: Boolean!
+
+ """Historically accurate report about the timebox."""
+ report: TimeboxReport
+
+ """Timestamp of the milestone start date."""
+ startDate: Time
+
+ """State of the milestone."""
+ state: MilestoneStateEnum!
+
+ """Milestone statistics."""
+ stats: MilestoneStats
+
+ """Indicates if milestone is at subgroup level."""
+ subgroupMilestone: Boolean!
+
+ """Title of the milestone."""
+ title: String!
+
+ """Timestamp of last milestone update."""
+ updatedAt: Time!
+
+ """Web path of the milestone."""
+ webPath: String!
+}
+
+"""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!
+}
+
+"""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
+}
+
+"""
+A `MilestoneID` is a global ID. It is encoded as a string.
+
+An example `MilestoneID` is: `"gid://gitlab/Milestone/1"`.
+"""
+scalar MilestoneID
+
+"""Values for sorting milestones"""
+enum MilestoneSort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Milestone due date by ascending order."""
+ DUE_DATE_ASC
+
+ """Milestone due date by descending order."""
+ DUE_DATE_DESC
+
+ """
+ Group milestones in this order: non-expired milestones with due dates,
+ non-expired milestones without due dates and expired milestones then sort by
+ due date in ascending order.
+ """
+ EXPIRED_LAST_DUE_DATE_ASC
+
+ """
+ Group milestones in this order: non-expired milestones with due dates,
+ non-expired milestones without due dates and expired milestones then sort by
+ due date in descending order.
+ """
+ EXPIRED_LAST_DUE_DATE_DESC
+}
+
+"""Current state of milestone"""
+enum MilestoneStateEnum {
+ """Milestone is currently active."""
+ active
+
+ """Milestone is closed."""
+ closed
+}
+
+"""Contains statistics about a milestone"""
+type MilestoneStats {
+ """Number of closed issues associated with the milestone."""
+ closedIssuesCount: Int
+
+ """Total number of issues associated with the milestone."""
+ totalIssuesCount: Int
+}
+
+"""Milestone ID wildcard values"""
+enum MilestoneWildcardId {
+ """No milestone is assigned."""
+ NONE
+
+ """Milestone is assigned."""
+ ANY
+
+ """Milestone assigned is open and started (start date <= today)."""
+ STARTED
+
+ """Milestone assigned is due in the future (due date > today)."""
+ UPCOMING
+}
+
+"""The position to which the adjacent object should be moved"""
+enum MoveType {
+ """Adjacent object is moved before the object that is being moved."""
+ before
+
+ """Adjacent object is moved after the object that is being moved."""
+ after
+}
+
+type Mutation {
+ addProjectToSecurityDashboard(
+ """Parameters for AddProjectToSecurityDashboard"""
+ input: AddProjectToSecurityDashboardInput!
+ ): AddProjectToSecurityDashboardPayload
+ adminSidekiqQueuesDeleteJobs(
+ """Parameters for AdminSidekiqQueuesDeleteJobs"""
+ input: AdminSidekiqQueuesDeleteJobsInput!
+ ): AdminSidekiqQueuesDeleteJobsPayload
+ alertSetAssignees(
+ """Parameters for AlertSetAssignees"""
+ input: AlertSetAssigneesInput!
+ ): AlertSetAssigneesPayload
+ alertTodoCreate(
+ """Parameters for AlertTodoCreate"""
+ input: AlertTodoCreateInput!
+ ): AlertTodoCreatePayload
+ apiFuzzingCiConfigurationCreate(
+ """Parameters for ApiFuzzingCiConfigurationCreate"""
+ input: ApiFuzzingCiConfigurationCreateInput!
+ ): ApiFuzzingCiConfigurationCreatePayload
+ awardEmojiAdd(
+ """Parameters for AwardEmojiAdd"""
+ input: AwardEmojiAddInput!
+ ): AwardEmojiAddPayload
+ awardEmojiRemove(
+ """Parameters for AwardEmojiRemove"""
+ input: AwardEmojiRemoveInput!
+ ): AwardEmojiRemovePayload
+ awardEmojiToggle(
+ """Parameters for AwardEmojiToggle"""
+ input: AwardEmojiToggleInput!
+ ): AwardEmojiTogglePayload
+ boardEpicCreate(
+ """Parameters for BoardEpicCreate"""
+ input: BoardEpicCreateInput!
+ ): BoardEpicCreatePayload
+ boardListCreate(
+ """Parameters for BoardListCreate"""
+ input: BoardListCreateInput!
+ ): BoardListCreatePayload
+ boardListUpdateLimitMetrics(
+ """Parameters for BoardListUpdateLimitMetrics"""
+ input: BoardListUpdateLimitMetricsInput!
+ ): BoardListUpdateLimitMetricsPayload
+
+ """**BETA** This endpoint is subject to change without notice."""
+ bulkEnableDevopsAdoptionNamespaces(
+ """Parameters for BulkEnableDevopsAdoptionNamespaces"""
+ input: BulkEnableDevopsAdoptionNamespacesInput!
+ ): BulkEnableDevopsAdoptionNamespacesPayload
+ ciCdSettingsUpdate(
+ """Parameters for CiCdSettingsUpdate"""
+ input: CiCdSettingsUpdateInput!
+ ): CiCdSettingsUpdatePayload
+ ciJobTokenScopeAddProject(
+ """Parameters for CiJobTokenScopeAddProject"""
+ input: CiJobTokenScopeAddProjectInput!
+ ): CiJobTokenScopeAddProjectPayload
+ ciJobTokenScopeRemoveProject(
+ """Parameters for CiJobTokenScopeRemoveProject"""
+ input: CiJobTokenScopeRemoveProjectInput!
+ ): CiJobTokenScopeRemoveProjectPayload
+ clusterAgentDelete(
+ """Parameters for ClusterAgentDelete"""
+ input: ClusterAgentDeleteInput!
+ ): ClusterAgentDeletePayload
+ clusterAgentTokenCreate(
+ """Parameters for ClusterAgentTokenCreate"""
+ input: ClusterAgentTokenCreateInput!
+ ): ClusterAgentTokenCreatePayload
+ clusterAgentTokenDelete(
+ """Parameters for ClusterAgentTokenDelete"""
+ input: ClusterAgentTokenDeleteInput!
+ ): ClusterAgentTokenDeletePayload
+ commitCreate(
+ """Parameters for CommitCreate"""
+ input: CommitCreateInput!
+ ): CommitCreatePayload
+
+ """
+ Configure Dependency Scanning for a project by enabling Dependency Scanning in a new or modified
+ `.gitlab-ci.yml` file in a new branch. The new branch and a URL to
+ create a Merge Request are a part of the response.
+
+ """
+ configureDependencyScanning(
+ """Parameters for ConfigureDependencyScanning"""
+ input: ConfigureDependencyScanningInput!
+ ): ConfigureDependencyScanningPayload
+
+ """
+ Configure SAST for a project by enabling SAST in a new or modified
+ `.gitlab-ci.yml` file in a new branch. The new branch and a URL to
+ create a Merge Request are a part of the response.
+
+ """
+ configureSast(
+ """Parameters for ConfigureSast"""
+ input: ConfigureSastInput!
+ ): ConfigureSastPayload
+
+ """
+ Configure Secret Detection for a project by enabling Secret Detection
+ in a new or modified `.gitlab-ci.yml` file in a new branch. The new
+ branch and a URL to create a Merge Request are a part of the
+ response.
+
+ """
+ configureSecretDetection(
+ """Parameters for ConfigureSecretDetection"""
+ input: ConfigureSecretDetectionInput!
+ ): ConfigureSecretDetectionPayload
+ createAlertIssue(
+ """Parameters for CreateAlertIssue"""
+ input: CreateAlertIssueInput!
+ ): CreateAlertIssuePayload
+ createAnnotation(
+ """Parameters for CreateAnnotation"""
+ input: CreateAnnotationInput!
+ ): CreateAnnotationPayload
+ createBoard(
+ """Parameters for CreateBoard"""
+ input: CreateBoardInput!
+ ): CreateBoardPayload
+ createBranch(
+ """Parameters for CreateBranch"""
+ input: CreateBranchInput!
+ ): CreateBranchPayload
+ createClusterAgent(
+ """Parameters for CreateClusterAgent"""
+ input: CreateClusterAgentInput!
+ ): CreateClusterAgentPayload
+ createComplianceFramework(
+ """Parameters for CreateComplianceFramework"""
+ input: CreateComplianceFrameworkInput!
+ ): CreateComplianceFrameworkPayload
+
+ """
+ Available only when feature flag `custom_emoji` is enabled. This flag is
+ disabled by default, because the feature is experimental and is subject to
+ change without notice.
+ """
+ createCustomEmoji(
+ """Parameters for CreateCustomEmoji"""
+ input: CreateCustomEmojiInput!
+ ): CreateCustomEmojiPayload
+ createDiffNote(
+ """Parameters for CreateDiffNote"""
+ input: CreateDiffNoteInput!
+ ): CreateDiffNotePayload
+ createEpic(
+ """Parameters for CreateEpic"""
+ input: CreateEpicInput!
+ ): CreateEpicPayload
+ createImageDiffNote(
+ """Parameters for CreateImageDiffNote"""
+ input: CreateImageDiffNoteInput!
+ ): CreateImageDiffNotePayload
+ createIssue(
+ """Parameters for CreateIssue"""
+ input: CreateIssueInput!
+ ): CreateIssuePayload
+ createIteration(
+ """Parameters for CreateIteration"""
+ input: CreateIterationInput!
+ ): CreateIterationPayload @deprecated(reason: "Use iterationCreate. Deprecated in 14.0.")
+ createNote(
+ """Parameters for CreateNote"""
+ input: CreateNoteInput!
+ ): CreateNotePayload
+ createRequirement(
+ """Parameters for CreateRequirement"""
+ input: CreateRequirementInput!
+ ): CreateRequirementPayload
+ createSnippet(
+ """Parameters for CreateSnippet"""
+ input: CreateSnippetInput!
+ ): CreateSnippetPayload
+ createTestCase(
+ """Parameters for CreateTestCase"""
+ input: CreateTestCaseInput!
+ ): CreateTestCasePayload
+ customerRelationsContactCreate(
+ """Parameters for CustomerRelationsContactCreate"""
+ input: CustomerRelationsContactCreateInput!
+ ): CustomerRelationsContactCreatePayload
+ customerRelationsContactUpdate(
+ """Parameters for CustomerRelationsContactUpdate"""
+ input: CustomerRelationsContactUpdateInput!
+ ): CustomerRelationsContactUpdatePayload
+ customerRelationsOrganizationCreate(
+ """Parameters for CustomerRelationsOrganizationCreate"""
+ input: CustomerRelationsOrganizationCreateInput!
+ ): CustomerRelationsOrganizationCreatePayload
+ customerRelationsOrganizationUpdate(
+ """Parameters for CustomerRelationsOrganizationUpdate"""
+ input: CustomerRelationsOrganizationUpdateInput!
+ ): CustomerRelationsOrganizationUpdatePayload
+ dastOnDemandScanCreate(
+ """Parameters for DastOnDemandScanCreate"""
+ input: DastOnDemandScanCreateInput!
+ ): DastOnDemandScanCreatePayload
+ dastProfileCreate(
+ """Parameters for DastProfileCreate"""
+ input: DastProfileCreateInput!
+ ): DastProfileCreatePayload
+ dastProfileDelete(
+ """Parameters for DastProfileDelete"""
+ input: DastProfileDeleteInput!
+ ): DastProfileDeletePayload
+ dastProfileRun(
+ """Parameters for DastProfileRun"""
+ input: DastProfileRunInput!
+ ): DastProfileRunPayload
+ dastProfileUpdate(
+ """Parameters for DastProfileUpdate"""
+ input: DastProfileUpdateInput!
+ ): DastProfileUpdatePayload
+ dastScannerProfileCreate(
+ """Parameters for DastScannerProfileCreate"""
+ input: DastScannerProfileCreateInput!
+ ): DastScannerProfileCreatePayload
+ dastScannerProfileDelete(
+ """Parameters for DastScannerProfileDelete"""
+ input: DastScannerProfileDeleteInput!
+ ): DastScannerProfileDeletePayload
+ dastScannerProfileUpdate(
+ """Parameters for DastScannerProfileUpdate"""
+ input: DastScannerProfileUpdateInput!
+ ): DastScannerProfileUpdatePayload
+ dastSiteProfileCreate(
+ """Parameters for DastSiteProfileCreate"""
+ input: DastSiteProfileCreateInput!
+ ): DastSiteProfileCreatePayload
+ dastSiteProfileDelete(
+ """Parameters for DastSiteProfileDelete"""
+ input: DastSiteProfileDeleteInput!
+ ): DastSiteProfileDeletePayload
+ dastSiteProfileUpdate(
+ """Parameters for DastSiteProfileUpdate"""
+ input: DastSiteProfileUpdateInput!
+ ): DastSiteProfileUpdatePayload
+ dastSiteTokenCreate(
+ """Parameters for DastSiteTokenCreate"""
+ input: DastSiteTokenCreateInput!
+ ): DastSiteTokenCreatePayload
+ dastSiteValidationCreate(
+ """Parameters for DastSiteValidationCreate"""
+ input: DastSiteValidationCreateInput!
+ ): DastSiteValidationCreatePayload
+ dastSiteValidationRevoke(
+ """Parameters for DastSiteValidationRevoke"""
+ input: DastSiteValidationRevokeInput!
+ ): DastSiteValidationRevokePayload
+ deleteAnnotation(
+ """Parameters for DeleteAnnotation"""
+ input: DeleteAnnotationInput!
+ ): DeleteAnnotationPayload
+ designManagementDelete(
+ """Parameters for DesignManagementDelete"""
+ input: DesignManagementDeleteInput!
+ ): DesignManagementDeletePayload
+ designManagementMove(
+ """Parameters for DesignManagementMove"""
+ input: DesignManagementMoveInput!
+ ): DesignManagementMovePayload
+ designManagementUpload(
+ """Parameters for DesignManagementUpload"""
+ input: DesignManagementUploadInput!
+ ): DesignManagementUploadPayload
+ destroyBoard(
+ """Parameters for DestroyBoard"""
+ input: DestroyBoardInput!
+ ): DestroyBoardPayload
+ destroyBoardList(
+ """Parameters for DestroyBoardList"""
+ input: DestroyBoardListInput!
+ ): DestroyBoardListPayload
+ destroyComplianceFramework(
+ """Parameters for DestroyComplianceFramework"""
+ input: DestroyComplianceFrameworkInput!
+ ): DestroyComplianceFrameworkPayload
+ destroyContainerRepository(
+ """Parameters for DestroyContainerRepository"""
+ input: DestroyContainerRepositoryInput!
+ ): DestroyContainerRepositoryPayload
+ destroyContainerRepositoryTags(
+ """Parameters for DestroyContainerRepositoryTags"""
+ input: DestroyContainerRepositoryTagsInput!
+ ): DestroyContainerRepositoryTagsPayload
+
+ """
+ Available only when feature flag `custom_emoji` is enabled. This flag is
+ disabled by default, because the feature is experimental and is subject to
+ change without notice.
+ """
+ destroyCustomEmoji(
+ """Parameters for DestroyCustomEmoji"""
+ input: DestroyCustomEmojiInput!
+ ): DestroyCustomEmojiPayload
+ destroyEpicBoard(
+ """Parameters for DestroyEpicBoard"""
+ input: DestroyEpicBoardInput!
+ ): DestroyEpicBoardPayload
+ destroyNote(
+ """Parameters for DestroyNote"""
+ input: DestroyNoteInput!
+ ): DestroyNotePayload
+ destroyPackage(
+ """Parameters for DestroyPackage"""
+ input: DestroyPackageInput!
+ ): DestroyPackagePayload
+ destroyPackageFile(
+ """Parameters for DestroyPackageFile"""
+ input: DestroyPackageFileInput!
+ ): DestroyPackageFilePayload
+ destroySnippet(
+ """Parameters for DestroySnippet"""
+ input: DestroySnippetInput!
+ ): DestroySnippetPayload
+
+ """**BETA** This endpoint is subject to change without notice."""
+ disableDevopsAdoptionNamespace(
+ """Parameters for DisableDevopsAdoptionNamespace"""
+ input: DisableDevopsAdoptionNamespaceInput!
+ ): DisableDevopsAdoptionNamespacePayload
+
+ """Toggles the resolved state of a discussion"""
+ discussionToggleResolve(
+ """Parameters for DiscussionToggleResolve"""
+ input: DiscussionToggleResolveInput!
+ ): DiscussionToggleResolvePayload
+
+ """
+ A mutation that does not perform any changes.
+
+ This is expected to be used for testing of endpoints, to verify
+ that a user has mutation access.
+
+ """
+ echoCreate(
+ """Parameters for EchoCreate"""
+ input: EchoCreateInput!
+ ): EchoCreatePayload
+
+ """**BETA** This endpoint is subject to change without notice."""
+ enableDevopsAdoptionNamespace(
+ """Parameters for EnableDevopsAdoptionNamespace"""
+ input: EnableDevopsAdoptionNamespaceInput!
+ ): EnableDevopsAdoptionNamespacePayload
+ environmentsCanaryIngressUpdate(
+ """Parameters for EnvironmentsCanaryIngressUpdate"""
+ input: EnvironmentsCanaryIngressUpdateInput!
+ ): EnvironmentsCanaryIngressUpdatePayload
+ epicAddIssue(
+ """Parameters for EpicAddIssue"""
+ input: EpicAddIssueInput!
+ ): EpicAddIssuePayload
+ epicBoardCreate(
+ """Parameters for EpicBoardCreate"""
+ input: EpicBoardCreateInput!
+ ): EpicBoardCreatePayload
+ epicBoardListCreate(
+ """Parameters for EpicBoardListCreate"""
+ input: EpicBoardListCreateInput!
+ ): EpicBoardListCreatePayload
+
+ """Destroys an epic board list."""
+ epicBoardListDestroy(
+ """Parameters for EpicBoardListDestroy"""
+ input: EpicBoardListDestroyInput!
+ ): EpicBoardListDestroyPayload
+ epicBoardUpdate(
+ """Parameters for EpicBoardUpdate"""
+ input: EpicBoardUpdateInput!
+ ): EpicBoardUpdatePayload
+ epicMoveList(
+ """Parameters for EpicMoveList"""
+ input: EpicMoveListInput!
+ ): EpicMoveListPayload
+ epicSetSubscription(
+ """Parameters for EpicSetSubscription"""
+ input: EpicSetSubscriptionInput!
+ ): EpicSetSubscriptionPayload
+ epicTreeReorder(
+ """Parameters for EpicTreeReorder"""
+ input: EpicTreeReorderInput!
+ ): EpicTreeReorderPayload
+ escalationPolicyCreate(
+ """Parameters for EscalationPolicyCreate"""
+ input: EscalationPolicyCreateInput!
+ ): EscalationPolicyCreatePayload
+ escalationPolicyDestroy(
+ """Parameters for EscalationPolicyDestroy"""
+ input: EscalationPolicyDestroyInput!
+ ): EscalationPolicyDestroyPayload
+ escalationPolicyUpdate(
+ """Parameters for EscalationPolicyUpdate"""
+ input: EscalationPolicyUpdateInput!
+ ): EscalationPolicyUpdatePayload
+ exportRequirements(
+ """Parameters for ExportRequirements"""
+ input: ExportRequirementsInput!
+ ): ExportRequirementsPayload
+ externalAuditEventDestinationCreate(
+ """Parameters for ExternalAuditEventDestinationCreate"""
+ input: ExternalAuditEventDestinationCreateInput!
+ ): ExternalAuditEventDestinationCreatePayload
+ externalAuditEventDestinationDestroy(
+ """Parameters for ExternalAuditEventDestinationDestroy"""
+ input: ExternalAuditEventDestinationDestroyInput!
+ ): ExternalAuditEventDestinationDestroyPayload
+ externalAuditEventDestinationUpdate(
+ """Parameters for ExternalAuditEventDestinationUpdate"""
+ input: ExternalAuditEventDestinationUpdateInput!
+ ): ExternalAuditEventDestinationUpdatePayload
+ gitlabSubscriptionActivate(
+ """Parameters for GitlabSubscriptionActivate"""
+ input: GitlabSubscriptionActivateInput!
+ ): GitlabSubscriptionActivatePayload
+ groupUpdate(
+ """Parameters for GroupUpdate"""
+ input: GroupUpdateInput!
+ ): GroupUpdatePayload
+ httpIntegrationCreate(
+ """Parameters for HttpIntegrationCreate"""
+ input: HttpIntegrationCreateInput!
+ ): HttpIntegrationCreatePayload
+ httpIntegrationDestroy(
+ """Parameters for HttpIntegrationDestroy"""
+ input: HttpIntegrationDestroyInput!
+ ): HttpIntegrationDestroyPayload
+ httpIntegrationResetToken(
+ """Parameters for HttpIntegrationResetToken"""
+ input: HttpIntegrationResetTokenInput!
+ ): HttpIntegrationResetTokenPayload
+ httpIntegrationUpdate(
+ """Parameters for HttpIntegrationUpdate"""
+ input: HttpIntegrationUpdateInput!
+ ): HttpIntegrationUpdatePayload
+ issueMove(
+ """Parameters for IssueMove"""
+ input: IssueMoveInput!
+ ): IssueMovePayload
+ issueMoveList(
+ """Parameters for IssueMoveList"""
+ input: IssueMoveListInput!
+ ): IssueMoveListPayload
+ issueSetAssignees(
+ """Parameters for IssueSetAssignees"""
+ input: IssueSetAssigneesInput!
+ ): IssueSetAssigneesPayload
+ issueSetConfidential(
+ """Parameters for IssueSetConfidential"""
+ input: IssueSetConfidentialInput!
+ ): IssueSetConfidentialPayload
+ issueSetDueDate(
+ """Parameters for IssueSetDueDate"""
+ input: IssueSetDueDateInput!
+ ): IssueSetDueDatePayload
+ issueSetEpic(
+ """Parameters for IssueSetEpic"""
+ input: IssueSetEpicInput!
+ ): IssueSetEpicPayload
+ issueSetIteration(
+ """Parameters for IssueSetIteration"""
+ input: IssueSetIterationInput!
+ ): IssueSetIterationPayload
+ issueSetLocked(
+ """Parameters for IssueSetLocked"""
+ input: IssueSetLockedInput!
+ ): IssueSetLockedPayload
+ issueSetSeverity(
+ """Parameters for IssueSetSeverity"""
+ input: IssueSetSeverityInput!
+ ): IssueSetSeverityPayload
+ issueSetSubscription(
+ """Parameters for IssueSetSubscription"""
+ input: IssueSetSubscriptionInput!
+ ): IssueSetSubscriptionPayload
+ issueSetWeight(
+ """Parameters for IssueSetWeight"""
+ input: IssueSetWeightInput!
+ ): IssueSetWeightPayload
+ iterationCadenceCreate(
+ """Parameters for IterationCadenceCreate"""
+ input: IterationCadenceCreateInput!
+ ): IterationCadenceCreatePayload
+ iterationCadenceDestroy(
+ """Parameters for IterationCadenceDestroy"""
+ input: IterationCadenceDestroyInput!
+ ): IterationCadenceDestroyPayload
+ iterationCadenceUpdate(
+ """Parameters for IterationCadenceUpdate"""
+ input: IterationCadenceUpdateInput!
+ ): IterationCadenceUpdatePayload
+ iterationCreate(
+ """Parameters for iterationCreate"""
+ input: iterationCreateInput!
+ ): iterationCreatePayload
+ iterationDelete(
+ """Parameters for IterationDelete"""
+ input: IterationDeleteInput!
+ ): IterationDeletePayload
+ jiraImportStart(
+ """Parameters for JiraImportStart"""
+ input: JiraImportStartInput!
+ ): JiraImportStartPayload
+ jiraImportUsers(
+ """Parameters for JiraImportUsers"""
+ input: JiraImportUsersInput!
+ ): JiraImportUsersPayload
+ jobCancel(
+ """Parameters for JobCancel"""
+ input: JobCancelInput!
+ ): JobCancelPayload
+ jobPlay(
+ """Parameters for JobPlay"""
+ input: JobPlayInput!
+ ): JobPlayPayload
+ jobRetry(
+ """Parameters for JobRetry"""
+ input: JobRetryInput!
+ ): JobRetryPayload
+ jobUnschedule(
+ """Parameters for JobUnschedule"""
+ input: JobUnscheduleInput!
+ ): JobUnschedulePayload
+ labelCreate(
+ """Parameters for LabelCreate"""
+ input: LabelCreateInput!
+ ): LabelCreatePayload
+ markAsSpamSnippet(
+ """Parameters for MarkAsSpamSnippet"""
+ input: MarkAsSpamSnippetInput!
+ ): MarkAsSpamSnippetPayload
+
+ """
+ Accepts a merge request.
+ When accepted, the source branch will be merged into the target branch, either
+ immediately if possible, or using one of the automatic merge strategies.
+
+ """
+ mergeRequestAccept(
+ """Parameters for MergeRequestAccept"""
+ input: MergeRequestAcceptInput!
+ ): MergeRequestAcceptPayload
+ mergeRequestCreate(
+ """Parameters for MergeRequestCreate"""
+ input: MergeRequestCreateInput!
+ ): MergeRequestCreatePayload
+ mergeRequestReviewerRereview(
+ """Parameters for MergeRequestReviewerRereview"""
+ input: MergeRequestReviewerRereviewInput!
+ ): MergeRequestReviewerRereviewPayload
+ mergeRequestSetAssignees(
+ """Parameters for MergeRequestSetAssignees"""
+ input: MergeRequestSetAssigneesInput!
+ ): MergeRequestSetAssigneesPayload
+ mergeRequestSetDraft(
+ """Parameters for MergeRequestSetDraft"""
+ input: MergeRequestSetDraftInput!
+ ): MergeRequestSetDraftPayload
+ mergeRequestSetLabels(
+ """Parameters for MergeRequestSetLabels"""
+ input: MergeRequestSetLabelsInput!
+ ): MergeRequestSetLabelsPayload
+ mergeRequestSetLocked(
+ """Parameters for MergeRequestSetLocked"""
+ input: MergeRequestSetLockedInput!
+ ): MergeRequestSetLockedPayload
+ mergeRequestSetMilestone(
+ """Parameters for MergeRequestSetMilestone"""
+ input: MergeRequestSetMilestoneInput!
+ ): MergeRequestSetMilestonePayload
+ mergeRequestSetSubscription(
+ """Parameters for MergeRequestSetSubscription"""
+ input: MergeRequestSetSubscriptionInput!
+ ): MergeRequestSetSubscriptionPayload
+ mergeRequestSetWip(
+ """Parameters for MergeRequestSetWip"""
+ input: MergeRequestSetWipInput!
+ ): MergeRequestSetWipPayload @deprecated(reason: "Use mergeRequestSetDraft. Deprecated in 13.12.")
+
+ """Update attributes of a merge request"""
+ mergeRequestUpdate(
+ """Parameters for MergeRequestUpdate"""
+ input: MergeRequestUpdateInput!
+ ): MergeRequestUpdatePayload
+ namespaceIncreaseStorageTemporarily(
+ """Parameters for NamespaceIncreaseStorageTemporarily"""
+ input: NamespaceIncreaseStorageTemporarilyInput!
+ ): NamespaceIncreaseStorageTemporarilyPayload
+ oncallRotationCreate(
+ """Parameters for OncallRotationCreate"""
+ input: OncallRotationCreateInput!
+ ): OncallRotationCreatePayload
+ oncallRotationDestroy(
+ """Parameters for OncallRotationDestroy"""
+ input: OncallRotationDestroyInput!
+ ): OncallRotationDestroyPayload
+ oncallRotationUpdate(
+ """Parameters for OncallRotationUpdate"""
+ input: OncallRotationUpdateInput!
+ ): OncallRotationUpdatePayload
+ oncallScheduleCreate(
+ """Parameters for OncallScheduleCreate"""
+ input: OncallScheduleCreateInput!
+ ): OncallScheduleCreatePayload
+ oncallScheduleDestroy(
+ """Parameters for OncallScheduleDestroy"""
+ input: OncallScheduleDestroyInput!
+ ): OncallScheduleDestroyPayload
+ oncallScheduleUpdate(
+ """Parameters for OncallScheduleUpdate"""
+ input: OncallScheduleUpdateInput!
+ ): OncallScheduleUpdatePayload
+ pipelineCancel(
+ """Parameters for PipelineCancel"""
+ input: PipelineCancelInput!
+ ): PipelineCancelPayload
+ pipelineDestroy(
+ """Parameters for PipelineDestroy"""
+ input: PipelineDestroyInput!
+ ): PipelineDestroyPayload
+ pipelineRetry(
+ """Parameters for PipelineRetry"""
+ input: PipelineRetryInput!
+ ): PipelineRetryPayload
+
+ """Assign (or unset) a compliance framework to a project."""
+ projectSetComplianceFramework(
+ """Parameters for ProjectSetComplianceFramework"""
+ input: ProjectSetComplianceFrameworkInput!
+ ): ProjectSetComplianceFrameworkPayload
+ projectSetLocked(
+ """Parameters for ProjectSetLocked"""
+ input: ProjectSetLockedInput!
+ ): ProjectSetLockedPayload
+ prometheusIntegrationCreate(
+ """Parameters for PrometheusIntegrationCreate"""
+ input: PrometheusIntegrationCreateInput!
+ ): PrometheusIntegrationCreatePayload
+ prometheusIntegrationResetToken(
+ """Parameters for PrometheusIntegrationResetToken"""
+ input: PrometheusIntegrationResetTokenInput!
+ ): PrometheusIntegrationResetTokenPayload
+ prometheusIntegrationUpdate(
+ """Parameters for PrometheusIntegrationUpdate"""
+ input: PrometheusIntegrationUpdateInput!
+ ): PrometheusIntegrationUpdatePayload
+ promoteToEpic(
+ """Parameters for PromoteToEpic"""
+ input: PromoteToEpicInput!
+ ): PromoteToEpicPayload
+ releaseAssetLinkCreate(
+ """Parameters for ReleaseAssetLinkCreate"""
+ input: ReleaseAssetLinkCreateInput!
+ ): ReleaseAssetLinkCreatePayload
+ releaseAssetLinkDelete(
+ """Parameters for ReleaseAssetLinkDelete"""
+ input: ReleaseAssetLinkDeleteInput!
+ ): ReleaseAssetLinkDeletePayload
+ releaseAssetLinkUpdate(
+ """Parameters for ReleaseAssetLinkUpdate"""
+ input: ReleaseAssetLinkUpdateInput!
+ ): ReleaseAssetLinkUpdatePayload
+ releaseCreate(
+ """Parameters for ReleaseCreate"""
+ input: ReleaseCreateInput!
+ ): ReleaseCreatePayload
+ releaseDelete(
+ """Parameters for ReleaseDelete"""
+ input: ReleaseDeleteInput!
+ ): ReleaseDeletePayload
+ releaseUpdate(
+ """Parameters for ReleaseUpdate"""
+ input: ReleaseUpdateInput!
+ ): ReleaseUpdatePayload
+ removeProjectFromSecurityDashboard(
+ """Parameters for RemoveProjectFromSecurityDashboard"""
+ input: RemoveProjectFromSecurityDashboardInput!
+ ): RemoveProjectFromSecurityDashboardPayload
+
+ """
+ Repositions a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`)
+ """
+ repositionImageDiffNote(
+ """Parameters for RepositionImageDiffNote"""
+ input: RepositionImageDiffNoteInput!
+ ): RepositionImageDiffNotePayload
+ runnerDelete(
+ """Parameters for RunnerDelete"""
+ input: RunnerDeleteInput!
+ ): RunnerDeletePayload
+ runnerUpdate(
+ """Parameters for RunnerUpdate"""
+ input: RunnerUpdateInput!
+ ): RunnerUpdatePayload
+ runnersRegistrationTokenReset(
+ """Parameters for RunnersRegistrationTokenReset"""
+ input: RunnersRegistrationTokenResetInput!
+ ): RunnersRegistrationTokenResetPayload
+
+ """
+ Commits the `policy_yaml` content to the assigned security policy project for the given project(`project_path`)
+ """
+ scanExecutionPolicyCommit(
+ """Parameters for ScanExecutionPolicyCommit"""
+ input: ScanExecutionPolicyCommitInput!
+ ): ScanExecutionPolicyCommitPayload
+
+ """
+ Assigns the specified project(`security_policy_project_id`) as security policy
+ project for the given project(`project_path`). If the project already has a
+ security policy project, this reassigns the project's security policy project
+ with the given `security_policy_project_id`
+ """
+ securityPolicyProjectAssign(
+ """Parameters for SecurityPolicyProjectAssign"""
+ input: SecurityPolicyProjectAssignInput!
+ ): SecurityPolicyProjectAssignPayload
+
+ """
+ Creates and assigns a security policy project for the given project(`project_path`)
+ """
+ securityPolicyProjectCreate(
+ """Parameters for SecurityPolicyProjectCreate"""
+ input: SecurityPolicyProjectCreateInput!
+ ): SecurityPolicyProjectCreatePayload
+
+ """
+ Unassigns the security policy project for the given project(`project_path`).
+ """
+ securityPolicyProjectUnassign(
+ """Parameters for SecurityPolicyProjectUnassign"""
+ input: SecurityPolicyProjectUnassignInput!
+ ): SecurityPolicyProjectUnassignPayload
+ terraformStateDelete(
+ """Parameters for TerraformStateDelete"""
+ input: TerraformStateDeleteInput!
+ ): TerraformStateDeletePayload
+ terraformStateLock(
+ """Parameters for TerraformStateLock"""
+ input: TerraformStateLockInput!
+ ): TerraformStateLockPayload
+ terraformStateUnlock(
+ """Parameters for TerraformStateUnlock"""
+ input: TerraformStateUnlockInput!
+ ): TerraformStateUnlockPayload
+ todoCreate(
+ """Parameters for TodoCreate"""
+ input: TodoCreateInput!
+ ): TodoCreatePayload
+ todoMarkDone(
+ """Parameters for TodoMarkDone"""
+ input: TodoMarkDoneInput!
+ ): TodoMarkDonePayload
+ todoRestore(
+ """Parameters for TodoRestore"""
+ input: TodoRestoreInput!
+ ): TodoRestorePayload
+ todoRestoreMany(
+ """Parameters for TodoRestoreMany"""
+ input: TodoRestoreManyInput!
+ ): TodoRestoreManyPayload
+ todosMarkAllDone(
+ """Parameters for TodosMarkAllDone"""
+ input: TodosMarkAllDoneInput!
+ ): TodosMarkAllDonePayload
+ updateAlertStatus(
+ """Parameters for UpdateAlertStatus"""
+ input: UpdateAlertStatusInput!
+ ): UpdateAlertStatusPayload
+ updateBoard(
+ """Parameters for UpdateBoard"""
+ input: UpdateBoardInput!
+ ): UpdateBoardPayload
+ updateBoardEpicUserPreferences(
+ """Parameters for UpdateBoardEpicUserPreferences"""
+ input: UpdateBoardEpicUserPreferencesInput!
+ ): UpdateBoardEpicUserPreferencesPayload
+ updateBoardList(
+ """Parameters for UpdateBoardList"""
+ input: UpdateBoardListInput!
+ ): UpdateBoardListPayload
+ updateComplianceFramework(
+ """Parameters for UpdateComplianceFramework"""
+ input: UpdateComplianceFrameworkInput!
+ ): UpdateComplianceFrameworkPayload
+ updateContainerExpirationPolicy(
+ """Parameters for UpdateContainerExpirationPolicy"""
+ input: UpdateContainerExpirationPolicyInput!
+ ): UpdateContainerExpirationPolicyPayload
+ updateDependencyProxyImageTtlGroupPolicy(
+ """Parameters for UpdateDependencyProxyImageTtlGroupPolicy"""
+ input: UpdateDependencyProxyImageTtlGroupPolicyInput!
+ ): UpdateDependencyProxyImageTtlGroupPolicyPayload
+ updateDependencyProxySettings(
+ """Parameters for UpdateDependencyProxySettings"""
+ input: UpdateDependencyProxySettingsInput!
+ ): UpdateDependencyProxySettingsPayload
+ updateEpic(
+ """Parameters for UpdateEpic"""
+ input: UpdateEpicInput!
+ ): UpdateEpicPayload
+ updateEpicBoardList(
+ """Parameters for UpdateEpicBoardList"""
+ input: UpdateEpicBoardListInput!
+ ): UpdateEpicBoardListPayload
+
+ """
+ Updates a DiffNote on an image (a `Note` where the `position.positionType` is `"image"`).
+ If the body of the Note contains only quick actions,
+ the Note will be destroyed during the update, and no Note will be
+ returned.
+
+
+ """
+ updateImageDiffNote(
+ """Parameters for UpdateImageDiffNote"""
+ input: UpdateImageDiffNoteInput!
+ ): UpdateImageDiffNotePayload
+ updateIssue(
+ """Parameters for UpdateIssue"""
+ input: UpdateIssueInput!
+ ): UpdateIssuePayload
+ updateIteration(
+ """Parameters for UpdateIteration"""
+ input: UpdateIterationInput!
+ ): UpdateIterationPayload
+ updateNamespacePackageSettings(
+ """Parameters for UpdateNamespacePackageSettings"""
+ input: UpdateNamespacePackageSettingsInput!
+ ): UpdateNamespacePackageSettingsPayload
+
+ """
+ Updates a Note.
+ If the body of the Note contains only quick actions,
+ the Note will be destroyed during the update, and no Note will be
+ returned.
+
+ """
+ updateNote(
+ """Parameters for UpdateNote"""
+ input: UpdateNoteInput!
+ ): UpdateNotePayload
+ updateRequirement(
+ """Parameters for UpdateRequirement"""
+ input: UpdateRequirementInput!
+ ): UpdateRequirementPayload
+ updateSnippet(
+ """Parameters for UpdateSnippet"""
+ input: UpdateSnippetInput!
+ ): UpdateSnippetPayload
+ userCalloutCreate(
+ """Parameters for UserCalloutCreate"""
+ input: UserCalloutCreateInput!
+ ): UserCalloutCreatePayload
+ vulnerabilityConfirm(
+ """Parameters for VulnerabilityConfirm"""
+ input: VulnerabilityConfirmInput!
+ ): VulnerabilityConfirmPayload
+ vulnerabilityCreate(
+ """Parameters for VulnerabilityCreate"""
+ input: VulnerabilityCreateInput!
+ ): VulnerabilityCreatePayload
+ vulnerabilityDismiss(
+ """Parameters for VulnerabilityDismiss"""
+ input: VulnerabilityDismissInput!
+ ): VulnerabilityDismissPayload
+ vulnerabilityExternalIssueLinkCreate(
+ """Parameters for VulnerabilityExternalIssueLinkCreate"""
+ input: VulnerabilityExternalIssueLinkCreateInput!
+ ): VulnerabilityExternalIssueLinkCreatePayload
+ vulnerabilityExternalIssueLinkDestroy(
+ """Parameters for VulnerabilityExternalIssueLinkDestroy"""
+ input: VulnerabilityExternalIssueLinkDestroyInput!
+ ): VulnerabilityExternalIssueLinkDestroyPayload
+ vulnerabilityResolve(
+ """Parameters for VulnerabilityResolve"""
+ input: VulnerabilityResolveInput!
+ ): VulnerabilityResolvePayload
+ vulnerabilityRevertToDetected(
+ """Parameters for VulnerabilityRevertToDetected"""
+ input: VulnerabilityRevertToDetectedInput!
+ ): VulnerabilityRevertToDetectedPayload
+}
+
+"""Different toggles for changing mutator behavior"""
+enum MutationOperationMode {
+ """Performs a replace operation."""
+ REPLACE
+
+ """Performs an append operation."""
+ APPEND
+
+ """Performs a removal operation."""
+ REMOVE
+}
+
+type Namespace {
+ """Size limit for repositories in the namespace in bytes."""
+ actualRepositorySizeLimit: Float
+
+ """Additional storage purchased for the root namespace in bytes."""
+ additionalPurchasedStorageSize: Float
+
+ """Compliance frameworks available to projects in this namespace."""
+ complianceFrameworks(
+ """Global ID of a specific compliance framework to return."""
+ id: ComplianceManagementFrameworkID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ComplianceFrameworkConnection
+
+ """
+ Includes at least one project where the repository size exceeds the limit.
+ """
+ containsLockedProjects: Boolean!
+
+ """Description of the namespace."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Full name of the namespace."""
+ fullName: String!
+
+ """Full path of the namespace."""
+ fullPath: ID!
+
+ """ID of the namespace."""
+ id: ID!
+
+ """Status of the temporary storage increase."""
+ isTemporaryStorageIncreaseEnabled: Boolean!
+
+ """Indicates if Large File Storage (LFS) is enabled for namespace."""
+ lfsEnabled: Boolean
+
+ """Name of the namespace."""
+ name: String!
+
+ """Package settings for the namespace."""
+ packageSettings: PackageSettings
+
+ """Path of the namespace."""
+ path: String!
+
+ """Projects within this namespace."""
+ projects(
+ """Include also subgroup projects."""
+ includeSubgroups: Boolean = false
+
+ """Search project with most similar names or paths."""
+ search: String = null
+
+ """Sort projects by this criteria."""
+ sort: NamespaceProjectSort = null
+
+ """Filter projects by IDs."""
+ ids: [ID!] = null
+
+ """Returns only the projects which have code coverage."""
+ hasCodeCoverage: Boolean = false
+
+ """Returns only the projects which have vulnerabilities."""
+ hasVulnerabilities: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection!
+
+ """
+ Number of projects in the root namespace where the repository size exceeds the limit.
+ """
+ repositorySizeExcessProjectCount: Int!
+
+ """Indicates if users can request access to namespace."""
+ requestAccessEnabled: Boolean
+
+ """
+ Aggregated storage statistics of the namespace. Only available for root namespaces.
+ """
+ rootStorageStatistics: RootStorageStatistics
+
+ """Shared runners availability for the namespace and its descendants."""
+ sharedRunnersSetting: SharedRunnersSetting
+
+ """Total storage limit of the root namespace in bytes."""
+ storageSizeLimit: Float
+
+ """Date until the temporary storage increase is active."""
+ temporaryStorageIncreaseEndsOn: Time
+
+ """Total repository size of all projects in the root namespace in bytes."""
+ totalRepositorySize: Float
+
+ """
+ Total excess repository size of all projects in the root namespace in bytes.
+ """
+ totalRepositorySizeExcess: Float
+
+ """Visibility of the namespace."""
+ visibility: String
+}
+
+"""The connection type for Namespace."""
+type NamespaceConnection {
+ """A list of edges."""
+ edges: [NamespaceEdge]
+
+ """A list of nodes."""
+ nodes: [Namespace]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type NamespaceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Namespace
+}
+
+"""
+A `NamespaceID` is a global ID. It is encoded as a string.
+
+An example `NamespaceID` is: `"gid://gitlab/Namespace/1"`.
+"""
+scalar NamespaceID
+
+"""Autogenerated input type of NamespaceIncreaseStorageTemporarily"""
+input NamespaceIncreaseStorageTemporarilyInput {
+ """Global ID of the namespace to mutate."""
+ id: NamespaceID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of NamespaceIncreaseStorageTemporarily"""
+type NamespaceIncreaseStorageTemporarilyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Namespace after mutation."""
+ namespace: Namespace
+}
+
+"""Values for sorting projects"""
+enum NamespaceProjectSort {
+ """Most similar to the search query."""
+ SIMILARITY
+
+ """Sort by storage size."""
+ STORAGE
+}
+
+input NegatedBoardIssueInput {
+ """Filter by label name."""
+ labelName: [String]
+
+ """Filter by author username."""
+ authorUsername: String
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """List of IIDs of issues. For example `["1", "2"]`."""
+ iids: [String!]
+
+ """Filter by milestone title."""
+ milestoneTitle: String
+
+ """Filter by assignee username."""
+ assigneeUsername: [String]
+
+ """Filter by release tag."""
+ releaseTag: String
+
+ """Filter by the given issue types."""
+ types: [IssueType!]
+
+ """Filter by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """Filter by epic ID. Incompatible with epicWildcardId."""
+ epicId: EpicID
+
+ """Filter by iteration title."""
+ iterationTitle: String
+
+ """Filter by weight."""
+ weight: String
+
+ """
+ Filter by a list of iteration IDs. Incompatible with iterationWildcardId.
+ """
+ iterationId: [IterationID!]
+
+ """Filter by iteration ID wildcard."""
+ iterationWildcardId: NegatedIterationWildcardId
+}
+
+input NegatedEpicBoardIssueInput {
+ """Filter by label name."""
+ labelName: [String]
+
+ """Filter by author username."""
+ authorUsername: String
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+}
+
+input NegatedEpicFilterInput {
+ """Filter by label name."""
+ labelName: [String]
+
+ """Filter by author username."""
+ authorUsername: String
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+}
+
+input NegatedIssueFilterInput {
+ """List of IIDs of issues to exclude. For example, `[1, 2]`."""
+ iids: [String!]
+
+ """Labels not applied to this issue."""
+ labelName: [String!]
+
+ """Milestone not applied to this issue."""
+ milestoneTitle: [String!]
+
+ """
+ Release tag not associated with the issue's milestone. Ignored when parent is a group.
+ """
+ releaseTag: [String!]
+
+ """Username of a user who didn't author the issue."""
+ authorUsername: String
+
+ """Usernames of users not assigned to the issue."""
+ assigneeUsernames: [String!]
+
+ """ID of a user not assigned to the issues."""
+ assigneeId: String
+
+ """Filter by negated milestone wildcard values."""
+ milestoneWildcardId: NegatedMilestoneWildcardId
+
+ """Filter by reaction emoji applied by the current user."""
+ myReactionEmoji: String
+
+ """Filters out issues by the given issue types."""
+ types: [IssueType!]
+
+ """ID of an epic not associated with the issues."""
+ epicId: String
+
+ """Weight not applied to the issue."""
+ weight: String
+
+ """List of iteration Global IDs not applied to the issue."""
+ iterationId: [ID!]
+
+ """Filter by negated iteration ID wildcard."""
+ iterationWildcardId: IterationWildcardId
+}
+
+"""Negated Iteration ID wildcard values"""
+enum NegatedIterationWildcardId {
+ """Current iteration."""
+ CURRENT
+}
+
+"""Negated Milestone ID wildcard values"""
+enum NegatedMilestoneWildcardId {
+ """Milestone assigned is open and yet to be started (start date > today)."""
+ STARTED
+
+ """Milestone assigned is open but due in the past (due date <= today)."""
+ UPCOMING
+}
+
+"""Represents the network policy"""
+type NetworkPolicy {
+ """Indicates whether this policy is enabled."""
+ enabled: Boolean!
+
+ """Environments where this policy is applied."""
+ 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
+
+ """Indicates whether this policy is created from AutoDevops."""
+ fromAutoDevops: Boolean!
+
+ """Kind of the policy."""
+ kind: NetworkPolicyKind!
+
+ """Name of the policy."""
+ name: String!
+
+ """Namespace of the policy."""
+ namespace: String!
+
+ """Timestamp of when the policy YAML was last updated."""
+ updatedAt: Time!
+
+ """YAML definition of the policy."""
+ yaml: String!
+}
+
+"""The connection type for NetworkPolicy."""
+type NetworkPolicyConnection {
+ """A list of edges."""
+ edges: [NetworkPolicyEdge]
+
+ """A list of nodes."""
+ nodes: [NetworkPolicy]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type NetworkPolicyEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: NetworkPolicy
+}
+
+"""Kind of the network policy"""
+enum NetworkPolicyKind {
+ """Policy kind of Cilium Network Policy."""
+ CiliumNetworkPolicy
+
+ """Policy kind of Network Policy."""
+ NetworkPolicy
+}
+
+type Note implements ResolvableInterface {
+ """User who wrote this note."""
+ author: UserCore!
+
+ """Content of the note."""
+ body: String!
+
+ """The GitLab Flavored Markdown rendering of `note`"""
+ bodyHtml: String
+
+ """Indicates if this note is confidential."""
+ confidential: Boolean
+
+ """Timestamp of the note creation."""
+ createdAt: Time!
+
+ """Discussion this note is a part of."""
+ discussion: Discussion
+
+ """ID of the note."""
+ id: NoteID!
+
+ """Position of this note on a diff."""
+ position: DiffPosition
+
+ """Project associated with the note."""
+ project: Project
+
+ """Indicates if the object can be resolved."""
+ resolvable: Boolean!
+
+ """Indicates if the object is resolved."""
+ resolved: Boolean!
+
+ """Timestamp of when the object was resolved."""
+ resolvedAt: Time
+
+ """User who resolved the object."""
+ resolvedBy: UserCore
+
+ """Indicates whether this note was created by the system or by a user."""
+ system: Boolean!
+
+ """Name of the icon corresponding to a system note."""
+ systemNoteIconName: String
+
+ """Timestamp of the note's last activity."""
+ updatedAt: Time!
+
+ """URL to view this Note in the Web UI."""
+ url: String
+
+ """Permissions for the current user on the resource"""
+ userPermissions: NotePermissions!
+}
+
+"""
+A `NoteableID` is a global ID. It is encoded as a string.
+
+An example `NoteableID` is: `"gid://gitlab/Noteable/1"`.
+"""
+scalar NoteableID
+
+interface NoteableInterface {
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+}
+
+"""Represents an object that supports notes."""
+union NoteableType = Design | Issue | MergeRequest
+
+"""The connection type for Note."""
+type NoteConnection {
+ """A list of edges."""
+ edges: [NoteEdge]
+
+ """A list of nodes."""
+ nodes: [Note]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type NoteEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Note
+}
+
+"""
+A `NoteID` is a global ID. It is encoded as a string.
+
+An example `NoteID` is: `"gid://gitlab/Note/1"`.
+"""
+scalar NoteID
+
+type NotePermissions {
+ """Indicates the user can perform `admin_note` on this resource"""
+ adminNote: Boolean!
+
+ """Indicates the user can perform `award_emoji` on this resource"""
+ awardEmoji: Boolean!
+
+ """Indicates the user can perform `create_note` on this resource"""
+ createNote: Boolean!
+
+ """Indicates the user can perform `read_note` on this resource"""
+ readNote: Boolean!
+
+ """Indicates the user can perform `reposition_note` on this resource"""
+ repositionNote: Boolean!
+
+ """Indicates the user can perform `resolve_note` on this resource"""
+ resolveNote: Boolean!
+}
+
+"""Nuget dependency link metadata"""
+type NugetDependencyLinkMetadata {
+ """ID of the metadatum."""
+ id: PackagesNugetDependencyLinkMetadatumID!
+
+ """Target framework of the dependency link package."""
+ targetFramework: String!
+}
+
+"""Nuget metadata"""
+type NugetMetadata {
+ """Icon URL of the Nuget package."""
+ iconUrl: String
+
+ """ID of the metadatum."""
+ id: PackagesNugetMetadatumID!
+
+ """License URL of the Nuget package."""
+ licenseUrl: String
+
+ """Project URL of the Nuget package."""
+ projectUrl: String
+}
+
+"""The rotation participant and color palette"""
+type OncallParticipantType {
+ """Color palette to assign to the on-call user. For example "blue"."""
+ colorPalette: String
+
+ """
+ Color weight to assign to for the on-call user, for example "500". Max 4 chars. For easy identification of the user.
+ """
+ colorWeight: String
+
+ """ID of the on-call participant."""
+ id: IncidentManagementOncallParticipantID!
+
+ """User who is participating."""
+ user: UserCore!
+}
+
+"""The connection type for OncallParticipantType."""
+type OncallParticipantTypeConnection {
+ """A list of edges."""
+ edges: [OncallParticipantTypeEdge]
+
+ """A list of nodes."""
+ nodes: [OncallParticipantType]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type OncallParticipantTypeEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: OncallParticipantType
+}
+
+"""Active period time range for on-call rotation"""
+input OncallRotationActivePeriodInputType {
+ """
+ Start of the rotation active period in 24 hour format. For example, "18:30".
+ """
+ startTime: String!
+
+ """
+ End of the rotation active period in 24 hour format. For example, "18:30".
+ """
+ endTime: String!
+}
+
+"""Active period time range for on-call rotation"""
+type OncallRotationActivePeriodType {
+ """End of the rotation active period."""
+ endTime: String
+
+ """Start of the rotation active period."""
+ startTime: String
+}
+
+"""Autogenerated input type of OncallRotationCreate"""
+input OncallRotationCreateInput {
+ """Project to create the on-call schedule in."""
+ projectPath: ID!
+
+ """IID of the on-call schedule to create the on-call rotation in."""
+ scheduleIid: String!
+
+ """Name of the on-call rotation."""
+ name: String!
+
+ """
+ Start date and time of the on-call rotation, in the timezone of the on-call schedule.
+ """
+ startsAt: OncallRotationDateInputType!
+
+ """
+ End date and time of the on-call rotation, in the timezone of the on-call schedule.
+ """
+ endsAt: OncallRotationDateInputType
+
+ """Rotation length of the on-call rotation."""
+ rotationLength: OncallRotationLengthInputType!
+
+ """Active period of time that the on-call rotation should take place."""
+ activePeriod: OncallRotationActivePeriodInputType
+
+ """
+ Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies.
+ """
+ participants: [OncallUserInputType!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallRotationCreate"""
+type OncallRotationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call rotation."""
+ oncallRotation: IncidentManagementOncallRotation
+}
+
+"""Date input type for on-call rotation"""
+input OncallRotationDateInputType {
+ """Date component of the date in YYYY-MM-DD format."""
+ date: String!
+
+ """Time component of the date in 24hr HH:MM format."""
+ time: String!
+}
+
+"""Autogenerated input type of OncallRotationDestroy"""
+input OncallRotationDestroyInput {
+ """Project to remove the on-call schedule from."""
+ projectPath: ID!
+
+ """IID of the on-call schedule to the on-call rotation belongs to."""
+ scheduleIid: String!
+
+ """ID of the on-call rotation to remove."""
+ id: IncidentManagementOncallRotationID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallRotationDestroy"""
+type OncallRotationDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call rotation."""
+ oncallRotation: IncidentManagementOncallRotation
+}
+
+"""The rotation length of the on-call rotation"""
+input OncallRotationLengthInputType {
+ """Rotation length of the on-call rotation."""
+ length: Int!
+
+ """Unit of the rotation length of the on-call rotation."""
+ unit: OncallRotationUnitEnum!
+}
+
+"""Rotation length unit of an on-call rotation"""
+enum OncallRotationUnitEnum {
+ """Hours"""
+ HOURS
+
+ """Days"""
+ DAYS
+
+ """Weeks"""
+ WEEKS
+}
+
+"""Autogenerated input type of OncallRotationUpdate"""
+input OncallRotationUpdateInput {
+ """ID of the on-call schedule to create the on-call rotation in."""
+ id: IncidentManagementOncallRotationID!
+
+ """Name of the on-call rotation."""
+ name: String
+
+ """
+ Start date and time of the on-call rotation, in the timezone of the on-call schedule.
+ """
+ startsAt: OncallRotationDateInputType
+
+ """
+ End date and time of the on-call rotation, in the timezone of the on-call schedule.
+ """
+ endsAt: OncallRotationDateInputType
+
+ """Rotation length of the on-call rotation."""
+ rotationLength: OncallRotationLengthInputType
+
+ """Active period of time that the on-call rotation should take place."""
+ activePeriod: OncallRotationActivePeriodInputType
+
+ """
+ Usernames of users participating in the on-call rotation. A maximum limit of 100 participants applies.
+ """
+ participants: [OncallUserInputType!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallRotationUpdate"""
+type OncallRotationUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call rotation."""
+ oncallRotation: IncidentManagementOncallRotation
+}
+
+"""Autogenerated input type of OncallScheduleCreate"""
+input OncallScheduleCreateInput {
+ """Project to create the on-call schedule in."""
+ projectPath: ID!
+
+ """Name of the on-call schedule."""
+ name: String!
+
+ """Description of the on-call schedule."""
+ description: String
+
+ """Timezone of the on-call schedule."""
+ timezone: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallScheduleCreate"""
+type OncallScheduleCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call schedule."""
+ oncallSchedule: IncidentManagementOncallSchedule
+}
+
+"""Autogenerated input type of OncallScheduleDestroy"""
+input OncallScheduleDestroyInput {
+ """Project to remove the on-call schedule from."""
+ projectPath: ID!
+
+ """On-call schedule internal ID to remove."""
+ iid: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallScheduleDestroy"""
+type OncallScheduleDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call schedule."""
+ oncallSchedule: IncidentManagementOncallSchedule
+}
+
+"""Autogenerated input type of OncallScheduleUpdate"""
+input OncallScheduleUpdateInput {
+ """Project to update the on-call schedule in."""
+ projectPath: ID!
+
+ """On-call schedule internal ID to update."""
+ iid: String!
+
+ """Name of the on-call schedule."""
+ name: String
+
+ """Description of the on-call schedule."""
+ description: String
+
+ """Timezone of the on-call schedule."""
+ timezone: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of OncallScheduleUpdate"""
+type OncallScheduleUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """On-call schedule."""
+ oncallSchedule: IncidentManagementOncallSchedule
+}
+
+"""The rotation user and color palette"""
+input OncallUserInputType {
+ """
+ Username of the user to participate in the on-call rotation. For example, `"user_one"`.
+ """
+ username: String!
+
+ """
+ Value of DataVisualizationColorEnum. The color from the palette to assign to the on-call user.
+ """
+ colorPalette: DataVisualizationColorEnum
+
+ """
+ Color weight to assign to for the on-call user. To view on-call schedules in
+ GitLab, do not provide a value below 500. A value between 500 and 950 ensures
+ sufficient contrast.
+ """
+ colorWeight: DataVisualizationWeightEnum
+}
+
+"""
+Represents a package in the Package Registry. Note that this type is in beta and susceptible to changes
+"""
+type Package {
+ """Whether the user can destroy the package."""
+ canDestroy: Boolean!
+
+ """Date of creation."""
+ createdAt: Time!
+
+ """ID of the package."""
+ id: PackagesPackageID!
+
+ """Package metadata."""
+ metadata: PackageMetadata
+
+ """Name of the package."""
+ name: String!
+
+ """Package type."""
+ packageType: PackageTypeEnum!
+
+ """Pipelines that built the package."""
+ pipelines(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """Project where the package is stored."""
+ project: Project!
+
+ """Package status."""
+ status: PackageStatus!
+
+ """Package tags."""
+ tags(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageTagConnection
+
+ """Date of most recent update."""
+ updatedAt: Time!
+
+ """Version string."""
+ version: String
+
+ """
+ Other versions of the package. Deprecated in 13.11: This field is now only returned in the PackageDetailsType.
+ """
+ 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
+ ): PackageConnection @deprecated(reason: "This field is now only returned in the PackageDetailsType. Deprecated in 13.11.")
+}
+
+"""Represents a composer JSON file"""
+type PackageComposerJsonType {
+ """License set in the Composer JSON file."""
+ license: String
+
+ """Name set in the Composer JSON file."""
+ name: String
+
+ """Type set in the Composer JSON file."""
+ type: String
+
+ """Version set in the Composer JSON file."""
+ version: String
+}
+
+"""The connection type for Package."""
+type PackageConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [PackageEdge]
+
+ """A list of nodes."""
+ nodes: [Package]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Represents a package dependency."""
+type PackageDependency {
+ """ID of the dependency."""
+ id: PackagesDependencyID!
+
+ """Name of the dependency."""
+ name: String!
+
+ """Version pattern of the dependency."""
+ versionPattern: String!
+}
+
+"""Represents a package dependency link"""
+type PackageDependencyLink {
+ """Dependency."""
+ dependency: PackageDependency
+
+ """Dependency type."""
+ dependencyType: PackageDependencyType!
+
+ """ID of the dependency link."""
+ id: PackagesDependencyLinkID!
+
+ """Dependency link metadata."""
+ metadata: DependencyLinkMetadata
+}
+
+"""The connection type for PackageDependencyLink."""
+type PackageDependencyLinkConnection {
+ """A list of edges."""
+ edges: [PackageDependencyLinkEdge]
+
+ """A list of nodes."""
+ nodes: [PackageDependencyLink]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PackageDependencyLinkEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PackageDependencyLink
+}
+
+enum PackageDependencyType {
+ """dependencies dependency type"""
+ DEPENDENCIES
+
+ """devDependencies dependency type"""
+ DEV_DEPENDENCIES
+
+ """bundleDependencies dependency type"""
+ BUNDLE_DEPENDENCIES
+
+ """peerDependencies dependency type"""
+ PEER_DEPENDENCIES
+}
+
+"""
+Represents a package details in the Package Registry. Note that this type is in beta and susceptible to changes
+"""
+type PackageDetailsType {
+ """Whether the user can destroy the package."""
+ canDestroy: Boolean!
+
+ """Date of creation."""
+ createdAt: Time!
+
+ """Dependency link."""
+ dependencyLinks(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageDependencyLinkConnection
+
+ """ID of the package."""
+ id: PackagesPackageID!
+
+ """Package metadata."""
+ metadata: PackageMetadata
+
+ """Name of the package."""
+ name: String!
+
+ """Package files."""
+ packageFiles(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageFileConnection
+
+ """Package type."""
+ packageType: PackageTypeEnum!
+
+ """Pipelines that built the package."""
+ pipelines(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """Project where the package is stored."""
+ project: Project!
+
+ """Package status."""
+ status: PackageStatus!
+
+ """Package tags."""
+ tags(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageTagConnection
+
+ """Date of most recent update."""
+ updatedAt: Time!
+
+ """Version string."""
+ version: String
+
+ """Other versions of the 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
+ ): PackageConnection
+}
+
+"""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
+}
+
+"""Represents a package file"""
+type PackageFile {
+ """Created date."""
+ createdAt: Time!
+
+ """Download path of the package file."""
+ downloadPath: String!
+
+ """Md5 of the package file."""
+ fileMd5: String
+
+ """File metadata."""
+ fileMetadata: PackageFileMetadata
+
+ """Name of the package file."""
+ fileName: String!
+
+ """Sha1 of the package file."""
+ fileSha1: String
+
+ """Sha256 of the package file."""
+ fileSha256: String
+
+ """ID of the file."""
+ id: PackagesPackageFileID!
+
+ """Size of the package file."""
+ size: String!
+
+ """Updated date."""
+ updatedAt: Time!
+}
+
+"""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!
+}
+
+"""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
+}
+
+"""Represents metadata associated with a Package file"""
+interface PackageFileMetadata {
+ """Date of creation."""
+ createdAt: Time!
+
+ """Date of most recent update."""
+ updatedAt: Time!
+}
+
+"""Represents the Geo sync and verification state of a package file"""
+type PackageFileRegistry {
+ """Timestamp when the PackageFileRegistry was created"""
+ createdAt: Time
+
+ """ID of the PackageFileRegistry"""
+ id: ID!
+
+ """Error message during sync of the PackageFileRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the PackageFileRegistry
+ """
+ lastSyncedAt: Time
+
+ """ID of the PackageFile."""
+ packageFileId: ID!
+
+ """Timestamp after which the PackageFileRegistry should be resynced"""
+ retryAt: Time
+
+ """Number of consecutive failed sync attempts of the PackageFileRegistry"""
+ retryCount: Int
+
+ """Sync state of the PackageFileRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for PackageFileRegistry."""
+type PackageFileRegistryConnection {
+ """A list of edges."""
+ edges: [PackageFileRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [PackageFileRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PackageFileRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PackageFileRegistry
+}
+
+"""Values for sorting group packages"""
+enum PackageGroupSort {
+ """Ordered by created_at in descending order."""
+ CREATED_DESC
+
+ """Ordered by created_at in ascending order."""
+ CREATED_ASC
+
+ """Ordered by name in descending order."""
+ NAME_DESC
+
+ """Ordered by name in ascending order."""
+ NAME_ASC
+
+ """Ordered by version in descending order."""
+ VERSION_DESC
+
+ """Ordered by version in ascending order."""
+ VERSION_ASC
+
+ """Ordered by type in descending order."""
+ TYPE_DESC
+
+ """Ordered by type in ascending order."""
+ TYPE_ASC
+
+ """Ordered by project path in descending order."""
+ PROJECT_PATH_DESC
+
+ """Ordered by project path in ascending order."""
+ PROJECT_PATH_ASC
+}
+
+"""Represents metadata associated with a Package"""
+union PackageMetadata = ComposerMetadata | ConanMetadata | MavenMetadata | NugetMetadata | PypiMetadata
+
+"""
+A `PackagesConanFileMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesConanFileMetadatumID` is: `"gid://gitlab/Packages::Conan::FileMetadatum/1"`.
+"""
+scalar PackagesConanFileMetadatumID
+
+"""
+A `PackagesConanMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesConanMetadatumID` is: `"gid://gitlab/Packages::Conan::Metadatum/1"`.
+"""
+scalar PackagesConanMetadatumID
+
+"""
+A `PackagesDependencyID` is a global ID. It is encoded as a string.
+
+An example `PackagesDependencyID` is: `"gid://gitlab/Packages::Dependency/1"`.
+"""
+scalar PackagesDependencyID
+
+"""
+A `PackagesDependencyLinkID` is a global ID. It is encoded as a string.
+
+An example `PackagesDependencyLinkID` is: `"gid://gitlab/Packages::DependencyLink/1"`.
+"""
+scalar PackagesDependencyLinkID
+
+"""Namespace-level Package Registry settings"""
+type PackageSettings {
+ """
+ When generic_duplicates_allowed is false, you can publish duplicate packages
+ with names that match this regex. Otherwise, this setting has no effect.
+ """
+ genericDuplicateExceptionRegex: UntrustedRegexp
+
+ """
+ Indicates whether duplicate generic packages are allowed for this namespace.
+ """
+ genericDuplicatesAllowed: Boolean!
+
+ """
+ When maven_duplicates_allowed is false, you can publish duplicate packages
+ with names that match this regex. Otherwise, this setting has no effect.
+ """
+ mavenDuplicateExceptionRegex: UntrustedRegexp
+
+ """
+ Indicates whether duplicate Maven packages are allowed for this namespace.
+ """
+ mavenDuplicatesAllowed: Boolean!
+}
+
+"""
+A `PackagesMavenMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesMavenMetadatumID` is: `"gid://gitlab/Packages::Maven::Metadatum/1"`.
+"""
+scalar PackagesMavenMetadatumID
+
+"""
+A `PackagesNugetDependencyLinkMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesNugetDependencyLinkMetadatumID` is: `"gid://gitlab/Packages::Nuget::DependencyLinkMetadatum/1"`.
+"""
+scalar PackagesNugetDependencyLinkMetadatumID
+
+"""
+A `PackagesNugetMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesNugetMetadatumID` is: `"gid://gitlab/Packages::Nuget::Metadatum/1"`.
+"""
+scalar PackagesNugetMetadatumID
+
+"""Values for sorting package"""
+enum PackageSort {
+ """Ordered by created_at in descending order."""
+ CREATED_DESC
+
+ """Ordered by created_at in ascending order."""
+ CREATED_ASC
+
+ """Ordered by name in descending order."""
+ NAME_DESC
+
+ """Ordered by name in ascending order."""
+ NAME_ASC
+
+ """Ordered by version in descending order."""
+ VERSION_DESC
+
+ """Ordered by version in ascending order."""
+ VERSION_ASC
+
+ """Ordered by type in descending order."""
+ TYPE_DESC
+
+ """Ordered by type in ascending order."""
+ TYPE_ASC
+}
+
+"""
+A `PackagesPackageFileID` is a global ID. It is encoded as a string.
+
+An example `PackagesPackageFileID` is: `"gid://gitlab/Packages::PackageFile/1"`.
+"""
+scalar PackagesPackageFileID
+
+"""
+A `PackagesPackageID` is a global ID. It is encoded as a string.
+
+An example `PackagesPackageID` is: `"gid://gitlab/Packages::Package/1"`.
+"""
+scalar PackagesPackageID
+
+"""
+A `PackagesPypiMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesPypiMetadatumID` is: `"gid://gitlab/Packages::Pypi::Metadatum/1"`.
+"""
+scalar PackagesPypiMetadatumID
+
+enum PackageStatus {
+ """Packages with a default status"""
+ DEFAULT
+
+ """Packages with a hidden status"""
+ HIDDEN
+
+ """Packages with a processing status"""
+ PROCESSING
+
+ """Packages with a error status"""
+ ERROR
+}
+
+"""Represents a package tag"""
+type PackageTag {
+ """Created date."""
+ createdAt: Time!
+
+ """ID of the tag."""
+ id: ID!
+
+ """Name of the tag."""
+ name: String!
+
+ """Updated date."""
+ updatedAt: Time!
+}
+
+"""The connection type for PackageTag."""
+type PackageTagConnection {
+ """A list of edges."""
+ edges: [PackageTagEdge]
+
+ """A list of nodes."""
+ nodes: [PackageTag]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PackageTagEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PackageTag
+}
+
+enum PackageTypeEnum {
+ """Packages from the Maven package manager"""
+ MAVEN
+
+ """Packages from the npm package manager"""
+ NPM
+
+ """Packages from the Conan package manager"""
+ CONAN
+
+ """Packages from the Nuget package manager"""
+ NUGET
+
+ """Packages from the PyPI package manager"""
+ PYPI
+
+ """Packages from the Composer package manager"""
+ COMPOSER
+
+ """Packages from the Generic package manager"""
+ GENERIC
+
+ """Packages from the Golang package manager"""
+ GOLANG
+
+ """Packages from the Debian package manager"""
+ DEBIAN
+
+ """Packages from the Rubygems package manager"""
+ RUBYGEMS
+
+ """Packages from the Helm package manager"""
+ HELM
+
+ """Packages from the Terraform Module package manager"""
+ TERRAFORM_MODULE
+}
+
+"""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 the Geo replication and verification state of a pages_deployment
+"""
+type PagesDeploymentRegistry {
+ """Timestamp when the PagesDeploymentRegistry was created"""
+ createdAt: Time
+
+ """ID of the PagesDeploymentRegistry"""
+ id: ID!
+
+ """Error message during sync of the PagesDeploymentRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the PagesDeploymentRegistry
+ """
+ lastSyncedAt: Time
+
+ """ID of the Pages Deployment."""
+ pagesDeploymentId: ID!
+
+ """Timestamp after which the PagesDeploymentRegistry should be resynced"""
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the PagesDeploymentRegistry
+ """
+ retryCount: Int
+
+ """Sync state of the PagesDeploymentRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for PagesDeploymentRegistry."""
+type PagesDeploymentRegistryConnection {
+ """A list of edges."""
+ edges: [PagesDeploymentRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [PagesDeploymentRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PagesDeploymentRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PagesDeploymentRegistry
+}
+
+"""
+Represents a file or directory in the project repository that has been locked.
+"""
+type PathLock {
+ """ID of the path lock."""
+ id: PathLockID!
+
+ """Locked path."""
+ path: String
+
+ """User that has locked this path."""
+ user: UserCore
+}
+
+"""The connection type for PathLock."""
+type PathLockConnection {
+ """A list of edges."""
+ edges: [PathLockEdge]
+
+ """A list of nodes."""
+ nodes: [PathLock]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PathLockEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PathLock
+}
+
+"""
+A `PathLockID` is a global ID. It is encoded as a string.
+
+An example `PathLockID` is: `"gid://gitlab/PathLock/1"`.
+"""
+scalar PathLockID
+
+"""String or integer."""
+scalar PayloadAlertFieldPathSegment
+
+type Pipeline {
+ """Indicates if the pipeline is active."""
+ active: Boolean!
+
+ """Base SHA of the source branch."""
+ beforeSha: String
+
+ """Specifies if a pipeline can be canceled."""
+ cancelable: Boolean!
+
+ """Code Quality degradations reported on the pipeline."""
+ codeQualityReports(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CodeQualityDegradationConnection
+
+ """Path to the commit that triggered the pipeline."""
+ commitPath: String
+
+ """Timestamp of the pipeline's commit."""
+ committedAt: Time
+
+ """Indicates if a pipeline is complete."""
+ complete: Boolean!
+
+ """
+ Configuration source of the pipeline (UNKNOWN_SOURCE, REPOSITORY_SOURCE,
+ AUTO_DEVOPS_SOURCE, WEBIDE_SOURCE, REMOTE_SOURCE, EXTERNAL_PROJECT_SOURCE,
+ BRIDGE_SOURCE, PARAMETER_SOURCE, COMPLIANCE_SOURCE)
+ """
+ configSource: PipelineConfigSourceEnum
+
+ """Coverage percentage."""
+ coverage: Float
+
+ """Timestamp of the pipeline's creation."""
+ createdAt: Time!
+
+ """
+ DAST profile associated with the pipeline. Returns `null`if `dast_view_scans` feature flag is disabled.
+ """
+ dastProfile: DastProfile
+
+ """Detailed status of the pipeline."""
+ detailedStatus: DetailedStatus!
+
+ """Pipelines this pipeline will trigger."""
+ downstream(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """Duration of the pipeline in seconds."""
+ duration: Int
+
+ """Timestamp of the pipeline's completion."""
+ finishedAt: Time
+
+ """ID of the pipeline."""
+ id: ID!
+
+ """Internal ID of the pipeline."""
+ iid: String!
+
+ """Specific job in this pipeline, either by name or ID."""
+ job(
+ """ID of the job."""
+ id: JobID
+
+ """Name of the job."""
+ name: String
+ ): CiJob
+
+ """Jobs belonging to the pipeline."""
+ jobs(
+ """Filter jobs by the type of security report they produce."""
+ securityReportTypes: [SecurityReportTypeEnum!]
+
+ """Filter jobs by status."""
+ statuses: [CiJobStatus!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiJobConnection
+
+ """Relative path to the pipeline's page."""
+ path: String
+
+ """Project the pipeline belongs to."""
+ project: Project
+
+ """How long the pipeline was queued before starting."""
+ queuedDuration: Duration
+
+ """Reference to the branch from which the pipeline was triggered."""
+ ref: String
+
+ """Specifies if a pipeline can be retried."""
+ retryable: Boolean!
+
+ """Vulnerability findings reported on the pipeline."""
+ securityReportFindings(
+ """Filter vulnerability findings by report type."""
+ reportType: [String!]
+
+ """Filter vulnerability findings by severity."""
+ severity: [String!]
+
+ """Filter vulnerability findings by Scanner.externalId."""
+ scanner: [String!]
+
+ """Filter vulnerability findings by state."""
+ state: [VulnerabilityState!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineSecurityReportFindingConnection
+
+ """
+ Vulnerability and scanned resource counts for each security scanner of the pipeline.
+ """
+ securityReportSummary: SecurityReportSummary
+
+ """SHA of the pipeline's commit."""
+ sha: String!
+
+ """Job where pipeline was triggered from."""
+ sourceJob: CiJob
+
+ """Stages of the pipeline."""
+ stages(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiStageConnection
+
+ """Timestamp when the pipeline was started."""
+ startedAt: Time
+
+ """
+ Status of the pipeline (CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING,
+ RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED)
+ """
+ status: PipelineStatusEnum!
+
+ """Summary of the test report generated by the pipeline."""
+ testReportSummary: TestReportSummary!
+
+ """A specific test suite in a pipeline test report."""
+ testSuite(
+ """IDs of the builds used to run the test suite."""
+ buildIds: [ID!]!
+ ): TestSuite
+
+ """Timestamp of the pipeline's last activity."""
+ updatedAt: Time!
+
+ """Pipeline that triggered the pipeline."""
+ upstream: Pipeline
+
+ """Pipeline user."""
+ user: UserCore
+
+ """Permissions for the current user on the resource"""
+ userPermissions: PipelinePermissions!
+
+ """Indicates if the pipeline has jobs with `needs` dependencies."""
+ usesNeeds: Boolean
+
+ """Indicates if a pipeline has warnings."""
+ warnings: Boolean!
+}
+
+type PipelineAnalytics {
+ """Labels for the monthly pipeline count."""
+ monthPipelinesLabels: [String!]
+
+ """Total monthly successful pipeline count."""
+ monthPipelinesSuccessful: [Int!]
+
+ """Total monthly pipeline count."""
+ monthPipelinesTotals: [Int!]
+
+ """Pipeline times labels."""
+ pipelineTimesLabels: [String!]
+
+ """Pipeline times."""
+ pipelineTimesValues: [Int!]
+
+ """Labels for the weekly pipeline count."""
+ weekPipelinesLabels: [String!]
+
+ """Total weekly successful pipeline count."""
+ weekPipelinesSuccessful: [Int!]
+
+ """Total weekly pipeline count."""
+ weekPipelinesTotals: [Int!]
+
+ """Labels for the yearly pipeline count."""
+ yearPipelinesLabels: [String!]
+
+ """Total yearly successful pipeline count."""
+ yearPipelinesSuccessful: [Int!]
+
+ """Total yearly pipeline count."""
+ yearPipelinesTotals: [Int!]
+}
+
+"""Represents the Geo sync and verification state of a pipeline artifact"""
+type PipelineArtifactRegistry {
+ """Timestamp when the PipelineArtifactRegistry was created"""
+ createdAt: Time
+
+ """ID of the PipelineArtifactRegistry"""
+ id: ID!
+
+ """Error message during sync of the PipelineArtifactRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the PipelineArtifactRegistry
+ """
+ lastSyncedAt: Time
+
+ """ID of the pipeline artifact."""
+ pipelineArtifactId: ID!
+
+ """Timestamp after which the PipelineArtifactRegistry should be resynced"""
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the PipelineArtifactRegistry
+ """
+ retryCount: Int
+
+ """Sync state of the PipelineArtifactRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for PipelineArtifactRegistry."""
+type PipelineArtifactRegistryConnection {
+ """A list of edges."""
+ edges: [PipelineArtifactRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [PipelineArtifactRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PipelineArtifactRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PipelineArtifactRegistry
+}
+
+"""Autogenerated input type of PipelineCancel"""
+input PipelineCancelInput {
+ """ID of the pipeline to mutate."""
+ id: CiPipelineID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PipelineCancel"""
+type PipelineCancelPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+enum PipelineConfigSourceEnum {
+ """Unknown source."""
+ UNKNOWN_SOURCE
+
+ """Repository source."""
+ REPOSITORY_SOURCE
+
+ """Auto DevOps source."""
+ AUTO_DEVOPS_SOURCE
+
+ """Webide source."""
+ WEBIDE_SOURCE
+
+ """Remote source."""
+ REMOTE_SOURCE
+
+ """External project source."""
+ EXTERNAL_PROJECT_SOURCE
+
+ """Bridge source."""
+ BRIDGE_SOURCE
+
+ """Parameter source."""
+ PARAMETER_SOURCE
+
+ """Compliance source."""
+ COMPLIANCE_SOURCE
+}
+
+"""The connection type for Pipeline."""
+type PipelineConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [PipelineEdge]
+
+ """A list of nodes."""
+ nodes: [Pipeline]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of PipelineDestroy"""
+input PipelineDestroyInput {
+ """ID of the pipeline to mutate."""
+ id: CiPipelineID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PipelineDestroy"""
+type PipelineDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type PipelineEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Pipeline
+}
+
+type PipelinePermissions {
+ """Indicates the user can perform `admin_pipeline` on this resource"""
+ adminPipeline: Boolean!
+
+ """Indicates the user can perform `destroy_pipeline` on this resource"""
+ destroyPipeline: Boolean!
+
+ """Indicates the user can perform `update_pipeline` on this resource"""
+ updatePipeline: Boolean!
+}
+
+"""Autogenerated input type of PipelineRetry"""
+input PipelineRetryInput {
+ """ID of the pipeline to mutate."""
+ id: CiPipelineID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PipelineRetry"""
+type PipelineRetryPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Pipeline after mutation."""
+ pipeline: Pipeline
+}
+
+"""Represents vulnerability finding of a security report on the pipeline."""
+type PipelineSecurityReportFinding {
+ """Type of the security report that found the vulnerability."""
+ confidence: String
+
+ """Description of the vulnerability finding."""
+ description: String
+
+ """Indicates whether the vulnerability is a false positive."""
+ falsePositive: Boolean
+
+ """Identifiers of the vulnerabilit finding."""
+ identifiers: [VulnerabilityIdentifier!]!
+
+ """
+ Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability.
+ """
+ location: VulnerabilityLocation
+
+ """Name of the vulnerability finding."""
+ name: String
+
+ """Project on which the vulnerability finding was found."""
+ project: Project
+
+ """Name of the vulnerability finding."""
+ projectFingerprint: String
+
+ """Type of the security report that found the vulnerability finding."""
+ reportType: VulnerabilityReportType
+
+ """Scanner metadata for the vulnerability."""
+ scanner: VulnerabilityScanner
+
+ """Severity of the vulnerability finding."""
+ severity: VulnerabilitySeverity
+
+ """URL to the vulnerability's details page."""
+ solution: String
+
+ """Finding status."""
+ state: VulnerabilityState
+
+ """Name of the vulnerability finding."""
+ uuid: String
+}
+
+"""The connection type for PipelineSecurityReportFinding."""
+type PipelineSecurityReportFindingConnection {
+ """A list of edges."""
+ edges: [PipelineSecurityReportFindingEdge]
+
+ """A list of nodes."""
+ nodes: [PipelineSecurityReportFinding]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type PipelineSecurityReportFindingEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: PipelineSecurityReportFinding
+}
+
+enum PipelineStatusEnum {
+ """Pipeline has been created."""
+ CREATED
+
+ """
+ A resource (for example, a runner) that the pipeline requires to run is unavailable.
+ """
+ WAITING_FOR_RESOURCE
+
+ """Pipeline is preparing to run."""
+ PREPARING
+
+ """Pipeline has not started running yet."""
+ PENDING
+
+ """Pipeline is running."""
+ RUNNING
+
+ """At least one stage of the pipeline failed."""
+ FAILED
+
+ """Pipeline completed successfully."""
+ SUCCESS
+
+ """Pipeline was canceled before completion."""
+ CANCELED
+
+ """Pipeline was skipped."""
+ SKIPPED
+
+ """Pipeline needs to be manually started."""
+ MANUAL
+
+ """Pipeline is scheduled to run."""
+ SCHEDULED
+}
+
+type Project {
+ """Size limit for the repository in bytes."""
+ actualRepositorySizeLimit: Float
+
+ """Agent configurations defined by the project"""
+ agentConfigurations(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AgentConfigurationConnection
+
+ """A single Alert Management alert of the project."""
+ alertManagementAlert(
+ """IID of the alert. For example, "1"."""
+ iid: String
+
+ """Alerts with the specified statues. For example, `[TRIGGERED]`."""
+ statuses: [AlertManagementStatus!]
+
+ """Sort alerts by this criteria."""
+ sort: AlertManagementAlertSort
+
+ """Filter query for given domain."""
+ domain: AlertManagementDomainFilter! = operations
+
+ """Search query for title, description, service, or monitoring_tool."""
+ search: String
+
+ """Username of a user assigned to the issue."""
+ assigneeUsername: String
+ ): AlertManagementAlert
+
+ """Counts of alerts by status for the project."""
+ alertManagementAlertStatusCounts(
+ """Search query for title, description, service, or monitoring_tool."""
+ search: String
+
+ """Username of a user assigned to the issue."""
+ assigneeUsername: String
+ ): AlertManagementAlertStatusCountsType
+
+ """Alert Management alerts of the project."""
+ alertManagementAlerts(
+ """IID of the alert. For example, "1"."""
+ iid: String
+
+ """Alerts with the specified statues. For example, `[TRIGGERED]`."""
+ statuses: [AlertManagementStatus!]
+
+ """Sort alerts by this criteria."""
+ sort: AlertManagementAlertSort
+
+ """Filter query for given domain."""
+ domain: AlertManagementDomainFilter! = operations
+
+ """Search query for title, description, service, or monitoring_tool."""
+ search: String
+
+ """Username of a user assigned to the issue."""
+ assigneeUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AlertManagementAlertConnection
+
+ """HTTP Integrations which can receive alerts for the project."""
+ alertManagementHttpIntegrations(
+ """ID of the integration."""
+ id: AlertManagementHttpIntegrationID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AlertManagementHttpIntegrationConnection
+
+ """Integrations which can receive alerts for the project."""
+ alertManagementIntegrations(
+ """ID of the integration."""
+ id: GlobalID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): AlertManagementIntegrationConnection
+
+ """Extract alert fields from payload for custom mapping."""
+ alertManagementPayloadFields(
+ """Sample payload for extracting alert fields for custom mappings."""
+ payloadExample: String!
+ ): [AlertManagementPayloadAlertField!]
+
+ """
+ If `only_allow_merge_if_pipeline_succeeds` is true, indicates if merge
+ requests of the project can also be merged with skipped jobs.
+ """
+ allowMergeOnSkippedPipeline: Boolean
+
+ """API fuzzing configuration for the project. """
+ apiFuzzingCiConfiguration: ApiFuzzingCiConfiguration
+
+ """Indicates the archived status of the project."""
+ archived: Boolean
+
+ """
+ Indicates if issues referenced by merge requests and commits within the default branch are closed automatically.
+ """
+ autocloseReferencedIssues: Boolean
+
+ """URL to avatar image file of the project."""
+ avatarUrl: String
+
+ """A single board of the project."""
+ board(
+ """ID of the board."""
+ id: BoardID!
+ ): Board
+
+ """Boards of the project."""
+ boards(
+ """Find a board by its ID."""
+ id: BoardID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): BoardConnection
+
+ """CI/CD settings for the project."""
+ ciCdSettings: ProjectCiCdSetting
+
+ """The CI Job Tokens scope of access."""
+ ciJobTokenScope: CiJobTokenScopeType
+
+ """Find a single CI/CD template by name."""
+ ciTemplate(
+ """
+ Name of the CI/CD template to search for. Template must be formatted as `Name.gitlab-ci.yml`.
+ """
+ name: String!
+ ): CiTemplate
+
+ """Find a single cluster agent by name."""
+ clusterAgent(
+ """Name of the cluster agent."""
+ name: String!
+ ): ClusterAgent
+
+ """Cluster agents associated with the project."""
+ clusterAgents(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ClusterAgentConnection
+
+ """Code coverage summary associated with the project."""
+ codeCoverageSummary: CodeCoverageSummary
+
+ """Compliance frameworks associated with the project."""
+ complianceFrameworks(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ComplianceFrameworkConnection
+
+ """Container expiration policy of the project."""
+ containerExpirationPolicy: ContainerExpirationPolicy
+
+ """Indicates if Container Registry is enabled for the current user"""
+ containerRegistryEnabled: Boolean
+
+ """Container repositories of the project."""
+ containerRepositories(
+ """Filter the container repositories by their name."""
+ name: String
+
+ """Sort container repositories by this criteria."""
+ sort: ContainerRepositorySort = created_desc
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ContainerRepositoryConnection
+
+ """Number of container repositories in the project."""
+ containerRepositoriesCount: Int!
+
+ """Timestamp of the project creation."""
+ createdAt: Time
+
+ """DAST Profile associated with the project."""
+ dastProfile(
+ """ID of the DAST Profile."""
+ id: DastProfileID!
+ ): DastProfile
+
+ """DAST Profiles associated with the project."""
+ dastProfiles(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DastProfileConnection
+
+ """DAST scanner profiles associated with the project."""
+ dastScannerProfiles(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DastScannerProfileConnection
+
+ """DAST Site Profile associated with the project."""
+ dastSiteProfile(
+ """ID of the site profile."""
+ id: DastSiteProfileID!
+ ): DastSiteProfile
+
+ """DAST Site Profiles associated with the project."""
+ dastSiteProfiles(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DastSiteProfileConnection
+
+ """DAST Site Validations associated with the project."""
+ dastSiteValidations(
+ """Normalized URL of the target to be scanned."""
+ normalizedTargetUrls: [String!]
+
+ """Status of the site validation."""
+ status: DastSiteValidationStatusEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DastSiteValidationConnection
+
+ """Short description of the project."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Project's DORA metrics."""
+ dora: Dora
+
+ """A single environment of the project."""
+ environment(
+ """Name of the environment."""
+ name: String
+
+ """Search query for environment name."""
+ search: String
+
+ """States of environments that should be included in result."""
+ states: [String!]
+ ): Environment
+
+ """Environments of the project."""
+ environments(
+ """Name of the environment."""
+ name: String
+
+ """Search query for environment name."""
+ search: String
+
+ """States of environments that should be included in result."""
+ states: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Number of times the project has been forked."""
+ forksCount: Int!
+
+ """Full path of the project."""
+ fullPath: ID!
+
+ """Grafana integration details for the project."""
+ grafanaIntegration: GrafanaIntegration
+
+ """Group of the project."""
+ group: Group
+
+ """URL to connect to the project via HTTPS."""
+ httpUrlToRepo: String
+
+ """ID of the project."""
+ id: ID!
+
+ """Status of import background job of the project."""
+ importStatus: String
+
+ """Incident Management escalation policies of the project."""
+ incidentManagementEscalationPolicies(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): EscalationPolicyTypeConnection
+
+ """Incident Management escalation policy of the project."""
+ incidentManagementEscalationPolicy(
+ """ID of the escalation policy."""
+ id: IncidentManagementEscalationPolicyID!
+ ): EscalationPolicyType
+
+ """Incident Management On-call schedules of the project."""
+ incidentManagementOncallSchedules(
+ """IIDs of on-call schedules."""
+ iids: [ID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IncidentManagementOncallScheduleConnection
+
+ """A single issue of the project."""
+ issue(
+ """Search query for title or description."""
+ search: String
+
+ """IID of the issue. For example, "1"."""
+ iid: String
+
+ """List of IIDs of issues. For example, `["1", "2"]`."""
+ iids: [String!]
+
+ """Labels applied to this issue."""
+ labelName: [String]
+
+ """Milestone applied to this issue."""
+ milestoneTitle: [String]
+
+ """Username of the author of the issue."""
+ authorUsername: String
+
+ """Usernames of users assigned to the issue."""
+ assigneeUsernames: [String!]
+
+ """
+ ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported.
+ """
+ assigneeId: String
+
+ """Issues created before this date."""
+ createdBefore: Time
+
+ """Issues created after this date."""
+ createdAfter: Time
+
+ """Issues updated before this date."""
+ updatedBefore: Time
+
+ """Issues updated after this date."""
+ updatedAfter: Time
+
+ """Issues closed before this date."""
+ closedBefore: Time
+
+ """Issues closed after this date."""
+ closedAfter: Time
+
+ """Filter issues by the given issue types."""
+ types: [IssueType!]
+
+ """Filter issues by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """
+ Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues.
+ """
+ confidential: Boolean
+
+ """Negated arguments."""
+ not: NegatedIssueFilterInput
+
+ """Current state of this issue."""
+ state: IssuableState
+
+ """Sort issues by this criteria."""
+ sort: IssueSort = created_desc
+
+ """List of iteration Global IDs applied to the issue."""
+ iterationId: [ID]
+
+ """Filter by iteration ID wildcard."""
+ iterationWildcardId: IterationWildcardId
+
+ """
+ ID of an epic associated with the issues, "none" and "any" values are supported.
+ """
+ epicId: String
+
+ """Whether to include subepics when filtering issues by epicId."""
+ includeSubepics: Boolean
+
+ """Weight applied to the issue, "none" and "any" values are supported."""
+ weight: String
+
+ """Release tag associated with the issue's milestone."""
+ releaseTag: [String!]
+
+ """Filter issues by release tag ID wildcard."""
+ releaseTagWildcardId: ReleaseTagWildcardId
+ ): Issue
+
+ """Counts of issues by status for the project."""
+ issueStatusCounts(
+ """Search query for title or description."""
+ search: String
+
+ """IID of the issue. For example, "1"."""
+ iid: String
+
+ """List of IIDs of issues. For example, `["1", "2"]`."""
+ iids: [String!]
+
+ """Labels applied to this issue."""
+ labelName: [String]
+
+ """Milestone applied to this issue."""
+ milestoneTitle: [String]
+
+ """Username of the author of the issue."""
+ authorUsername: String
+
+ """Usernames of users assigned to the issue."""
+ assigneeUsernames: [String!]
+
+ """
+ ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported.
+ """
+ assigneeId: String
+
+ """Issues created before this date."""
+ createdBefore: Time
+
+ """Issues created after this date."""
+ createdAfter: Time
+
+ """Issues updated before this date."""
+ updatedBefore: Time
+
+ """Issues updated after this date."""
+ updatedAfter: Time
+
+ """Issues closed before this date."""
+ closedBefore: Time
+
+ """Issues closed after this date."""
+ closedAfter: Time
+
+ """Filter issues by the given issue types."""
+ types: [IssueType!]
+
+ """Filter issues by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """
+ Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues.
+ """
+ confidential: Boolean
+
+ """Negated arguments."""
+ not: NegatedIssueFilterInput
+
+ """Release tag associated with the issue's milestone."""
+ releaseTag: [String!]
+
+ """Filter issues by release tag ID wildcard."""
+ releaseTagWildcardId: ReleaseTagWildcardId
+ ): IssueStatusCountsType
+
+ """Issues of the project."""
+ issues(
+ """Search query for title or description."""
+ search: String
+
+ """IID of the issue. For example, "1"."""
+ iid: String
+
+ """List of IIDs of issues. For example, `["1", "2"]`."""
+ iids: [String!]
+
+ """Labels applied to this issue."""
+ labelName: [String]
+
+ """Milestone applied to this issue."""
+ milestoneTitle: [String]
+
+ """Username of the author of the issue."""
+ authorUsername: String
+
+ """Usernames of users assigned to the issue."""
+ assigneeUsernames: [String!]
+
+ """
+ ID of a user assigned to the issues. Wildcard values "NONE" and "ANY" are supported.
+ """
+ assigneeId: String
+
+ """Issues created before this date."""
+ createdBefore: Time
+
+ """Issues created after this date."""
+ createdAfter: Time
+
+ """Issues updated before this date."""
+ updatedBefore: Time
+
+ """Issues updated after this date."""
+ updatedAfter: Time
+
+ """Issues closed before this date."""
+ closedBefore: Time
+
+ """Issues closed after this date."""
+ closedAfter: Time
+
+ """Filter issues by the given issue types."""
+ types: [IssueType!]
+
+ """Filter issues by milestone ID wildcard."""
+ milestoneWildcardId: MilestoneWildcardId
+
+ """
+ Filter by reaction emoji applied by the current user. Wildcard values "NONE" and "ANY" are supported.
+ """
+ myReactionEmoji: String
+
+ """
+ Filter for confidential issues. If "false", excludes confidential issues. If "true", returns only confidential issues.
+ """
+ confidential: Boolean
+
+ """Negated arguments."""
+ not: NegatedIssueFilterInput
+
+ """Current state of this issue."""
+ state: IssuableState
+
+ """Sort issues by this criteria."""
+ sort: IssueSort = created_desc
+
+ """List of iteration Global IDs applied to the issue."""
+ iterationId: [ID]
+
+ """Filter by iteration ID wildcard."""
+ iterationWildcardId: IterationWildcardId
+
+ """
+ ID of an epic associated with the issues, "none" and "any" values are supported.
+ """
+ epicId: String
+
+ """Whether to include subepics when filtering issues by epicId."""
+ includeSubepics: Boolean
+
+ """Weight applied to the issue, "none" and "any" values are supported."""
+ weight: String
+
+ """Release tag associated with the issue's milestone."""
+ releaseTag: [String!]
+
+ """Filter issues by release tag ID wildcard."""
+ releaseTagWildcardId: ReleaseTagWildcardId
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Indicates if Issues are enabled for the current user"""
+ issuesEnabled: Boolean
+
+ """Find iteration cadences."""
+ iterationCadences(
+ """Global ID of the iteration cadence to look up."""
+ id: IterationsCadenceID
+
+ """Fuzzy search by title."""
+ title: String
+
+ """Duration in weeks of the iterations within this cadence."""
+ durationInWeeks: Int
+
+ """
+ Whether the iteration cadence should automatically generate future iterations.
+ """
+ automatic: Boolean
+
+ """Whether the iteration cadence is active."""
+ active: Boolean
+
+ """Whether to include ancestor groups to search iterations cadences in."""
+ includeAncestorGroups: Boolean
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IterationCadenceConnection
+
+ """Find iterations."""
+ iterations(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Filter iterations by state."""
+ state: IterationState
+
+ """Fuzzy search by title."""
+ title: String
+
+ """Global ID of the Iteration to look up."""
+ id: ID
+
+ """Internal ID of the Iteration to look up."""
+ iid: ID
+
+ """Whether to include ancestor iterations. Defaults to true."""
+ includeAncestors: Boolean
+
+ """Global iteration cadence IDs by which to look up the iterations."""
+ iterationCadenceIds: [IterationsCadenceID!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): IterationConnection
+
+ """Status of Jira import background job of the project."""
+ jiraImportStatus: String
+
+ """Jira imports into the project."""
+ jiraImports(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): JiraImportConnection
+
+ """
+ Jobs of a project. This field can only be resolved for one project in any single request.
+ """
+ jobs(
+ """Filter jobs by status."""
+ statuses: [CiJobStatus!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiJobConnection
+
+ """Indicates if CI/CD pipeline jobs are enabled for the current user."""
+ jobsEnabled: Boolean
+
+ """Label available on this project."""
+ label(
+ """Title of the label."""
+ title: String!
+ ): Label
+
+ """Labels available on this project."""
+ labels(
+ """Search term to find labels with."""
+ searchTerm: String
+
+ """Include labels from ancestor groups."""
+ includeAncestorGroups: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the 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
+
+ """Timestamp of the project last activity."""
+ lastActivityAt: Time
+
+ """Indicates if the project has Large File Storage (LFS) enabled."""
+ lfsEnabled: Boolean
+
+ """A single merge request of the project."""
+ mergeRequest(
+ """IID of the merge request, for example `1`."""
+ iid: String!
+ ): MergeRequest
+
+ """Merge requests of the project."""
+ mergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Indicates if Merge Requests are enabled for the current user"""
+ mergeRequestsEnabled: Boolean
+
+ """
+ Indicates if no merge commits should be created and all merges should instead
+ be fast-forwarded, which means that merging is only allowed if the branch
+ could be fast-forwarded.
+ """
+ mergeRequestsFfOnlyEnabled: Boolean
+
+ """Milestones of the project."""
+ milestones(
+ """List items overlapping the given timeframe."""
+ timeframe: Timeframe
+
+ """Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`."""
+ ids: [ID!]
+
+ """Filter milestones by state."""
+ state: MilestoneStateEnum
+
+ """Title of the milestone."""
+ title: String
+
+ """Search string for the title."""
+ searchTitle: String
+
+ """Date the milestone contains."""
+ containingDate: Time
+
+ """Sort milestones by this criteria."""
+ sort: MilestoneSort = DUE_DATE_ASC
+
+ """
+ Also return milestones in the project's parent group and its ancestors.
+ """
+ includeAncestors: Boolean
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MilestoneConnection
+
+ """Name of the project (without namespace)."""
+ name: String!
+
+ """Full name of the project with its namespace."""
+ nameWithNamespace: String!
+
+ """Namespace of the project."""
+ namespace: Namespace
+
+ """Network Policies of the project"""
+ networkPolicies(
+ """Global ID of the environment to filter policies."""
+ environmentId: EnvironmentID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NetworkPolicyConnection
+
+ """
+ Indicates if merge requests of the project can only be merged when all the discussions are resolved.
+ """
+ onlyAllowMergeIfAllDiscussionsAreResolved: Boolean
+
+ """
+ Indicates if merge requests of the project can only be merged with successful jobs.
+ """
+ onlyAllowMergeIfPipelineSucceeds: Boolean
+
+ """Number of open issues for the project."""
+ openIssuesCount: Int
+
+ """Packages of the project."""
+ packages(
+ """Sort packages by this criteria."""
+ sort: PackageSort = CREATED_DESC
+
+ """Search a package by name."""
+ packageName: String = null
+
+ """Filter a package by type."""
+ packageType: PackageTypeEnum = null
+
+ """Filter a package by status."""
+ status: PackageStatus = null
+
+ """Include versionless packages."""
+ includeVersionless: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PackageConnection
+
+ """Path of the project."""
+ path: String!
+
+ """The project's path locks."""
+ pathLocks(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PathLockConnection
+
+ """Build pipeline of the project."""
+ pipeline(
+ """IID of the Pipeline. For example, "1"."""
+ iid: ID
+
+ """
+ SHA of the Pipeline. For example, "dyd0f15ay83993f5ab66k927w28673882x99100b".
+ """
+ sha: String
+ ): Pipeline
+
+ """Pipeline analytics."""
+ pipelineAnalytics: PipelineAnalytics
+
+ """Build pipelines of the project."""
+ pipelines(
+ """Filter pipelines by their status."""
+ status: PipelineStatusEnum
+
+ """Filter pipelines by the ref they are run for."""
+ ref: String
+
+ """Filter pipelines by the sha of the commit they are run for."""
+ sha: String
+
+ """
+ Filter pipelines by their source. Will be ignored if `dast_view_scans` feature flag is disabled.
+ """
+ source: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): PipelineConnection
+
+ """
+ Indicates if a link to create or view a merge request should display after a
+ push to Git repositories of the project from the command line.
+ """
+ printingMergeRequestLinkEnabled: Boolean
+
+ """Members of the project."""
+ projectMembers(
+ """Search query."""
+ search: String
+
+ """Filter members by the given member relations."""
+ relations: [ProjectMemberRelation!] = [DIRECT, INHERITED]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MemberInterfaceConnection
+
+ """
+ Indicates if there is public access to pipelines and job details of the project, including output logs and artifacts.
+ """
+ publicJobs: Boolean
+
+ """Project's push rules settings."""
+ pushRules: PushRules
+
+ """A single release of the project."""
+ release(
+ """Name of the tag associated to the release."""
+ tagName: String!
+ ): Release
+
+ """Releases of the project."""
+ releases(
+ """Sort releases by this criteria."""
+ sort: ReleaseSort = RELEASED_AT_DESC
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ReleaseConnection
+
+ """
+ Indicates if `Delete source branch` option should be enabled by default for all new merge requests of the project.
+ """
+ removeSourceBranchAfterMerge: Boolean
+
+ """Git repository of the project."""
+ repository: Repository
+
+ """Size of repository that exceeds the limit in bytes."""
+ repositorySizeExcess: Float
+
+ """Indicates if users can request member access to the project."""
+ requestAccessEnabled: Boolean
+
+ """Find a single requirement."""
+ requirement(
+ """List requirements by sort order."""
+ sort: Sort
+
+ """Filter requirements by state."""
+ state: RequirementState
+
+ """Search query for requirement title."""
+ search: String
+
+ """Filter requirements by author username."""
+ authorUsername: [String!]
+
+ """IID of the requirement, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of requirements, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """State of latest requirement test report."""
+ lastTestReportState: RequirementStatusFilter
+ ): Requirement
+
+ """Number of requirements for the project by their state."""
+ requirementStatesCount: RequirementStatesCount
+
+ """Find requirements."""
+ requirements(
+ """List requirements by sort order."""
+ sort: Sort
+
+ """Filter requirements by state."""
+ state: RequirementState
+
+ """Search query for requirement title."""
+ search: String
+
+ """Filter requirements by author username."""
+ authorUsername: [String!]
+
+ """IID of the requirement, e.g., "1"."""
+ iid: ID
+
+ """List of IIDs of requirements, e.g., `[1, 2]`."""
+ iids: [ID!]
+
+ """State of latest requirement test report."""
+ lastTestReportState: RequirementStatusFilter
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): RequirementConnection
+
+ """SAST CI configuration for the project."""
+ sastCiConfiguration: SastCiConfiguration
+
+ """Scan Execution Policies of the project"""
+ scanExecutionPolicies(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ScanExecutionPolicyConnection
+
+ """Path to project's security dashboard."""
+ securityDashboardPath: String
+
+ """Information about security analyzers used in the project."""
+ securityScanners: SecurityScanners
+
+ """Detailed version of a Sentry error on the project."""
+ sentryDetailedError(
+ """ID of the Sentry issue."""
+ id: GitlabErrorTrackingDetailedErrorID!
+ ): SentryDetailedError
+
+ """Paginated collection of Sentry errors on the project."""
+ sentryErrors: SentryErrorCollection
+
+ """E-mail address of the service desk."""
+ serviceDeskAddress: String
+
+ """Indicates if the project has service desk enabled."""
+ serviceDeskEnabled: Boolean
+
+ """Project services."""
+ services(
+ """Indicates if the integration is active."""
+ active: Boolean
+
+ """Type of integration."""
+ type: ServiceType
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ServiceConnection
+
+ """Indicates if shared runners are enabled for the project."""
+ sharedRunnersEnabled: Boolean
+
+ """Snippets of the project."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Indicates if Snippets are enabled for the current user"""
+ snippetsEnabled: Boolean
+
+ """Indicates if `squashReadOnly` is enabled."""
+ squashReadOnly: Boolean!
+
+ """URL to connect to the project via SSH."""
+ sshUrlToRepo: String
+
+ """Number of times the project has been starred."""
+ starCount: Int!
+
+ """Statistics of the project."""
+ statistics: ProjectStatistics
+
+ """Commit message used to apply merge request suggestions."""
+ suggestionCommitMessage: String
+
+ """
+ List of project topics (not Git tags). Deprecated in 13.12: Use `topics`.
+ """
+ tagList: String @deprecated(reason: "Use `topics`. Deprecated in 13.12.")
+
+ """Find a single Terraform state by name."""
+ terraformState(
+ """Name of the Terraform state."""
+ name: String!
+ ): TerraformState
+
+ """Terraform states associated with the project."""
+ terraformStates(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TerraformStateConnection
+
+ """Time logged on issues and merge requests in the project."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """List of project topics."""
+ topics: [String!]
+
+ """Permissions for the current user on the resource"""
+ userPermissions: ProjectPermissions!
+
+ """Visibility of the project."""
+ visibility: String
+
+ """Vulnerabilities reported on the project."""
+ vulnerabilities(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by VulnerabilityScanner.externalId."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """List vulnerabilities by sort order."""
+ sort: VulnerabilitySort = severity_desc
+
+ """
+ Returns only the vulnerabilities which have been resolved on default branch.
+ """
+ hasResolution: Boolean
+
+ """Returns only the vulnerabilities which have linked issues."""
+ hasIssues: Boolean
+
+ """
+ Filter vulnerabilities by location image. When this filter is present, the
+ response only matches entries for a `reportType` that includes
+ `container_scanning`, `cluster_image_scanning`.
+ """
+ image: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityConnection
+
+ """The historical number of vulnerabilities per day for the project."""
+ vulnerabilitiesCountByDay(
+ """First day for which to fetch vulnerability history."""
+ startDate: ISO8601Date!
+
+ """Last day for which to fetch vulnerability history."""
+ endDate: ISO8601Date!
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilitiesCountByDayConnection
+
+ """Vulnerability scanners reported on the project vulnerabilities."""
+ vulnerabilityScanners(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityScannerConnection
+
+ """Counts for each vulnerability severity in the project."""
+ vulnerabilitySeveritiesCount(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by scanner."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """Filter vulnerabilities that do or do not have issues."""
+ hasIssues: Boolean
+
+ """Filter vulnerabilities that do or do not have a resolution."""
+ hasResolution: Boolean
+ ): VulnerabilitySeveritiesCount
+
+ """Web URL of the project."""
+ webUrl: String
+
+ """Indicates if Wikis are enabled for the current user"""
+ wikiEnabled: Boolean
+}
+
+type ProjectCiCdSetting {
+ """
+ Indicates CI job tokens generated in this project have restricted access to resources.
+ """
+ jobTokenScopeEnabled: Boolean
+
+ """Whether to keep the latest builds artifacts."""
+ keepLatestArtifact: Boolean
+
+ """Whether merge pipelines are enabled."""
+ mergePipelinesEnabled: Boolean
+
+ """Whether merge trains are enabled."""
+ mergeTrainsEnabled: Boolean
+
+ """Project the CI/CD settings belong to."""
+ project: Project
+}
+
+"""The connection type for Project."""
+type ProjectConnection {
+ """A list of edges."""
+ edges: [ProjectEdge]
+
+ """A list of nodes."""
+ nodes: [Project]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""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
+}
+
+"""
+A `ProjectID` is a global ID. It is encoded as a string.
+
+An example `ProjectID` is: `"gid://gitlab/Project/1"`.
+"""
+scalar ProjectID
+
+"""Represents a Project Membership"""
+type ProjectMember implements MemberInterface {
+ """GitLab::Access level."""
+ accessLevel: AccessLevel
+
+ """Date and time the membership was created."""
+ createdAt: Time
+
+ """User that authorized membership."""
+ createdBy: UserCore
+
+ """Date and time the membership expires."""
+ expiresAt: Time
+
+ """ID of the member."""
+ id: ID!
+
+ """Project that User is a member of."""
+ project: Project
+
+ """Date and time the membership was last updated."""
+ updatedAt: Time
+
+ """User that is associated with the member object."""
+ user: UserCore
+
+ """Permissions for the current user on the resource"""
+ userPermissions: ProjectPermissions!
+}
+
+"""The connection type for ProjectMember."""
+type ProjectMemberConnection {
+ """A list of edges."""
+ edges: [ProjectMemberEdge]
+
+ """A list of nodes."""
+ nodes: [ProjectMember]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ProjectMemberEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ProjectMember
+}
+
+"""Project member relation"""
+enum ProjectMemberRelation {
+ """Direct members"""
+ DIRECT
+
+ """Inherited members"""
+ INHERITED
+
+ """Descendants members"""
+ DESCENDANTS
+
+ """Invited Groups members"""
+ INVITED_GROUPS
+}
+
+type ProjectPermissions {
+ """Indicates the user can perform `admin_operations` on this resource"""
+ adminOperations: Boolean!
+
+ """Indicates the user can perform `admin_path_locks` on this resource"""
+ adminPathLocks: Boolean!
+
+ """Indicates the user can perform `admin_project` on this resource"""
+ adminProject: Boolean!
+
+ """Indicates the user can perform `admin_remote_mirror` on this resource"""
+ adminRemoteMirror: Boolean!
+
+ """Indicates the user can perform `admin_wiki` on this resource"""
+ adminWiki: Boolean!
+
+ """Indicates the user can perform `archive_project` on this resource"""
+ archiveProject: Boolean!
+
+ """Indicates the user can perform `change_namespace` on this resource"""
+ changeNamespace: Boolean!
+
+ """
+ Indicates the user can perform `change_visibility_level` on this resource
+ """
+ changeVisibilityLevel: Boolean!
+
+ """Indicates the user can perform `create_deployment` on this resource"""
+ createDeployment: Boolean!
+
+ """Indicates the user can perform `create_design` on this resource"""
+ createDesign: Boolean!
+
+ """Indicates the user can perform `create_issue` on this resource"""
+ createIssue: Boolean!
+
+ """Indicates the user can perform `create_label` on this resource"""
+ createLabel: Boolean!
+
+ """
+ Indicates the user can perform `create_merge_request_from` on this resource
+ """
+ createMergeRequestFrom: Boolean!
+
+ """
+ Indicates the user can perform `create_merge_request_in` on this resource
+ """
+ createMergeRequestIn: Boolean!
+
+ """Indicates the user can perform `create_pages` on this resource"""
+ createPages: Boolean!
+
+ """Indicates the user can perform `create_pipeline` on this resource"""
+ createPipeline: Boolean!
+
+ """
+ Indicates the user can perform `create_pipeline_schedule` on this resource
+ """
+ createPipelineSchedule: Boolean!
+
+ """Indicates the user can perform `create_snippet` on this resource"""
+ createSnippet: Boolean!
+
+ """Indicates the user can perform `create_wiki` on this resource"""
+ createWiki: Boolean!
+
+ """Indicates the user can perform `destroy_design` on this resource"""
+ destroyDesign: Boolean!
+
+ """Indicates the user can perform `destroy_pages` on this resource"""
+ destroyPages: Boolean!
+
+ """Indicates the user can perform `destroy_wiki` on this resource"""
+ destroyWiki: Boolean!
+
+ """Indicates the user can perform `download_code` on this resource"""
+ downloadCode: Boolean!
+
+ """Indicates the user can perform `download_wiki_code` on this resource"""
+ downloadWikiCode: Boolean!
+
+ """Indicates the user can perform `fork_project` on this resource"""
+ forkProject: Boolean!
+
+ """Indicates the user can perform `push_code` on this resource"""
+ pushCode: Boolean!
+
+ """
+ Indicates the user can perform `push_to_delete_protected_branch` on this resource
+ """
+ pushToDeleteProtectedBranch: Boolean!
+
+ """Indicates the user can perform `read_commit_status` on this resource"""
+ readCommitStatus: Boolean!
+
+ """Indicates the user can perform `read_cycle_analytics` on this resource"""
+ readCycleAnalytics: Boolean!
+
+ """Indicates the user can perform `read_design` on this resource"""
+ readDesign: Boolean!
+
+ """Indicates the user can perform `read_merge_request` on this resource"""
+ readMergeRequest: Boolean!
+
+ """Indicates the user can perform `read_pages_content` on this resource"""
+ readPagesContent: Boolean!
+
+ """Indicates the user can perform `read_project` on this resource"""
+ readProject: Boolean!
+
+ """Indicates the user can perform `read_project_member` on this resource"""
+ readProjectMember: Boolean!
+
+ """Indicates the user can perform `read_wiki` on this resource"""
+ readWiki: Boolean!
+
+ """Indicates the user can perform `remove_fork_project` on this resource"""
+ removeForkProject: Boolean!
+
+ """Indicates the user can perform `remove_pages` on this resource"""
+ removePages: Boolean!
+
+ """Indicates the user can perform `remove_project` on this resource"""
+ removeProject: Boolean!
+
+ """Indicates the user can perform `rename_project` on this resource"""
+ renameProject: Boolean!
+
+ """Indicates the user can perform `request_access` on this resource"""
+ requestAccess: Boolean!
+
+ """Indicates the user can perform `update_pages` on this resource"""
+ updatePages: Boolean!
+
+ """Indicates the user can perform `update_wiki` on this resource"""
+ updateWiki: Boolean!
+
+ """Indicates the user can perform `upload_file` on this resource"""
+ uploadFile: Boolean!
+}
+
+"""Autogenerated input type of ProjectSetComplianceFramework"""
+input ProjectSetComplianceFrameworkInput {
+ """ID of the project to change the compliance framework of."""
+ projectId: ProjectID!
+
+ """ID of the compliance framework to assign to the project."""
+ complianceFrameworkId: ComplianceManagementFrameworkID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ProjectSetComplianceFramework"""
+type ProjectSetComplianceFrameworkPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Project after mutation."""
+ project: Project
+}
+
+"""Autogenerated input type of ProjectSetLocked"""
+input ProjectSetLockedInput {
+ """Full path of the project to mutate."""
+ projectPath: ID!
+
+ """Full path to the file."""
+ filePath: String!
+
+ """Whether or not to lock the file path."""
+ lock: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ProjectSetLocked"""
+type ProjectSetLockedPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Project after mutation."""
+ project: Project
+}
+
+type ProjectStatistics {
+ """Build artifacts size of the project in bytes."""
+ buildArtifactsSize: Float!
+
+ """Commit count of the project."""
+ commitCount: Float!
+
+ """Large File Storage (LFS) object size of the project in bytes."""
+ lfsObjectsSize: Float!
+
+ """Packages size of the project in bytes."""
+ packagesSize: Float!
+
+ """CI Pipeline artifacts size in bytes."""
+ pipelineArtifactsSize: Float
+
+ """Repository size of the project in bytes."""
+ repositorySize: Float!
+
+ """Snippets size of the project in bytes."""
+ snippetsSize: Float
+
+ """Storage size of the project in bytes."""
+ storageSize: Float!
+
+ """Uploads size of the project in bytes."""
+ uploadsSize: Float
+
+ """Wiki size of the project in bytes."""
+ wikiSize: Float
+}
+
+"""The alert condition for Prometheus"""
+type PrometheusAlert {
+ """Human-readable text of the alert condition."""
+ humanizedText: String!
+
+ """ID of the alert condition."""
+ id: ID!
+}
+
+"""Autogenerated input type of PrometheusIntegrationCreate"""
+input PrometheusIntegrationCreateInput {
+ """Project to create the integration in."""
+ projectPath: ID!
+
+ """Whether the integration is receiving alerts."""
+ active: Boolean!
+
+ """Endpoint at which Prometheus can be queried."""
+ apiUrl: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PrometheusIntegrationCreate"""
+type PrometheusIntegrationCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Newly created integration."""
+ integration: AlertManagementPrometheusIntegration
+}
+
+"""Autogenerated input type of PrometheusIntegrationResetToken"""
+input PrometheusIntegrationResetTokenInput {
+ """ID of the integration to mutate."""
+ id: IntegrationsPrometheusID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PrometheusIntegrationResetToken"""
+type PrometheusIntegrationResetTokenPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Newly created integration."""
+ integration: AlertManagementPrometheusIntegration
+}
+
+"""Autogenerated input type of PrometheusIntegrationUpdate"""
+input PrometheusIntegrationUpdateInput {
+ """ID of the integration to mutate."""
+ id: IntegrationsPrometheusID!
+
+ """Whether the integration is receiving alerts."""
+ active: Boolean
+
+ """Endpoint at which Prometheus can be queried."""
+ apiUrl: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PrometheusIntegrationUpdate"""
+type PrometheusIntegrationUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Newly created integration."""
+ integration: AlertManagementPrometheusIntegration
+}
+
+"""Autogenerated input type of PromoteToEpic"""
+input PromoteToEpicInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Group the promoted epic will belong to."""
+ groupPath: ID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of PromoteToEpic"""
+type PromoteToEpicPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after issue promotion."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Represents rules that commit pushes must follow."""
+type PushRules {
+ """Indicates whether commits not signed through GPG will be rejected."""
+ rejectUnsignedCommits: Boolean!
+}
+
+"""Pypi metadata"""
+type PypiMetadata {
+ """ID of the metadatum."""
+ id: PackagesPypiMetadatumID!
+
+ """Required Python version of the Pypi package."""
+ requiredPython: String
+}
+
+type Query {
+ """Find an issue board list."""
+ boardList(
+ """Global ID of the list."""
+ id: ListID!
+
+ """Filters applied when getting issue metadata in the board list."""
+ issueFilters: BoardIssueInput
+ ): BoardList
+
+ """CI related settings that apply to the entire instance."""
+ ciApplicationSettings: CiApplicationSettings
+
+ """
+ Linted and processed contents of a CI config.
+ Should not be requested more than once per request.
+
+ """
+ ciConfig(
+ """Project of the CI config."""
+ projectPath: ID!
+
+ """Sha for the pipeline."""
+ sha: String
+
+ """Contents of `.gitlab-ci.yml`."""
+ content: String!
+
+ """Run pipeline creation simulation, or only do static check."""
+ dryRun: Boolean
+ ): CiConfig
+
+ """Monthly CI minutes usage data for the current user."""
+ ciMinutesUsage(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiMinutesNamespaceMonthlyUsageConnection
+
+ """Find a container repository."""
+ containerRepository(
+ """Global ID of the container repository."""
+ id: ContainerRepositoryID!
+ ): ContainerRepositoryDetails
+
+ """Fields related to the current license."""
+ currentLicense: CurrentLicense
+
+ """Get information about current user."""
+ currentUser: UserCore
+
+ """Fields related to design management."""
+ designManagement: DesignManagement!
+
+ """
+ Get configured DevOps adoption namespaces. **BETA** This endpoint is subject to change without notice.
+ """
+ devopsAdoptionEnabledNamespaces(
+ """Filter by display namespace."""
+ displayNamespaceId: NamespaceID
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DevopsAdoptionEnabledNamespaceConnection
+
+ """Testing endpoint to validate the API with"""
+ echo(
+ """Text to echo back."""
+ text: String!
+ ): String!
+
+ """Find a Geo node."""
+ geoNode(
+ """Name of the Geo node. Defaults to the current Geo node name."""
+ name: String
+ ): GeoNode
+
+ """Find a group."""
+ group(
+ """
+ Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`.
+ """
+ fullPath: ID!
+ ): Group
+
+ """Fields related to Instance Security Dashboard."""
+ instanceSecurityDashboard: InstanceSecurityDashboard
+
+ """Get statistics on the instance. Deprecated in 13.10: This was renamed."""
+ instanceStatisticsMeasurements(
+ """Type of measurement or statistics to retrieve."""
+ identifier: MeasurementIdentifier!
+
+ """Measurement recorded after this date."""
+ recordedAfter: Time
+
+ """Measurement recorded before this date."""
+ recordedBefore: Time
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UsageTrendsMeasurementConnection @deprecated(reason: "This was renamed. Please use `Query.usageTrendsMeasurements`. Deprecated in 13.10.")
+
+ """Find an issue."""
+ issue(
+ """Global ID of the issue."""
+ id: IssueID!
+ ): Issue
+
+ """Find an iteration."""
+ iteration(
+ """Find an iteration by its ID."""
+ id: IterationID!
+ ): Iteration
+
+ """Fields related to entries in the license history."""
+ licenseHistoryEntries(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): LicenseHistoryEntryConnection
+
+ """Find a merge request."""
+ mergeRequest(
+ """Global ID of the merge request."""
+ id: MergeRequestID!
+ ): MergeRequest
+
+ """Metadata about GitLab."""
+ metadata: Metadata
+
+ """Find a milestone."""
+ milestone(
+ """Find a milestone by its ID."""
+ id: MilestoneID!
+ ): Milestone
+
+ """Find a namespace."""
+ namespace(
+ """
+ Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`.
+ """
+ fullPath: ID!
+ ): Namespace
+
+ """Find a package."""
+ package(
+ """Global ID of the package."""
+ id: PackagesPackageID!
+ ): PackageDetailsType
+
+ """Find a project."""
+ project(
+ """
+ Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`.
+ """
+ fullPath: ID!
+ ): Project
+
+ """Find projects visible to the current user."""
+ projects(
+ """Limit projects that the current user is a member of."""
+ membership: Boolean
+
+ """Search query for project name, path, or description."""
+ search: String
+
+ """Filter projects by IDs."""
+ ids: [ID!]
+
+ """Include namespace in project search."""
+ searchNamespaces: Boolean
+
+ """Sort order of results."""
+ sort: String
+
+ """Filters projects by topics."""
+ topics: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection
+
+ """Information about the complexity of the GraphQL query."""
+ queryComplexity: QueryComplexity
+
+ """Find a runner."""
+ runner(
+ """Runner ID."""
+ id: CiRunnerID!
+ ): CiRunner
+
+ """Supported runner platforms."""
+ runnerPlatforms(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): RunnerPlatformConnection
+
+ """Runner setup instructions."""
+ runnerSetup(
+ """Platform to generate the instructions for."""
+ platform: String!
+
+ """Architecture to generate the instructions for."""
+ architecture: String!
+ ): RunnerSetup
+
+ """Find runners visible to the current user."""
+ runners(
+ """Filter runners by status."""
+ status: CiRunnerStatus
+
+ """Filter runners by type."""
+ type: CiRunnerType
+
+ """Filter by tags associated with the runner (comma-separated or array)."""
+ tagList: [String!]
+
+ """Filter by full token or partial text in description field."""
+ search: String
+
+ """Sort order of results."""
+ sort: CiRunnerSort
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): CiRunnerConnection
+
+ """Find Snippets visible to the current user."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """ID of an author."""
+ authorId: UserID
+
+ """ID of a project."""
+ projectId: ProjectID
+
+ """Type of snippet."""
+ type: TypeEnum
+
+ """Explore personal snippets."""
+ explore: Boolean
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Find timelogs visible to the current user."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """Get statistics on the instance."""
+ usageTrendsMeasurements(
+ """Type of measurement or statistics to retrieve."""
+ identifier: MeasurementIdentifier!
+
+ """Measurement recorded after this date."""
+ recordedAfter: Time
+
+ """Measurement recorded before this date."""
+ recordedBefore: Time
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UsageTrendsMeasurementConnection
+
+ """Find a user."""
+ user(
+ """ID of the User."""
+ id: UserID
+
+ """Username of the User."""
+ username: String
+ ): UserCore
+
+ """Find users."""
+ users(
+ """List of user Global IDs."""
+ ids: [ID!]
+
+ """List of usernames."""
+ usernames: [String!]
+
+ """Sort users by this criteria."""
+ sort: Sort = created_desc
+
+ """Query to search users by name, username, or primary email."""
+ search: String
+
+ """Return only admin users."""
+ admins: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCoreConnection
+
+ """
+ Vulnerabilities reported on projects on the current user's instance security dashboard.
+ """
+ vulnerabilities(
+ """Filter vulnerabilities by project."""
+ projectId: [ID!]
+
+ """Filter vulnerabilities by report type."""
+ reportType: [VulnerabilityReportType!]
+
+ """Filter vulnerabilities by severity."""
+ severity: [VulnerabilitySeverity!]
+
+ """Filter vulnerabilities by state."""
+ state: [VulnerabilityState!]
+
+ """Filter vulnerabilities by VulnerabilityScanner.externalId."""
+ scanner: [String!]
+
+ """Filter vulnerabilities by scanner ID."""
+ scannerId: [VulnerabilitiesScannerID!]
+
+ """List vulnerabilities by sort order."""
+ sort: VulnerabilitySort = severity_desc
+
+ """
+ Returns only the vulnerabilities which have been resolved on default branch.
+ """
+ hasResolution: Boolean
+
+ """Returns only the vulnerabilities which have linked issues."""
+ hasIssues: Boolean
+
+ """
+ Filter vulnerabilities by location image. When this filter is present, the
+ response only matches entries for a `reportType` that includes
+ `container_scanning`, `cluster_image_scanning`.
+ """
+ image: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityConnection
+
+ """
+ The historical number of vulnerabilities per day for the projects on the current user's instance security dashboard.
+
+ """
+ vulnerabilitiesCountByDay(
+ """First day for which to fetch vulnerability history."""
+ startDate: ISO8601Date!
+
+ """Last day for which to fetch vulnerability history."""
+ endDate: ISO8601Date!
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilitiesCountByDayConnection
+
+ """Find a vulnerability."""
+ vulnerability(
+ """Global ID of the Vulnerability."""
+ id: VulnerabilityID!
+ ): Vulnerability
+}
+
+type QueryComplexity {
+ """GraphQL query complexity limit."""
+ limit: Int
+
+ """GraphQL query complexity score."""
+ score: Int
+}
+
+"""Recent failure history of a test case."""
+type RecentFailures {
+ """Name of the base branch of the project."""
+ baseBranch: String
+
+ """Number of times the test case has failed in the past 14 days."""
+ count: Int
+}
+
+"""State of a Geo registry"""
+enum RegistryState {
+ """Registry waiting to be synced."""
+ PENDING
+
+ """Registry currently syncing."""
+ STARTED
+
+ """Registry that is synced."""
+ SYNCED
+
+ """Registry that failed to sync."""
+ FAILED
+}
+
+"""Represents a release"""
+type Release {
+ """Assets of the release."""
+ assets: ReleaseAssets
+
+ """User that created the release."""
+ author: UserCore
+
+ """Commit associated with the release."""
+ commit: Commit
+
+ """Timestamp of when the release was created."""
+ createdAt: Time
+
+ """Description (also known as "release notes") of the release."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """Evidence for the release."""
+ evidences(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ReleaseEvidenceConnection
+
+ """Links of the release."""
+ links: ReleaseLinks
+
+ """Milestones associated to the release."""
+ 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
+ ): MilestoneConnection
+
+ """Name of the release."""
+ name: String
+
+ """Timestamp of when the release was released."""
+ releasedAt: Time
+
+ """Name of the tag associated with the release."""
+ tagName: String
+
+ """Relative web path to the tag associated with the release."""
+ tagPath: String
+
+ """Indicates the release is an upcoming release."""
+ upcomingRelease: Boolean
+}
+
+"""Represents an asset link associated with a release"""
+type ReleaseAssetLink {
+ """Relative path for the direct asset link."""
+ directAssetPath: String
+
+ """Direct asset URL of the link."""
+ directAssetUrl: String
+
+ """Indicates the link points to an external resource."""
+ external: Boolean
+
+ """ID of the link."""
+ id: ID!
+
+ """
+ Type of the link: `other`, `runbook`, `image`, `package`; defaults to `other`.
+ """
+ linkType: ReleaseAssetLinkType
+
+ """Name of the link."""
+ name: String
+
+ """URL of the link."""
+ url: String
+}
+
+"""The connection type for ReleaseAssetLink."""
+type ReleaseAssetLinkConnection {
+ """A list of edges."""
+ edges: [ReleaseAssetLinkEdge]
+
+ """A list of nodes."""
+ nodes: [ReleaseAssetLink]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of ReleaseAssetLinkCreate"""
+input ReleaseAssetLinkCreateInput {
+ """Name of the asset link."""
+ name: String!
+
+ """URL of the asset link."""
+ url: String!
+
+ """Relative path for a direct asset link."""
+ directAssetPath: String
+
+ """Type of the asset link."""
+ linkType: ReleaseAssetLinkType = OTHER
+
+ """Full path of the project the asset link is associated with."""
+ projectPath: ID!
+
+ """Name of the associated release's tag."""
+ tagName: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseAssetLinkCreate"""
+type ReleaseAssetLinkCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Asset link after mutation."""
+ link: ReleaseAssetLink
+}
+
+"""Autogenerated input type of ReleaseAssetLinkDelete"""
+input ReleaseAssetLinkDeleteInput {
+ """ID of the release asset link to delete."""
+ id: ReleasesLinkID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseAssetLinkDelete"""
+type ReleaseAssetLinkDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Deleted release asset link."""
+ link: ReleaseAssetLink
+}
+
+"""An edge in a connection."""
+type ReleaseAssetLinkEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ReleaseAssetLink
+}
+
+"""Fields that are available when modifying a release asset link"""
+input ReleaseAssetLinkInput {
+ """Name of the asset link."""
+ name: String!
+
+ """URL of the asset link."""
+ url: String!
+
+ """Relative path for a direct asset link."""
+ directAssetPath: String
+
+ """Type of the asset link."""
+ linkType: ReleaseAssetLinkType = OTHER
+}
+
+"""Type of the link: `other`, `runbook`, `image`, `package`"""
+enum ReleaseAssetLinkType {
+ """Other link type"""
+ OTHER
+
+ """Runbook link type"""
+ RUNBOOK
+
+ """Package link type"""
+ PACKAGE
+
+ """Image link type"""
+ IMAGE
+}
+
+"""Autogenerated input type of ReleaseAssetLinkUpdate"""
+input ReleaseAssetLinkUpdateInput {
+ """ID of the release asset link to update."""
+ id: ReleasesLinkID!
+
+ """Name of the asset link."""
+ name: String
+
+ """URL of the asset link."""
+ url: String
+
+ """Relative path for a direct asset link."""
+ directAssetPath: String
+
+ """Type of the asset link."""
+ linkType: ReleaseAssetLinkType
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseAssetLinkUpdate"""
+type ReleaseAssetLinkUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Asset link after mutation."""
+ link: ReleaseAssetLink
+}
+
+"""A container for all assets associated with a release"""
+type ReleaseAssets {
+ """Number of assets of the release."""
+ count: Int
+
+ """Asset links of the release."""
+ links(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ReleaseAssetLinkConnection
+
+ """Sources of the release."""
+ sources(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ReleaseSourceConnection
+}
+
+"""Fields that are available when modifying release assets"""
+input ReleaseAssetsInput {
+ """List of asset links to associate to the release."""
+ links: [ReleaseAssetLinkInput!]
+}
+
+"""The connection type for Release."""
+type ReleaseConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [ReleaseEdge]
+
+ """A list of nodes."""
+ nodes: [Release]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of ReleaseCreate"""
+input ReleaseCreateInput {
+ """Full path of the project the release is associated with."""
+ projectPath: ID!
+
+ """Name of the tag to associate with the release."""
+ tagName: String!
+
+ """Commit SHA or branch name to use if creating a new tag."""
+ ref: String
+
+ """Name of the release."""
+ name: String
+
+ """Description (also known as "release notes") of the release."""
+ description: String
+
+ """Date and time for the release. Defaults to the current date and time."""
+ releasedAt: Time
+
+ """
+ Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones.
+ """
+ milestones: [String!]
+
+ """Assets associated to the release."""
+ assets: ReleaseAssetsInput
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseCreate"""
+type ReleaseCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Release after mutation."""
+ release: Release
+}
+
+"""Autogenerated input type of ReleaseDelete"""
+input ReleaseDeleteInput {
+ """Full path of the project the release is associated with."""
+ projectPath: ID!
+
+ """Name of the tag associated with the release to delete."""
+ tagName: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseDelete"""
+type ReleaseDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Deleted release."""
+ release: Release
+}
+
+"""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
+}
+
+"""Evidence for a release"""
+type ReleaseEvidence {
+ """Timestamp when the evidence was collected."""
+ collectedAt: Time
+
+ """URL from where the evidence can be downloaded."""
+ filepath: String
+
+ """ID of the evidence."""
+ id: ID!
+
+ """SHA1 ID of the evidence hash."""
+ sha: String
+}
+
+"""The connection type for ReleaseEvidence."""
+type ReleaseEvidenceConnection {
+ """A list of edges."""
+ edges: [ReleaseEvidenceEdge]
+
+ """A list of nodes."""
+ nodes: [ReleaseEvidence]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ReleaseEvidenceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ReleaseEvidence
+}
+
+type ReleaseLinks {
+ """
+ HTTP URL of the issues page, filtered by this release and `state=closed`.
+ """
+ closedIssuesUrl: String
+
+ """
+ HTTP URL of the merge request page , filtered by this release and `state=closed`.
+ """
+ closedMergeRequestsUrl: String
+
+ """HTTP URL of the release's edit page."""
+ editUrl: String
+
+ """
+ HTTP URL of the merge request page , filtered by this release and `state=merged`.
+ """
+ mergedMergeRequestsUrl: String
+
+ """
+ HTTP URL of the issues page, filtered by this release and `state=open`.
+ """
+ openedIssuesUrl: String
+
+ """
+ HTTP URL of the merge request page, filtered by this release and `state=open`.
+ """
+ openedMergeRequestsUrl: String
+
+ """HTTP URL of the release."""
+ selfUrl: String
+}
+
+"""
+A `ReleasesLinkID` is a global ID. It is encoded as a string.
+
+An example `ReleasesLinkID` is: `"gid://gitlab/Releases::Link/1"`.
+"""
+scalar ReleasesLinkID
+
+"""Values for sorting releases"""
+enum ReleaseSort {
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+
+ """Released at by descending order."""
+ RELEASED_AT_DESC
+
+ """Released at by ascending order."""
+ RELEASED_AT_ASC
+}
+
+"""
+Represents the source code attached to a release in a particular format
+"""
+type ReleaseSource {
+ """Format of the source."""
+ format: String
+
+ """Download URL of the source."""
+ url: String
+}
+
+"""The connection type for ReleaseSource."""
+type ReleaseSourceConnection {
+ """A list of edges."""
+ edges: [ReleaseSourceEdge]
+
+ """A list of nodes."""
+ nodes: [ReleaseSource]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ReleaseSourceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ReleaseSource
+}
+
+"""Release tag ID wildcard values"""
+enum ReleaseTagWildcardId {
+ """No release tag is assigned."""
+ NONE
+
+ """Release tag is assigned."""
+ ANY
+}
+
+"""Autogenerated input type of ReleaseUpdate"""
+input ReleaseUpdateInput {
+ """Full path of the project the release is associated with."""
+ projectPath: ID!
+
+ """Name of the tag associated with the release."""
+ tagName: String!
+
+ """Name of the release."""
+ name: String
+
+ """Description (release notes) of the release."""
+ description: String
+
+ """Release date."""
+ releasedAt: Time
+
+ """
+ Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones.
+ """
+ milestones: [String!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ReleaseUpdate"""
+type ReleaseUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Release after mutation."""
+ release: Release
+}
+
+"""Autogenerated input type of RemoveProjectFromSecurityDashboard"""
+input RemoveProjectFromSecurityDashboardInput {
+ """ID of the project to remove from the Instance Security Dashboard."""
+ id: ProjectID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of RemoveProjectFromSecurityDashboard"""
+type RemoveProjectFromSecurityDashboardPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of RepositionImageDiffNote"""
+input RepositionImageDiffNoteInput {
+ """Global ID of the DiffNote to update."""
+ id: DiffNoteID!
+
+ """Position of this note on a diff."""
+ position: UpdateDiffImagePositionInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of RepositionImageDiffNote"""
+type RepositionImageDiffNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+type Repository {
+ """Blobs contained within the repository"""
+ blobs(
+ """Array of desired blob paths."""
+ paths: [String!]!
+
+ """Commit ref to get the blobs from. Default value is HEAD."""
+ ref: String = null
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): RepositoryBlobConnection
+
+ """
+ Names of branches available in this repository that match the search pattern.
+ """
+ branchNames(
+ """Pattern to search for branch names by."""
+ searchPattern: String!
+
+ """Number of branch names to skip."""
+ offset: Int!
+
+ """Number of branch names to return."""
+ limit: Int!
+ ): [String!]
+
+ """Shows a disk path of the repository."""
+ diskPath: String
+
+ """Indicates repository has no visible content."""
+ empty: Boolean!
+
+ """Indicates a corresponding Git repository exists on disk."""
+ exists: Boolean!
+
+ """
+ Paginated tree of the repository. Available only when feature flag
+ `paginated_tree_graphql_query` is enabled. This flag is enabled by default.
+ """
+ paginatedTree(
+ """Path to get the tree for. Default value is the root of the repository."""
+ path: String = ""
+
+ """Commit ref to get the tree for. Default value is HEAD."""
+ ref: String = "head"
+
+ """Used to get a recursive tree. Default is false."""
+ recursive: Boolean = false
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TreeConnection
+
+ """Default branch of the repository."""
+ rootRef: String
+
+ """Tree of the repository."""
+ tree(
+ """Path to get the tree for. Default value is the root of the repository."""
+ path: String = ""
+
+ """Commit ref to get the tree for. Default value is HEAD."""
+ ref: String = "head"
+
+ """Used to get a recursive tree. Default is false."""
+ recursive: Boolean = false
+ ): Tree
+}
+
+type RepositoryBlob {
+ """Whether the current user can modify the blob."""
+ canModifyBlob: Boolean
+
+ """Web path to edit the blob in the old-style editor."""
+ editBlobPath: String
+
+ """Web path to download the raw blob via external storage, if enabled."""
+ externalStorageUrl: String
+
+ """Expected format of the blob based on the extension."""
+ fileType: String
+
+ """Web path to edit this blob using a forked project."""
+ forkAndEditPath: String
+
+ """ID of the blob."""
+ id: ID!
+
+ """Web path to edit this blob in the Web IDE."""
+ ideEditPath: String
+
+ """Web path to edit this blob in the Web IDE using a forked project."""
+ ideForkAndEditPath: String
+
+ """LFS OID of the blob."""
+ lfsOid: String
+
+ """Blob mode."""
+ mode: String
+
+ """Blob name."""
+ name: String
+
+ """OID of the blob."""
+ oid: String!
+
+ """Path of the blob."""
+ path: String!
+
+ """Blob plain highlighted data."""
+ plainData: String
+
+ """Raw content of the blob."""
+ rawBlob: String
+
+ """Web path to download the raw blob."""
+ rawPath: String
+
+ """Size (in bytes) of the blob, or the blob target if stored externally."""
+ rawSize: Int
+
+ """Raw content of the blob, if the blob is text data."""
+ rawTextBlob: String
+
+ """Web path to replace the blob content."""
+ replacePath: String
+
+ """Blob content rich viewer."""
+ richViewer: BlobViewer
+
+ """Blob content simple viewer."""
+ simpleViewer: BlobViewer!
+
+ """Size (in bytes) of the blob."""
+ size: Int
+
+ """
+ Whether the blob's content is stored externally (for instance, in LFS).
+ """
+ storedExternally: Boolean
+
+ """Web path of the blob."""
+ webPath: String
+}
+
+"""The connection type for RepositoryBlob."""
+type RepositoryBlobConnection {
+ """A list of edges."""
+ edges: [RepositoryBlobEdge]
+
+ """A list of nodes."""
+ nodes: [RepositoryBlob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type RepositoryBlobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: RepositoryBlob
+}
+
+"""Represents a requirement"""
+type Requirement {
+ """Author of the requirement."""
+ author: UserCore!
+
+ """Timestamp of when the requirement was created."""
+ createdAt: Time!
+
+ """Description of the requirement."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """ID of the requirement."""
+ id: ID!
+
+ """Internal ID of the requirement."""
+ iid: ID!
+
+ """Indicates if latest test report was created by user."""
+ lastTestReportManuallyCreated: Boolean
+
+ """Latest requirement test report state."""
+ lastTestReportState: TestReportState
+
+ """Project to which the requirement belongs."""
+ project: Project!
+
+ """State of the requirement."""
+ state: RequirementState!
+
+ """Test reports of the requirement."""
+ testReports(
+ """List test reports by sort order."""
+ sort: Sort
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TestReportConnection
+
+ """Title of the requirement."""
+ title: String
+
+ """The GitLab Flavored Markdown rendering of `title`"""
+ titleHtml: String
+
+ """Timestamp of when the requirement was last updated."""
+ updatedAt: Time!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: RequirementPermissions!
+}
+
+"""The connection type for Requirement."""
+type RequirementConnection {
+ """A list of edges."""
+ edges: [RequirementEdge]
+
+ """A list of nodes."""
+ nodes: [Requirement]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type RequirementEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Requirement
+}
+
+"""Check permissions for the current user on a requirement"""
+type RequirementPermissions {
+ """Indicates the user can perform `admin_requirement` on this resource"""
+ adminRequirement: Boolean!
+
+ """Indicates the user can perform `create_requirement` on this resource"""
+ createRequirement: Boolean!
+
+ """Indicates the user can perform `destroy_requirement` on this resource"""
+ destroyRequirement: Boolean!
+
+ """Indicates the user can perform `read_requirement` on this resource"""
+ readRequirement: Boolean!
+
+ """Indicates the user can perform `update_requirement` on this resource"""
+ updateRequirement: Boolean!
+}
+
+"""State of a requirement"""
+enum RequirementState {
+ """Open requirement."""
+ OPENED
+
+ """Archived requirement."""
+ ARCHIVED
+}
+
+"""Counts of requirements by their state"""
+type RequirementStatesCount {
+ """Number of archived requirements."""
+ archived: Int
+
+ """Number of opened requirements."""
+ opened: Int
+}
+
+"""Status of a requirement based on last test report"""
+enum RequirementStatusFilter {
+ """Passed test report."""
+ PASSED
+
+ """Failed test report."""
+ FAILED
+
+ """Requirements without any test report."""
+ MISSING
+}
+
+interface ResolvableInterface {
+ """Indicates if the object can be resolved."""
+ resolvable: Boolean!
+
+ """Indicates if the object is resolved."""
+ resolved: Boolean!
+
+ """Timestamp of when the object was resolved."""
+ resolvedAt: Time
+
+ """User who resolved the object."""
+ resolvedBy: UserCore
+}
+
+type RootStorageStatistics {
+ """CI artifacts size in bytes."""
+ buildArtifactsSize: Float!
+
+ """LFS objects size in bytes."""
+ lfsObjectsSize: Float!
+
+ """Packages size in bytes."""
+ packagesSize: Float!
+
+ """CI pipeline artifacts size in bytes."""
+ pipelineArtifactsSize: Float!
+
+ """Git repository size in bytes."""
+ repositorySize: Float!
+
+ """Snippets size in bytes."""
+ snippetsSize: Float!
+
+ """Total storage in bytes."""
+ storageSize: Float!
+
+ """Uploads size in bytes."""
+ uploadsSize: Float!
+
+ """Wiki size in bytes."""
+ wikiSize: Float!
+}
+
+type RunnerArchitecture {
+ """Download location for the runner for the platform architecture."""
+ downloadLocation: String!
+
+ """Name of the runner platform architecture."""
+ name: String!
+}
+
+"""The connection type for RunnerArchitecture."""
+type RunnerArchitectureConnection {
+ """A list of edges."""
+ edges: [RunnerArchitectureEdge]
+
+ """A list of nodes."""
+ nodes: [RunnerArchitecture]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type RunnerArchitectureEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: RunnerArchitecture
+}
+
+"""Autogenerated input type of RunnerDelete"""
+input RunnerDeleteInput {
+ """ID of the runner to delete."""
+ id: CiRunnerID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of RunnerDelete"""
+type RunnerDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Values for filtering runners in namespaces."""
+enum RunnerMembershipFilter {
+ """Include runners that have a direct relationship."""
+ DIRECT
+
+ """
+ Include runners that have either a direct relationship or a relationship with
+ descendants. These can be project runners or group runners (in the case where
+ group is queried).
+ """
+ DESCENDANTS
+}
+
+type RunnerPermissions {
+ """Indicates the user can perform `delete_runner` on this resource"""
+ deleteRunner: Boolean!
+
+ """Indicates the user can perform `read_runner` on this resource"""
+ readRunner: Boolean!
+
+ """Indicates the user can perform `update_runner` on this resource"""
+ updateRunner: Boolean!
+}
+
+type RunnerPlatform {
+ """Runner architectures supported for the platform."""
+ architectures(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): RunnerArchitectureConnection
+
+ """Human readable name of the runner platform."""
+ humanReadableName: String!
+
+ """Name slug of the runner platform."""
+ name: String!
+}
+
+"""The connection type for RunnerPlatform."""
+type RunnerPlatformConnection {
+ """A list of edges."""
+ edges: [RunnerPlatformEdge]
+
+ """A list of nodes."""
+ nodes: [RunnerPlatform]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type RunnerPlatformEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: RunnerPlatform
+}
+
+type RunnerSetup {
+ """Instructions for installing the runner on the specified architecture."""
+ installInstructions: String!
+
+ """
+ Instructions for registering the runner. The actual registration tokens are
+ not included in the commands. Instead, a placeholder `$REGISTRATION_TOKEN` is shown.
+ """
+ registerInstructions: String
+}
+
+"""Autogenerated input type of RunnersRegistrationTokenReset"""
+input RunnersRegistrationTokenResetInput {
+ """Scope of the object to reset the token for."""
+ type: CiRunnerType!
+
+ """
+ ID of the project or group to reset the token for. Omit if resetting instance runner token.
+ """
+ id: ID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of RunnersRegistrationTokenReset"""
+type RunnersRegistrationTokenResetPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Runner token after mutation."""
+ token: String
+}
+
+"""Autogenerated input type of RunnerUpdate"""
+input RunnerUpdateInput {
+ """ID of the runner to update."""
+ id: CiRunnerID!
+
+ """Description of the runner."""
+ description: String
+
+ """Maximum timeout (in seconds) for jobs processed by the runner."""
+ maximumTimeout: Int
+
+ """Access level of the runner."""
+ accessLevel: CiRunnerAccessLevel
+
+ """Indicates the runner is allowed to receive jobs."""
+ active: Boolean
+
+ """Indicates the runner is locked."""
+ locked: Boolean
+
+ """Indicates the runner is able to run untagged jobs."""
+ runUntagged: Boolean
+
+ """Tags associated with the runner."""
+ tagList: [String!]
+
+ """
+ Public projects' "minutes cost factor" associated with the runner (GitLab.com only).
+ """
+ publicProjectsMinutesCostFactor: Float
+
+ """
+ Private projects' "minutes cost factor" associated with the runner (GitLab.com only).
+ """
+ privateProjectsMinutesCostFactor: Float
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of RunnerUpdate"""
+type RunnerUpdatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Runner after mutation."""
+ runner: CiRunner
+}
+
+"""Represents a CI configuration of SAST"""
+type SastCiConfiguration {
+ """List of analyzers entities attached to SAST configuration."""
+ analyzers(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SastCiConfigurationAnalyzersEntityConnection
+
+ """List of global entities related to SAST configuration."""
+ global(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SastCiConfigurationEntityConnection
+
+ """List of pipeline entities related to SAST configuration."""
+ pipeline(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SastCiConfigurationEntityConnection
+}
+
+"""Represents an analyzer entity in SAST CI configuration"""
+type SastCiConfigurationAnalyzersEntity {
+ """Analyzer description that is displayed on the form."""
+ description: String
+
+ """Indicates whether an analyzer is enabled."""
+ enabled: Boolean
+
+ """Analyzer label used in the config UI."""
+ label: String
+
+ """Name of the analyzer."""
+ name: String
+
+ """List of supported variables."""
+ variables(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SastCiConfigurationEntityConnection
+}
+
+"""The connection type for SastCiConfigurationAnalyzersEntity."""
+type SastCiConfigurationAnalyzersEntityConnection {
+ """A list of edges."""
+ edges: [SastCiConfigurationAnalyzersEntityEdge]
+
+ """A list of nodes."""
+ nodes: [SastCiConfigurationAnalyzersEntity]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SastCiConfigurationAnalyzersEntityEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SastCiConfigurationAnalyzersEntity
+}
+
+"""Represents the analyzers entity in SAST CI configuration"""
+input SastCiConfigurationAnalyzersEntityInput {
+ """Name of analyzer."""
+ name: String!
+
+ """State of the analyzer."""
+ enabled: Boolean!
+
+ """List of variables for the analyzer."""
+ variables: [SastCiConfigurationEntityInput!]
+}
+
+"""Represents an entity in SAST CI configuration"""
+type SastCiConfigurationEntity {
+ """Default value that is used if value is empty."""
+ defaultValue: String
+
+ """Entity description that is displayed on the form."""
+ description: String
+
+ """CI keyword of entity."""
+ field: String
+
+ """Label for entity used in the form."""
+ label: String
+
+ """Different possible values of the field."""
+ 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
+ ): SastCiConfigurationOptionsEntityConnection
+
+ """Size of the UI component."""
+ size: SastUiComponentSize
+
+ """Type of the field value."""
+ type: String
+
+ """Current value of the entity."""
+ value: String
+}
+
+"""The connection type for SastCiConfigurationEntity."""
+type SastCiConfigurationEntityConnection {
+ """A list of edges."""
+ edges: [SastCiConfigurationEntityEdge]
+
+ """A list of nodes."""
+ nodes: [SastCiConfigurationEntity]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SastCiConfigurationEntityEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SastCiConfigurationEntity
+}
+
+"""Represents an entity in SAST CI configuration"""
+input SastCiConfigurationEntityInput {
+ """CI keyword of entity."""
+ field: String!
+
+ """Default value that is used if value is empty."""
+ defaultValue: String!
+
+ """Current value of the entity."""
+ value: String!
+}
+
+"""Represents a CI configuration of SAST"""
+input SastCiConfigurationInput {
+ """List of global entities related to SAST configuration."""
+ global: [SastCiConfigurationEntityInput!]
+
+ """List of pipeline entities related to SAST configuration."""
+ pipeline: [SastCiConfigurationEntityInput!]
+
+ """List of analyzers and related variables for the SAST configuration."""
+ analyzers: [SastCiConfigurationAnalyzersEntityInput!]
+}
+
+"""Represents an entity for options in SAST CI configuration"""
+type SastCiConfigurationOptionsEntity {
+ """Label of option entity."""
+ label: String
+
+ """Value of option entity."""
+ value: String
+}
+
+"""The connection type for SastCiConfigurationOptionsEntity."""
+type SastCiConfigurationOptionsEntityConnection {
+ """A list of edges."""
+ edges: [SastCiConfigurationOptionsEntityEdge]
+
+ """A list of nodes."""
+ nodes: [SastCiConfigurationOptionsEntity]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SastCiConfigurationOptionsEntityEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SastCiConfigurationOptionsEntity
+}
+
+"""Size of UI component in SAST configuration page"""
+enum SastUiComponentSize {
+ """Size of UI component in SAST configuration page is small."""
+ SMALL
+
+ """Size of UI component in SAST configuration page is medium."""
+ MEDIUM
+
+ """Size of UI component in SAST configuration page is large."""
+ LARGE
+}
+
+"""Represents the security scan information"""
+type Scan {
+ """List of errors."""
+ errors: [String!]!
+
+ """Name of the scan."""
+ name: String!
+}
+
+"""The connection type for Scan."""
+type ScanConnection {
+ """A list of edges."""
+ edges: [ScanEdge]
+
+ """A list of nodes."""
+ nodes: [Scan]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ScanEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Scan
+}
+
+"""Represents the scan execution policy"""
+type ScanExecutionPolicy {
+ """Description of the policy."""
+ description: String!
+
+ """Indicates whether this policy is enabled."""
+ enabled: Boolean!
+
+ """Name of the policy."""
+ name: String!
+
+ """Timestamp of when the policy YAML was last updated."""
+ updatedAt: Time!
+
+ """YAML definition of the policy."""
+ yaml: String!
+}
+
+"""Autogenerated input type of ScanExecutionPolicyCommit"""
+input ScanExecutionPolicyCommitInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """YAML snippet of the policy."""
+ policyYaml: String!
+
+ """Changes the operation mode."""
+ operationMode: MutationOperationMode!
+
+ """
+ Name of the policy. If the name is null, the `name` field from `policy_yaml` is used.
+ """
+ name: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of ScanExecutionPolicyCommit"""
+type ScanExecutionPolicyCommitPayload {
+ """Name of the branch to which the policy changes are committed."""
+ branch: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""The connection type for ScanExecutionPolicy."""
+type ScanExecutionPolicyConnection {
+ """A list of edges."""
+ edges: [ScanExecutionPolicyEdge]
+
+ """A list of nodes."""
+ nodes: [ScanExecutionPolicy]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ScanExecutionPolicyEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ScanExecutionPolicy
+}
+
+"""Represents a resource scanned by a security scan"""
+type ScannedResource {
+ """HTTP request method used to access the URL."""
+ requestMethod: String
+
+ """URL scanned by the scanner."""
+ url: String
+}
+
+"""The connection type for ScannedResource."""
+type ScannedResourceConnection {
+ """A list of edges."""
+ edges: [ScannedResourceEdge]
+
+ """A list of nodes."""
+ nodes: [ScannedResource]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ScannedResourceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: ScannedResource
+}
+
+"""Autogenerated input type of SecurityPolicyProjectAssign"""
+input SecurityPolicyProjectAssignInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """ID of the security policy project."""
+ securityPolicyProjectId: ProjectID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of SecurityPolicyProjectAssign"""
+type SecurityPolicyProjectAssignPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of SecurityPolicyProjectCreate"""
+input SecurityPolicyProjectCreateInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of SecurityPolicyProjectCreate"""
+type SecurityPolicyProjectCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Security Policy Project that was created."""
+ project: Project
+}
+
+"""Autogenerated input type of SecurityPolicyProjectUnassign"""
+input SecurityPolicyProjectUnassignInput {
+ """Full path of the project."""
+ projectPath: ID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of SecurityPolicyProjectUnassign"""
+type SecurityPolicyProjectUnassignPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Represents summary of a security report"""
+type SecurityReportSummary {
+ """Aggregated counts for the `api_fuzzing` scan"""
+ apiFuzzing: SecurityReportSummarySection
+
+ """Aggregated counts for the `cluster_image_scanning` scan"""
+ clusterImageScanning: SecurityReportSummarySection
+
+ """Aggregated counts for the `container_scanning` scan"""
+ containerScanning: SecurityReportSummarySection
+
+ """Aggregated counts for the `coverage_fuzzing` scan"""
+ coverageFuzzing: SecurityReportSummarySection
+
+ """Aggregated counts for the `dast` scan"""
+ dast: SecurityReportSummarySection
+
+ """Aggregated counts for the `dependency_scanning` scan"""
+ dependencyScanning: SecurityReportSummarySection
+
+ """Aggregated counts for the `generic` scan"""
+ generic: SecurityReportSummarySection
+
+ """Aggregated counts for the `sast` scan"""
+ sast: SecurityReportSummarySection
+
+ """Aggregated counts for the `secret_detection` scan"""
+ secretDetection: SecurityReportSummarySection
+}
+
+"""Represents a section of a summary of a security report"""
+type SecurityReportSummarySection {
+ """List of the first 20 scanned resources."""
+ scannedResources(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ScannedResourceConnection
+
+ """Total number of scanned resources."""
+ scannedResourcesCount: Int
+
+ """Path to download all the scanned resources in CSV format."""
+ scannedResourcesCsvPath: String
+
+ """List of security scans ran for the type."""
+ scans(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ScanConnection!
+
+ """Total number of vulnerabilities."""
+ vulnerabilitiesCount: Int
+}
+
+enum SecurityReportTypeEnum {
+ """SAST scan report"""
+ SAST
+
+ """DAST scan report"""
+ DAST
+
+ """DEPENDENCY SCANNING scan report"""
+ DEPENDENCY_SCANNING
+
+ """CONTAINER SCANNING scan report"""
+ CONTAINER_SCANNING
+
+ """SECRET DETECTION scan report"""
+ SECRET_DETECTION
+
+ """COVERAGE FUZZING scan report"""
+ COVERAGE_FUZZING
+
+ """API FUZZING scan report"""
+ API_FUZZING
+
+ """CLUSTER IMAGE SCANNING scan report"""
+ CLUSTER_IMAGE_SCANNING
+}
+
+"""Represents a list of security scanners"""
+type SecurityScanners {
+ """List of analyzers which are available for the project."""
+ available: [SecurityScannerType!]
+
+ """List of analyzers which are enabled for the project."""
+ enabled: [SecurityScannerType!]
+
+ """List of analyzers which ran successfully in the latest pipeline."""
+ pipelineRun: [SecurityScannerType!]
+}
+
+"""The type of the security scanner"""
+enum SecurityScannerType {
+ """SAST scanner"""
+ SAST
+
+ """DAST scanner"""
+ DAST
+
+ """Dependency Scanning scanner"""
+ DEPENDENCY_SCANNING
+
+ """Container Scanning scanner"""
+ CONTAINER_SCANNING
+
+ """Secret Detection scanner"""
+ SECRET_DETECTION
+
+ """Coverage Fuzzing scanner"""
+ COVERAGE_FUZZING
+
+ """API Fuzzing scanner"""
+ API_FUZZING
+
+ """Cluster Image Scanning scanner"""
+ CLUSTER_IMAGE_SCANNING
+}
+
+"""A Sentry error"""
+type SentryDetailedError {
+ """Count of occurrences."""
+ count: Int!
+
+ """Culprit of the error."""
+ culprit: String!
+
+ """External Base URL of the Sentry Instance."""
+ externalBaseUrl: String!
+
+ """External URL of the error."""
+ externalUrl: String!
+
+ """Commit the error was first seen."""
+ firstReleaseLastCommit: String
+
+ """Release short version the error was first seen."""
+ firstReleaseShortVersion: String
+
+ """Release version the error was first seen."""
+ firstReleaseVersion: String
+
+ """Timestamp when the error was first seen."""
+ firstSeen: Time!
+
+ """Last 24hr stats of the error."""
+ frequency: [SentryErrorFrequency!]!
+
+ """
+ GitLab commit SHA attributed to the Error based on the release version.
+ """
+ gitlabCommit: String
+
+ """Path to the GitLab page for the GitLab commit attributed to the error."""
+ gitlabCommitPath: String
+
+ """URL of GitLab Issue."""
+ gitlabIssuePath: String
+
+ """ID (global ID) of the error."""
+ id: ID!
+
+ """Error tracking backend."""
+ integrated: Boolean
+
+ """Commit the error was last seen."""
+ lastReleaseLastCommit: String
+
+ """Release short version the error was last seen."""
+ lastReleaseShortVersion: String
+
+ """Release version the error was last seen."""
+ lastReleaseVersion: String
+
+ """Timestamp when the error was last seen."""
+ lastSeen: Time!
+
+ """Sentry metadata message of the error."""
+ message: String
+
+ """ID (Sentry ID) of the error."""
+ sentryId: String!
+
+ """ID of the project (Sentry project)."""
+ sentryProjectId: ID!
+
+ """Name of the project affected by the error."""
+ sentryProjectName: String!
+
+ """Slug of the project affected by the error."""
+ sentryProjectSlug: String!
+
+ """Short ID (Sentry ID) of the error."""
+ shortId: String!
+
+ """Status of the error."""
+ status: SentryErrorStatus!
+
+ """Tags associated with the Sentry Error."""
+ tags: SentryErrorTags!
+
+ """Title of the error."""
+ title: String!
+
+ """Type of the error."""
+ type: String!
+
+ """Count of users affected by the error."""
+ userCount: Int!
+}
+
+"""A Sentry error. A simplified version of SentryDetailedError"""
+type SentryError {
+ """Count of occurrences."""
+ count: Int!
+
+ """Culprit of the error."""
+ culprit: String!
+
+ """External URL of the error."""
+ externalUrl: String!
+
+ """Timestamp when the error was first seen."""
+ firstSeen: Time!
+
+ """Last 24hr stats of the error."""
+ frequency: [SentryErrorFrequency!]!
+
+ """ID (global ID) of the error."""
+ id: ID!
+
+ """Timestamp when the error was last seen."""
+ lastSeen: Time!
+
+ """Sentry metadata message of the error."""
+ message: String
+
+ """ID (Sentry ID) of the error."""
+ sentryId: String!
+
+ """ID of the project (Sentry project)."""
+ sentryProjectId: ID!
+
+ """Name of the project affected by the error."""
+ sentryProjectName: String!
+
+ """Slug of the project affected by the error."""
+ sentryProjectSlug: String!
+
+ """Short ID (Sentry ID) of the error."""
+ shortId: String!
+
+ """Status of the error."""
+ status: SentryErrorStatus!
+
+ """Title of the error."""
+ title: String!
+
+ """Type of the error."""
+ type: String!
+
+ """Count of users affected by the error."""
+ userCount: Int!
+}
+
+"""
+An object containing a collection of Sentry errors, and a detailed error
+"""
+type SentryErrorCollection {
+ """Detailed version of a Sentry error on the project."""
+ detailedError(
+ """ID of the Sentry issue."""
+ id: GitlabErrorTrackingDetailedErrorID!
+ ): SentryDetailedError
+
+ """Stack Trace of Sentry Error."""
+ errorStackTrace(
+ """ID of the Sentry issue."""
+ id: GitlabErrorTrackingDetailedErrorID!
+ ): SentryErrorStackTrace
+
+ """Collection of Sentry Errors."""
+ errors(
+ """Search query for the Sentry error details."""
+ searchTerm: String
+
+ """
+ Attribute to sort on. Options are frequency, first_seen, last_seen. last_seen is default.
+ """
+ sort: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SentryErrorConnection
+
+ """External URL for Sentry."""
+ externalUrl: String
+}
+
+"""The connection type for SentryError."""
+type SentryErrorConnection {
+ """A list of edges."""
+ edges: [SentryErrorEdge]
+
+ """A list of nodes."""
+ nodes: [SentryError]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SentryErrorEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SentryError
+}
+
+type SentryErrorFrequency {
+ """Count of errors received since the previously recorded time."""
+ count: Int!
+
+ """Time the error frequency stats were recorded."""
+ time: Time!
+}
+
+"""An object containing a stack trace entry for a Sentry error"""
+type SentryErrorStackTrace {
+ """Time the stack trace was received by Sentry."""
+ dateReceived: String!
+
+ """ID of the Sentry error."""
+ issueId: String!
+
+ """Stack trace entries for the Sentry error."""
+ stackTraceEntries: [SentryErrorStackTraceEntry!]!
+}
+
+"""An object context for a Sentry error stack trace"""
+type SentryErrorStackTraceContext {
+ """Code number of the context."""
+ code: String!
+
+ """Line number of the context."""
+ line: Int!
+}
+
+"""An object containing a stack trace entry for a Sentry error"""
+type SentryErrorStackTraceEntry {
+ """Function in which the Sentry error occurred."""
+ col: String
+
+ """File in which the Sentry error occurred."""
+ fileName: String
+
+ """Function in which the Sentry error occurred."""
+ function: String
+
+ """Function in which the Sentry error occurred."""
+ line: String
+
+ """Context of the Sentry error."""
+ traceContext: [SentryErrorStackTraceContext!]
+}
+
+"""State of a Sentry error"""
+enum SentryErrorStatus {
+ """Error has been resolved."""
+ RESOLVED
+
+ """Error has been ignored until next release."""
+ RESOLVED_IN_NEXT_RELEASE
+
+ """Error is unresolved."""
+ UNRESOLVED
+
+ """Error has been ignored."""
+ IGNORED
+}
+
+"""State of a Sentry error"""
+type SentryErrorTags {
+ """Severity level of the Sentry Error."""
+ level: String
+
+ """Logger of the Sentry Error."""
+ logger: String
+}
+
+interface Service {
+ """Indicates if the service is active."""
+ active: Boolean
+
+ """Class name of the service."""
+ type: String
+}
+
+"""The connection type for Service."""
+type ServiceConnection {
+ """A list of edges."""
+ edges: [ServiceEdge]
+
+ """A list of nodes."""
+ nodes: [Service]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type ServiceEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Service
+}
+
+enum ServiceType {
+ """AsanaService type"""
+ ASANA_SERVICE
+
+ """AssemblaService type"""
+ ASSEMBLA_SERVICE
+
+ """BambooService type"""
+ BAMBOO_SERVICE
+
+ """BugzillaService type"""
+ BUGZILLA_SERVICE
+
+ """BuildkiteService type"""
+ BUILDKITE_SERVICE
+
+ """CampfireService type"""
+ CAMPFIRE_SERVICE
+
+ """ConfluenceService type"""
+ CONFLUENCE_SERVICE
+
+ """CustomIssueTrackerService type"""
+ CUSTOM_ISSUE_TRACKER_SERVICE
+
+ """DatadogService type"""
+ DATADOG_SERVICE
+
+ """DiscordService type"""
+ DISCORD_SERVICE
+
+ """DroneCiService type"""
+ DRONE_CI_SERVICE
+
+ """EmailsOnPushService type"""
+ EMAILS_ON_PUSH_SERVICE
+
+ """EwmService type"""
+ EWM_SERVICE
+
+ """ExternalWikiService type"""
+ EXTERNAL_WIKI_SERVICE
+
+ """FlowdockService type"""
+ FLOWDOCK_SERVICE
+
+ """GithubService type"""
+ GITHUB_SERVICE
+
+ """GitlabSlackApplicationService type"""
+ GITLAB_SLACK_APPLICATION_SERVICE
+
+ """HangoutsChatService type"""
+ HANGOUTS_CHAT_SERVICE
+
+ """IrkerService type"""
+ IRKER_SERVICE
+
+ """JenkinsService type"""
+ JENKINS_SERVICE
+
+ """JiraService type"""
+ JIRA_SERVICE
+
+ """MattermostService type"""
+ MATTERMOST_SERVICE
+
+ """MattermostSlashCommandsService type"""
+ MATTERMOST_SLASH_COMMANDS_SERVICE
+
+ """MicrosoftTeamsService type"""
+ MICROSOFT_TEAMS_SERVICE
+
+ """PackagistService type"""
+ PACKAGIST_SERVICE
+
+ """PipelinesEmailService type"""
+ PIPELINES_EMAIL_SERVICE
+
+ """PivotaltrackerService type"""
+ PIVOTALTRACKER_SERVICE
+
+ """PrometheusService type"""
+ PROMETHEUS_SERVICE
+
+ """PushoverService type"""
+ PUSHOVER_SERVICE
+
+ """RedmineService type"""
+ REDMINE_SERVICE
+
+ """SlackService type"""
+ SLACK_SERVICE
+
+ """SlackSlashCommandsService type"""
+ SLACK_SLASH_COMMANDS_SERVICE
+
+ """TeamcityService type"""
+ TEAMCITY_SERVICE
+
+ """UnifyCircuitService type"""
+ UNIFY_CIRCUIT_SERVICE
+
+ """WebexTeamsService type"""
+ WEBEX_TEAMS_SERVICE
+
+ """YoutrackService type"""
+ YOUTRACK_SERVICE
+
+ """ZentaoService type"""
+ ZENTAO_SERVICE
+}
+
+enum SharedRunnersSetting {
+ """Sharing of runners is disabled and unoverridable."""
+ DISABLED_AND_UNOVERRIDABLE
+
+ """Sharing of runners is disabled with override."""
+ DISABLED_WITH_OVERRIDE
+
+ """Sharing of runners is enabled."""
+ ENABLED
+}
+
+"""Represents a snippet entry"""
+type Snippet implements NoteableInterface {
+ """Owner of the snippet."""
+ author: UserCore
+
+ """Snippet blobs."""
+ blobs(
+ """Paths of the blobs."""
+ paths: [String!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetBlobConnection
+
+ """Timestamp this snippet was created."""
+ createdAt: Time!
+
+ """Description of the snippet."""
+ description: String
+
+ """The GitLab Flavored Markdown rendering of `description`"""
+ descriptionHtml: String
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """File Name of the snippet."""
+ fileName: String
+
+ """HTTP URL to the snippet repository."""
+ httpUrlToRepo: String
+
+ """ID of the snippet."""
+ id: SnippetID!
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Project the snippet is associated with."""
+ project: Project
+
+ """Raw URL of the snippet."""
+ rawUrl: String!
+
+ """SSH URL to the snippet repository."""
+ sshUrlToRepo: String
+
+ """Title of the snippet."""
+ title: String!
+
+ """Timestamp this snippet was updated."""
+ updatedAt: Time!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: SnippetPermissions!
+
+ """Visibility Level of the snippet."""
+ visibilityLevel: VisibilityLevelsEnum!
+
+ """Web URL of the snippet."""
+ webUrl: String!
+}
+
+"""Represents the snippet blob"""
+type SnippetBlob {
+ """Shows whether the blob is binary."""
+ binary: Boolean!
+
+ """Blob external storage."""
+ externalStorage: String
+
+ """Blob mode."""
+ mode: String
+
+ """Blob name."""
+ name: String
+
+ """Blob path."""
+ path: String
+
+ """Blob plain highlighted data."""
+ plainData: String
+
+ """Blob raw content endpoint path."""
+ rawPath: String!
+
+ """Raw content of the blob, if the blob is text data."""
+ rawPlainData: String
+
+ """Shows whether the blob is rendered as text."""
+ renderedAsText: Boolean!
+
+ """Blob highlighted data."""
+ richData: String
+
+ """Blob content rich viewer."""
+ richViewer: SnippetBlobViewer
+
+ """Blob content simple viewer."""
+ simpleViewer: SnippetBlobViewer!
+
+ """Blob size."""
+ size: Int!
+}
+
+"""Type of a snippet blob input action"""
+enum SnippetBlobActionEnum {
+ """Create a snippet blob."""
+ create
+
+ """Update a snippet blob."""
+ update
+
+ """Delete a snippet blob."""
+ delete
+
+ """Move a snippet blob."""
+ move
+}
+
+"""Represents an action to perform over a snippet file"""
+input SnippetBlobActionInputType {
+ """Type of input action."""
+ action: SnippetBlobActionEnum!
+
+ """Previous path of the snippet file."""
+ previousPath: String
+
+ """Path of the snippet file."""
+ filePath: String!
+
+ """Snippet file content."""
+ content: String
+}
+
+"""The connection type for SnippetBlob."""
+type SnippetBlobConnection {
+ """A list of edges."""
+ edges: [SnippetBlobEdge]
+
+ """A list of nodes."""
+ nodes: [SnippetBlob]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SnippetBlobEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SnippetBlob
+}
+
+"""Represents how the blob content should be displayed"""
+type SnippetBlobViewer {
+ """Shows whether the blob should be displayed collapsed."""
+ collapsed: Boolean!
+
+ """Content file type."""
+ fileType: String!
+
+ """Shows whether the blob content is loaded asynchronously."""
+ loadAsync: Boolean!
+
+ """Loading partial name."""
+ loadingPartialName: String!
+
+ """Error rendering the blob content."""
+ renderError: String
+
+ """Shows whether the blob is too large to be displayed."""
+ tooLarge: Boolean!
+
+ """Type of blob viewer."""
+ type: BlobViewersType!
+}
+
+"""The connection type for Snippet."""
+type SnippetConnection {
+ """A list of edges."""
+ edges: [SnippetEdge]
+
+ """A list of nodes."""
+ nodes: [Snippet]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SnippetEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Snippet
+}
+
+"""
+A `SnippetID` is a global ID. It is encoded as a string.
+
+An example `SnippetID` is: `"gid://gitlab/Snippet/1"`.
+"""
+scalar SnippetID
+
+type SnippetPermissions {
+ """Indicates the user can perform `admin_snippet` on this resource"""
+ adminSnippet: Boolean!
+
+ """Indicates the user can perform `award_emoji` on this resource"""
+ awardEmoji: Boolean!
+
+ """Indicates the user can perform `create_note` on this resource"""
+ createNote: Boolean!
+
+ """Indicates the user can perform `read_snippet` on this resource"""
+ readSnippet: Boolean!
+
+ """Indicates the user can perform `report_snippet` on this resource"""
+ reportSnippet: Boolean!
+
+ """Indicates the user can perform `update_snippet` on this resource"""
+ updateSnippet: Boolean!
+}
+
+"""Represents the Geo sync and verification state of a snippet repository"""
+type SnippetRepositoryRegistry {
+ """Timestamp when the SnippetRepositoryRegistry was created"""
+ createdAt: Time
+
+ """ID of the SnippetRepositoryRegistry"""
+ id: ID!
+
+ """Error message during sync of the SnippetRepositoryRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the SnippetRepositoryRegistry
+ """
+ lastSyncedAt: Time
+
+ """Timestamp after which the SnippetRepositoryRegistry should be resynced"""
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the SnippetRepositoryRegistry
+ """
+ retryCount: Int
+
+ """ID of the Snippet Repository."""
+ snippetRepositoryId: ID!
+
+ """Sync state of the SnippetRepositoryRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for SnippetRepositoryRegistry."""
+type SnippetRepositoryRegistryConnection {
+ """A list of edges."""
+ edges: [SnippetRepositoryRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [SnippetRepositoryRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type SnippetRepositoryRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: SnippetRepositoryRegistry
+}
+
+"""Common sort values"""
+enum Sort {
+ """Updated at descending order."""
+ updated_desc @deprecated(reason: "This was renamed. Please use `UPDATED_DESC`. Deprecated in 13.5.")
+
+ """Updated at ascending order."""
+ updated_asc @deprecated(reason: "This was renamed. Please use `UPDATED_ASC`. Deprecated in 13.5.")
+
+ """Created at descending order."""
+ created_desc @deprecated(reason: "This was renamed. Please use `CREATED_DESC`. Deprecated in 13.5.")
+
+ """Created at ascending order."""
+ created_asc @deprecated(reason: "This was renamed. Please use `CREATED_ASC`. Deprecated in 13.5.")
+
+ """Updated at descending order."""
+ UPDATED_DESC
+
+ """Updated at ascending order."""
+ UPDATED_ASC
+
+ """Created at descending order."""
+ CREATED_DESC
+
+ """Created at ascending order."""
+ CREATED_ASC
+}
+
+type StatusAction {
+ """Title for the button, for example: Retry this job."""
+ buttonTitle: String
+
+ """Icon used in the action button."""
+ icon: String
+
+ """ID for a status action."""
+ id: String!
+
+ """Method for the action, for example: :post."""
+ method: String
+
+ """Path for the action."""
+ path: String
+
+ """Title for the action, for example: Retry."""
+ title: String
+}
+
+type Submodule implements Entry {
+ """Flat path of the entry."""
+ flatPath: String!
+
+ """ID of the entry."""
+ id: ID!
+
+ """Name of the entry."""
+ name: String!
+
+ """Path of the entry."""
+ path: String!
+
+ """Last commit SHA for the entry."""
+ sha: String!
+
+ """Tree URL for the sub-module."""
+ treeUrl: String
+
+ """Type of tree entry."""
+ type: EntryType!
+
+ """Web URL for the sub-module."""
+ webUrl: String
+}
+
+"""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!
+}
+
+"""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
+}
+
+type Subscription {
+ """Triggered when the assignees of an issuable are updated."""
+ issuableAssigneesUpdated(
+ """ID of the issuable."""
+ issuableId: IssuableID!
+ ): Issuable
+}
+
+"""Completion status of tasks"""
+type TaskCompletionStatus {
+ """Number of completed tasks."""
+ completedCount: Int!
+
+ """Number of total tasks."""
+ count: Int!
+}
+
+type TerraformState {
+ """Timestamp the Terraform state was created."""
+ createdAt: Time!
+
+ """ID of the Terraform state."""
+ id: ID!
+
+ """Latest version of the Terraform state."""
+ latestVersion: TerraformStateVersion
+
+ """Timestamp the Terraform state was locked."""
+ lockedAt: Time
+
+ """User currently holding a lock on the Terraform state."""
+ lockedByUser: UserCore
+
+ """Name of the Terraform state."""
+ name: String!
+
+ """Timestamp the Terraform state was updated."""
+ updatedAt: Time!
+}
+
+"""The connection type for TerraformState."""
+type TerraformStateConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [TerraformStateEdge]
+
+ """A list of nodes."""
+ nodes: [TerraformState]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of TerraformStateDelete"""
+input TerraformStateDeleteInput {
+ """Global ID of the Terraform state."""
+ id: TerraformStateID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TerraformStateDelete"""
+type TerraformStateDeletePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type TerraformStateEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TerraformState
+}
+
+"""
+A `TerraformStateID` is a global ID. It is encoded as a string.
+
+An example `TerraformStateID` is: `"gid://gitlab/Terraform::State/1"`.
+"""
+scalar TerraformStateID
+
+"""Autogenerated input type of TerraformStateLock"""
+input TerraformStateLockInput {
+ """Global ID of the Terraform state."""
+ id: TerraformStateID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TerraformStateLock"""
+type TerraformStateLockPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of TerraformStateUnlock"""
+input TerraformStateUnlockInput {
+ """Global ID of the Terraform state."""
+ id: TerraformStateID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TerraformStateUnlock"""
+type TerraformStateUnlockPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+type TerraformStateVersion {
+ """Timestamp the version was created."""
+ createdAt: Time!
+
+ """User that created this version."""
+ createdByUser: UserCore
+
+ """URL for downloading the version's JSON file."""
+ downloadPath: String
+
+ """ID of the Terraform state version."""
+ id: ID!
+
+ """Job that created this version."""
+ job: CiJob
+
+ """Serial number of the version."""
+ serial: Int
+
+ """Timestamp the version was updated."""
+ updatedAt: Time!
+}
+
+"""
+Represents the Geo sync and verification state of a terraform state version
+"""
+type TerraformStateVersionRegistry {
+ """Timestamp when the TerraformStateVersionRegistry was created"""
+ createdAt: Time
+
+ """ID of the TerraformStateVersionRegistry"""
+ id: ID!
+
+ """Error message during sync of the TerraformStateVersionRegistry"""
+ lastSyncFailure: String
+
+ """
+ Timestamp of the most recent successful sync of the TerraformStateVersionRegistry
+ """
+ lastSyncedAt: Time
+
+ """
+ Timestamp after which the TerraformStateVersionRegistry should be resynced
+ """
+ retryAt: Time
+
+ """
+ Number of consecutive failed sync attempts of the TerraformStateVersionRegistry
+ """
+ retryCount: Int
+
+ """Sync state of the TerraformStateVersionRegistry"""
+ state: RegistryState
+
+ """ID of the terraform state version."""
+ terraformStateVersionId: ID!
+}
+
+"""The connection type for TerraformStateVersionRegistry."""
+type TerraformStateVersionRegistryConnection {
+ """A list of edges."""
+ edges: [TerraformStateVersionRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [TerraformStateVersionRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TerraformStateVersionRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TerraformStateVersionRegistry
+}
+
+"""Test case in pipeline test report."""
+type TestCase {
+ """URL of the test case attachment file."""
+ attachmentUrl: String
+
+ """Classname of the test case."""
+ classname: String
+
+ """Test case execution time in seconds."""
+ executionTime: Float
+
+ """Path to the file of the test case."""
+ file: String
+
+ """Name of the test case."""
+ name: String
+
+ """Recent failure history of the test case on the base branch."""
+ recentFailures: RecentFailures
+
+ """Stack trace of the test case."""
+ stackTrace: String
+
+ """Status of the test case (error, failed, success, skipped)."""
+ status: TestCaseStatus
+
+ """System output of the test case."""
+ systemOutput: String
+}
+
+"""The connection type for TestCase."""
+type TestCaseConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [TestCaseEdge]
+
+ """A list of nodes."""
+ nodes: [TestCase]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TestCaseEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TestCase
+}
+
+enum TestCaseStatus {
+ """Test case that has a status of error."""
+ error
+
+ """Test case that has a status of failed."""
+ failed
+
+ """Test case that has a status of success."""
+ success
+
+ """Test case that has a status of skipped."""
+ skipped
+}
+
+"""Represents a requirement test report"""
+type TestReport {
+ """Author of the test report."""
+ author: UserCore
+
+ """Timestamp of when the test report was created."""
+ createdAt: Time!
+
+ """ID of the test report."""
+ id: ID!
+
+ """State of the test report."""
+ state: TestReportState!
+}
+
+"""The connection type for TestReport."""
+type TestReportConnection {
+ """A list of edges."""
+ edges: [TestReportEdge]
+
+ """A list of nodes."""
+ nodes: [TestReport]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TestReportEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TestReport
+}
+
+"""State of a test report"""
+enum TestReportState {
+ """Passed test report."""
+ PASSED
+
+ """Failed test report."""
+ FAILED
+}
+
+"""Test report for a pipeline"""
+type TestReportSummary {
+ """Test suites belonging to a pipeline test report."""
+ testSuites(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TestSuiteSummaryConnection!
+
+ """Total report statistics for a pipeline test report."""
+ total: TestReportTotal!
+}
+
+"""Total test report statistics."""
+type TestReportTotal {
+ """Total number of the test cases."""
+ count: Int
+
+ """Total number of test cases that had an error."""
+ error: Int
+
+ """Total number of test cases that failed."""
+ failed: Int
+
+ """Total number of test cases that were skipped."""
+ skipped: Int
+
+ """Total number of test cases that succeeded."""
+ success: Int
+
+ """Test suite error message."""
+ suiteError: String
+
+ """Total duration of the tests."""
+ time: Float
+}
+
+"""Test suite in a pipeline test report."""
+type TestSuite {
+ """Total number of test cases that had an error."""
+ errorCount: Int
+
+ """Total number of test cases that failed in the test suite."""
+ failedCount: Int
+
+ """Name of the test suite."""
+ name: String
+
+ """Total number of test cases that were skipped in the test suite."""
+ skippedCount: Int
+
+ """Total number of test cases that succeeded in the test suite."""
+ successCount: Int
+
+ """Test suite error message."""
+ suiteError: String
+
+ """Test cases in the test suite."""
+ testCases(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TestCaseConnection
+
+ """Total number of the test cases in the test suite."""
+ totalCount: Int
+
+ """Total duration of the tests in the test suite."""
+ totalTime: Float
+}
+
+"""Test suite summary in a pipeline test report."""
+type TestSuiteSummary {
+ """IDs of the builds used to run the test suite."""
+ buildIds: [ID!]
+
+ """Total number of test cases that had an error."""
+ errorCount: Int
+
+ """Total number of test cases that failed in the test suite."""
+ failedCount: Int
+
+ """Name of the test suite."""
+ name: String
+
+ """Total number of test cases that were skipped in the test suite."""
+ skippedCount: Int
+
+ """Total number of test cases that succeeded in the test suite."""
+ successCount: Int
+
+ """Test suite error message."""
+ suiteError: String
+
+ """Total number of the test cases in the test suite."""
+ totalCount: Int
+
+ """Total duration of the tests in the test suite."""
+ totalTime: Float
+}
+
+"""The connection type for TestSuiteSummary."""
+type TestSuiteSummaryConnection {
+ """Total count of collection."""
+ count: Int!
+
+ """A list of edges."""
+ edges: [TestSuiteSummaryEdge]
+
+ """A list of nodes."""
+ nodes: [TestSuiteSummary]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TestSuiteSummaryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TestSuiteSummary
+}
+
+"""
+Time represented in ISO 8601.
+
+For example: "2021-03-09T14:58:50+00:00".
+
+See `https://www.iso.org/iso-8601-date-and-time-format.html`.
+
+"""
+scalar Time
+
+"""Represents measured stats metrics for timeboxes"""
+type TimeboxMetrics {
+ """Count metric."""
+ count: Int!
+
+ """Weight metric."""
+ weight: Int!
+}
+
+"""Represents a historically accurate report about the timebox"""
+type TimeboxReport {
+ """Daily scope and completed totals for burnup charts."""
+ burnupTimeSeries: [BurnupChartDailyTotals!]
+
+ """Represents the time report stats for the timebox."""
+ stats: TimeReportStats
+}
+
+interface TimeboxReportInterface {
+ """Historically accurate report about the timebox."""
+ report: TimeboxReport
+}
+
+"""A time-frame defined as a closed inclusive range of two dates"""
+input Timeframe {
+ """Start of the range."""
+ start: Date!
+
+ """End of the range."""
+ end: Date!
+}
+
+type Timelog {
+ """Issue that logged time was added to."""
+ issue: Issue
+
+ """Merge request that logged time was added to."""
+ mergeRequest: MergeRequest
+
+ """Note where the quick action was executed to add the logged time."""
+ note: Note
+
+ """Timestamp of when the time tracked was spent at."""
+ spentAt: Time
+
+ """Summary of how the time was spent."""
+ summary: String
+
+ """Time spent displayed in seconds."""
+ timeSpent: Int!
+
+ """User that logged the time."""
+ user: UserCore!
+}
+
+"""The connection type for Timelog."""
+type TimelogConnection {
+ """A list of edges."""
+ edges: [TimelogEdge]
+
+ """A list of nodes."""
+ nodes: [Timelog]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TimelogEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Timelog
+}
+
+"""Represents the time report stats for timeboxes"""
+type TimeReportStats {
+ """Completed issues metrics."""
+ complete: TimeboxMetrics
+
+ """Incomplete issues metrics."""
+ incomplete: TimeboxMetrics
+
+ """Total issues metrics."""
+ total: TimeboxMetrics
+}
+
+"""Representing a to-do entry"""
+type Todo {
+ """Action of the to-do item."""
+ action: TodoActionEnum!
+
+ """Author of this to-do item."""
+ author: UserCore!
+
+ """Body of the to-do item."""
+ body: String!
+
+ """Timestamp this to-do item was created."""
+ createdAt: Time!
+
+ """Group this to-do item is associated with."""
+ group: Group
+
+ """ID of the to-do item."""
+ id: ID!
+
+ """Project this to-do item is associated with."""
+ project: Project
+
+ """State of the to-do item."""
+ state: TodoStateEnum!
+
+ """Target type of the to-do item."""
+ targetType: TodoTargetEnum!
+}
+
+"""
+A `TodoableID` is a global ID. It is encoded as a string.
+
+An example `TodoableID` is: `"gid://gitlab/Todoable/1"`.
+"""
+scalar TodoableID
+
+enum TodoActionEnum {
+ """User was assigned."""
+ assigned
+
+ """User was mentioned."""
+ mentioned
+
+ """Build triggered by the user failed."""
+ build_failed
+
+ """User added a TODO."""
+ marked
+
+ """User was set as an approver."""
+ approval_required
+
+ """Merge request authored by the user could not be merged."""
+ unmergeable
+
+ """User was directly addressed."""
+ directly_addressed
+
+ """Merge request authored by the user was removed from the merge train."""
+ merge_train_removed
+
+ """Review was requested from the user."""
+ review_requested
+}
+
+"""The connection type for Todo."""
+type TodoConnection {
+ """A list of edges."""
+ edges: [TodoEdge]
+
+ """A list of nodes."""
+ nodes: [Todo]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of TodoCreate"""
+input TodoCreateInput {
+ """
+ Global ID of the to-do item's parent. Issues, merge requests, designs, and epics are supported.
+ """
+ targetId: TodoableID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TodoCreate"""
+type TodoCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """To-do item created."""
+ todo: Todo
+}
+
+"""An edge in a connection."""
+type TodoEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Todo
+}
+
+"""
+A `TodoID` is a global ID. It is encoded as a string.
+
+An example `TodoID` is: `"gid://gitlab/Todo/1"`.
+"""
+scalar TodoID
+
+"""Autogenerated input type of TodoMarkDone"""
+input TodoMarkDoneInput {
+ """Global ID of the to-do item to mark as done."""
+ id: TodoID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TodoMarkDone"""
+type TodoMarkDonePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Requested to-do item."""
+ todo: Todo!
+}
+
+"""Autogenerated input type of TodoRestore"""
+input TodoRestoreInput {
+ """Global ID of the to-do item to restore."""
+ id: TodoID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated input type of TodoRestoreMany"""
+input TodoRestoreManyInput {
+ """
+ Global IDs of the to-do items to restore (a maximum of 50 is supported at once).
+ """
+ ids: [TodoID!]!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TodoRestoreMany"""
+type TodoRestoreManyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated to-do items."""
+ todos: [Todo!]!
+}
+
+"""Autogenerated return type of TodoRestore"""
+type TodoRestorePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Requested to-do item."""
+ todo: Todo!
+}
+
+"""Autogenerated input type of TodosMarkAllDone"""
+input TodosMarkAllDoneInput {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of TodosMarkAllDone"""
+type TodosMarkAllDonePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated to-do items."""
+ todos: [Todo!]!
+}
+
+enum TodoStateEnum {
+ """State of the todo is pending."""
+ pending
+
+ """State of the todo is done."""
+ done
+}
+
+enum TodoTargetEnum {
+ """Commit."""
+ COMMIT
+
+ """Issue."""
+ ISSUE
+
+ """Merge request."""
+ MERGEREQUEST
+
+ """Design."""
+ DESIGN
+
+ """Alert."""
+ ALERT
+
+ """An Epic."""
+ EPIC
+}
+
+type Tree {
+ """Blobs of the tree."""
+ blobs(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): BlobConnection!
+
+ """Last commit for the tree."""
+ lastCommit: Commit
+
+ """Sub-modules of the tree."""
+ 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!
+
+ """Trees of the tree."""
+ trees(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TreeEntryConnection!
+}
+
+"""The connection type for Tree."""
+type TreeConnection {
+ """A list of edges."""
+ edges: [TreeEdge]
+
+ """A list of nodes."""
+ nodes: [Tree]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TreeEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Tree
+}
+
+"""Represents a directory"""
+type TreeEntry implements Entry {
+ """Flat path of the entry."""
+ flatPath: String!
+
+ """ID of the entry."""
+ id: ID!
+
+ """Name of the entry."""
+ name: String!
+
+ """Path of the entry."""
+ path: String!
+
+ """Last commit SHA for the entry."""
+ sha: String!
+
+ """Type of tree entry."""
+ type: EntryType!
+
+ """Web path for the tree entry (directory)."""
+ webPath: String
+
+ """Web URL for the tree entry (directory)."""
+ webUrl: String
+}
+
+"""The connection type for TreeEntry."""
+type TreeEntryConnection {
+ """A list of edges."""
+ edges: [TreeEntryEdge]
+
+ """A list of nodes."""
+ nodes: [TreeEntry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type TreeEntryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: TreeEntry
+}
+
+enum TypeEnum {
+ """Snippet created independent of any project."""
+ personal
+
+ """Snippet related to a specific project."""
+ project
+}
+
+"""A regexp containing patterns sourced from user input"""
+scalar UntrustedRegexp
+
+"""Autogenerated input type of UpdateAlertStatus"""
+input UpdateAlertStatusInput {
+ """Project the alert to mutate is in."""
+ projectPath: ID!
+
+ """IID of the alert to mutate."""
+ iid: String!
+
+ """Status to set the alert."""
+ status: AlertManagementStatus!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateAlertStatus"""
+type UpdateAlertStatusPayload {
+ """Alert after mutation."""
+ alert: AlertManagementAlert
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue created after mutation."""
+ issue: Issue
+
+ """To-do item after mutation."""
+ todo: Todo
+}
+
+"""Autogenerated input type of UpdateBoardEpicUserPreferences"""
+input UpdateBoardEpicUserPreferencesInput {
+ """Board global ID."""
+ boardId: BoardID!
+
+ """ID of an epic to set preferences for."""
+ epicId: EpicID!
+
+ """Whether the epic should be collapsed in the board."""
+ collapsed: Boolean!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateBoardEpicUserPreferences"""
+type UpdateBoardEpicUserPreferencesPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """User preferences for the epic in the board after mutation."""
+ epicUserPreferences: BoardEpicUserPreferences
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateBoard"""
+input UpdateBoardInput {
+ """Board name."""
+ name: String
+
+ """Whether or not backlog list is hidden."""
+ hideBacklogList: Boolean
+
+ """Whether or not closed list is hidden."""
+ hideClosedList: Boolean
+
+ """Board global ID."""
+ id: BoardID!
+
+ """ID of user to be assigned to the board."""
+ assigneeId: UserID
+
+ """ID of milestone to be assigned to the board."""
+ milestoneId: MilestoneID
+
+ """ID of iteration to be assigned to the board."""
+ iterationId: IterationID
+
+ """ID of iteration cadence to be assigned to the board."""
+ iterationCadenceId: IterationsCadenceID
+
+ """Weight value to be assigned to the board."""
+ weight: Int
+
+ """Labels of the issue."""
+ labels: [String!]
+
+ """IDs of labels to be added to the board."""
+ labelIds: [LabelID!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated input type of UpdateBoardList"""
+input UpdateBoardListInput {
+ """Position of list within the board."""
+ position: Int
+
+ """Indicates if the list is collapsed for this user."""
+ collapsed: Boolean
+
+ """Global ID of the list."""
+ listId: ListID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateBoardList"""
+type UpdateBoardListPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Mutated list."""
+ list: BoardList
+}
+
+"""Autogenerated return type of UpdateBoard"""
+type UpdateBoardPayload {
+ """Board after mutation."""
+ board: Board
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateComplianceFramework"""
+input UpdateComplianceFrameworkInput {
+ """Global ID of the compliance framework to update."""
+ id: ComplianceManagementFrameworkID!
+
+ """Parameters to update the compliance framework with."""
+ params: ComplianceFrameworkInput!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateComplianceFramework"""
+type UpdateComplianceFrameworkPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Compliance framework after mutation."""
+ complianceFramework: ComplianceFramework
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateContainerExpirationPolicy"""
+input UpdateContainerExpirationPolicyInput {
+ """Project path where the container expiration policy is located."""
+ projectPath: ID!
+
+ """Indicates whether this container expiration policy is enabled."""
+ enabled: Boolean
+
+ """This container expiration policy schedule."""
+ cadence: ContainerExpirationPolicyCadenceEnum
+
+ """Tags older that this will expire."""
+ olderThan: ContainerExpirationPolicyOlderThanEnum
+
+ """Number of tags to retain."""
+ keepN: ContainerExpirationPolicyKeepEnum
+
+ """Tags with names matching this regex pattern will expire."""
+ nameRegex: UntrustedRegexp
+
+ """Tags with names matching this regex pattern will be preserved."""
+ nameRegexKeep: UntrustedRegexp
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateContainerExpirationPolicy"""
+type UpdateContainerExpirationPolicyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Container expiration policy after mutation."""
+ containerExpirationPolicy: ContainerExpirationPolicy
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateDependencyProxyImageTtlGroupPolicy"""
+input UpdateDependencyProxyImageTtlGroupPolicyInput {
+ """Group path for the group dependency proxy image TTL policy."""
+ groupPath: ID!
+
+ """Indicates whether the policy is enabled or disabled."""
+ enabled: Boolean
+
+ """Number of days to retain a cached image file."""
+ ttl: Int
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateDependencyProxyImageTtlGroupPolicy"""
+type UpdateDependencyProxyImageTtlGroupPolicyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Group image TTL policy after mutation."""
+ dependencyProxyImageTtlPolicy: DependencyProxyImageTtlGroupPolicy
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateDependencyProxySettings"""
+input UpdateDependencyProxySettingsInput {
+ """Group path for the group dependency proxy."""
+ groupPath: ID!
+
+ """Indicates whether the policy is enabled or disabled."""
+ enabled: Boolean
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateDependencyProxySettings"""
+type UpdateDependencyProxySettingsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Group dependency proxy settings after mutation."""
+ dependencyProxySetting: DependencyProxySetting
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+input UpdateDiffImagePositionInput {
+ """X position of the note."""
+ x: Int
+
+ """Y position of the note."""
+ y: Int
+
+ """Total width of the image."""
+ width: Int
+
+ """Total height of the image."""
+ height: Int
+}
+
+"""Autogenerated input type of UpdateEpicBoardList"""
+input UpdateEpicBoardListInput {
+ """Position of list within the board."""
+ position: Int
+
+ """Indicates if the list is collapsed for this user."""
+ collapsed: Boolean
+
+ """Global ID of the epic list."""
+ listId: BoardsEpicListID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateEpicBoardList"""
+type UpdateEpicBoardListPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Mutated epic list."""
+ list: EpicList
+}
+
+"""Autogenerated input type of UpdateEpic"""
+input UpdateEpicInput {
+ """IID of the epic to mutate."""
+ iid: ID!
+
+ """Group the epic to mutate is in."""
+ groupPath: ID!
+
+ """Title of the epic."""
+ title: String
+
+ """Description of the epic."""
+ description: String
+
+ """Indicates if the epic is confidential."""
+ confidential: Boolean
+
+ """Start date of the epic."""
+ startDateFixed: String
+
+ """End date of the epic."""
+ dueDateFixed: String
+
+ """
+ Indicates start date should be sourced from start_date_fixed field not the issue milestones.
+ """
+ startDateIsFixed: Boolean
+
+ """
+ Indicates end date should be sourced from due_date_fixed field not the issue milestones.
+ """
+ dueDateIsFixed: Boolean
+
+ """IDs of labels to be added to the epic."""
+ addLabelIds: [ID!]
+
+ """IDs of labels to be removed from the epic."""
+ removeLabelIds: [ID!]
+
+ """State event for the epic."""
+ stateEvent: EpicStateEvent
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateEpic"""
+type UpdateEpicPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Epic after mutation."""
+ epic: Epic
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""Autogenerated input type of UpdateImageDiffNote"""
+input UpdateImageDiffNoteInput {
+ """Global ID of the note to update."""
+ id: NoteID!
+
+ """Content of the note."""
+ body: String
+
+ """Position of this note on a diff."""
+ position: UpdateDiffImagePositionInput
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateImageDiffNote"""
+type UpdateImageDiffNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of UpdateIssue"""
+input UpdateIssueInput {
+ """Project the issue to mutate is in."""
+ projectPath: ID!
+
+ """IID of the issue to mutate."""
+ iid: String!
+
+ """Description of the issue."""
+ description: String
+
+ """Due date of the issue."""
+ dueDate: ISO8601Date
+
+ """Indicates the issue is confidential."""
+ confidential: Boolean
+
+ """Indicates discussion is locked on the issue."""
+ locked: Boolean
+
+ """Type of the issue."""
+ type: IssueType
+
+ """Title of the issue."""
+ title: String
+
+ """
+ ID of the milestone to assign to the issue. On update milestone will be removed if set to null.
+ """
+ milestoneId: ID
+
+ """IDs of labels to be added to the issue."""
+ addLabelIds: [ID!]
+
+ """IDs of labels to be removed from the issue."""
+ removeLabelIds: [ID!]
+
+ """IDs of labels to be set. Replaces existing issue labels."""
+ labelIds: [ID!]
+
+ """Close or reopen an issue."""
+ stateEvent: IssueStateEvent
+
+ """Desired health status."""
+ healthStatus: HealthStatus
+
+ """Weight of the issue."""
+ weight: Int
+
+ """ID of the parent epic. NULL when removing the association."""
+ epicId: EpicID
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateIssue"""
+type UpdateIssuePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Issue after mutation."""
+ issue: Issue
+}
+
+"""Autogenerated input type of UpdateIteration"""
+input UpdateIterationInput {
+ """Group of the iteration."""
+ groupPath: ID!
+
+ """Global ID of the iteration."""
+ id: ID!
+
+ """Title of the iteration."""
+ title: String
+
+ """Description of the iteration."""
+ description: String
+
+ """Start date of the iteration."""
+ startDate: String
+
+ """End date of the iteration."""
+ dueDate: String
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateIteration"""
+type UpdateIterationPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Updated iteration."""
+ iteration: Iteration
+}
+
+"""Autogenerated input type of UpdateNamespacePackageSettings"""
+input UpdateNamespacePackageSettingsInput {
+ """Namespace path where the namespace package setting is located."""
+ namespacePath: ID!
+
+ """
+ Indicates whether duplicate Maven packages are allowed for this namespace.
+ """
+ mavenDuplicatesAllowed: Boolean
+
+ """
+ When maven_duplicates_allowed is false, you can publish duplicate packages
+ with names that match this regex. Otherwise, this setting has no effect.
+ """
+ mavenDuplicateExceptionRegex: UntrustedRegexp
+
+ """
+ Indicates whether duplicate generic packages are allowed for this namespace.
+ """
+ genericDuplicatesAllowed: Boolean
+
+ """
+ When generic_duplicates_allowed is false, you can publish duplicate packages
+ with names that match this regex. Otherwise, this setting has no effect.
+ """
+ genericDuplicateExceptionRegex: UntrustedRegexp
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateNamespacePackageSettings"""
+type UpdateNamespacePackageSettingsPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Namespace package setting after mutation."""
+ packageSettings: PackageSettings
+}
+
+"""Autogenerated input type of UpdateNote"""
+input UpdateNoteInput {
+ """Global ID of the note to update."""
+ id: NoteID!
+
+ """Content of the note."""
+ body: String
+
+ """Confidentiality flag of a note. Default is false."""
+ confidential: Boolean
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateNote"""
+type UpdateNotePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Note after mutation."""
+ note: Note
+}
+
+"""Autogenerated input type of UpdateRequirement"""
+input UpdateRequirementInput {
+ """Title of the requirement."""
+ title: String
+
+ """Description of the requirement."""
+ description: String
+
+ """Full project path the requirement is associated with."""
+ projectPath: ID!
+
+ """State of the requirement."""
+ state: RequirementState
+
+ """IID of the requirement to update."""
+ iid: String!
+
+ """Creates a test report for the requirement with the given state."""
+ lastTestReportState: TestReportState
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateRequirement"""
+type UpdateRequirementPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Requirement after mutation."""
+ requirement: Requirement
+}
+
+"""Autogenerated input type of UpdateSnippet"""
+input UpdateSnippetInput {
+ """Global ID of the snippet to update."""
+ id: SnippetID!
+
+ """Title of the snippet."""
+ title: String
+
+ """Description of the snippet."""
+ description: String
+
+ """Visibility level of the snippet."""
+ visibilityLevel: VisibilityLevelsEnum
+
+ """Actions to perform over the snippet repository and blobs."""
+ blobActions: [SnippetBlobActionInputType!]
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UpdateSnippet"""
+type UpdateSnippetPayload {
+ """
+ CAPTCHA site key which must be used to render a challenge for the user to
+ solve to obtain a valid captchaResponse value. Included only when an operation
+ was not completed because "NeedsCaptchaResponse" is true. Deprecated in 13.11:
+ Use spam protection with HTTP headers instead.
+ """
+ captchaSiteKey: String @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """
+ Indicates whether the operation was detected as possible spam and not
+ completed. If CAPTCHA is enabled, the request must be resubmitted with a valid
+ CAPTCHA response and spam_log_id included for the operation to be completed.
+ Included only when an operation was not completed because
+ "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam protection with
+ HTTP headers instead.
+ """
+ needsCaptchaResponse: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """Snippet after mutation."""
+ snippet: Snippet
+
+ """
+ Indicates whether the operation was detected as definite spam. There is no
+ option to resubmit the request with a CAPTCHA response. Deprecated in 13.11:
+ Use spam protection with HTTP headers instead.
+ """
+ spam: Boolean @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+
+ """
+ Spam log ID which must be passed along with a valid CAPTCHA response for an
+ operation to be completed. Included only when an operation was not completed
+ because "NeedsCaptchaResponse" is true. Deprecated in 13.11: Use spam
+ protection with HTTP headers instead.
+ """
+ spamLogId: Int @deprecated(reason: "Use spam protection with HTTP headers instead. Deprecated in 13.11.")
+}
+
+scalar Upload
+
+"""Represents the Geo replication and verification state of an upload."""
+type UploadRegistry {
+ """Timestamp when the UploadRegistry was created"""
+ createdAt: Time
+
+ """ID of the Upload."""
+ fileId: ID!
+
+ """ID of the UploadRegistry"""
+ id: ID!
+
+ """Error message during sync of the UploadRegistry"""
+ lastSyncFailure: String
+
+ """Timestamp of the most recent successful sync of the UploadRegistry"""
+ lastSyncedAt: Time
+
+ """Timestamp after which the UploadRegistry should be resynced"""
+ retryAt: Time
+
+ """Number of consecutive failed sync attempts of the UploadRegistry"""
+ retryCount: Int
+
+ """Sync state of the UploadRegistry"""
+ state: RegistryState
+}
+
+"""The connection type for UploadRegistry."""
+type UploadRegistryConnection {
+ """A list of edges."""
+ edges: [UploadRegistryEdge]
+
+ """A list of nodes."""
+ nodes: [UploadRegistry]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type UploadRegistryEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: UploadRegistry
+}
+
+"""Represents a recorded measurement (object count) for the Admins"""
+type UsageTrendsMeasurement {
+ """Object count."""
+ count: Int!
+
+ """Type of objects being measured."""
+ identifier: MeasurementIdentifier!
+
+ """Time the measurement was recorded."""
+ recordedAt: Time
+}
+
+"""The connection type for UsageTrendsMeasurement."""
+type UsageTrendsMeasurementConnection {
+ """A list of edges."""
+ edges: [UsageTrendsMeasurementEdge]
+
+ """A list of nodes."""
+ nodes: [UsageTrendsMeasurement]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type UsageTrendsMeasurementEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: UsageTrendsMeasurement
+}
+
+"""Representation of a GitLab user."""
+interface User {
+ """Merge requests assigned to the user."""
+ assignedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Merge requests authored by the user."""
+ authoredMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """URL of the user's avatar."""
+ avatarUrl: String
+
+ """Indicates if the user is a bot."""
+ bot: Boolean!
+
+ """User callouts that belong to the user."""
+ callouts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCalloutConnection
+
+ """User email. Deprecated in 13.7: This was renamed."""
+ email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.")
+
+ """Group count for the user."""
+ groupCount: Int
+
+ """Group memberships of the user."""
+ groupMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupMemberConnection
+
+ """
+ Groups where the user has access. Will always return `null` if
+ `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+ """
+ groups(
+ """Search by group name or path."""
+ search: String
+
+ """Filter by permissions the user has on groups."""
+ permissionScope: GroupPermission
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """ID of the user."""
+ id: ID!
+
+ """Location of the user."""
+ location: String
+
+ """Human-readable name of the user."""
+ name: String!
+
+ """Personal namespace of the user."""
+ namespace: Namespace
+
+ """Project memberships of the user."""
+ projectMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectMemberConnection
+
+ """User's public email."""
+ publicEmail: String
+
+ """Merge requests assigned to the user for review."""
+ reviewRequestedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Snippets authored by the user."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """Type of snippet."""
+ type: TypeEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Projects starred by the user."""
+ starredProjects(
+ """Search query."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection
+
+ """State of the user."""
+ state: UserState!
+
+ """User status."""
+ status: UserStatus
+
+ """Time logged by the user."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """To-do items of the user."""
+ todos(
+ """Action to be filtered."""
+ action: [TodoActionEnum!]
+
+ """ID of an author."""
+ authorId: [ID!]
+
+ """ID of a project."""
+ projectId: [ID!]
+
+ """ID of a group."""
+ groupId: [ID!]
+
+ """State of the todo."""
+ state: [TodoStateEnum!]
+
+ """Type of the todo."""
+ type: [TodoTargetEnum!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TodoConnection
+
+ """Permissions for the current user on the resource."""
+ userPermissions: UserPermissions!
+
+ """Username of the user. Unique within this instance of GitLab."""
+ username: String!
+
+ """Web path of the user."""
+ webPath: String!
+
+ """Web URL of the user."""
+ webUrl: String!
+}
+
+type UserCallout {
+ """Date when the callout was dismissed."""
+ dismissedAt: Time
+
+ """Name of the feature that the callout is for."""
+ featureName: UserCalloutFeatureNameEnum
+}
+
+"""The connection type for UserCallout."""
+type UserCalloutConnection {
+ """A list of edges."""
+ edges: [UserCalloutEdge]
+
+ """A list of nodes."""
+ nodes: [UserCallout]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of UserCalloutCreate"""
+input UserCalloutCreateInput {
+ """Feature name you want to dismiss the callout for."""
+ featureName: String!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of UserCalloutCreate"""
+type UserCalloutCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """User callout dismissed."""
+ userCallout: UserCallout!
+}
+
+"""An edge in a connection."""
+type UserCalloutEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: UserCallout
+}
+
+"""Name of the feature that the callout is for."""
+enum UserCalloutFeatureNameEnum {
+ """Callout feature name for gke_cluster_integration."""
+ GKE_CLUSTER_INTEGRATION
+
+ """Callout feature name for gcp_signup_offer."""
+ GCP_SIGNUP_OFFER
+
+ """Callout feature name for cluster_security_warning."""
+ CLUSTER_SECURITY_WARNING
+
+ """Callout feature name for ultimate_trial."""
+ ULTIMATE_TRIAL
+
+ """Callout feature name for geo_enable_hashed_storage."""
+ GEO_ENABLE_HASHED_STORAGE
+
+ """Callout feature name for geo_migrate_hashed_storage."""
+ GEO_MIGRATE_HASHED_STORAGE
+
+ """Callout feature name for canary_deployment."""
+ CANARY_DEPLOYMENT
+
+ """Callout feature name for gold_trial_billings."""
+ GOLD_TRIAL_BILLINGS
+
+ """Callout feature name for suggest_popover_dismissed."""
+ SUGGEST_POPOVER_DISMISSED
+
+ """Callout feature name for tabs_position_highlight."""
+ TABS_POSITION_HIGHLIGHT
+
+ """Callout feature name for threat_monitoring_info."""
+ THREAT_MONITORING_INFO
+
+ """Callout feature name for two_factor_auth_recovery_settings_check."""
+ TWO_FACTOR_AUTH_RECOVERY_SETTINGS_CHECK
+
+ """Callout feature name for web_ide_alert_dismissed."""
+ WEB_IDE_ALERT_DISMISSED
+
+ """Callout feature name for active_user_count_threshold."""
+ ACTIVE_USER_COUNT_THRESHOLD
+
+ """Callout feature name for buy_pipeline_minutes_notification_dot."""
+ BUY_PIPELINE_MINUTES_NOTIFICATION_DOT
+
+ """Callout feature name for personal_access_token_expiry."""
+ PERSONAL_ACCESS_TOKEN_EXPIRY
+
+ """Callout feature name for suggest_pipeline."""
+ SUGGEST_PIPELINE
+
+ """Callout feature name for customize_homepage."""
+ CUSTOMIZE_HOMEPAGE
+
+ """Callout feature name for feature_flags_new_version."""
+ FEATURE_FLAGS_NEW_VERSION
+
+ """Callout feature name for registration_enabled_callout."""
+ REGISTRATION_ENABLED_CALLOUT
+
+ """Callout feature name for new_user_signups_cap_reached."""
+ NEW_USER_SIGNUPS_CAP_REACHED
+
+ """Callout feature name for unfinished_tag_cleanup_callout."""
+ UNFINISHED_TAG_CLEANUP_CALLOUT
+
+ """Callout feature name for eoa_bronze_plan_banner."""
+ EOA_BRONZE_PLAN_BANNER
+
+ """Callout feature name for pipeline_needs_banner."""
+ PIPELINE_NEEDS_BANNER
+
+ """Callout feature name for pipeline_needs_hover_tip."""
+ PIPELINE_NEEDS_HOVER_TIP
+
+ """Callout feature name for web_ide_ci_environments_guidance."""
+ WEB_IDE_CI_ENVIRONMENTS_GUIDANCE
+
+ """Callout feature name for security_configuration_upgrade_banner."""
+ SECURITY_CONFIGURATION_UPGRADE_BANNER
+
+ """
+ Callout feature name for cloud_licensing_subscription_activation_banner.
+ """
+ CLOUD_LICENSING_SUBSCRIPTION_ACTIVATION_BANNER
+
+ """Callout feature name for trial_status_reminder_d14."""
+ TRIAL_STATUS_REMINDER_D14
+
+ """Callout feature name for trial_status_reminder_d3."""
+ TRIAL_STATUS_REMINDER_D3
+
+ """Callout feature name for security_configuration_devops_alert."""
+ SECURITY_CONFIGURATION_DEVOPS_ALERT
+
+ """Callout feature name for profile_personal_access_token_expiry."""
+ PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY
+
+ """Callout feature name for terraform_notification_dismissed."""
+ TERRAFORM_NOTIFICATION_DISMISSED
+
+ """Callout feature name for security_newsletter_callout."""
+ SECURITY_NEWSLETTER_CALLOUT
+}
+
+"""Core represention of a GitLab user."""
+type UserCore implements User {
+ """Merge requests assigned to the user."""
+ assignedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Merge requests authored by the user."""
+ authoredMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Username of the reviewer."""
+ reviewerUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """URL of the user's avatar."""
+ avatarUrl: String
+
+ """Indicates if the user is a bot."""
+ bot: Boolean!
+
+ """User callouts that belong to the user."""
+ callouts(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): UserCalloutConnection
+
+ """User email. Deprecated in 13.7: This was renamed."""
+ email: String @deprecated(reason: "This was renamed. Please use `User.publicEmail`. Deprecated in 13.7.")
+
+ """Group count for the user."""
+ groupCount: Int
+
+ """Group memberships of the user."""
+ groupMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupMemberConnection
+
+ """
+ Groups where the user has access. Will always return `null` if
+ `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+ """
+ groups(
+ """Search by group name or path."""
+ search: String
+
+ """Filter by permissions the user has on groups."""
+ permissionScope: GroupPermission
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): GroupConnection
+
+ """ID of the user."""
+ id: ID!
+
+ """Location of the user."""
+ location: String
+
+ """Human-readable name of the user."""
+ name: String!
+
+ """Personal namespace of the user."""
+ namespace: Namespace
+
+ """Project memberships of the user."""
+ projectMemberships(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectMemberConnection
+
+ """User's public email."""
+ publicEmail: String
+
+ """Merge requests assigned to the user for review."""
+ reviewRequestedMergeRequests(
+ """Array of IIDs of merge requests, for example `[1, 2]`."""
+ iids: [String!]
+
+ """
+ Array of source branch names.
+ All resolved merge requests will have one of these branches as their source.
+
+ """
+ sourceBranches: [String!]
+
+ """
+ Array of target branch names.
+ All resolved merge requests will have one of these branches as their target.
+
+ """
+ targetBranches: [String!]
+
+ """
+ Merge request state. If provided, all resolved merge requests will have this state.
+ """
+ state: MergeRequestState
+
+ """
+ Array of label names. All resolved merge requests will have all of these labels.
+ """
+ labels: [String!]
+
+ """Merge requests merged after this date."""
+ mergedAfter: Time
+
+ """Merge requests merged before this date."""
+ mergedBefore: Time
+
+ """Title of the milestone."""
+ milestoneTitle: String
+
+ """Sort merge requests by this criteria."""
+ sort: MergeRequestSort = created_desc
+
+ """Merge requests created after this timestamp."""
+ createdAfter: Time
+
+ """Merge requests created before this timestamp."""
+ createdBefore: Time
+
+ """
+ List of negated arguments.
+ Warning: this argument is experimental and a subject to change in future.
+
+ """
+ not: MergeRequestsResolverNegatedParams
+
+ """
+ The full-path of the project the authored merge requests should be in.
+ Incompatible with projectId.
+
+ """
+ projectPath: String
+
+ """
+ The global ID of the project the authored merge requests should be in.
+ Incompatible with projectPath.
+
+ """
+ projectId: ProjectID
+
+ """Username of the author."""
+ authorUsername: String
+
+ """Username of the assignee."""
+ assigneeUsername: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): MergeRequestConnection
+
+ """Snippets authored by the user."""
+ snippets(
+ """
+ Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`.
+ """
+ ids: [SnippetID!]
+
+ """Visibility of the snippet."""
+ visibility: VisibilityScopesEnum
+
+ """Type of snippet."""
+ type: TypeEnum
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): SnippetConnection
+
+ """Projects starred by the user."""
+ starredProjects(
+ """Search query."""
+ search: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): ProjectConnection
+
+ """State of the user."""
+ state: UserState!
+
+ """User status."""
+ status: UserStatus
+
+ """Time logged by the user."""
+ timelogs(
+ """
+ List timelogs within a date range where the logged date is equal to or after startDate.
+ """
+ startDate: Time
+
+ """
+ List timelogs within a date range where the logged date is equal to or before endDate.
+ """
+ endDate: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or after startTime.
+ """
+ startTime: Time
+
+ """
+ List timelogs within a time range where the logged time is equal to or before endTime.
+ """
+ endTime: Time
+
+ """List timelogs for a project."""
+ projectId: ProjectID
+
+ """List timelogs for a group."""
+ groupId: GroupID
+
+ """List timelogs for a user."""
+ username: String
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TimelogConnection
+
+ """To-do items of the user."""
+ todos(
+ """Action to be filtered."""
+ action: [TodoActionEnum!]
+
+ """ID of an author."""
+ authorId: [ID!]
+
+ """ID of a project."""
+ projectId: [ID!]
+
+ """ID of a group."""
+ groupId: [ID!]
+
+ """State of the todo."""
+ state: [TodoStateEnum!]
+
+ """Type of the todo."""
+ type: [TodoTargetEnum!]
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): TodoConnection
+
+ """Permissions for the current user on the resource."""
+ userPermissions: UserPermissions!
+
+ """Username of the user. Unique within this instance of GitLab."""
+ username: String!
+
+ """Web path of the user."""
+ webPath: String!
+
+ """Web URL of the user."""
+ webUrl: String!
+}
+
+"""The connection type for UserCore."""
+type UserCoreConnection {
+ """A list of edges."""
+ edges: [UserCoreEdge]
+
+ """A list of nodes."""
+ nodes: [UserCore]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type UserCoreEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: UserCore
+}
+
+"""
+A `UserID` is a global ID. It is encoded as a string.
+
+An example `UserID` is: `"gid://gitlab/User/1"`.
+"""
+scalar UserID
+
+"""
+Information about a merge request given a specific user.
+
+This object has two parts to its state: a `User` and a `MergeRequest`. All
+fields relate to interactions between the two entities.
+
+"""
+type UserMergeRequestInteraction {
+ """Approval rules that apply to this user for this merge request."""
+ applicableApprovalRules: [ApprovalRule!]
+
+ """Whether this user has approved this merge request."""
+ approved: Boolean!
+
+ """Whether this user can merge this merge request."""
+ canMerge: Boolean!
+
+ """Whether this user can update this merge request."""
+ canUpdate: Boolean!
+
+ """State of the review by this user."""
+ reviewState: MergeRequestReviewState
+
+ """Whether this user has provided a review for this merge request."""
+ reviewed: Boolean!
+}
+
+type UserPermissions {
+ """Indicates the user can perform `create_snippet` on this resource"""
+ createSnippet: Boolean!
+}
+
+"""Possible states of a user"""
+enum UserState {
+ """User is active and is able to use the system."""
+ active
+
+ """User has been blocked and is prevented from using the system."""
+ blocked
+
+ """User is no longer active and is unable to use the system."""
+ deactivated
+}
+
+type UserStatus {
+ """User availability status."""
+ availability: AvailabilityEnum!
+
+ """String representation of emoji."""
+ emoji: String
+
+ """User status message."""
+ message: String
+
+ """HTML of the user status message"""
+ messageHtml: String
+}
+
+enum VisibilityLevelsEnum {
+ """Private visibility level."""
+ private
+
+ """Internal visibility level."""
+ internal
+
+ """Public visibility level."""
+ public
+}
+
+enum VisibilityScopesEnum {
+ """Snippet is visible only to the snippet creator."""
+ private
+
+ """Snippet is visible for any logged in user except external users."""
+ internal
+
+ """Snippet can be accessed without any authentication."""
+ public
+}
+
+"""
+Represents the count of vulnerabilities by severity on a particular day. This data is retained for 365 days
+"""
+type VulnerabilitiesCountByDay {
+ """
+ Total number of vulnerabilities on a particular day with critical severity
+ """
+ critical: Int!
+
+ """Date for the count."""
+ date: ISO8601Date!
+
+ """Total number of vulnerabilities on a particular day with high severity"""
+ high: Int!
+
+ """Total number of vulnerabilities on a particular day with info severity"""
+ info: Int!
+
+ """Total number of vulnerabilities on a particular day with low severity"""
+ low: Int!
+
+ """
+ Total number of vulnerabilities on a particular day with medium severity
+ """
+ medium: Int!
+
+ """Total number of vulnerabilities on a particular day."""
+ total: Int!
+
+ """
+ Total number of vulnerabilities on a particular day with unknown severity
+ """
+ unknown: Int!
+}
+
+"""The connection type for VulnerabilitiesCountByDay."""
+type VulnerabilitiesCountByDayConnection {
+ """A list of edges."""
+ edges: [VulnerabilitiesCountByDayEdge]
+
+ """A list of nodes."""
+ nodes: [VulnerabilitiesCountByDay]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type VulnerabilitiesCountByDayEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: VulnerabilitiesCountByDay
+}
+
+"""
+A `VulnerabilitiesExternalIssueLinkID` is a global ID. It is encoded as a string.
+
+An example `VulnerabilitiesExternalIssueLinkID` is: `"gid://gitlab/Vulnerabilities::ExternalIssueLink/1"`.
+"""
+scalar VulnerabilitiesExternalIssueLinkID
+
+"""
+A `VulnerabilitiesScannerID` is a global ID. It is encoded as a string.
+
+An example `VulnerabilitiesScannerID` is: `"gid://gitlab/Vulnerabilities::Scanner/1"`.
+"""
+scalar VulnerabilitiesScannerID
+
+"""Represents a vulnerability"""
+type Vulnerability implements NoteableInterface {
+ """Timestamp of when the vulnerability state was changed to confirmed."""
+ confirmedAt: Time
+
+ """User that confirmed the vulnerability."""
+ confirmedBy: UserCore
+
+ """Description of the vulnerability."""
+ description: String
+
+ """Details of the vulnerability."""
+ details: [VulnerabilityDetail!]!
+
+ """Timestamp of when the vulnerability was first detected."""
+ detectedAt: Time!
+
+ """All discussions on this noteable."""
+ discussions(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): DiscussionConnection!
+
+ """Timestamp of when the vulnerability state was changed to dismissed."""
+ dismissedAt: Time
+
+ """User that dismissed the vulnerability."""
+ dismissedBy: UserCore
+
+ """List of external issue links related to the vulnerability."""
+ externalIssueLinks(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityExternalIssueLinkConnection!
+
+ """Indicates whether the vulnerability is a false positive."""
+ falsePositive: Boolean
+
+ """
+ Indicates whether there is a solution available for this vulnerability.
+ """
+ hasSolutions: Boolean
+
+ """GraphQL ID of the vulnerability."""
+ id: ID!
+
+ """Identifiers of the vulnerability."""
+ identifiers: [VulnerabilityIdentifier!]!
+
+ """List of issue links related to the vulnerability."""
+ issueLinks(
+ """Filter issue links by link type."""
+ linkType: VulnerabilityIssueLinkType
+
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): VulnerabilityIssueLinkConnection!
+
+ """List of links associated with the vulnerability."""
+ links: [VulnerabilityLink!]!
+
+ """
+ Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability.
+ """
+ location: VulnerabilityLocation
+
+ """Merge request that fixes the vulnerability."""
+ mergeRequest: MergeRequest
+
+ """
+ Short text description of the vulnerability. This may include the finding's specific information.
+ """
+ message: String
+
+ """All notes on this noteable."""
+ notes(
+ """Returns the elements in the list that come after the specified cursor."""
+ after: String
+
+ """
+ Returns the elements in the list that come before the specified cursor.
+ """
+ before: String
+
+ """Returns the first _n_ elements from the list."""
+ first: Int
+
+ """Returns the last _n_ elements from the list."""
+ last: Int
+ ): NoteConnection!
+
+ """Primary identifier of the vulnerability."""
+ primaryIdentifier: VulnerabilityIdentifier
+
+ """Project on which the vulnerability was found."""
+ project: Project
+
+ """
+ Type of the security report that found the vulnerability (SAST,
+ DEPENDENCY_SCANNING, CONTAINER_SCANNING, DAST, SECRET_DETECTION,
+ COVERAGE_FUZZING, API_FUZZING, CLUSTER_IMAGE_SCANNING, GENERIC). `Scan Type` in the UI.
+ """
+ reportType: VulnerabilityReportType
+
+ """Timestamp of when the vulnerability state was changed to resolved."""
+ resolvedAt: Time
+
+ """User that resolved the vulnerability."""
+ resolvedBy: UserCore
+
+ """
+ Indicates whether the vulnerability is fixed on the default branch or not.
+ """
+ resolvedOnDefaultBranch: Boolean!
+
+ """Scanner metadata for the vulnerability."""
+ scanner: VulnerabilityScanner
+
+ """
+ Severity of the vulnerability (INFO, UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL)
+ """
+ severity: VulnerabilitySeverity
+
+ """State of the vulnerability (DETECTED, CONFIRMED, RESOLVED, DISMISSED)"""
+ state: VulnerabilityState
+
+ """Title of the vulnerability."""
+ title: String
+
+ """Number of user notes attached to the vulnerability."""
+ userNotesCount: Int!
+
+ """Permissions for the current user on the resource"""
+ userPermissions: VulnerabilityPermissions!
+
+ """URL to the vulnerability's details page."""
+ vulnerabilityPath: String
+}
+
+"""Confidence that a given vulnerability is present in the codebase."""
+enum VulnerabilityConfidence {
+ """Ignore confidence"""
+ IGNORE
+
+ """Unknown confidence"""
+ UNKNOWN
+
+ """Experimental confidence"""
+ EXPERIMENTAL
+
+ """Low confidence"""
+ LOW
+
+ """Medium confidence"""
+ MEDIUM
+
+ """High confidence"""
+ HIGH
+
+ """Confirmed confidence"""
+ CONFIRMED
+}
+
+"""Autogenerated input type of VulnerabilityConfirm"""
+input VulnerabilityConfirmInput {
+ """ID of the vulnerability to be confirmed."""
+ id: VulnerabilityID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityConfirm"""
+type VulnerabilityConfirmPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Vulnerability after state change."""
+ vulnerability: Vulnerability
+}
+
+"""The connection type for Vulnerability."""
+type VulnerabilityConnection {
+ """A list of edges."""
+ edges: [VulnerabilityEdge]
+
+ """A list of nodes."""
+ nodes: [Vulnerability]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of VulnerabilityCreate"""
+input VulnerabilityCreateInput {
+ """ID of the project to attach the vulnerability to."""
+ project: ProjectID!
+
+ """Name of the vulnerability."""
+ name: String!
+
+ """Long text section that describes the vulnerability in more detail."""
+ description: String!
+
+ """Information about the scanner used to discover the vulnerability."""
+ scanner: VulnerabilityScannerInput!
+
+ """Array of CVE or CWE identifiers for the vulnerability."""
+ identifiers: [VulnerabilityIdentifierInput!]!
+
+ """State of the vulnerability (defaults to `detected`)."""
+ state: VulnerabilityState = DETECTED
+
+ """Severity of the vulnerability (defaults to `unknown`)."""
+ severity: VulnerabilitySeverity = UNKNOWN
+
+ """Confidence of the vulnerability (defaults to `unknown`)."""
+ confidence: VulnerabilityConfidence = UNKNOWN
+
+ """Instructions for how to fix the vulnerability."""
+ solution: String
+
+ """
+ Short text section that describes the vulnerability. This may include the finding's specific information.
+ """
+ message: String
+
+ """
+ Timestamp of when the vulnerability was first detected (defaults to creation time).
+ """
+ detectedAt: Time
+
+ """
+ Timestamp of when the vulnerability state changed to confirmed (defaults to creation time if status is `confirmed`).
+ """
+ confirmedAt: Time
+
+ """
+ Timestamp of when the vulnerability state changed to resolved (defaults to creation time if status is `resolved`).
+ """
+ resolvedAt: Time
+
+ """
+ Timestamp of when the vulnerability state changed to dismissed (defaults to creation time if status is `dismissed`).
+ """
+ dismissedAt: Time
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityCreate"""
+type VulnerabilityCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Vulnerability created."""
+ vulnerability: Vulnerability
+}
+
+"""
+Represents a vulnerability detail field. The fields with data will depend on the vulnerability detail type
+"""
+union VulnerabilityDetail = VulnerabilityDetailBase | VulnerabilityDetailBoolean | VulnerabilityDetailCode | VulnerabilityDetailCommit | VulnerabilityDetailDiff | VulnerabilityDetailFileLocation | VulnerabilityDetailInt | VulnerabilityDetailList | VulnerabilityDetailMarkdown | VulnerabilityDetailModuleLocation | VulnerabilityDetailTable | VulnerabilityDetailText | VulnerabilityDetailUrl
+
+"""Represents the vulnerability details base"""
+type VulnerabilityDetailBase {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+}
+
+"""Represents the vulnerability details boolean value"""
+type VulnerabilityDetailBoolean {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+
+ """Value of the field."""
+ value: Boolean!
+}
+
+"""Represents the vulnerability details code field"""
+type VulnerabilityDetailCode {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Language of the code."""
+ lang: String
+
+ """Name of the field."""
+ name: String
+
+ """Source code."""
+ value: String!
+}
+
+"""Represents the vulnerability details commit field"""
+type VulnerabilityDetailCommit {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+
+ """Commit SHA value."""
+ value: String!
+}
+
+"""Represents the vulnerability details diff field"""
+type VulnerabilityDetailDiff {
+ """Value of the field after the change."""
+ after: String!
+
+ """Value of the field before the change."""
+ before: String!
+
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+}
+
+"""
+Represents the vulnerability details location within a file in the project
+"""
+type VulnerabilityDetailFileLocation {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """File name."""
+ fileName: String!
+
+ """End line number of the file location."""
+ lineEnd: Int!
+
+ """Start line number of the file location."""
+ lineStart: Int!
+
+ """Name of the field."""
+ name: String
+}
+
+"""Represents the vulnerability details integer value"""
+type VulnerabilityDetailInt {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+
+ """Value of the field."""
+ value: Int!
+}
+
+"""Represents the vulnerability details list value"""
+type VulnerabilityDetailList {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """List of details."""
+ items: [VulnerabilityDetail!]!
+
+ """Name of the field."""
+ name: String
+}
+
+"""Represents the vulnerability details Markdown field"""
+type VulnerabilityDetailMarkdown {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+
+ """Value of the Markdown field."""
+ value: String!
+}
+
+"""
+Represents the vulnerability details location within a file in the project
+"""
+type VulnerabilityDetailModuleLocation {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Module name."""
+ moduleName: String!
+
+ """Name of the field."""
+ name: String
+
+ """Offset of the module location."""
+ offset: Int!
+}
+
+"""Represents the vulnerability details table value"""
+type VulnerabilityDetailTable {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Table headers."""
+ headers: [VulnerabilityDetail!]!
+
+ """Name of the field."""
+ name: String
+
+ """Table rows."""
+ rows: [VulnerabilityDetail!]!
+}
+
+"""Represents the vulnerability details text field"""
+type VulnerabilityDetailText {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Name of the field."""
+ name: String
+
+ """Value of the text field."""
+ value: String!
+}
+
+"""Represents the vulnerability details URL field"""
+type VulnerabilityDetailUrl {
+ """Description of the field."""
+ description: String
+
+ """Name of the field."""
+ fieldName: String
+
+ """Href of the URL."""
+ href: String!
+
+ """Name of the field."""
+ name: String
+
+ """Text of the URL."""
+ text: String
+}
+
+"""The dismissal reason of the Vulnerability"""
+enum VulnerabilityDismissalReason {
+ """
+ The vulnerability is known, and has not been remediated or mitigated, but is considered to be an acceptable business risk.
+ """
+ ACCEPTABLE_RISK
+
+ """
+ An error in reporting in which a test result incorrectly indicates the
+ presence of a vulnerability in a system when the vulnerability is not present.
+ """
+ FALSE_POSITIVE
+
+ """
+ A management, operational, or technical control (that is, safeguard or
+ countermeasure) employed by an organization that provides equivalent or
+ comparable protection for an information system.
+ """
+ MITIGATING_CONTROL
+
+ """
+ The finding is not a vulnerability because it is part of a test or is test data.
+ """
+ USED_IN_TESTS
+
+ """
+ The vulnerability is known, and has not been remediated or mitigated, but is
+ considered to be in a part of the application that will not be updated.
+ """
+ NOT_APPLICABLE
+}
+
+"""Autogenerated input type of VulnerabilityDismiss"""
+input VulnerabilityDismissInput {
+ """ID of the vulnerability to be dismissed."""
+ id: VulnerabilityID!
+
+ """Comment why vulnerability should be dismissed."""
+ comment: String
+
+ """Reason why vulnerability should be dismissed."""
+ dismissalReason: VulnerabilityDismissalReason
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityDismiss"""
+type VulnerabilityDismissPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Vulnerability after dismissal."""
+ vulnerability: Vulnerability
+}
+
+"""An edge in a connection."""
+type VulnerabilityEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: Vulnerability
+}
+
+"""Represents an external issue link of a vulnerability"""
+type VulnerabilityExternalIssueLink {
+ """The external issue attached to the issue link."""
+ externalIssue: ExternalIssue
+
+ """GraphQL ID of the external issue link."""
+ id: VulnerabilitiesExternalIssueLinkID!
+
+ """Type of the external issue link."""
+ linkType: VulnerabilityExternalIssueLinkType!
+}
+
+"""The connection type for VulnerabilityExternalIssueLink."""
+type VulnerabilityExternalIssueLinkConnection {
+ """A list of edges."""
+ edges: [VulnerabilityExternalIssueLinkEdge]
+
+ """A list of nodes."""
+ nodes: [VulnerabilityExternalIssueLink]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""Autogenerated input type of VulnerabilityExternalIssueLinkCreate"""
+input VulnerabilityExternalIssueLinkCreateInput {
+ """ID of the vulnerability."""
+ id: VulnerabilityID!
+
+ """Type of the external issue link."""
+ linkType: VulnerabilityExternalIssueLinkType!
+
+ """External tracker type of the external issue link."""
+ externalTracker: VulnerabilityExternalIssueLinkExternalTracker!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityExternalIssueLinkCreate"""
+type VulnerabilityExternalIssueLinkCreatePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Created external issue link."""
+ externalIssueLink: VulnerabilityExternalIssueLink
+}
+
+"""Autogenerated input type of VulnerabilityExternalIssueLinkDestroy"""
+input VulnerabilityExternalIssueLinkDestroyInput {
+ """Global ID of the vulnerability external issue link."""
+ id: VulnerabilitiesExternalIssueLinkID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityExternalIssueLinkDestroy"""
+type VulnerabilityExternalIssueLinkDestroyPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+}
+
+"""An edge in a connection."""
+type VulnerabilityExternalIssueLinkEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: VulnerabilityExternalIssueLink
+}
+
+"""
+The external tracker of the external issue link related to a vulnerability
+"""
+enum VulnerabilityExternalIssueLinkExternalTracker {
+ """Jira external tracker"""
+ JIRA
+}
+
+"""The type of the external issue link related to a vulnerability"""
+enum VulnerabilityExternalIssueLinkType {
+ """Created link type"""
+ CREATED
+}
+
+"""The grade of the vulnerable project"""
+enum VulnerabilityGrade {
+ """A grade"""
+ A
+
+ """B grade"""
+ B
+
+ """C grade"""
+ C
+
+ """D grade"""
+ D
+
+ """F grade"""
+ F
+}
+
+"""
+A `VulnerabilityID` is a global ID. It is encoded as a string.
+
+An example `VulnerabilityID` is: `"gid://gitlab/Vulnerability/1"`.
+"""
+scalar VulnerabilityID
+
+"""Represents a vulnerability identifier"""
+type VulnerabilityIdentifier {
+ """External ID of the vulnerability identifier."""
+ externalId: String
+
+ """External type of the vulnerability identifier."""
+ externalType: String
+
+ """Name of the vulnerability identifier."""
+ name: String
+
+ """URL of the vulnerability identifier."""
+ url: String
+}
+
+input VulnerabilityIdentifierInput {
+ """Name of the vulnerability identifier."""
+ name: String!
+
+ """URL of the vulnerability identifier."""
+ url: String!
+
+ """External type of the vulnerability identifier."""
+ externalType: String
+
+ """External ID of the vulnerability identifier."""
+ externalId: String
+}
+
+"""Represents an issue link of a vulnerability"""
+type VulnerabilityIssueLink {
+ """GraphQL ID of the vulnerability."""
+ id: ID!
+
+ """Issue attached to issue link."""
+ issue: Issue!
+
+ """Type of the issue link."""
+ linkType: VulnerabilityIssueLinkType!
+}
+
+"""The connection type for VulnerabilityIssueLink."""
+type VulnerabilityIssueLinkConnection {
+ """A list of edges."""
+ edges: [VulnerabilityIssueLinkEdge]
+
+ """A list of nodes."""
+ nodes: [VulnerabilityIssueLink]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type VulnerabilityIssueLinkEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: VulnerabilityIssueLink
+}
+
+"""The type of the issue link related to a vulnerability"""
+enum VulnerabilityIssueLinkType {
+ """Has a related issue"""
+ RELATED
+
+ """Issue is created for the vulnerability"""
+ CREATED
+}
+
+"""Represents a link related to a vulnerability"""
+type VulnerabilityLink {
+ """Name of the link."""
+ name: String
+
+ """URL of the link."""
+ url: String!
+}
+
+"""
+Represents a vulnerability location. The fields with data will depend on the vulnerability report type
+"""
+union VulnerabilityLocation = VulnerabilityLocationContainerScanning | VulnerabilityLocationCoverageFuzzing | VulnerabilityLocationDast | VulnerabilityLocationDependencyScanning | VulnerabilityLocationGeneric | VulnerabilityLocationSast | VulnerabilityLocationSecretDetection
+
+"""
+Represents the location of a vulnerability found by a container security scan
+"""
+type VulnerabilityLocationContainerScanning {
+ """Dependency containing the vulnerability."""
+ dependency: VulnerableDependency
+
+ """Name of the vulnerable container image."""
+ image: String
+
+ """Operating system that runs on the vulnerable container image."""
+ operatingSystem: String
+}
+
+"""
+Represents the location of a vulnerability found by a Coverage Fuzzing scan
+"""
+type VulnerabilityLocationCoverageFuzzing {
+ """Blob path to the vulnerable file."""
+ blobPath: String
+
+ """Number of the last relevant line in the vulnerable file."""
+ endLine: String
+
+ """Path to the vulnerable file."""
+ file: String
+
+ """Number of the first relevant line in the vulnerable file."""
+ startLine: String
+
+ """Class containing the vulnerability."""
+ vulnerableClass: String
+
+ """Method containing the vulnerability."""
+ vulnerableMethod: String
+}
+
+"""Represents the location of a vulnerability found by a DAST scan"""
+type VulnerabilityLocationDast {
+ """Domain name of the vulnerable request."""
+ hostname: String
+
+ """Query parameter for the URL on which the vulnerability occurred."""
+ param: String
+
+ """URL path and query string of the vulnerable request."""
+ path: String
+
+ """HTTP method of the vulnerable request."""
+ requestMethod: String
+}
+
+"""
+Represents the location of a vulnerability found by a dependency security scan
+"""
+type VulnerabilityLocationDependencyScanning {
+ """Blob path to the vulnerable file."""
+ blobPath: String
+
+ """Dependency containing the vulnerability."""
+ dependency: VulnerableDependency
+
+ """Path to the vulnerable file."""
+ file: String
+}
+
+"""Represents the location of a vulnerability found by a generic scanner."""
+type VulnerabilityLocationGeneric {
+ """Free-form description of where the vulnerability is located."""
+ description: String
+}
+
+"""Represents the location of a vulnerability found by a SAST scan"""
+type VulnerabilityLocationSast {
+ """Blob path to the vulnerable file."""
+ blobPath: String
+
+ """Number of the last relevant line in the vulnerable file."""
+ endLine: String
+
+ """Path to the vulnerable file."""
+ file: String
+
+ """Number of the first relevant line in the vulnerable file."""
+ startLine: String
+
+ """Class containing the vulnerability."""
+ vulnerableClass: String
+
+ """Method containing the vulnerability."""
+ vulnerableMethod: String
+}
+
+"""
+Represents the location of a vulnerability found by a secret detection scan
+"""
+type VulnerabilityLocationSecretDetection {
+ """Blob path to the vulnerable file."""
+ blobPath: String
+
+ """Number of the last relevant line in the vulnerable file."""
+ endLine: String
+
+ """Path to the vulnerable file."""
+ file: String
+
+ """Number of the first relevant line in the vulnerable file."""
+ startLine: String
+
+ """Class containing the vulnerability."""
+ vulnerableClass: String
+
+ """Method containing the vulnerability."""
+ vulnerableMethod: String
+}
+
+"""Check permissions for the current user on a vulnerability"""
+type VulnerabilityPermissions {
+ """Indicates the user can perform `admin_vulnerability` on this resource"""
+ adminVulnerability: Boolean!
+
+ """
+ Indicates the user can perform `admin_vulnerability_external_issue_link` on this resource
+ """
+ adminVulnerabilityExternalIssueLink: Boolean!
+
+ """
+ Indicates the user can perform `admin_vulnerability_issue_link` on this resource
+ """
+ adminVulnerabilityIssueLink: Boolean!
+
+ """Indicates the user can perform `create_vulnerability` on this resource"""
+ createVulnerability: Boolean!
+
+ """
+ Indicates the user can perform `create_vulnerability_export` on this resource
+ """
+ createVulnerabilityExport: Boolean!
+
+ """
+ Indicates the user can perform `create_vulnerability_feedback` on this resource
+ """
+ createVulnerabilityFeedback: Boolean!
+
+ """
+ Indicates the user can perform `destroy_vulnerability_feedback` on this resource
+ """
+ destroyVulnerabilityFeedback: Boolean!
+
+ """
+ Indicates the user can perform `read_vulnerability_feedback` on this resource
+ """
+ readVulnerabilityFeedback: Boolean!
+
+ """
+ Indicates the user can perform `update_vulnerability_feedback` on this resource
+ """
+ updateVulnerabilityFeedback: Boolean!
+}
+
+"""The type of the security scan that found the vulnerability"""
+enum VulnerabilityReportType {
+ """SAST report"""
+ SAST
+
+ """Dependency Scanning report"""
+ DEPENDENCY_SCANNING
+
+ """Container Scanning report"""
+ CONTAINER_SCANNING
+
+ """DAST report"""
+ DAST
+
+ """Secret Detection report"""
+ SECRET_DETECTION
+
+ """Coverage Fuzzing report"""
+ COVERAGE_FUZZING
+
+ """API Fuzzing report"""
+ API_FUZZING
+
+ """Cluster Image Scanning report"""
+ CLUSTER_IMAGE_SCANNING
+
+ """Generic report"""
+ GENERIC
+}
+
+"""Autogenerated input type of VulnerabilityResolve"""
+input VulnerabilityResolveInput {
+ """ID of the vulnerability to be resolved."""
+ id: VulnerabilityID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityResolve"""
+type VulnerabilityResolvePayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Vulnerability after state change."""
+ vulnerability: Vulnerability
+}
+
+"""Autogenerated input type of VulnerabilityRevertToDetected"""
+input VulnerabilityRevertToDetectedInput {
+ """ID of the vulnerability to be reverted."""
+ id: VulnerabilityID!
+
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+}
+
+"""Autogenerated return type of VulnerabilityRevertToDetected"""
+type VulnerabilityRevertToDetectedPayload {
+ """A unique identifier for the client performing the mutation."""
+ clientMutationId: String
+
+ """Errors encountered during execution of the mutation."""
+ errors: [String!]!
+
+ """Vulnerability after revert."""
+ vulnerability: Vulnerability
+}
+
+"""Represents a vulnerability scanner"""
+type VulnerabilityScanner {
+ """External ID of the vulnerability scanner."""
+ externalId: String
+
+ """ID of the scanner."""
+ id: ID
+
+ """Name of the vulnerability scanner."""
+ name: String
+
+ """Type of the vulnerability report."""
+ reportType: VulnerabilityReportType
+
+ """Vendor of the vulnerability scanner."""
+ vendor: String
+}
+
+"""The connection type for VulnerabilityScanner."""
+type VulnerabilityScannerConnection {
+ """A list of edges."""
+ edges: [VulnerabilityScannerEdge]
+
+ """A list of nodes."""
+ nodes: [VulnerabilityScanner]
+
+ """Information to aid in pagination."""
+ pageInfo: PageInfo!
+}
+
+"""An edge in a connection."""
+type VulnerabilityScannerEdge {
+ """A cursor for use in pagination."""
+ cursor: String!
+
+ """The item at the end of the edge."""
+ node: VulnerabilityScanner
+}
+
+input VulnerabilityScannerInput {
+ """Unique ID that identifies the scanner."""
+ id: String!
+
+ """
+ Human readable value that identifies the analyzer, not required to be unique.
+ """
+ name: String!
+
+ """Link to more information about the analyzer."""
+ url: String!
+
+ """Information about vendor/maintainer of the scanner."""
+ vendor: VulnerabilityScannerVendorInput
+
+ """Version of the scanner."""
+ version: String!
+}
+
+input VulnerabilityScannerVendorInput {
+ """Name of the vendor/maintainer."""
+ name: String!
+}
+
+"""Represents vulnerability counts by severity"""
+type VulnerabilitySeveritiesCount {
+ """Number of vulnerabilities of CRITICAL severity of the project"""
+ critical: Int
+
+ """Number of vulnerabilities of HIGH severity of the project"""
+ high: Int
+
+ """Number of vulnerabilities of INFO severity of the project"""
+ info: Int
+
+ """Number of vulnerabilities of LOW severity of the project"""
+ low: Int
+
+ """Number of vulnerabilities of MEDIUM severity of the project"""
+ medium: Int
+
+ """Number of vulnerabilities of UNKNOWN severity of the project"""
+ unknown: Int
+}
+
+"""The severity of the vulnerability"""
+enum VulnerabilitySeverity {
+ """Info severity"""
+ INFO
+
+ """Unknown severity"""
+ UNKNOWN
+
+ """Low severity"""
+ LOW
+
+ """Medium severity"""
+ MEDIUM
+
+ """High severity"""
+ HIGH
+
+ """Critical severity"""
+ CRITICAL
+}
+
+"""Vulnerability sort values"""
+enum VulnerabilitySort {
+ """Severity in descending order."""
+ severity_desc
+
+ """Severity in ascending order."""
+ severity_asc
+
+ """Title in descending order."""
+ title_desc @deprecated(reason: "Deprecated due to performance issues. Deprecated in 14.2.")
+
+ """Title in ascending order."""
+ title_asc @deprecated(reason: "Deprecated due to performance issues. Deprecated in 14.2.")
+
+ """Detection timestamp in descending order."""
+ detected_desc
+
+ """Detection timestamp in ascending order."""
+ detected_asc
+
+ """Report Type in descending order."""
+ report_type_desc
+
+ """Report Type in ascending order."""
+ report_type_asc
+
+ """State in descending order."""
+ state_desc
+
+ """State in ascending order."""
+ state_asc
+}
+
+"""The state of the vulnerability"""
+enum VulnerabilityState {
+ """Detected vulnerability"""
+ DETECTED
+
+ """Confirmed vulnerability"""
+ CONFIRMED
+
+ """Resolved vulnerability"""
+ RESOLVED
+
+ """Dismissed vulnerability"""
+ DISMISSED
+}
+
+"""
+Represents a vulnerable dependency. Used in vulnerability location data
+"""
+type VulnerableDependency {
+ """Package associated with the vulnerable dependency."""
+ package: VulnerablePackage
+
+ """Version of the vulnerable dependency."""
+ version: String
+}
+
+"""Represents a vulnerable package. Used in vulnerability dependency data"""
+type VulnerablePackage {
+ """Name of the vulnerable package."""
+ name: String
+}
+
+"""Represents vulnerability letter grades with associated projects"""
+type VulnerableProjectsByGrade {
+ """Number of projects within this grade."""
+ count: Int!
+
+ """Grade based on the highest severity vulnerability present."""
+ grade: VulnerabilityGrade!
+
+ """Projects within this grade."""
+ 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
+ ): ProjectConnection!
+}
+
+"""Weight ID wildcard values"""
+enum WeightWildcardId {
+ """No weight is assigned."""
+ NONE
+
+ """Weight is assigned."""
+ ANY
+}
+
diff --git a/graphql/update_schema.sh b/graphql/update_schema.sh
new file mode 100755
index 0000000..434f207
--- /dev/null
+++ b/graphql/update_schema.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+get-graphql-schema https://gitlab.com/api/graphql > ./graphql/schema.graphql
diff --git a/src/config/args.rs b/src/config/args.rs
new file mode 100644
index 0000000..1b0683d
--- /dev/null
+++ b/src/config/args.rs
@@ -0,0 +1,23 @@
+use structopt::StructOpt;
+
+#[derive(StructOpt, Clone, Debug)]
+/// Sync Gitlab Trees
+pub struct Args {
+ #[structopt(subcommand)]
+ pub command: Commands,
+
+ /// Only operate on this subtree
+ pub scope: Option<String>,
+}
+
+#[derive(PartialEq, Clone, Debug)]
+#[derive(StructOpt)]
+#[structopt(about = "the stupid content tracker")]
+pub enum Commands {
+ /// Download new repositories and delete old ones, also update
+ Sync,
+ /// Pull and Push new commits to and from the cloned repos
+ Update,
+ /// List Directories
+ List,
+}
diff --git a/src/config/mod.rs b/src/config/mod.rs
new file mode 100644
index 0000000..26d80f4
--- /dev/null
+++ b/src/config/mod.rs
@@ -0,0 +1,87 @@
+pub mod args;
+
+use serde::{Deserialize, Serialize};
+
+use std::{collections::BTreeMap, ops::Deref, path::Path};
+
+use figment::{
+ providers::{Format, Toml},
+ value::{Dict, Map},
+ Error, Figment, Metadata, Profile, Provider,
+};
+
+use anyhow::{Context, Result};
+
+/// Configuration for the Bot
+#[derive(Clone, Debug, Deserialize, Serialize)]
+// pub struct Config();
+
+// TODO make forge optional
+pub struct Config {
+ #[serde(flatten)]
+ config: BTreeMap<String, ForgeConfig>
+}
+
+impl Deref for Config {
+ type Target = BTreeMap<String, ForgeConfig>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.config
+ }
+}
+
+impl Config {
+ // Allow the configuration to be extracted from any `Provider`.
+ fn from<T: Provider>(provider: T) -> Result<Config, Error> {
+ Figment::from(provider).extract()
+ }
+
+ // Provide a default provider, a `Figment`.
+ pub fn figment() -> Result<Figment> {
+ use figment::providers::Env;
+
+ let dirs = xdg::BaseDirectories::with_prefix(env!("CARGO_PKG_NAME")).unwrap();
+
+ Ok(Figment::from(Toml::file(
+ dirs.place_config_file("config.toml")
+ .context("failed to create config directory")?,
+ ))
+ .merge(Toml::file(
+ dirs.place_config_file("config.yaml")
+ .context("failed to create config directory")?,
+ ))
+ .merge(Env::prefixed("GTREE_")))
+ }
+}
+
+// Make `Config` a provider itself for composability.
+impl Provider for Config {
+ fn metadata(&self) -> Metadata {
+ Metadata::named("Library Config")
+ }
+
+ fn data(&self) -> Result<Map<Profile, Dict>, Error> {
+ figment::providers::Serialized::defaults(self).data()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+#[serde(tag = "type")]
+pub enum ForgeConfig {
+ #[serde(alias = "gitlab")]
+ Gitlab(crate::forge::gitlab::config::Gitlab),
+}
+
+pub trait ForgeConfigTrait {
+ fn root(&self) -> &str;
+}
+
+impl Deref for ForgeConfig {
+ type Target = dyn ForgeConfigTrait;
+
+ fn deref(&self) -> &Self::Target {
+ match self {
+ ForgeConfig::Gitlab(conf) => conf,
+ }
+ }
+}
diff --git a/src/forge/gitlab/config.rs b/src/forge/gitlab/config.rs
new file mode 100644
index 0000000..37186e8
--- /dev/null
+++ b/src/forge/gitlab/config.rs
@@ -0,0 +1,26 @@
+use serde::{Deserialize, Serialize};
+use std::path::PathBuf;
+
+use crate::config::ForgeConfigTrait;
+
+#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize, Serialize)]
+pub struct Gitlab {
+ // pub url: url::Url,
+ pub host: String,
+ pub token: String,
+ pub directory: PathBuf,
+ #[serde(default = "default_tls")]
+ pub tls: bool,
+ #[serde(default)]
+ pub auto_create_branches: bool,
+}
+
+const fn default_tls() -> bool {
+ true
+}
+
+impl ForgeConfigTrait for Gitlab {
+ fn root(&self) -> &str {
+ self.directory.to_str().unwrap()
+ }
+}
diff --git a/src/forge/gitlab/mod.rs b/src/forge/gitlab/mod.rs
new file mode 100644
index 0000000..a32c367
--- /dev/null
+++ b/src/forge/gitlab/mod.rs
@@ -0,0 +1,73 @@
+use anyhow::{bail, Context, Result};
+use gitlab::AsyncGitlab;
+
+use graphql_client::GraphQLQuery;
+use tracing::{debug, trace};
+
+pub mod config;
+
+#[derive(Clone, Debug)]
+pub struct Gitlab {
+ client: AsyncGitlab,
+}
+
+impl Gitlab {
+ pub async fn new(host: &str, token: &str, tls: bool) -> Result<Gitlab> {
+ let mut gitlab = gitlab::GitlabBuilder::new(host, token);
+
+ if !tls {
+ gitlab.insecure();
+ }
+
+ let gitlab = gitlab.build_async().await?;
+
+ Ok(Gitlab { client: gitlab })
+ }
+
+ pub async fn from_config(forge: &config::Gitlab) -> Result<Gitlab> {
+ Gitlab::new(&forge.host, &forge.token, forge.tls).await
+ }
+}
+
+#[async_trait::async_trait]
+impl super::ForgeTrait for Gitlab {
+ async fn projects(&self, scope: &str) -> Result<Vec<super::Project>> {
+ let query = Projects::build_query(projects::Variables {
+ scope: scope.to_owned(),
+ });
+ debug!("query: {:#?}", query);
+ let res = self.client.graphql::<Projects>(&query).await?;
+
+ let res = res
+ .projects
+ .unwrap()
+ .nodes
+ .unwrap()
+ .into_iter()
+ .filter(|x| x.is_some())
+ .map(|x| x.unwrap().into())
+ .collect();
+
+ Ok(res)
+ }
+}
+
+#[derive(GraphQLQuery)]
+#[graphql(
+ query_path = "graphql/projects_query.graphql",
+ schema_path = "graphql/schema.graphql",
+ response_derives = "Clone, Debug"
+)]
+pub struct Projects;
+
+impl Into<super::Project> for projects::ProjectsProjectsNodes {
+ fn into(self) -> super::Project {
+ super::Project {
+ id: self.id,
+ name: self.name,
+ path: self.full_path,
+ ssh_clone_url: self.ssh_url_to_repo,
+ http_clone_url: self.http_url_to_repo,
+ }
+ }
+}
diff --git a/src/forge/mod.rs b/src/forge/mod.rs
new file mode 100644
index 0000000..3e94812
--- /dev/null
+++ b/src/forge/mod.rs
@@ -0,0 +1,48 @@
+use std::ops::Deref;
+
+use anyhow::{Result, bail};
+use serde::{Deserialize, Serialize};
+
+use crate::config::ForgeConfig;
+
+pub mod gitlab;
+
+#[derive(Clone, Debug)]
+pub enum Forge {
+ Gitlab(self::gitlab::Gitlab),
+}
+
+impl Forge {
+ pub async fn new(config: &ForgeConfig) -> Result<Forge> {
+ match config {
+ ForgeConfig::Gitlab(config) => {
+ Ok(Forge::Gitlab(gitlab::Gitlab::from_config(config).await?))
+ }
+ _ => bail!("wrong forge type found"),
+ }
+ }
+}
+
+#[async_trait::async_trait]
+pub trait ForgeTrait {
+ async fn projects(&self, scope: &str) -> Result<Vec<Project>>;
+}
+
+impl Deref for Forge {
+ type Target = dyn ForgeTrait;
+
+ fn deref(&self) -> &Self::Target {
+ match self {
+ Forge::Gitlab(forge) => forge,
+ }
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Project {
+ pub id: String,
+ pub name: String,
+ pub path: String,
+ pub ssh_clone_url: Option<String>,
+ pub http_clone_url: Option<String>,
+}
diff --git a/src/git/mod.rs b/src/git/mod.rs
new file mode 100644
index 0000000..60d0b46
--- /dev/null
+++ b/src/git/mod.rs
@@ -0,0 +1,27 @@
+pub fn git_credentials_callback(
+ _user: &str,
+ user_from_url: Option<&str>,
+ _cred: git2::CredentialType,
+) -> Result<git2::Cred, git2::Error> {
+ if let Some(user) = user_from_url {
+ git2::Cred::ssh_key_from_agent(user)
+ } else {
+ Err(git2::Error::from_str("no url username found"))
+ }
+}
+
+pub fn callbacks<'g>() -> git2::RemoteCallbacks<'g> {
+ let mut callbacks = git2::RemoteCallbacks::new();
+ callbacks.credentials(git_credentials_callback);
+
+ callbacks
+}
+
+#[tracing::instrument(level = "trace")]
+pub fn fetch_options<'g>() -> git2::FetchOptions<'g> {
+ let mut opts = git2::FetchOptions::new();
+ opts.remote_callbacks(callbacks());
+ opts.download_tags(git2::AutotagOption::All);
+
+ opts
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..7039db7
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,4 @@
+pub mod config;
+pub mod forge;
+pub mod local;
+pub mod git;
diff --git a/src/list/mod.rs b/src/list/mod.rs
new file mode 100644
index 0000000..e05a318
--- /dev/null
+++ b/src/list/mod.rs
@@ -0,0 +1,12 @@
+use anyhow::{Context, Result};
+use gtree::local::Repos;
+
+impl crate::GTree {
+ pub async fn list(&self, repos: Repos) -> Result<()> {
+ repos.iter().for_each(|repo| {
+ println!("{}", repo)
+ });
+
+ Ok(())
+ }
+}
diff --git a/src/local/;a b/src/local/;a
new file mode 100644
index 0000000..9d6ada5
--- /dev/null
+++ b/src/local/;a
@@ -0,0 +1,211 @@
+use std::{fmt::Debug, path::PathBuf};
+
+use thiserror::Error;
+
+use git2::{AnnotatedCommit, Remote, Repository};
+use tracing::{debug, trace};
+
+use crate::forge::Project;
+
+mod aggregate;
+mod repostate;
+
+pub use aggregate::*;
+pub use repostate::*;
+
+pub type Repos = Vec<Repo>;
+
+pub struct Repo {
+ pub name: String,
+ pub repo: Option<Repository>,
+ pub forge: Option<Project>,
+}
+
+impl Repo {
+ /// Fetch any new state from the remote,
+ /// we get the default branch in the same run.
+ ///
+ /// Then check if the repo is to be considered clean,
+ /// no stale uncommitted changes, no in progress merges etc
+ #[tracing::instrument(level = "trace")]
+ pub fn update(&self) -> Result<(), RepoError> {
+ let mut remote = self.main_remote()?;
+
+ let fetch_head = self.fetch(&mut remote)?;
+
+ let default_branch = remote.default_branch()?.as_str().unwrap().to_string();
+ debug!("default branch: {}", default_branch);
+
+ if self.is_clean()? {
+ debug!("repo is clean");
+
+ self.merge(&default_branch, &fetch_head)?;
+ };
+
+ Ok(())
+ }
+
+ pub fn is_clean(&self) -> Result<bool, RepoError> {
+ if let Some(repo) = &self.repo {
+ debug!("repo state: {:?}", repo.state());
+ let statuses: Vec<git2::Status> = repo
+ .statuses(None)?
+ .iter()
+ .filter_map(|status| {
+ if status.status().is_ignored() {
+ None
+ } else {
+ Some(status.status())
+ }
+ })
+ .collect();
+
+ debug!("got repo statuses: {:?}", statuses);
+
+ if repo.state() == git2::RepositoryState::Clean && statuses.is_empty() {
+ Ok(true)
+ } else {
+ Ok(false)
+ }
+ } else {
+ Err(RepoError::NoLocalRepo)
+ }
+ }
+
+ pub fn main_remote(&self) -> Result<git2::Remote, RepoError> {
+ if let Some(repo) = &self.repo {
+ let remotes = repo.remotes()?;
+
+ let remote = if let Some(_) = remotes.iter().find(|x| *x == Some("origin")) {
+ "origin"
+ } else {
+ if let Some(remote) = remotes.get(0) {
+ remote
+ } else {
+ return Err(RepoError::NoRemoteFound);
+ }
+ };
+
+ return Ok(repo.find_remote(remote)?);
+ } else {
+ return Err(RepoError::NoLocalRepo);
+ }
+ }
+
+ #[tracing::instrument(level = "trace", skip(remote))]
+ pub fn fetch(&self, remote: &mut Remote) -> Result<AnnotatedCommit, RepoError> {
+ // Pass an empty array as the refspec to fetch to fetch the "default" refspecs
+ // Type annotation is needed because type can't be guessed from the empty array
+ remote.fetch::<&str>(
+ &[],
+ Some(&mut crate::git::fetch_options()),
+ Some("gtree fetch"),
+ )?;
+
+ let repo = self.repo.as_ref().unwrap();
+
+ let fetch_head = repo.find_reference("FETCH_HEAD")?;
+
+ Ok(repo.reference_to_annotated_commit(&fetch_head)?)
+ // Ok(remote.default_branch()?.as_str().unwrap().to_string())
+ }
+
+ pub fn checkout(&self) -> Result<(), RepoError> {
+ if let Some(repo) = &self.repo {
+ repo.checkout_head(None).map_err(|e| e.into())
+ } else {
+ Err(RepoError::NoLocalRepo)
+ }
+ }
+
+ pub fn merge(&self, refname: &str, fetch_commit: &AnnotatedCommit) -> Result<(), RepoError> {
+ let repo = self.repo.as_ref().unwrap();
+
+ let analysis = repo.merge_analysis(&[fetch_commit])?;
+
+ if analysis.0.is_fast_forward() {
+ trace!("Doing a fast forward");
+ match repo.find_reference(&refname) {
+ Ok(mut r) => {
+ let name = match r.name() {
+ Some(s) => s.to_string(),
+ None => String::from_utf8_lossy(r.name_bytes()).to_string(),
+ };
+ let msg = format!("gtree: update repo branch: {} to {}", name, fetch_commit.id());
+ debug!("{}", msg);
+
+ r.set_target(fetch_commit.id(), &msg)?;
+ repo.set_head(&name)?;
+ repo.checkout_head(Some(git2::build::CheckoutBuilder::default().force()))?;
+ }
+ Err(_) => (),
+ };
+ }
+
+ Ok(())
+ }
+}
+
+#[derive(Error, Debug)]
+pub enum RepoError {
+ #[error("repo is not cloned locally")]
+ NoLocalRepo,
+ #[error("local git repo does not have a remote")]
+ NoRemoteFound,
+ #[error("error during git operation {0}")]
+ GitError(#[from] git2::Error),
+ #[error("unknown repo error")]
+ Unknown,
+}
+
+impl Ord for Repo {
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+ self.name.cmp(&other.name)
+ }
+}
+
+impl Eq for Repo {}
+
+impl PartialOrd for Repo {
+ fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
+ self.name.partial_cmp(&other.name)
+ }
+}
+
+impl PartialEq for Repo {
+ fn eq(&self, other: &Self) -> bool {
+ self.name == other.name
+ }
+}
+
+impl From<Project> for Repo {
+ fn from(project: Project) -> Self {
+ Self {
+ name: project.path.clone(),
+ repo: None,
+ forge: Some(project),
+ }
+ }
+}
+
+impl From<&Project> for Repo {
+ fn from(project: &Project) -> Self {
+ Self {
+ name: project.path.clone(),
+ repo: None,
+ forge: Some(project.to_owned()),
+ }
+ }
+}
+
+impl std::fmt::Display for Repo {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.write_fmt(format_args!("{} {}", RepoState::from(self), self.name))
+ }
+}
+
+impl Debug for Repo {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Repo").field("path", &self.name).finish()
+ }
+}
diff --git a/src/local/aggregate.rs b/src/local/aggregate.rs
new file mode 100644
index 0000000..e52a18a
--- /dev/null
+++ b/src/local/aggregate.rs
@@ -0,0 +1,91 @@
+use git2::Repository;
+
+use tracing::{debug, error};
+use walkdir::WalkDir;
+
+use crate::forge::Project;
+
+use super::{Repo, Repos};
+
+#[async_trait::async_trait]
+pub trait Aggregator {
+ async fn from_local(root: &str, scope: &str) -> Repos;
+ async fn from_forge(projects: Vec<Project>) -> Repos;
+ async fn aggregate(mut local: Repos, mut remote: Repos) -> Repos;
+}
+
+#[async_trait::async_trait]
+impl Aggregator for Repos {
+ async fn from_local(root: &str, scope: &str) -> Repos {
+ let mut repos = Vec::new();
+
+ let path: std::path::PathBuf = [root, scope].iter().collect();
+ let mut walker = WalkDir::new(path).into_iter();
+
+ loop {
+ let entry = match walker.next() {
+ None => break,
+ Some(Err(err)) => panic!("ERROR: {}", err),
+ Some(Ok(entry)) => entry,
+ };
+
+ if entry.file_type().is_dir() {
+ let mut dir = std::fs::read_dir(entry.path()).unwrap();
+
+ if let Some(_) = dir.find(|dir| {
+ if let Ok(dir) = dir {
+ dir.file_name() == ".git"
+ } else {
+ false
+ }
+ }) {
+ walker.skip_current_dir();
+
+ match Repository::open(entry.path()) {
+ Ok(repo) => repos.push(Repo {
+ name: entry
+ .path()
+ .strip_prefix(root)
+ .unwrap()
+ .to_str()
+ .unwrap()
+ .to_string(),
+ // path: entry.path().to_path_buf(),
+ repo: Some(repo),
+ ..Repo::default()
+ }),
+ Err(err) => error!("could not open repository: {}", err),
+ }
+ } else {
+ continue;
+ }
+ }
+ }
+
+ return repos;
+ }
+
+ async fn from_forge(projects: Vec<Project>) -> Repos {
+ projects.iter().map(|project| project.into()).collect()
+ }
+
+ #[tracing::instrument(level = "debug", skip(local, remote))]
+ async fn aggregate(mut local: Repos, mut remote: Repos) -> Repos {
+ local = local
+ .into_iter()
+ .map(|mut left| {
+ if let Some(i) = remote.iter().position(|right| *right == left) {
+ let right = remote.remove(i);
+ left.forge = right.forge;
+ }
+
+ left
+ })
+ .collect();
+
+ local.append(&mut remote);
+ local.sort();
+
+ return local;
+ }
+}
diff --git a/src/local/mod.rs b/src/local/mod.rs
new file mode 100644
index 0000000..e2f4a9d
--- /dev/null
+++ b/src/local/mod.rs
@@ -0,0 +1,272 @@
+use std::{fmt::Debug, path::PathBuf};
+
+use thiserror::Error;
+
+use git2::{AnnotatedCommit, Branch, BranchType, Remote, Repository};
+use tracing::{debug, trace};
+
+use crate::forge::Project;
+
+mod aggregate;
+mod repostate;
+mod update;
+
+pub use aggregate::*;
+pub use repostate::*;
+pub use update::*;
+
+pub type Repos = Vec<Repo>;
+
+pub struct Repo {
+ pub name: String,
+ pub repo: Option<Repository>,
+ pub forge: Option<Project>,
+ pub default_branch: String,
+}
+
+impl Repo {
+ /// Fetch any new state from the remote and fast forward merge changes into local branches
+ #[tracing::instrument(level = "trace")]
+ pub fn update(&mut self) -> Result<UpdateResult, UpdateResult> {
+ let repo_name = self.name.clone();
+ if self.repo.is_some() {
+ self.update_inner()
+ .map_err(|e| UpdateResult::err(repo_name, e.into()))
+ } else {
+ Ok(UpdateResult::err(repo_name, RepoError::NoLocalRepo))
+ }
+ }
+
+ fn update_inner(&mut self) -> Result<UpdateResult, RepoError> {
+ let repo = self.repo.as_ref().unwrap();
+ let mut remote = self.main_remote(repo)?;
+
+ self.fetch(&mut remote)?;
+
+ self.default_branch = remote.default_branch()?.as_str().unwrap().to_string();
+
+ debug!("default branch: {}", self.default_branch);
+
+ if self.is_clean()? {
+ debug!("repo is clean");
+
+ let merged = repo.branches(Some(BranchType::Local))?
+ .filter_map(|x| x.ok())
+ .try_fold(false, |mut merged, (mut branch, _)| {
+ let name = format!("refs/heads/{}", Repo::branch_name(&branch));
+
+ if branch.upstream().is_ok() {
+ let upstream = branch.upstream().unwrap();
+
+ debug!("branch: {}", name);
+
+ merged |= self.merge(repo, &mut branch, &upstream)?;
+ Ok::<bool, RepoError>(merged)
+ } else {
+ debug!("not updating branch: {}: branch does not have upstream tracking branch set", name);
+ Ok(merged)
+ }
+ })?;
+
+ if merged {
+ Ok(UpdateResult::merged(self.name.clone()))
+ } else {
+ Ok(UpdateResult::no_changes(self.name.clone()))
+ }
+ } else {
+ Ok(UpdateResult::dirty(self.name.clone()))
+ }
+ }
+
+ pub fn is_clean(&self) -> Result<bool, RepoError> {
+ if let Some(repo) = &self.repo {
+ debug!("repo state: {:?}", repo.state());
+ let statuses: Vec<git2::Status> = repo
+ .statuses(None)?
+ .iter()
+ .filter_map(|status| {
+ if status.status().is_ignored() {
+ None
+ } else {
+ Some(status.status())
+ }
+ })
+ .collect();
+
+ debug!("got repo statuses: {:?}", statuses);
+
+ if repo.state() == git2::RepositoryState::Clean && statuses.is_empty() {
+ Ok(true)
+ } else {
+ Ok(false)
+ }
+ } else {
+ Err(RepoError::NoLocalRepo)
+ }
+ }
+
+ pub fn main_remote<'a>(&self, repo: &'a Repository) -> Result<git2::Remote<'a>, RepoError> {
+ let remotes = repo.remotes()?;
+
+ let remote = if let Some(_) = remotes.iter().find(|x| *x == Some("origin")) {
+ "origin"
+ } else {
+ if let Some(remote) = remotes.get(0) {
+ remote
+ } else {
+ return Err(RepoError::NoRemoteFound);
+ }
+ };
+
+ return Ok(repo.find_remote(remote)?);
+ }
+
+ #[tracing::instrument(level = "trace", skip(remote))]
+ pub fn fetch<'a>(&self, remote: &mut Remote) -> Result<(), RepoError> {
+ // Pass an empty array as the refspec to fetch to fetch the "default" refspecs
+ // Type annotation is needed because type can't be guessed from the empty array
+ remote.fetch::<&str>(
+ &[],
+ Some(&mut crate::git::fetch_options()),
+ Some("gtree fetch"),
+ )?;
+
+ Ok(())
+ }
+
+ pub fn checkout(&self) -> Result<(), RepoError> {
+ if let Some(repo) = &self.repo {
+ repo.checkout_head(None).map_err(|e| e.into())
+ } else {
+ Err(RepoError::NoLocalRepo)
+ }
+ }
+
+ pub fn branch_name(branch: &Branch) -> String {
+ match branch.name().unwrap() {
+ Some(s) => s.to_string(),
+ None => String::from_utf8_lossy(branch.name_bytes().unwrap()).to_string(),
+ }
+ }
+
+ pub fn merge(
+ &self,
+ repo: &Repository,
+ local: &mut Branch,
+ upstream: &Branch,
+ ) -> Result<bool, RepoError> {
+ let local_name = Repo::branch_name(&local);
+ let upstream_name = Repo::branch_name(&upstream);
+
+ let local_ref = local.get_mut();
+ let upstream_ref = upstream.get();
+
+ let analysis = repo.merge_analysis_for_ref(
+ local_ref,
+ &[&repo.reference_to_annotated_commit(upstream_ref)?],
+ )?;
+
+ if analysis.0.is_fast_forward() {
+ trace!("Doing a fast forward");
+
+ let msg = format!(
+ "gtree: update repo branch: {} to {}",
+ local_name, upstream_name
+ );
+ debug!("{}", msg);
+
+ // sets the branch to target the new commit
+ // of the remote branch it's tracking
+ local_ref.set_target(upstream_ref.target().unwrap(), &msg)?;
+ // Apply these changes in the working dir if the branch is currently checked out.
+ if format!("refs/heads/{}", local_name) == self.default_branch {
+ repo.checkout_head(Some(git2::build::CheckoutBuilder::default().force()))?
+ }
+
+ Ok(true)
+ } else if analysis.0.is_up_to_date() {
+ Ok(false)
+ } else {
+ Err(RepoError::NoFF)
+ }
+ }
+}
+
+#[derive(Error, Debug)]
+pub enum RepoError {
+ #[error("repo is not cloned locally")]
+ NoLocalRepo,
+ #[error("local git repo does not have a remote")]
+ NoRemoteFound,
+ #[error("repository is dirty")]
+ Dirty,
+ #[error("fast-forward merge was not possible")]
+ NoFF,
+ #[error("error during git operation {0}")]
+ GitError(#[from] git2::Error),
+ #[error("unknown repo error")]
+ Unknown,
+}
+
+impl Ord for Repo {
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+ self.name.cmp(&other.name)
+ }
+}
+
+impl Eq for Repo {}
+
+impl PartialOrd for Repo {
+ fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
+ self.name.partial_cmp(&other.name)
+ }
+}
+
+impl PartialEq for Repo {
+ fn eq(&self, other: &Self) -> bool {
+ self.name == other.name
+ }
+}
+
+impl From<Project> for Repo {
+ fn from(project: Project) -> Self {
+ Self {
+ name: project.path.clone(),
+ forge: Some(project),
+ ..Repo::default()
+ }
+ }
+}
+
+impl From<&Project> for Repo {
+ fn from(project: &Project) -> Self {
+ Self {
+ name: project.path.clone(),
+ forge: Some(project.to_owned()),
+ ..Repo::default()
+ }
+ }
+}
+
+impl std::fmt::Display for Repo {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.write_fmt(format_args!("{} {}", RepoState::from(self), self.name))
+ }
+}
+
+impl Debug for Repo {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Repo").field("path", &self.name).finish()
+ }
+}
+
+impl Default for Repo {
+ fn default() -> Self {
+ Self {
+ name: Default::default(),
+ repo: Default::default(),
+ forge: Default::default(),
+ default_branch: "main".to_string(),
+ }
+ }
+}
diff --git a/src/local/repostate.rs b/src/local/repostate.rs
new file mode 100644
index 0000000..ea3c5a6
--- /dev/null
+++ b/src/local/repostate.rs
@@ -0,0 +1,36 @@
+use super::Repo;
+
+#[derive(Clone, Debug)]
+pub enum RepoState {
+ Local,
+ Remote,
+ Synced,
+ Unknown,
+}
+
+impl std::fmt::Display for RepoState {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ use ansi_term::Colour::{Blue, Green, Red, Yellow};
+
+ match self {
+ RepoState::Local => f.write_str(&Yellow.paint("LOCAL ").to_string()),
+ RepoState::Remote => f.write_str(&Blue.paint("REMOTE ").to_string()),
+ RepoState::Synced => f.write_str(&Green.paint("SYNCED ").to_string()),
+ RepoState::Unknown => f.write_str(&Red.paint("UNKNOWN").to_string()),
+ }
+ }
+}
+
+impl From<&Repo> for RepoState {
+ fn from(repo: &Repo) -> Self {
+ if repo.repo.is_some() && repo.forge.is_some() {
+ RepoState::Synced
+ } else if repo.repo.is_some() {
+ RepoState::Local
+ } else if repo.forge.is_some() {
+ RepoState::Remote
+ } else {
+ RepoState::Unknown
+ }
+ }
+}
diff --git a/src/local/update.rs b/src/local/update.rs
new file mode 100644
index 0000000..95057a4
--- /dev/null
+++ b/src/local/update.rs
@@ -0,0 +1,57 @@
+use std::fmt::Display;
+
+#[derive(Debug)]
+pub enum UpdateResult {
+ NoChanges {
+ name: String,
+ },
+ Dirty {
+ name: String,
+ },
+ Merged {
+ name: String,
+ },
+ Error {
+ name: String,
+ error: super::RepoError,
+ },
+}
+
+impl UpdateResult {
+ pub fn err(name: String, error: super::RepoError) -> UpdateResult {
+ UpdateResult::Error { name, error }
+ }
+
+ pub fn merged(name: String) -> UpdateResult {
+ UpdateResult::Merged { name }
+ }
+
+ pub fn dirty(name: String) -> UpdateResult {
+ UpdateResult::Dirty { name }
+ }
+
+ pub fn no_changes(name: String) -> UpdateResult {
+ UpdateResult::NoChanges { name }
+ }
+}
+
+impl Display for UpdateResult {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ use ansi_term::Colour::{Blue, Green, Red, Yellow};
+
+ match self {
+ UpdateResult::NoChanges { name } => {
+ f.write_fmt(format_args!("{} {}", Blue.paint("FETCHED"), name))
+ }
+ UpdateResult::Dirty { name } => {
+ f.write_fmt(format_args!("{} {}", Yellow.paint("DIRTY "), name))
+ }
+ UpdateResult::Merged { name } => {
+ f.write_fmt(format_args!("{} {}", Green.paint("PULLED "), name))
+ }
+ UpdateResult::Error { name, error } => {
+ f.write_fmt(format_args!("{} {} [{}]", Red.paint("ERROR "), name, error))
+ }
+ }
+ }
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..748f50d
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,98 @@
+use anyhow::{Context, Result};
+use structopt::StructOpt;
+use derivative::Derivative;
+
+use tracing::{debug, info, metadata::LevelFilter, trace, Level};
+use tracing_subscriber::{fmt::format::FmtSpan, prelude::*, EnvFilter};
+
+use gtree::{
+ config,
+ local::{Aggregator, Repos},
+};
+
+mod list;
+mod update;
+
+#[derive(Derivative)]
+#[derivative(Debug)]
+struct GTree {
+ figment: figment::Figment,
+ config: config::Config,
+ args: config::args::Args,
+ forge: gtree::forge::Forge,
+ #[derivative(Debug="ignore")]
+ gitconfig: git2::Config,
+}
+
+impl GTree {
+ pub async fn new() -> Result<GTree> {
+ let args = config::args::Args::from_args();
+
+ let figment = config::Config::figment()?;
+ let config: config::Config = figment.extract()?;
+
+ let (_name, forge_config) = config
+ .iter()
+ .next()
+ .context("No Forge configured, please setup a forge")?;
+
+ let forge = gtree::forge::Forge::new(forge_config).await?;
+
+ let gitconfig = git2::Config::open_default()?;
+
+ Ok(GTree {
+ figment,
+ config,
+ args,
+ forge,
+ gitconfig,
+ })
+ }
+
+ pub async fn run(self) -> Result<()> {
+ let scope = self.args.scope.as_ref().map_or("", |x| x);
+
+ let (_name, forge) = self
+ .config
+ .iter()
+ .next()
+ .context("No Forge configured, please setup a forge")?;
+
+ let (local, remote) = tokio::join!(
+ Repos::from_local(forge.root(), scope),
+ Repos::from_forge(self.forge.projects(scope).await?)
+ );
+
+ let repos = Repos::aggregate(local, remote).await;
+
+ match self.args.command {
+ config::args::Commands::Sync => todo!(),
+ config::args::Commands::Update => self.update(repos).await,
+ config::args::Commands::List => self.list(repos).await?,
+ };
+
+ Ok(())
+ }
+}
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ let filter = tracing_subscriber::filter::Targets::new()
+ .with_default(Level::TRACE)
+ .with_target("hyper", LevelFilter::OFF)
+ .with_target("reqwest", LevelFilter::OFF);
+
+ let env_filter = EnvFilter::from_default_env();
+
+ tracing_subscriber::registry()
+ .with(tracing_subscriber::fmt::layer().with_span_events(FmtSpan::ACTIVE))
+ .with(filter)
+ .with(env_filter)
+ .init();
+
+ debug!("starting");
+
+ let gtree = GTree::new().await?;
+
+ gtree.run().await
+}
diff --git a/src/update/mod.rs b/src/update/mod.rs
new file mode 100644
index 0000000..0991b1a
--- /dev/null
+++ b/src/update/mod.rs
@@ -0,0 +1,14 @@
+use gtree::local::Repos;
+
+impl crate::GTree {
+ pub async fn update(&self, repos: Repos) {
+ for mut repo in repos {
+ if let Some(_) = repo.repo {
+ match repo.update() {
+ Ok(u) => println!("{}", u),
+ Err(u) => println!("{}", u),
+ };
+ }
+ }
+ }
+}
diff --git a/tests/directory_walker.rs b/tests/directory_walker.rs
new file mode 100644
index 0000000..9fa8d56
--- /dev/null
+++ b/tests/directory_walker.rs
@@ -0,0 +1,55 @@
+use gtree::local::*;
+
+use anyhow::Result;
+use git2::Repository;
+
+const TEST_DIR: &str = env!("CARGO_TARGET_TMPDIR");
+
+const REPOS: [&str; 5] = [
+ "repos/site/group/repo1",
+ "repos/site/group/repo2/subrepo1",
+ "repos/site/group/repo2",
+ "repos/site/group/subgroup/repo3",
+ "repos/site/group/subgroup/subsubgroup/repo4",
+];
+
+fn prepare_repos() -> Result<()> {
+ REPOS.iter().try_for_each(|repo| {
+ let path = format!("{}/{}", TEST_DIR, repo);
+ std::fs::create_dir_all(&path)?;
+ let _repo = Repository::init(&path)?;
+
+ Ok::<(), anyhow::Error>(())
+ })
+}
+
+fn clean_repos() -> Result<()> {
+ REPOS.iter().try_for_each(|repo| {
+ let path = format!("{}/{}", TEST_DIR, repo);
+ std::fs::remove_dir_all(&path)?;
+
+ Ok::<(), anyhow::Error>(())
+ })
+}
+
+#[tokio::test]
+async fn search_repos() -> Result<()> {
+ tracing_subscriber::fmt::init();
+
+ prepare_repos()?;
+
+ let mut left: Vec<String> = vec![
+ format!("{}/repos/site/group/repo1", TEST_DIR),
+ format!("{}/repos/site/group/repo2", TEST_DIR),
+ format!("{}/repos/site/group/subgroup/repo3", TEST_DIR),
+ format!("{}/repos/site/group/subgroup/subsubgroup/repo4", TEST_DIR),
+ ];
+ let right = Repos::from_local(&format!("{}/repos", TEST_DIR), "").await;
+
+ let mut right: Vec<&str> = right.iter().map(|x| x.name.as_str()).collect();
+
+ assert_eq!(left.sort(), right.sort());
+
+ clean_repos()?;
+ Ok(())
+}