From f869c7f52d8fd1f1ef61e218bbec4d0dac27673d Mon Sep 17 00:00:00 2001 From: Max Audron Date: Tue, 7 Jun 2022 12:28:18 +0200 Subject: init --- .gitignore | 1 + Cargo.lock | 2050 +++ Cargo.toml | 38 + graphql/projects_query.graphql | 11 + graphql/projects_schema.graphql | 9 + graphql/schema.graphql | 28642 ++++++++++++++++++++++++++++++++++++++ graphql/update_schema.sh | 5 + src/config/args.rs | 23 + src/config/mod.rs | 87 + src/forge/gitlab/config.rs | 26 + src/forge/gitlab/mod.rs | 73 + src/forge/mod.rs | 48 + src/git/mod.rs | 27 + src/lib.rs | 4 + src/list/mod.rs | 12 + src/local/;a | 211 + src/local/aggregate.rs | 91 + src/local/mod.rs | 272 + src/local/repostate.rs | 36 + src/local/update.rs | 57 + src/main.rs | 98 + src/update/mod.rs | 14 + tests/directory_walker.rs | 55 + 23 files changed, 31890 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 graphql/projects_query.graphql create mode 100644 graphql/projects_schema.graphql create mode 100644 graphql/schema.graphql create mode 100755 graphql/update_schema.sh create mode 100644 src/config/args.rs create mode 100644 src/config/mod.rs create mode 100644 src/forge/gitlab/config.rs create mode 100644 src/forge/gitlab/mod.rs create mode 100644 src/forge/mod.rs create mode 100644 src/git/mod.rs create mode 100644 src/lib.rs create mode 100644 src/list/mod.rs create mode 100644 src/local/;a create mode 100644 src/local/aggregate.rs create mode 100644 src/local/mod.rs create mode 100644 src/local/repostate.rs create mode 100644 src/local/update.rs create mode 100644 src/main.rs create mode 100644 src/update/mod.rs create mode 100644 tests/directory_walker.rs 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, +} + +#[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 +} + +impl Deref for Config { + type Target = BTreeMap; + + fn deref(&self) -> &Self::Target { + &self.config + } +} + +impl Config { + // Allow the configuration to be extracted from any `Provider`. + fn from(provider: T) -> Result { + Figment::from(provider).extract() + } + + // Provide a default provider, a `Figment`. + pub fn figment() -> Result { + 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, 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 { + 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::new(&forge.host, &forge.token, forge.tls).await + } +} + +#[async_trait::async_trait] +impl super::ForgeTrait for Gitlab { + async fn projects(&self, scope: &str) -> Result> { + let query = Projects::build_query(projects::Variables { + scope: scope.to_owned(), + }); + debug!("query: {:#?}", query); + let res = self.client.graphql::(&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 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 { + 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>; +} + +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, + pub http_clone_url: Option, +} 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 { + 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; + +pub struct Repo { + pub name: String, + pub repo: Option, + pub forge: Option, +} + +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 { + if let Some(repo) = &self.repo { + debug!("repo state: {:?}", repo.state()); + let statuses: Vec = 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 { + 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 { + // 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 { + self.name.partial_cmp(&other.name) + } +} + +impl PartialEq for Repo { + fn eq(&self, other: &Self) -> bool { + self.name == other.name + } +} + +impl From 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) -> 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) -> 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; + +pub struct Repo { + pub name: String, + pub repo: Option, + pub forge: Option, + 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 { + 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 { + 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::(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 { + if let Some(repo) = &self.repo { + debug!("repo state: {:?}", repo.state()); + let statuses: Vec = 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, 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 { + 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 { + self.name.partial_cmp(&other.name) + } +} + +impl PartialEq for Repo { + fn eq(&self, other: &Self) -> bool { + self.name == other.name + } +} + +impl From 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 { + 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 = 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(()) +} -- cgit v1.2.3