mirror of
https://github.com/moghtech/komodo.git
synced 2026-09-09 00:01:02 +00:00
remove github only managed repo webhooks feature. Not well implemented or documented, also provider specific.
This commit is contained in:
Generated
+57
-354
@@ -61,7 +61,7 @@ dependencies = [
|
||||
"cfg-if",
|
||||
"getrandom 0.3.3",
|
||||
"once_cell",
|
||||
"version_check 0.9.5",
|
||||
"version_check",
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
@@ -158,17 +158,6 @@ dependencies = [
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-recursion"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.89"
|
||||
@@ -207,9 +196,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "aws-config"
|
||||
version = "1.8.7"
|
||||
version = "1.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04b37ddf8d2e9744a0b9c19ce0b78efe4795339a90b66b7bae77987092cd2e69"
|
||||
checksum = "37cf2b6af2a95a20e266782b4f76f1a5e12bf412a9db2de9c1e9123b9d8c0ad8"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -237,9 +226,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-credential-types"
|
||||
version = "1.2.7"
|
||||
version = "1.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "799a1290207254984cb7c05245111bc77958b92a3c9bb449598044b36341cce6"
|
||||
checksum = "faf26925f4a5b59eb76722b63c2892b1d70d06fa053c72e4a100ec308c1d47bc"
|
||||
dependencies = [
|
||||
"aws-smithy-async",
|
||||
"aws-smithy-runtime-api",
|
||||
@@ -273,9 +262,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-runtime"
|
||||
version = "1.5.11"
|
||||
version = "1.5.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e1ed337dabcf765ad5f2fb426f13af22d576328aaf09eac8f70953530798ec0"
|
||||
checksum = "bfa006bb32360ed90ac51203feafb9d02e3d21046e1fd3a450a404b90ea73e5d"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-sigv4",
|
||||
@@ -297,9 +286,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sdk-ec2"
|
||||
version = "1.171.0"
|
||||
version = "1.172.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0cc9763956b4fa7baba55414db830349eaaf0a94ab809f14a14ba466ecb7045c"
|
||||
checksum = "e64e82faa945cee1d97c8c0239988a4d924d9b29d1b604ad97ded7c8683fbbce"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -320,9 +309,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sdk-sso"
|
||||
version = "1.85.0"
|
||||
version = "1.86.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f2c741e2e439f07b5d1b33155e246742353d82167c785a2ff547275b7e32483"
|
||||
checksum = "4a0abbfab841446cce6e87af853a3ba2cc1bc9afcd3f3550dd556c43d434c86d"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -342,9 +331,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sdk-ssooidc"
|
||||
version = "1.87.0"
|
||||
version = "1.88.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6428ae5686b18c0ee99f6f3c39d94ae3f8b42894cdc35c35d8fb2470e9db2d4c"
|
||||
checksum = "9a68d675582afea0e94d38b6ca9c5aaae4ca14f1d36faa6edb19b42e687e70d7"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -364,9 +353,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sdk-sts"
|
||||
version = "1.87.0"
|
||||
version = "1.88.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5871bec9a79a3e8d928c7788d654f135dde0e71d2dd98089388bab36b37ef607"
|
||||
checksum = "d30990923f4f675523c51eb1c0dec9b752fb267b36a61e83cbc219c9d86da715"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -387,9 +376,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sigv4"
|
||||
version = "1.3.4"
|
||||
version = "1.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "084c34162187d39e3740cb635acd73c4e3a551a36146ad6fe8883c929c9f876c"
|
||||
checksum = "bffc03068fbb9c8dd5ce1c6fb240678a5cffb86fb2b7b1985c999c4b83c8df68"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-smithy-http",
|
||||
@@ -409,9 +398,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-async"
|
||||
version = "1.2.5"
|
||||
version = "1.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c"
|
||||
checksum = "127fcfad33b7dfc531141fda7e1c402ac65f88aca5511a4d31e2e3d2cd01ce9c"
|
||||
dependencies = [
|
||||
"futures-util",
|
||||
"pin-project-lite",
|
||||
@@ -420,9 +409,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-http"
|
||||
version = "0.62.3"
|
||||
version = "0.62.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c4dacf2d38996cf729f55e7a762b30918229917eca115de45dfa8dfb97796c9"
|
||||
checksum = "3feafd437c763db26aa04e0cc7591185d0961e64c61885bece0fb9d50ceac671"
|
||||
dependencies = [
|
||||
"aws-smithy-runtime-api",
|
||||
"aws-smithy-types",
|
||||
@@ -440,9 +429,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-http-client"
|
||||
version = "1.1.2"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "734b4282fbb7372923ac339cc2222530f8180d9d4745e582de19a18cee409fd8"
|
||||
checksum = "1053b5e587e6fa40ce5a79ea27957b04ba660baa02b28b7436f64850152234f1"
|
||||
dependencies = [
|
||||
"aws-smithy-async",
|
||||
"aws-smithy-runtime-api",
|
||||
@@ -470,27 +459,27 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-json"
|
||||
version = "0.61.5"
|
||||
version = "0.61.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eaa31b350998e703e9826b2104dd6f63be0508666e1aba88137af060e8944047"
|
||||
checksum = "cff418fc8ec5cadf8173b10125f05c2e7e1d46771406187b2c878557d4503390"
|
||||
dependencies = [
|
||||
"aws-smithy-types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-observability"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9364d5989ac4dd918e5cc4c4bdcc61c9be17dcd2586ea7f69e348fc7c6cab393"
|
||||
checksum = "2d1881b1ea6d313f9890710d65c158bdab6fb08c91ea825f74c1c8c357baf4cc"
|
||||
dependencies = [
|
||||
"aws-smithy-runtime-api",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-query"
|
||||
version = "0.60.7"
|
||||
version = "0.60.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb"
|
||||
checksum = "d28a63441360c477465f80c7abac3b9c4d075ca638f982e605b7dc2a2c7156c9"
|
||||
dependencies = [
|
||||
"aws-smithy-types",
|
||||
"urlencoding",
|
||||
@@ -498,9 +487,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-runtime"
|
||||
version = "1.9.2"
|
||||
version = "1.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fa63ad37685ceb7762fa4d73d06f1d5493feb88e3f27259b9ed277f4c01b185"
|
||||
checksum = "40ab99739082da5347660c556689256438defae3bcefd66c52b095905730e404"
|
||||
dependencies = [
|
||||
"aws-smithy-async",
|
||||
"aws-smithy-http",
|
||||
@@ -522,9 +511,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-runtime-api"
|
||||
version = "1.9.0"
|
||||
version = "1.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07f5e0fc8a6b3f2303f331b94504bbf754d85488f402d6f1dd7a6080f99afe56"
|
||||
checksum = "3683c5b152d2ad753607179ed71988e8cfd52964443b4f74fd8e552d0bbfeb46"
|
||||
dependencies = [
|
||||
"aws-smithy-async",
|
||||
"aws-smithy-types",
|
||||
@@ -539,9 +528,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-types"
|
||||
version = "1.3.2"
|
||||
version = "1.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d498595448e43de7f4296b7b7a18a8a02c61ec9349128c80a368f7c3b4ab11a8"
|
||||
checksum = "9f5b3a7486f6690ba25952cabf1e7d75e34d69eaff5081904a47bc79074d6457"
|
||||
dependencies = [
|
||||
"base64-simd",
|
||||
"bytes",
|
||||
@@ -565,18 +554,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-smithy-xml"
|
||||
version = "0.60.10"
|
||||
version = "0.60.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3db87b96cb1b16c024980f133968d52882ca0daaee3a086c6decc500f6c99728"
|
||||
checksum = "e9c34127e8c624bc2999f3b657e749c1393bedc9cd97b92a804db8ced4d2e163"
|
||||
dependencies = [
|
||||
"xmlparser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aws-types"
|
||||
version = "1.3.8"
|
||||
version = "1.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b069d19bf01e46298eaedd7c6f283fe565a59263e53eebec945f3e6398f42390"
|
||||
checksum = "e2fd329bf0e901ff3f60425691410c69094dc2a1f34b331f37bfc4e9ac1565a1"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-smithy-async",
|
||||
@@ -923,9 +912,6 @@ name = "bytes"
|
||||
version = "1.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bytes-utils"
|
||||
@@ -963,7 +949,7 @@ version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
|
||||
dependencies = [
|
||||
"nom 7.1.3",
|
||||
"nom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1272,7 +1258,7 @@ dependencies = [
|
||||
"bitflags 2.9.4",
|
||||
"crossterm_winapi",
|
||||
"document-features",
|
||||
"parking_lot 0.12.5",
|
||||
"parking_lot",
|
||||
"rustix",
|
||||
"winapi",
|
||||
]
|
||||
@@ -1431,7 +1417,7 @@ dependencies = [
|
||||
"hashbrown 0.14.5",
|
||||
"lock_api",
|
||||
"once_cell",
|
||||
"parking_lot_core 0.9.12",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1991,7 +1977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check 0.9.5",
|
||||
"version_check",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
@@ -2206,7 +2192,7 @@ dependencies = [
|
||||
"ipconfig",
|
||||
"lru-cache",
|
||||
"once_cell",
|
||||
"parking_lot 0.12.5",
|
||||
"parking_lot",
|
||||
"rand 0.8.5",
|
||||
"resolv-conf",
|
||||
"smallvec",
|
||||
@@ -2626,18 +2612,6 @@ dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "instant"
|
||||
version = "0.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "interpolate"
|
||||
version = "2.0.0-dev-48"
|
||||
@@ -2762,11 +2736,9 @@ checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"js-sys",
|
||||
"pem",
|
||||
"ring",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"simple_asn1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2873,8 +2845,6 @@ dependencies = [
|
||||
"komodo_client",
|
||||
"logger",
|
||||
"noise",
|
||||
"nom_pem",
|
||||
"octorust",
|
||||
"openidconnect",
|
||||
"partial_derive2",
|
||||
"periphery_client",
|
||||
@@ -3025,9 +2995,6 @@ name = "log"
|
||||
version = "0.4.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logger"
|
||||
@@ -3320,16 +3287,6 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "4.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"version_check 0.1.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
@@ -3340,15 +3297,6 @@ dependencies = [
|
||||
"minimal-lexical",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom_pem"
|
||||
version = "4.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46345232a84add363a2b3bf214777cf13443f6dab781161aafbdadb8b1f0bd2d"
|
||||
dependencies = [
|
||||
"nom 4.2.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ntapi"
|
||||
version = "0.4.1"
|
||||
@@ -3367,16 +3315,6 @@ dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
|
||||
dependencies = [
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint-dig"
|
||||
version = "0.8.4"
|
||||
@@ -3478,39 +3416,6 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "octorust"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c488b641cf652f023d371f6d472191bf3b3fd8075a11f274e95d4fe6e5e3878"
|
||||
dependencies = [
|
||||
"async-recursion",
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"http 1.3.1",
|
||||
"jsonwebtoken",
|
||||
"log",
|
||||
"mime",
|
||||
"parse_link_header",
|
||||
"pem",
|
||||
"percent-encoding",
|
||||
"reqwest",
|
||||
"reqwest-conditional-middleware",
|
||||
"reqwest-middleware",
|
||||
"reqwest-retry",
|
||||
"reqwest-tracing",
|
||||
"ring",
|
||||
"schemars 0.8.22",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_urlencoded",
|
||||
"thiserror 1.0.69",
|
||||
"tokio",
|
||||
"url",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
@@ -3696,17 +3601,6 @@ dependencies = [
|
||||
"sha2",
|
||||
]
|
||||
|
||||
[[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 0.8.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.5"
|
||||
@@ -3714,21 +3608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core 0.9.12",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"instant",
|
||||
"libc",
|
||||
"redox_syscall 0.2.16",
|
||||
"smallvec",
|
||||
"winapi",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3739,22 +3619,11 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall 0.5.18",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-link 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parse_link_header"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3687fe9debbbf2a019f381a8bc6b42049b22647449b39af54b3013985c0cf6de"
|
||||
dependencies = [
|
||||
"http 0.2.12",
|
||||
"lazy_static",
|
||||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "partial_derive2"
|
||||
version = "0.4.3"
|
||||
@@ -3784,16 +3653,6 @@ dependencies = [
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pem"
|
||||
version = "3.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pem-rfc7468"
|
||||
version = "0.7.0"
|
||||
@@ -4148,15 +4007,6 @@ dependencies = [
|
||||
"getrandom 0.3.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.18"
|
||||
@@ -4243,7 +4093,6 @@ dependencies = [
|
||||
"js-sys",
|
||||
"log",
|
||||
"mime",
|
||||
"mime_guess",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"quinn",
|
||||
@@ -4268,71 +4117,6 @@ dependencies = [
|
||||
"webpki-roots 1.0.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reqwest-conditional-middleware"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f67ad7fdf5c0a015763fcd164bee294b13fb7b6f89f1b55961d40f00c3e32d6b"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"http 1.3.1",
|
||||
"reqwest",
|
||||
"reqwest-middleware",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reqwest-middleware"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"http 1.3.1",
|
||||
"reqwest",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reqwest-retry"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"futures",
|
||||
"getrandom 0.2.16",
|
||||
"http 1.3.1",
|
||||
"hyper 1.7.0",
|
||||
"parking_lot 0.11.2",
|
||||
"reqwest",
|
||||
"reqwest-middleware",
|
||||
"retry-policies",
|
||||
"thiserror 1.0.69",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"wasm-timer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reqwest-tracing"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d70ea85f131b2ee9874f0b160ac5976f8af75f3c9badfe0d955880257d10bd83"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"getrandom 0.2.16",
|
||||
"http 1.3.1",
|
||||
"matchit",
|
||||
"reqwest",
|
||||
"reqwest-middleware",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "resolv-conf"
|
||||
version = "0.7.5"
|
||||
@@ -4370,15 +4154,6 @@ dependencies = [
|
||||
"serror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "retry-policies"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c"
|
||||
dependencies = [
|
||||
"rand 0.8.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rfc6979"
|
||||
version = "0.4.0"
|
||||
@@ -4599,22 +4374,6 @@ dependencies = [
|
||||
"windows-sys 0.61.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars"
|
||||
version = "0.8.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"chrono",
|
||||
"dyn-clone",
|
||||
"schemars_derive",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"url",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars"
|
||||
version = "0.9.0"
|
||||
@@ -4639,18 +4398,6 @@ dependencies = [
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars_derive"
|
||||
version = "0.8.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde_derive_internals",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.2.0"
|
||||
@@ -4780,17 +4527,6 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive_internals"
|
||||
version = "0.29.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.145"
|
||||
@@ -4849,9 +4585,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "1.0.2"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee"
|
||||
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
@@ -5013,18 +4749,6 @@ dependencies = [
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simple_asn1"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb"
|
||||
dependencies = [
|
||||
"num-bigint",
|
||||
"num-traits",
|
||||
"thiserror 2.0.17",
|
||||
"time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "siphasher"
|
||||
version = "1.0.1"
|
||||
@@ -5373,7 +5097,7 @@ dependencies = [
|
||||
"io-uring",
|
||||
"libc",
|
||||
"mio",
|
||||
"parking_lot 0.12.5",
|
||||
"parking_lot",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"slab",
|
||||
@@ -5457,9 +5181,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.9.7"
|
||||
version = "0.9.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0"
|
||||
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
|
||||
dependencies = [
|
||||
"indexmap 2.11.4",
|
||||
"serde_core",
|
||||
@@ -5472,18 +5196,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1"
|
||||
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.0.3"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627"
|
||||
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
|
||||
dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
@@ -5502,9 +5226,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml_writer"
|
||||
version = "1.0.3"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109"
|
||||
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
|
||||
|
||||
[[package]]
|
||||
name = "tonic"
|
||||
@@ -5916,12 +5640,6 @@ version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.5"
|
||||
@@ -6052,21 +5770,6 @@ dependencies = [
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-timer"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"js-sys",
|
||||
"parking_lot 0.11.2",
|
||||
"pin-utils",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.81"
|
||||
|
||||
+4
-6
@@ -79,7 +79,7 @@ bson = { version = "2.15.0" } # must keep in sync with mongodb version
|
||||
serde_yaml_ng = "0.10.0"
|
||||
serde_json = "1.0.145"
|
||||
serde_qs = "0.15.0"
|
||||
toml = "0.9.7"
|
||||
toml = "0.9.8"
|
||||
url = "2.5.7"
|
||||
|
||||
# ERROR
|
||||
@@ -107,7 +107,6 @@ rustls = { version = "0.23.32", features = ["aws-lc-rs"] }
|
||||
pem-rfc7468 = { version = "0.7.0", features = ["alloc"] }
|
||||
openidconnect = "4.0.1"
|
||||
urlencoding = "2.1.3"
|
||||
nom_pem = "4.0.0"
|
||||
bcrypt = "0.17.1"
|
||||
base64 = "0.22.1"
|
||||
pkcs8 = "0.10.2"
|
||||
@@ -126,9 +125,9 @@ bollard = "0.19.3"
|
||||
sysinfo = "0.37.1"
|
||||
|
||||
# CLOUD
|
||||
aws-config = "1.8.6"
|
||||
aws-sdk-ec2 = "1.170.1"
|
||||
aws-credential-types = "1.2.6"
|
||||
aws-config = "1.8.8"
|
||||
aws-sdk-ec2 = "1.172.0"
|
||||
aws-credential-types = "1.2.8"
|
||||
|
||||
## CRON
|
||||
english-to-cron = "0.1.6"
|
||||
@@ -142,7 +141,6 @@ derive_builder = "0.20.2"
|
||||
shell-escape = "0.1.5"
|
||||
comfy-table = "7.2.1"
|
||||
typeshare = "1.0.4"
|
||||
octorust = "0.10.0"
|
||||
dashmap = "6.1.0"
|
||||
wildcard = "0.3.0"
|
||||
colored = "3.0.0"
|
||||
|
||||
@@ -57,7 +57,6 @@ serde_yaml_ng.workspace = true
|
||||
typeshare.workspace = true
|
||||
chrono-tz.workspace = true
|
||||
indexmap.workspace = true
|
||||
octorust.workspace = true
|
||||
wildcard.workspace = true
|
||||
arc-swap.workspace = true
|
||||
colored.workspace = true
|
||||
@@ -65,7 +64,6 @@ dashmap.workspace = true
|
||||
tracing.workspace = true
|
||||
reqwest.workspace = true
|
||||
futures.workspace = true
|
||||
nom_pem.workspace = true
|
||||
dotenvy.workspace = true
|
||||
anyhow.workspace = true
|
||||
croner.workspace = true
|
||||
|
||||
@@ -12,7 +12,6 @@ use komodo_client::{
|
||||
entities::{
|
||||
Operation,
|
||||
build::{Build, BuildActionState, BuildListItem, BuildState},
|
||||
config::core::CoreConfig,
|
||||
permission::PermissionLevel,
|
||||
update::UpdateStatus,
|
||||
},
|
||||
@@ -20,13 +19,10 @@ use komodo_client::{
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{
|
||||
config::core_config,
|
||||
helpers::query::get_all_tags,
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{
|
||||
action_states, build_state_cache, db_client, github_client,
|
||||
},
|
||||
state::{action_states, build_state_cache, db_client},
|
||||
};
|
||||
|
||||
use super::ReadArgs;
|
||||
@@ -306,81 +302,3 @@ impl Resolve<ReadArgs> for ListCommonBuildExtraArgs {
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<ReadArgs> for GetBuildWebhookEnabled {
|
||||
async fn resolve(
|
||||
self,
|
||||
ReadArgs { user }: &ReadArgs,
|
||||
) -> serror::Result<GetBuildWebhookEnabledResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Ok(GetBuildWebhookEnabledResponse {
|
||||
managed: false,
|
||||
enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let build = get_check_permissions::<Build>(
|
||||
&self.build,
|
||||
user,
|
||||
PermissionLevel::Read.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if build.config.git_provider != "github.com"
|
||||
|| build.config.repo.is_empty()
|
||||
{
|
||||
return Ok(GetBuildWebhookEnabledResponse {
|
||||
managed: false,
|
||||
enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
let mut split = build.config.repo.split('/');
|
||||
let owner = split.next().context("Build repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Ok(GetBuildWebhookEnabledResponse {
|
||||
managed: false,
|
||||
enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Build repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = format!("{host}/listener/github/build/{}", build.id);
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
return Ok(GetBuildWebhookEnabledResponse {
|
||||
managed: true,
|
||||
enabled: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Ok(GetBuildWebhookEnabledResponse {
|
||||
managed: true,
|
||||
enabled: false,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +142,6 @@ enum ReadRequest {
|
||||
GetStacksSummary(GetStacksSummary),
|
||||
GetStack(GetStack),
|
||||
GetStackActionState(GetStackActionState),
|
||||
GetStackWebhooksEnabled(GetStackWebhooksEnabled),
|
||||
GetStackLog(GetStackLog),
|
||||
SearchStackLog(SearchStackLog),
|
||||
InspectStackContainer(InspectStackContainer),
|
||||
@@ -171,7 +170,6 @@ enum ReadRequest {
|
||||
GetBuildActionState(GetBuildActionState),
|
||||
GetBuildMonthlyStats(GetBuildMonthlyStats),
|
||||
ListBuildVersions(ListBuildVersions),
|
||||
GetBuildWebhookEnabled(GetBuildWebhookEnabled),
|
||||
ListBuilds(ListBuilds),
|
||||
ListFullBuilds(ListFullBuilds),
|
||||
ListCommonBuildExtraArgs(ListCommonBuildExtraArgs),
|
||||
@@ -180,7 +178,6 @@ enum ReadRequest {
|
||||
GetReposSummary(GetReposSummary),
|
||||
GetRepo(GetRepo),
|
||||
GetRepoActionState(GetRepoActionState),
|
||||
GetRepoWebhooksEnabled(GetRepoWebhooksEnabled),
|
||||
ListRepos(ListRepos),
|
||||
ListFullRepos(ListFullRepos),
|
||||
|
||||
@@ -188,7 +185,6 @@ enum ReadRequest {
|
||||
GetResourceSyncsSummary(GetResourceSyncsSummary),
|
||||
GetResourceSync(GetResourceSync),
|
||||
GetResourceSyncActionState(GetResourceSyncActionState),
|
||||
GetSyncWebhooksEnabled(GetSyncWebhooksEnabled),
|
||||
ListResourceSyncs(ListResourceSyncs),
|
||||
ListFullResourceSyncs(ListFullResourceSyncs),
|
||||
|
||||
@@ -301,12 +297,6 @@ impl Resolve<ReadArgs> for GetCoreInfo {
|
||||
disable_non_admin_create: config.disable_non_admin_create,
|
||||
disable_websocket_reconnect: config.disable_websocket_reconnect,
|
||||
enable_fancy_toml: config.enable_fancy_toml,
|
||||
github_webhook_owners: config
|
||||
.github_webhook_app
|
||||
.installations
|
||||
.iter()
|
||||
.map(|i| i.namespace.to_string())
|
||||
.collect(),
|
||||
timezone: config.timezone.clone(),
|
||||
public_key: core_keys().load().public.to_string(),
|
||||
};
|
||||
|
||||
@@ -2,7 +2,6 @@ use anyhow::Context;
|
||||
use komodo_client::{
|
||||
api::read::*,
|
||||
entities::{
|
||||
config::core::CoreConfig,
|
||||
permission::PermissionLevel,
|
||||
repo::{Repo, RepoActionState, RepoListItem, RepoState},
|
||||
},
|
||||
@@ -10,11 +9,10 @@ use komodo_client::{
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{
|
||||
config::core_config,
|
||||
helpers::query::get_all_tags,
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{action_states, github_client, repo_state_cache},
|
||||
state::{action_states, repo_state_cache},
|
||||
};
|
||||
|
||||
use super::ReadArgs;
|
||||
@@ -159,104 +157,3 @@ impl Resolve<ReadArgs> for GetReposSummary {
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<ReadArgs> for GetRepoWebhooksEnabled {
|
||||
async fn resolve(
|
||||
self,
|
||||
ReadArgs { user }: &ReadArgs,
|
||||
) -> serror::Result<GetRepoWebhooksEnabledResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Ok(GetRepoWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
clone_enabled: false,
|
||||
pull_enabled: false,
|
||||
build_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let repo = get_check_permissions::<Repo>(
|
||||
&self.repo,
|
||||
user,
|
||||
PermissionLevel::Read.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if repo.config.git_provider != "github.com"
|
||||
|| repo.config.repo.is_empty()
|
||||
{
|
||||
return Ok(GetRepoWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
clone_enabled: false,
|
||||
pull_enabled: false,
|
||||
build_enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
let mut split = repo.config.repo.split('/');
|
||||
let owner = split.next().context("Repo repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Ok(GetRepoWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
clone_enabled: false,
|
||||
pull_enabled: false,
|
||||
build_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let repo_name =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo_name)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let clone_url =
|
||||
format!("{host}/listener/github/repo/{}/clone", repo.id);
|
||||
let pull_url =
|
||||
format!("{host}/listener/github/repo/{}/pull", repo.id);
|
||||
let build_url =
|
||||
format!("{host}/listener/github/repo/{}/build", repo.id);
|
||||
|
||||
let mut clone_enabled = false;
|
||||
let mut pull_enabled = false;
|
||||
let mut build_enabled = false;
|
||||
|
||||
for webhook in webhooks {
|
||||
if !webhook.active {
|
||||
continue;
|
||||
}
|
||||
if webhook.config.url == clone_url {
|
||||
clone_enabled = true
|
||||
}
|
||||
if webhook.config.url == pull_url {
|
||||
pull_enabled = true
|
||||
}
|
||||
if webhook.config.url == build_url {
|
||||
build_enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
Ok(GetRepoWebhooksEnabledResponse {
|
||||
managed: true,
|
||||
clone_enabled,
|
||||
pull_enabled,
|
||||
build_enabled,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ use anyhow::{Context, anyhow};
|
||||
use komodo_client::{
|
||||
api::read::*,
|
||||
entities::{
|
||||
config::core::CoreConfig,
|
||||
docker::container::Container,
|
||||
permission::PermissionLevel,
|
||||
server::{Server, ServerState},
|
||||
@@ -18,15 +17,11 @@ use periphery_client::api::{
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{
|
||||
config::core_config,
|
||||
helpers::{periphery_client, query::get_all_tags},
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
stack::get_stack_and_server,
|
||||
state::{
|
||||
action_states, github_client, server_status_cache,
|
||||
stack_status_cache,
|
||||
},
|
||||
state::{action_states, server_status_cache, stack_status_cache},
|
||||
};
|
||||
|
||||
use super::ReadArgs;
|
||||
@@ -378,91 +373,3 @@ impl Resolve<ReadArgs> for GetStacksSummary {
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<ReadArgs> for GetStackWebhooksEnabled {
|
||||
async fn resolve(
|
||||
self,
|
||||
ReadArgs { user }: &ReadArgs,
|
||||
) -> serror::Result<GetStackWebhooksEnabledResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Ok(GetStackWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
deploy_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let stack = get_check_permissions::<Stack>(
|
||||
&self.stack,
|
||||
user,
|
||||
PermissionLevel::Read.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if stack.config.git_provider != "github.com"
|
||||
|| stack.config.repo.is_empty()
|
||||
{
|
||||
return Ok(GetStackWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
deploy_enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
let mut split = stack.config.repo.split('/');
|
||||
let owner = split.next().context("Sync repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Ok(GetStackWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
deploy_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let repo_name =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo_name)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let refresh_url =
|
||||
format!("{host}/listener/github/stack/{}/refresh", stack.id);
|
||||
let deploy_url =
|
||||
format!("{host}/listener/github/stack/{}/deploy", stack.id);
|
||||
|
||||
let mut refresh_enabled = false;
|
||||
let mut deploy_enabled = false;
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == refresh_url {
|
||||
refresh_enabled = true
|
||||
}
|
||||
if webhook.active && webhook.config.url == deploy_url {
|
||||
deploy_enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
Ok(GetStackWebhooksEnabledResponse {
|
||||
managed: true,
|
||||
refresh_enabled,
|
||||
deploy_enabled,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ use anyhow::Context;
|
||||
use komodo_client::{
|
||||
api::read::*,
|
||||
entities::{
|
||||
config::core::CoreConfig,
|
||||
permission::PermissionLevel,
|
||||
sync::{
|
||||
ResourceSync, ResourceSyncActionState, ResourceSyncListItem,
|
||||
@@ -12,11 +11,8 @@ use komodo_client::{
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{
|
||||
config::core_config,
|
||||
helpers::query::get_all_tags,
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{action_states, github_client},
|
||||
helpers::query::get_all_tags, permission::get_check_permissions,
|
||||
resource, state::action_states,
|
||||
};
|
||||
|
||||
use super::ReadArgs;
|
||||
@@ -154,91 +150,3 @@ impl Resolve<ReadArgs> for GetResourceSyncsSummary {
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<ReadArgs> for GetSyncWebhooksEnabled {
|
||||
async fn resolve(
|
||||
self,
|
||||
ReadArgs { user }: &ReadArgs,
|
||||
) -> serror::Result<GetSyncWebhooksEnabledResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Ok(GetSyncWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
sync_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let sync = get_check_permissions::<ResourceSync>(
|
||||
&self.sync,
|
||||
user,
|
||||
PermissionLevel::Read.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if sync.config.git_provider != "github.com"
|
||||
|| sync.config.repo.is_empty()
|
||||
{
|
||||
return Ok(GetSyncWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
sync_enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
let mut split = sync.config.repo.split('/');
|
||||
let owner = split.next().context("Sync repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Ok(GetSyncWebhooksEnabledResponse {
|
||||
managed: false,
|
||||
refresh_enabled: false,
|
||||
sync_enabled: false,
|
||||
});
|
||||
};
|
||||
|
||||
let repo_name =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo_name)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let refresh_url =
|
||||
format!("{host}/listener/github/sync/{}/refresh", sync.id);
|
||||
let sync_url =
|
||||
format!("{host}/listener/github/sync/{}/sync", sync.id);
|
||||
|
||||
let mut refresh_enabled = false;
|
||||
let mut sync_enabled = false;
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == refresh_url {
|
||||
refresh_enabled = true
|
||||
}
|
||||
if webhook.active && webhook.config.url == sync_url {
|
||||
sync_enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
Ok(GetSyncWebhooksEnabledResponse {
|
||||
managed: true,
|
||||
refresh_enabled,
|
||||
sync_enabled,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,18 +11,14 @@ use komodo_client::{
|
||||
entities::{
|
||||
FileContents, NoData, Operation, RepoExecutionArgs,
|
||||
all_logs_success,
|
||||
build::{Build, BuildInfo, PartialBuildConfig},
|
||||
build::{Build, BuildInfo},
|
||||
builder::{Builder, BuilderConfig},
|
||||
config::core::CoreConfig,
|
||||
permission::PermissionLevel,
|
||||
repo::Repo,
|
||||
server::ServerState,
|
||||
update::Update,
|
||||
},
|
||||
};
|
||||
use octorust::types::{
|
||||
ReposCreateWebhookRequest, ReposCreateWebhookRequestConfig,
|
||||
};
|
||||
use periphery_client::api::build::{
|
||||
GetDockerfileContentsOnHost, WriteDockerfileContentsToHost,
|
||||
};
|
||||
@@ -40,7 +36,7 @@ use crate::{
|
||||
periphery::PeripheryClient,
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{db_client, github_client},
|
||||
state::db_client,
|
||||
};
|
||||
|
||||
use super::WriteArgs;
|
||||
@@ -546,201 +542,3 @@ async fn get_git_remote(
|
||||
res.commit_message,
|
||||
)))
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for CreateBuildWebhook {
|
||||
#[instrument(name = "CreateBuildWebhook", skip(args))]
|
||||
async fn resolve(
|
||||
self,
|
||||
args: &WriteArgs,
|
||||
) -> serror::Result<CreateBuildWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let WriteArgs { user } = args;
|
||||
|
||||
let build = get_check_permissions::<Build>(
|
||||
&self.build,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if build.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = build.config.repo.split('/');
|
||||
let owner = split.next().context("Build repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Build repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
webhook_secret,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let webhook_secret = if build.config.webhook_secret.is_empty() {
|
||||
webhook_secret
|
||||
} else {
|
||||
&build.config.webhook_secret
|
||||
};
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = format!("{host}/listener/github/build/{}", build.id);
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// Now good to create the webhook
|
||||
let request = ReposCreateWebhookRequest {
|
||||
active: Some(true),
|
||||
config: Some(ReposCreateWebhookRequestConfig {
|
||||
url,
|
||||
secret: webhook_secret.to_string(),
|
||||
content_type: String::from("json"),
|
||||
insecure_ssl: None,
|
||||
digest: Default::default(),
|
||||
token: Default::default(),
|
||||
}),
|
||||
events: vec![String::from("push")],
|
||||
name: String::from("web"),
|
||||
};
|
||||
github_repos
|
||||
.create_webhook(owner, repo, &request)
|
||||
.await
|
||||
.context("failed to create webhook")?;
|
||||
|
||||
if !build.config.webhook_enabled {
|
||||
UpdateBuild {
|
||||
id: build.id,
|
||||
config: PartialBuildConfig {
|
||||
webhook_enabled: Some(true),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
.resolve(args)
|
||||
.await
|
||||
.map_err(|e| e.error)
|
||||
.context("failed to update build to enable webhook")?;
|
||||
}
|
||||
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for DeleteBuildWebhook {
|
||||
#[instrument(name = "DeleteBuildWebhook", skip(user))]
|
||||
async fn resolve(
|
||||
self,
|
||||
WriteArgs { user }: &WriteArgs,
|
||||
) -> serror::Result<DeleteBuildWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let build = get_check_permissions::<Build>(
|
||||
&self.build,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if build.config.git_provider != "github.com" {
|
||||
return Err(
|
||||
anyhow!("Can only manage github.com repo webhooks").into(),
|
||||
);
|
||||
}
|
||||
|
||||
if build.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't delete webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = build.config.repo.split('/');
|
||||
let owner = split.next().context("Build repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Build repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = format!("{host}/listener/github/build/{}", build.id);
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
github_repos
|
||||
.delete_webhook(owner, repo, webhook.id)
|
||||
.await
|
||||
.context("failed to delete webhook")?;
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// No webhook to delete, all good
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,8 +104,6 @@ pub enum WriteRequest {
|
||||
RenameStack(RenameStack),
|
||||
WriteStackFileContents(WriteStackFileContents),
|
||||
RefreshStackCache(RefreshStackCache),
|
||||
CreateStackWebhook(CreateStackWebhook),
|
||||
DeleteStackWebhook(DeleteStackWebhook),
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
CreateDeployment(CreateDeployment),
|
||||
@@ -123,8 +121,6 @@ pub enum WriteRequest {
|
||||
RenameBuild(RenameBuild),
|
||||
WriteBuildFileContents(WriteBuildFileContents),
|
||||
RefreshBuildCache(RefreshBuildCache),
|
||||
CreateBuildWebhook(CreateBuildWebhook),
|
||||
DeleteBuildWebhook(DeleteBuildWebhook),
|
||||
|
||||
// ==== BUILDER ====
|
||||
CreateBuilder(CreateBuilder),
|
||||
@@ -140,8 +136,6 @@ pub enum WriteRequest {
|
||||
UpdateRepo(UpdateRepo),
|
||||
RenameRepo(RenameRepo),
|
||||
RefreshRepoCache(RefreshRepoCache),
|
||||
CreateRepoWebhook(CreateRepoWebhook),
|
||||
DeleteRepoWebhook(DeleteRepoWebhook),
|
||||
|
||||
// ==== ALERTER ====
|
||||
CreateAlerter(CreateAlerter),
|
||||
@@ -173,8 +167,6 @@ pub enum WriteRequest {
|
||||
WriteSyncFileContents(WriteSyncFileContents),
|
||||
CommitSync(CommitSync),
|
||||
RefreshResourceSyncPending(RefreshResourceSyncPending),
|
||||
CreateSyncWebhook(CreateSyncWebhook),
|
||||
DeleteSyncWebhook(DeleteSyncWebhook),
|
||||
|
||||
// ==== TAG ====
|
||||
CreateTag(CreateTag),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use anyhow::{Context, anyhow};
|
||||
use anyhow::Context;
|
||||
use database::mongo_indexed::doc;
|
||||
use database::mungos::{
|
||||
by_id::update_one_by_id, mongodb::bson::to_document,
|
||||
@@ -7,19 +7,14 @@ use formatting::format_serror;
|
||||
use komodo_client::{
|
||||
api::write::*,
|
||||
entities::{
|
||||
NoData, Operation, RepoExecutionArgs,
|
||||
config::core::CoreConfig,
|
||||
komodo_timestamp,
|
||||
NoData, Operation, RepoExecutionArgs, komodo_timestamp,
|
||||
permission::PermissionLevel,
|
||||
repo::{PartialRepoConfig, Repo, RepoInfo},
|
||||
repo::{Repo, RepoInfo},
|
||||
server::Server,
|
||||
to_path_compatible_name,
|
||||
update::{Log, Update},
|
||||
},
|
||||
};
|
||||
use octorust::types::{
|
||||
ReposCreateWebhookRequest, ReposCreateWebhookRequestConfig,
|
||||
};
|
||||
use periphery_client::api;
|
||||
use resolver_api::Resolve;
|
||||
|
||||
@@ -31,7 +26,7 @@ use crate::{
|
||||
},
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{action_states, db_client, github_client},
|
||||
state::{action_states, db_client},
|
||||
};
|
||||
|
||||
use super::WriteArgs;
|
||||
@@ -235,220 +230,3 @@ impl Resolve<WriteArgs> for RefreshRepoCache {
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for CreateRepoWebhook {
|
||||
#[instrument(name = "CreateRepoWebhook", skip(args))]
|
||||
async fn resolve(
|
||||
self,
|
||||
args: &WriteArgs,
|
||||
) -> serror::Result<CreateRepoWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo = get_check_permissions::<Repo>(
|
||||
&self.repo,
|
||||
&args.user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if repo.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = repo.config.repo.split('/');
|
||||
let owner = split.next().context("Repo repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo_name =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo_name)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
webhook_secret,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let webhook_secret = if repo.config.webhook_secret.is_empty() {
|
||||
webhook_secret
|
||||
} else {
|
||||
&repo.config.webhook_secret
|
||||
};
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
RepoWebhookAction::Clone => {
|
||||
format!("{host}/listener/github/repo/{}/clone", repo.id)
|
||||
}
|
||||
RepoWebhookAction::Pull => {
|
||||
format!("{host}/listener/github/repo/{}/pull", repo.id)
|
||||
}
|
||||
RepoWebhookAction::Build => {
|
||||
format!("{host}/listener/github/repo/{}/build", repo.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// Now good to create the webhook
|
||||
let request = ReposCreateWebhookRequest {
|
||||
active: Some(true),
|
||||
config: Some(ReposCreateWebhookRequestConfig {
|
||||
url,
|
||||
secret: webhook_secret.to_string(),
|
||||
content_type: String::from("json"),
|
||||
insecure_ssl: None,
|
||||
digest: Default::default(),
|
||||
token: Default::default(),
|
||||
}),
|
||||
events: vec![String::from("push")],
|
||||
name: String::from("web"),
|
||||
};
|
||||
github_repos
|
||||
.create_webhook(owner, repo_name, &request)
|
||||
.await
|
||||
.context("failed to create webhook")?;
|
||||
|
||||
if !repo.config.webhook_enabled {
|
||||
UpdateRepo {
|
||||
id: repo.id,
|
||||
config: PartialRepoConfig {
|
||||
webhook_enabled: Some(true),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
.resolve(args)
|
||||
.await
|
||||
.map_err(|e| e.error)
|
||||
.context("failed to update repo to enable webhook")?;
|
||||
}
|
||||
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for DeleteRepoWebhook {
|
||||
#[instrument(name = "DeleteRepoWebhook", skip(user))]
|
||||
async fn resolve(
|
||||
self,
|
||||
WriteArgs { user }: &WriteArgs,
|
||||
) -> serror::Result<DeleteRepoWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo = get_check_permissions::<Repo>(
|
||||
&self.repo,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if repo.config.git_provider != "github.com" {
|
||||
return Err(
|
||||
anyhow!("Can only manage github.com repo webhooks").into(),
|
||||
);
|
||||
}
|
||||
|
||||
if repo.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = repo.config.repo.split('/');
|
||||
let owner = split.next().context("Repo repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo_name =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo_name)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
RepoWebhookAction::Clone => {
|
||||
format!("{host}/listener/github/repo/{}/clone", repo.id)
|
||||
}
|
||||
RepoWebhookAction::Pull => {
|
||||
format!("{host}/listener/github/repo/{}/pull", repo.id)
|
||||
}
|
||||
RepoWebhookAction::Build => {
|
||||
format!("{host}/listener/github/repo/{}/build", repo.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
github_repos
|
||||
.delete_webhook(owner, repo_name, webhook.id)
|
||||
.await
|
||||
.context("failed to delete webhook")?;
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// No webhook to delete, all good
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,18 +8,14 @@ use komodo_client::{
|
||||
entities::{
|
||||
FileContents, NoData, Operation, RepoExecutionArgs,
|
||||
all_logs_success,
|
||||
config::core::CoreConfig,
|
||||
permission::PermissionLevel,
|
||||
repo::Repo,
|
||||
server::ServerState,
|
||||
stack::{PartialStackConfig, Stack, StackInfo},
|
||||
stack::{Stack, StackInfo},
|
||||
update::Update,
|
||||
user::stack_user,
|
||||
},
|
||||
};
|
||||
use octorust::types::{
|
||||
ReposCreateWebhookRequest, ReposCreateWebhookRequestConfig,
|
||||
};
|
||||
use periphery_client::api::compose::{
|
||||
GetComposeContentsOnHost, GetComposeContentsOnHostResponse,
|
||||
WriteComposeContentsToHost,
|
||||
@@ -40,7 +36,7 @@ use crate::{
|
||||
remote::{RemoteComposeContents, get_repo_compose_contents},
|
||||
services::extract_services_into_res,
|
||||
},
|
||||
state::{db_client, github_client},
|
||||
state::db_client,
|
||||
};
|
||||
|
||||
use super::WriteArgs;
|
||||
@@ -567,216 +563,3 @@ impl Resolve<WriteArgs> for RefreshStackCache {
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for CreateStackWebhook {
|
||||
#[instrument(name = "CreateStackWebhook", skip(args))]
|
||||
async fn resolve(
|
||||
self,
|
||||
args: &WriteArgs,
|
||||
) -> serror::Result<CreateStackWebhookResponse> {
|
||||
let WriteArgs { user } = args;
|
||||
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let stack = get_check_permissions::<Stack>(
|
||||
&self.stack,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if stack.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = stack.config.repo.split('/');
|
||||
let owner = split.next().context("Stack repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Stack repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
webhook_secret,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let webhook_secret = if stack.config.webhook_secret.is_empty() {
|
||||
webhook_secret
|
||||
} else {
|
||||
&stack.config.webhook_secret
|
||||
};
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
StackWebhookAction::Refresh => {
|
||||
format!("{host}/listener/github/stack/{}/refresh", stack.id)
|
||||
}
|
||||
StackWebhookAction::Deploy => {
|
||||
format!("{host}/listener/github/stack/{}/deploy", stack.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// Now good to create the webhook
|
||||
let request = ReposCreateWebhookRequest {
|
||||
active: Some(true),
|
||||
config: Some(ReposCreateWebhookRequestConfig {
|
||||
url,
|
||||
secret: webhook_secret.to_string(),
|
||||
content_type: String::from("json"),
|
||||
insecure_ssl: None,
|
||||
digest: Default::default(),
|
||||
token: Default::default(),
|
||||
}),
|
||||
events: vec![String::from("push")],
|
||||
name: String::from("web"),
|
||||
};
|
||||
github_repos
|
||||
.create_webhook(owner, repo, &request)
|
||||
.await
|
||||
.context("failed to create webhook")?;
|
||||
|
||||
if !stack.config.webhook_enabled {
|
||||
UpdateStack {
|
||||
id: stack.id,
|
||||
config: PartialStackConfig {
|
||||
webhook_enabled: Some(true),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
.resolve(args)
|
||||
.await
|
||||
.map_err(|e| e.error)
|
||||
.context("failed to update stack to enable webhook")?;
|
||||
}
|
||||
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for DeleteStackWebhook {
|
||||
#[instrument(name = "DeleteStackWebhook", skip(user))]
|
||||
async fn resolve(
|
||||
self,
|
||||
WriteArgs { user }: &WriteArgs,
|
||||
) -> serror::Result<DeleteStackWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let stack = get_check_permissions::<Stack>(
|
||||
&self.stack,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if stack.config.git_provider != "github.com" {
|
||||
return Err(
|
||||
anyhow!("Can only manage github.com repo webhooks").into(),
|
||||
);
|
||||
}
|
||||
|
||||
if stack.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = stack.config.repo.split('/');
|
||||
let owner = split.next().context("Stack repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Sync repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
StackWebhookAction::Refresh => {
|
||||
format!("{host}/listener/github/stack/{}/refresh", stack.id)
|
||||
}
|
||||
StackWebhookAction::Deploy => {
|
||||
format!("{host}/listener/github/stack/{}/deploy", stack.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
github_repos
|
||||
.delete_webhook(owner, repo, webhook.id)
|
||||
.await
|
||||
.context("failed to delete webhook")?;
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// No webhook to delete, all good
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,13 @@ use formatting::format_serror;
|
||||
use komodo_client::{
|
||||
api::{read::ExportAllResourcesToToml, write::*},
|
||||
entities::{
|
||||
self, NoData, Operation, RepoExecutionArgs, ResourceTarget,
|
||||
self, Operation, RepoExecutionArgs, ResourceTarget,
|
||||
action::Action,
|
||||
alert::{Alert, AlertData, SeverityLevel},
|
||||
alerter::Alerter,
|
||||
all_logs_success,
|
||||
build::Build,
|
||||
builder::Builder,
|
||||
config::core::CoreConfig,
|
||||
deployment::Deployment,
|
||||
komodo_timestamp,
|
||||
permission::PermissionLevel,
|
||||
@@ -27,18 +26,12 @@ use komodo_client::{
|
||||
repo::Repo,
|
||||
server::Server,
|
||||
stack::Stack,
|
||||
sync::{
|
||||
PartialResourceSyncConfig, ResourceSync, ResourceSyncInfo,
|
||||
SyncDeployUpdate,
|
||||
},
|
||||
sync::{ResourceSync, ResourceSyncInfo, SyncDeployUpdate},
|
||||
to_path_compatible_name,
|
||||
update::{Log, Update},
|
||||
user::sync_user,
|
||||
},
|
||||
};
|
||||
use octorust::types::{
|
||||
ReposCreateWebhookRequest, ReposCreateWebhookRequestConfig,
|
||||
};
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{
|
||||
@@ -53,7 +46,7 @@ use crate::{
|
||||
},
|
||||
permission::get_check_permissions,
|
||||
resource,
|
||||
state::{db_client, github_client},
|
||||
state::db_client,
|
||||
sync::{
|
||||
deploy::SyncDeployParams, remote::RemoteResources,
|
||||
view::push_updates_for_view,
|
||||
@@ -969,215 +962,3 @@ impl Resolve<WriteArgs> for RefreshResourceSyncPending {
|
||||
Ok(crate::resource::get::<ResourceSync>(&sync.id).await?)
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for CreateSyncWebhook {
|
||||
#[instrument(name = "CreateSyncWebhook", skip(args))]
|
||||
async fn resolve(
|
||||
self,
|
||||
args: &WriteArgs,
|
||||
) -> serror::Result<CreateSyncWebhookResponse> {
|
||||
let WriteArgs { user } = args;
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let sync = get_check_permissions::<ResourceSync>(
|
||||
&self.sync,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if sync.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = sync.config.repo.split('/');
|
||||
let owner = split.next().context("Sync repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Repo repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
webhook_secret,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let webhook_secret = if sync.config.webhook_secret.is_empty() {
|
||||
webhook_secret
|
||||
} else {
|
||||
&sync.config.webhook_secret
|
||||
};
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
SyncWebhookAction::Refresh => {
|
||||
format!("{host}/listener/github/sync/{}/refresh", sync.id)
|
||||
}
|
||||
SyncWebhookAction::Sync => {
|
||||
format!("{host}/listener/github/sync/{}/sync", sync.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// Now good to create the webhook
|
||||
let request = ReposCreateWebhookRequest {
|
||||
active: Some(true),
|
||||
config: Some(ReposCreateWebhookRequestConfig {
|
||||
url,
|
||||
secret: webhook_secret.to_string(),
|
||||
content_type: String::from("json"),
|
||||
insecure_ssl: None,
|
||||
digest: Default::default(),
|
||||
token: Default::default(),
|
||||
}),
|
||||
events: vec![String::from("push")],
|
||||
name: String::from("web"),
|
||||
};
|
||||
github_repos
|
||||
.create_webhook(owner, repo, &request)
|
||||
.await
|
||||
.context("failed to create webhook")?;
|
||||
|
||||
if !sync.config.webhook_enabled {
|
||||
UpdateResourceSync {
|
||||
id: sync.id,
|
||||
config: PartialResourceSyncConfig {
|
||||
webhook_enabled: Some(true),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
.resolve(args)
|
||||
.await
|
||||
.map_err(|e| e.error)
|
||||
.context("failed to update sync to enable webhook")?;
|
||||
}
|
||||
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolve<WriteArgs> for DeleteSyncWebhook {
|
||||
#[instrument(name = "DeleteSyncWebhook", skip(user))]
|
||||
async fn resolve(
|
||||
self,
|
||||
WriteArgs { user }: &WriteArgs,
|
||||
) -> serror::Result<DeleteSyncWebhookResponse> {
|
||||
let Some(github) = github_client() else {
|
||||
return Err(
|
||||
anyhow!(
|
||||
"github_webhook_app is not configured in core config toml"
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let sync = get_check_permissions::<ResourceSync>(
|
||||
&self.sync,
|
||||
user,
|
||||
PermissionLevel::Write.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
if sync.config.git_provider != "github.com" {
|
||||
return Err(
|
||||
anyhow!("Can only manage github.com repo webhooks").into(),
|
||||
);
|
||||
}
|
||||
|
||||
if sync.config.repo.is_empty() {
|
||||
return Err(
|
||||
anyhow!("No repo configured, can't create webhook").into(),
|
||||
);
|
||||
}
|
||||
|
||||
let mut split = sync.config.repo.split('/');
|
||||
let owner = split.next().context("Sync repo has no owner")?;
|
||||
|
||||
let Some(github) = github.get(owner) else {
|
||||
return Err(
|
||||
anyhow!("Cannot manage repo webhooks under owner {owner}")
|
||||
.into(),
|
||||
);
|
||||
};
|
||||
|
||||
let repo =
|
||||
split.next().context("Sync repo has no repo after the /")?;
|
||||
|
||||
let github_repos = github.repos();
|
||||
|
||||
// First make sure the webhook isn't already created (inactive ones are ignored)
|
||||
let webhooks = github_repos
|
||||
.list_all_webhooks(owner, repo)
|
||||
.await
|
||||
.context("failed to list all webhooks on repo")?
|
||||
.body;
|
||||
|
||||
let CoreConfig {
|
||||
host,
|
||||
webhook_base_url,
|
||||
..
|
||||
} = core_config();
|
||||
|
||||
let host = if webhook_base_url.is_empty() {
|
||||
host
|
||||
} else {
|
||||
webhook_base_url
|
||||
};
|
||||
let url = match self.action {
|
||||
SyncWebhookAction::Refresh => {
|
||||
format!("{host}/listener/github/sync/{}/refresh", sync.id)
|
||||
}
|
||||
SyncWebhookAction::Sync => {
|
||||
format!("{host}/listener/github/sync/{}/sync", sync.id)
|
||||
}
|
||||
};
|
||||
|
||||
for webhook in webhooks {
|
||||
if webhook.active && webhook.config.url == url {
|
||||
github_repos
|
||||
.delete_webhook(owner, repo, webhook.id)
|
||||
.await
|
||||
.context("failed to delete webhook")?;
|
||||
return Ok(NoData {});
|
||||
}
|
||||
}
|
||||
|
||||
// No webhook to delete, all good
|
||||
Ok(NoData {})
|
||||
}
|
||||
}
|
||||
|
||||
+166
-125
@@ -9,10 +9,7 @@ use environment_file::{
|
||||
use komodo_client::entities::{
|
||||
config::{
|
||||
DatabaseConfig,
|
||||
core::{
|
||||
AwsCredentials, CoreConfig, Env, GithubWebhookAppConfig,
|
||||
GithubWebhookAppInstallationConfig, OauthCredentials,
|
||||
},
|
||||
core::{AwsCredentials, CoreConfig, Env, OauthCredentials},
|
||||
},
|
||||
logger::LogConfig,
|
||||
};
|
||||
@@ -96,12 +93,13 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
static CORE_CONFIG: OnceLock<CoreConfig> = OnceLock::new();
|
||||
CORE_CONFIG.get_or_init(|| {
|
||||
let env: Env = match envy::from_env()
|
||||
.context("Failed to parse Komodo Core environment") {
|
||||
Ok(env) => env,
|
||||
Err(e) => {
|
||||
panic!("{e:?}");
|
||||
}
|
||||
};
|
||||
.context("Failed to parse Komodo Core environment")
|
||||
{
|
||||
Ok(env) => env,
|
||||
Err(e) => {
|
||||
panic!("{e:?}");
|
||||
}
|
||||
};
|
||||
let config = if env.komodo_config_paths.is_empty() {
|
||||
println!(
|
||||
"{}: No config paths found, using default config",
|
||||
@@ -109,7 +107,8 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
);
|
||||
CoreConfig::default()
|
||||
} else {
|
||||
let config_keywords = env.komodo_config_keywords
|
||||
let config_keywords = env
|
||||
.komodo_config_keywords
|
||||
.iter()
|
||||
.map(String::as_str)
|
||||
.collect::<Vec<_>>();
|
||||
@@ -119,7 +118,8 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
"Config File Keywords".dimmed(),
|
||||
);
|
||||
(ConfigLoader {
|
||||
paths: &env.komodo_config_paths
|
||||
paths: &env
|
||||
.komodo_config_paths
|
||||
.iter()
|
||||
.map(PathBuf::as_path)
|
||||
.collect::<Vec<_>>(),
|
||||
@@ -128,57 +128,53 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
merge_nested: env.komodo_merge_nested_config,
|
||||
extend_array: env.komodo_extend_config_arrays,
|
||||
debug_print: env.komodo_config_debug,
|
||||
}).load::<CoreConfig>()
|
||||
})
|
||||
.load::<CoreConfig>()
|
||||
.expect("Failed at parsing config from paths")
|
||||
};
|
||||
|
||||
let installations = match (
|
||||
maybe_read_list_from_file(
|
||||
env.komodo_github_webhook_app_installations_ids_file,
|
||||
env.komodo_github_webhook_app_installations_ids
|
||||
),
|
||||
env.komodo_github_webhook_app_installations_namespaces
|
||||
) {
|
||||
(Some(ids), Some(namespaces)) => {
|
||||
if ids.len() != namespaces.len() {
|
||||
panic!("KOMODO_GITHUB_WEBHOOK_APP_INSTALLATIONS_IDS length and KOMODO_GITHUB_WEBHOOK_APP_INSTALLATIONS_NAMESPACES length mismatch. Got {ids:?} and {namespaces:?}")
|
||||
}
|
||||
ids
|
||||
.into_iter()
|
||||
.zip(namespaces)
|
||||
.map(|(id, namespace)| GithubWebhookAppInstallationConfig {
|
||||
id,
|
||||
namespace
|
||||
})
|
||||
.collect()
|
||||
},
|
||||
(Some(_), None) | (None, Some(_)) => {
|
||||
panic!("Got only one of KOMODO_GITHUB_WEBHOOK_APP_INSTALLATIONS_IDS or KOMODO_GITHUB_WEBHOOK_APP_INSTALLATIONS_NAMESPACES, both MUST be provided");
|
||||
}
|
||||
(None, None) => {
|
||||
config.github_webhook_app.installations
|
||||
}
|
||||
};
|
||||
|
||||
// recreating CoreConfig here makes sure apply all env overrides applied.
|
||||
CoreConfig {
|
||||
// Secret things overridden with file
|
||||
private_key: maybe_read_item_from_file(env.komodo_private_key_file, env.komodo_private_key)
|
||||
.unwrap_or(config.private_key),
|
||||
passkey: maybe_read_item_from_file(env.komodo_passkey_file, env.komodo_passkey)
|
||||
.or(config.passkey),
|
||||
jwt_secret: maybe_read_item_from_file(env.komodo_jwt_secret_file, env.komodo_jwt_secret).unwrap_or(config.jwt_secret),
|
||||
webhook_secret: maybe_read_item_from_file(env.komodo_webhook_secret_file, env.komodo_webhook_secret)
|
||||
.unwrap_or(config.webhook_secret),
|
||||
private_key: maybe_read_item_from_file(
|
||||
env.komodo_private_key_file,
|
||||
env.komodo_private_key,
|
||||
)
|
||||
.unwrap_or(config.private_key),
|
||||
passkey: maybe_read_item_from_file(
|
||||
env.komodo_passkey_file,
|
||||
env.komodo_passkey,
|
||||
)
|
||||
.or(config.passkey),
|
||||
jwt_secret: maybe_read_item_from_file(
|
||||
env.komodo_jwt_secret_file,
|
||||
env.komodo_jwt_secret,
|
||||
)
|
||||
.unwrap_or(config.jwt_secret),
|
||||
webhook_secret: maybe_read_item_from_file(
|
||||
env.komodo_webhook_secret_file,
|
||||
env.komodo_webhook_secret,
|
||||
)
|
||||
.unwrap_or(config.webhook_secret),
|
||||
database: DatabaseConfig {
|
||||
uri: maybe_read_item_from_file(env.komodo_database_uri_file,env.komodo_database_uri).unwrap_or(config.database.uri),
|
||||
address: env.komodo_database_address.unwrap_or(config.database.address),
|
||||
username: maybe_read_item_from_file(env.komodo_database_username_file,env
|
||||
.komodo_database_username)
|
||||
.unwrap_or(config.database.username),
|
||||
password: maybe_read_item_from_file(env.komodo_database_password_file,env
|
||||
.komodo_database_password)
|
||||
.unwrap_or(config.database.password),
|
||||
uri: maybe_read_item_from_file(
|
||||
env.komodo_database_uri_file,
|
||||
env.komodo_database_uri,
|
||||
)
|
||||
.unwrap_or(config.database.uri),
|
||||
address: env
|
||||
.komodo_database_address
|
||||
.unwrap_or(config.database.address),
|
||||
username: maybe_read_item_from_file(
|
||||
env.komodo_database_username_file,
|
||||
env.komodo_database_username,
|
||||
)
|
||||
.unwrap_or(config.database.username),
|
||||
password: maybe_read_item_from_file(
|
||||
env.komodo_database_password_file,
|
||||
env.komodo_database_password,
|
||||
)
|
||||
.unwrap_or(config.database.password),
|
||||
app_name: env
|
||||
.komodo_database_app_name
|
||||
.unwrap_or(config.database.app_name),
|
||||
@@ -188,64 +184,82 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
},
|
||||
init_admin_username: maybe_read_item_from_file(
|
||||
env.komodo_init_admin_username_file,
|
||||
env.komodo_init_admin_username
|
||||
).or(config.init_admin_username),
|
||||
env.komodo_init_admin_username,
|
||||
)
|
||||
.or(config.init_admin_username),
|
||||
init_admin_password: maybe_read_item_from_file(
|
||||
env.komodo_init_admin_password_file,
|
||||
env.komodo_init_admin_password
|
||||
).unwrap_or(config.init_admin_password),
|
||||
oidc_enabled: env.komodo_oidc_enabled.unwrap_or(config.oidc_enabled),
|
||||
oidc_provider: env.komodo_oidc_provider.unwrap_or(config.oidc_provider),
|
||||
oidc_redirect_host: env.komodo_oidc_redirect_host.unwrap_or(config.oidc_redirect_host),
|
||||
oidc_client_id: maybe_read_item_from_file(env.komodo_oidc_client_id_file,env
|
||||
.komodo_oidc_client_id)
|
||||
.unwrap_or(config.oidc_client_id),
|
||||
oidc_client_secret: maybe_read_item_from_file(env.komodo_oidc_client_secret_file,env
|
||||
.komodo_oidc_client_secret)
|
||||
.unwrap_or(config.oidc_client_secret),
|
||||
oidc_use_full_email: env.komodo_oidc_use_full_email
|
||||
env.komodo_init_admin_password,
|
||||
)
|
||||
.unwrap_or(config.init_admin_password),
|
||||
oidc_enabled: env
|
||||
.komodo_oidc_enabled
|
||||
.unwrap_or(config.oidc_enabled),
|
||||
oidc_provider: env
|
||||
.komodo_oidc_provider
|
||||
.unwrap_or(config.oidc_provider),
|
||||
oidc_redirect_host: env
|
||||
.komodo_oidc_redirect_host
|
||||
.unwrap_or(config.oidc_redirect_host),
|
||||
oidc_client_id: maybe_read_item_from_file(
|
||||
env.komodo_oidc_client_id_file,
|
||||
env.komodo_oidc_client_id,
|
||||
)
|
||||
.unwrap_or(config.oidc_client_id),
|
||||
oidc_client_secret: maybe_read_item_from_file(
|
||||
env.komodo_oidc_client_secret_file,
|
||||
env.komodo_oidc_client_secret,
|
||||
)
|
||||
.unwrap_or(config.oidc_client_secret),
|
||||
oidc_use_full_email: env
|
||||
.komodo_oidc_use_full_email
|
||||
.unwrap_or(config.oidc_use_full_email),
|
||||
oidc_additional_audiences: maybe_read_list_from_file(env.komodo_oidc_additional_audiences_file,env
|
||||
.komodo_oidc_additional_audiences)
|
||||
.unwrap_or(config.oidc_additional_audiences),
|
||||
oidc_additional_audiences: maybe_read_list_from_file(
|
||||
env.komodo_oidc_additional_audiences_file,
|
||||
env.komodo_oidc_additional_audiences,
|
||||
)
|
||||
.unwrap_or(config.oidc_additional_audiences),
|
||||
google_oauth: OauthCredentials {
|
||||
enabled: env
|
||||
.komodo_google_oauth_enabled
|
||||
.unwrap_or(config.google_oauth.enabled),
|
||||
id: maybe_read_item_from_file(env.komodo_google_oauth_id_file,env
|
||||
.komodo_google_oauth_id)
|
||||
.unwrap_or(config.google_oauth.id),
|
||||
secret: maybe_read_item_from_file(env.komodo_google_oauth_secret_file,env
|
||||
.komodo_google_oauth_secret)
|
||||
.unwrap_or(config.google_oauth.secret),
|
||||
id: maybe_read_item_from_file(
|
||||
env.komodo_google_oauth_id_file,
|
||||
env.komodo_google_oauth_id,
|
||||
)
|
||||
.unwrap_or(config.google_oauth.id),
|
||||
secret: maybe_read_item_from_file(
|
||||
env.komodo_google_oauth_secret_file,
|
||||
env.komodo_google_oauth_secret,
|
||||
)
|
||||
.unwrap_or(config.google_oauth.secret),
|
||||
},
|
||||
github_oauth: OauthCredentials {
|
||||
enabled: env
|
||||
.komodo_github_oauth_enabled
|
||||
.unwrap_or(config.github_oauth.enabled),
|
||||
id: maybe_read_item_from_file(env.komodo_github_oauth_id_file,env
|
||||
.komodo_github_oauth_id)
|
||||
.unwrap_or(config.github_oauth.id),
|
||||
secret: maybe_read_item_from_file(env.komodo_github_oauth_secret_file,env
|
||||
.komodo_github_oauth_secret)
|
||||
.unwrap_or(config.github_oauth.secret),
|
||||
id: maybe_read_item_from_file(
|
||||
env.komodo_github_oauth_id_file,
|
||||
env.komodo_github_oauth_id,
|
||||
)
|
||||
.unwrap_or(config.github_oauth.id),
|
||||
secret: maybe_read_item_from_file(
|
||||
env.komodo_github_oauth_secret_file,
|
||||
env.komodo_github_oauth_secret,
|
||||
)
|
||||
.unwrap_or(config.github_oauth.secret),
|
||||
},
|
||||
aws: AwsCredentials {
|
||||
access_key_id: maybe_read_item_from_file(env.komodo_aws_access_key_id_file, env
|
||||
.komodo_aws_access_key_id)
|
||||
.unwrap_or(config.aws.access_key_id),
|
||||
secret_access_key: maybe_read_item_from_file(env.komodo_aws_secret_access_key_file, env
|
||||
.komodo_aws_secret_access_key)
|
||||
.unwrap_or(config.aws.secret_access_key),
|
||||
},
|
||||
github_webhook_app: GithubWebhookAppConfig {
|
||||
app_id: maybe_read_item_from_file(env.komodo_github_webhook_app_app_id_file, env
|
||||
.komodo_github_webhook_app_app_id)
|
||||
.unwrap_or(config.github_webhook_app.app_id),
|
||||
pk_path: env
|
||||
.komodo_github_webhook_app_pk_path
|
||||
.unwrap_or(config.github_webhook_app.pk_path),
|
||||
installations,
|
||||
access_key_id: maybe_read_item_from_file(
|
||||
env.komodo_aws_access_key_id_file,
|
||||
env.komodo_aws_access_key_id,
|
||||
)
|
||||
.unwrap_or(config.aws.access_key_id),
|
||||
secret_access_key: maybe_read_item_from_file(
|
||||
env.komodo_aws_secret_access_key_file,
|
||||
env.komodo_aws_secret_access_key,
|
||||
)
|
||||
.unwrap_or(config.aws.secret_access_key),
|
||||
},
|
||||
|
||||
// Non secrets
|
||||
@@ -254,13 +268,19 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
port: env.komodo_port.unwrap_or(config.port),
|
||||
bind_ip: env.komodo_bind_ip.unwrap_or(config.bind_ip),
|
||||
timezone: env.komodo_timezone.unwrap_or(config.timezone),
|
||||
periphery_public_keys: env.komodo_periphery_public_keys.or(config.periphery_public_keys),
|
||||
first_server_address: env.komodo_first_server_address.or(config.first_server_address),
|
||||
first_server_name: env.komodo_first_server_name.or(config.first_server_name),
|
||||
frontend_path: env.komodo_frontend_path.unwrap_or(config.frontend_path),
|
||||
jwt_ttl: env
|
||||
.komodo_jwt_ttl
|
||||
.unwrap_or(config.jwt_ttl),
|
||||
periphery_public_keys: env
|
||||
.komodo_periphery_public_keys
|
||||
.or(config.periphery_public_keys),
|
||||
first_server_address: env
|
||||
.komodo_first_server_address
|
||||
.or(config.first_server_address),
|
||||
first_server_name: env
|
||||
.komodo_first_server_name
|
||||
.or(config.first_server_name),
|
||||
frontend_path: env
|
||||
.komodo_frontend_path
|
||||
.unwrap_or(config.frontend_path),
|
||||
jwt_ttl: env.komodo_jwt_ttl.unwrap_or(config.jwt_ttl),
|
||||
sync_directory: env
|
||||
.komodo_sync_directory
|
||||
.unwrap_or(config.sync_directory),
|
||||
@@ -291,24 +311,31 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
ui_write_disabled: env
|
||||
.komodo_ui_write_disabled
|
||||
.unwrap_or(config.ui_write_disabled),
|
||||
disable_confirm_dialog: env.komodo_disable_confirm_dialog
|
||||
disable_confirm_dialog: env
|
||||
.komodo_disable_confirm_dialog
|
||||
.unwrap_or(config.disable_confirm_dialog),
|
||||
disable_websocket_reconnect: env.komodo_disable_websocket_reconnect
|
||||
disable_websocket_reconnect: env
|
||||
.komodo_disable_websocket_reconnect
|
||||
.unwrap_or(config.disable_websocket_reconnect),
|
||||
enable_new_users: env.komodo_enable_new_users
|
||||
enable_new_users: env
|
||||
.komodo_enable_new_users
|
||||
.unwrap_or(config.enable_new_users),
|
||||
disable_user_registration: env.komodo_disable_user_registration
|
||||
disable_user_registration: env
|
||||
.komodo_disable_user_registration
|
||||
.unwrap_or(config.disable_user_registration),
|
||||
disable_non_admin_create: env.komodo_disable_non_admin_create
|
||||
disable_non_admin_create: env
|
||||
.komodo_disable_non_admin_create
|
||||
.unwrap_or(config.disable_non_admin_create),
|
||||
disable_init_resources: env.komodo_disable_init_resources
|
||||
disable_init_resources: env
|
||||
.komodo_disable_init_resources
|
||||
.unwrap_or(config.disable_init_resources),
|
||||
enable_fancy_toml: env.komodo_enable_fancy_toml
|
||||
enable_fancy_toml: env
|
||||
.komodo_enable_fancy_toml
|
||||
.unwrap_or(config.enable_fancy_toml),
|
||||
lock_login_credentials_for: env.komodo_lock_login_credentials_for
|
||||
lock_login_credentials_for: env
|
||||
.komodo_lock_login_credentials_for
|
||||
.unwrap_or(config.lock_login_credentials_for),
|
||||
local_auth: env.komodo_local_auth
|
||||
.unwrap_or(config.local_auth),
|
||||
local_auth: env.komodo_local_auth.unwrap_or(config.local_auth),
|
||||
logging: LogConfig {
|
||||
level: env
|
||||
.komodo_logging_level
|
||||
@@ -316,9 +343,11 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
stdio: env
|
||||
.komodo_logging_stdio
|
||||
.unwrap_or(config.logging.stdio),
|
||||
pretty: env.komodo_logging_pretty
|
||||
pretty: env
|
||||
.komodo_logging_pretty
|
||||
.unwrap_or(config.logging.pretty),
|
||||
location: env.komodo_logging_location
|
||||
location: env
|
||||
.komodo_logging_location
|
||||
.unwrap_or(config.logging.location),
|
||||
otlp_endpoint: env
|
||||
.komodo_logging_otlp_endpoint
|
||||
@@ -327,12 +356,24 @@ pub fn core_config() -> &'static CoreConfig {
|
||||
.komodo_logging_opentelemetry_service_name
|
||||
.unwrap_or(config.logging.opentelemetry_service_name),
|
||||
},
|
||||
pretty_startup_config: env.komodo_pretty_startup_config.unwrap_or(config.pretty_startup_config),
|
||||
unsafe_unsanitized_startup_config: env.komodo_unsafe_unsanitized_startup_config.unwrap_or(config.unsafe_unsanitized_startup_config),
|
||||
internet_interface: env.komodo_internet_interface.unwrap_or(config.internet_interface),
|
||||
ssl_enabled: env.komodo_ssl_enabled.unwrap_or(config.ssl_enabled),
|
||||
ssl_key_file: env.komodo_ssl_key_file.unwrap_or(config.ssl_key_file),
|
||||
ssl_cert_file: env.komodo_ssl_cert_file.unwrap_or(config.ssl_cert_file),
|
||||
pretty_startup_config: env
|
||||
.komodo_pretty_startup_config
|
||||
.unwrap_or(config.pretty_startup_config),
|
||||
unsafe_unsanitized_startup_config: env
|
||||
.komodo_unsafe_unsanitized_startup_config
|
||||
.unwrap_or(config.unsafe_unsanitized_startup_config),
|
||||
internet_interface: env
|
||||
.komodo_internet_interface
|
||||
.unwrap_or(config.internet_interface),
|
||||
ssl_enabled: env
|
||||
.komodo_ssl_enabled
|
||||
.unwrap_or(config.ssl_enabled),
|
||||
ssl_key_file: env
|
||||
.komodo_ssl_key_file
|
||||
.unwrap_or(config.ssl_key_file),
|
||||
ssl_cert_file: env
|
||||
.komodo_ssl_cert_file
|
||||
.unwrap_or(config.ssl_cert_file),
|
||||
|
||||
// These can't be overridden on env
|
||||
secrets: config.secrets,
|
||||
|
||||
+4
-84
@@ -1,22 +1,12 @@
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
sync::{Arc, OnceLock},
|
||||
};
|
||||
use std::sync::{Arc, OnceLock};
|
||||
|
||||
use anyhow::Context;
|
||||
use arc_swap::ArcSwap;
|
||||
use cache::CloneCache;
|
||||
use komodo_client::entities::{
|
||||
action::ActionState,
|
||||
build::BuildState,
|
||||
config::core::{CoreConfig, GithubWebhookAppConfig},
|
||||
deployment::DeploymentState,
|
||||
procedure::ProcedureState,
|
||||
repo::RepoState,
|
||||
stack::StackState,
|
||||
};
|
||||
use octorust::auth::{
|
||||
Credentials, InstallationTokenGenerator, JWTCredentials,
|
||||
action::ActionState, build::BuildState,
|
||||
deployment::DeploymentState, procedure::ProcedureState,
|
||||
repo::RepoState, stack::StackState,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
@@ -149,73 +139,3 @@ pub fn all_resources_cache() -> &'static ArcSwap<AllResourcesById> {
|
||||
OnceLock::new();
|
||||
ALL_RESOURCES.get_or_init(Default::default)
|
||||
}
|
||||
|
||||
pub fn github_client()
|
||||
-> Option<&'static HashMap<String, octorust::Client>> {
|
||||
static GITHUB_CLIENT: OnceLock<
|
||||
Option<HashMap<String, octorust::Client>>,
|
||||
> = OnceLock::new();
|
||||
GITHUB_CLIENT
|
||||
.get_or_init(|| {
|
||||
let CoreConfig {
|
||||
github_webhook_app:
|
||||
GithubWebhookAppConfig {
|
||||
app_id,
|
||||
installations,
|
||||
pk_path,
|
||||
..
|
||||
},
|
||||
..
|
||||
} = core_config();
|
||||
if *app_id == 0 || installations.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let private_key = match std::fs::read(pk_path).with_context(|| format!("github webhook app | failed to load private key at {pk_path}")) {
|
||||
Ok(key) => key,
|
||||
Err(e) => {
|
||||
error!("{e:#}");
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
let private_key = match nom_pem::decode_block(&private_key) {
|
||||
Ok(key) => key,
|
||||
Err(e) => {
|
||||
error!("github webhook app | failed to decode private key at {pk_path} | {e:?}");
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
let jwt = match JWTCredentials::new(*app_id, private_key.data).context("failed to initialize github JWTCredentials") {
|
||||
Ok(jwt) => jwt,
|
||||
Err(e) => {
|
||||
error!("github webhook app | failed to make github JWTCredentials | pk path: {pk_path} | {e:#}");
|
||||
return None
|
||||
}
|
||||
};
|
||||
|
||||
let mut clients =
|
||||
HashMap::with_capacity(installations.capacity());
|
||||
|
||||
for installation in installations {
|
||||
let token_generator = InstallationTokenGenerator::new(
|
||||
installation.id,
|
||||
jwt.clone(),
|
||||
);
|
||||
let client = match octorust::Client::new(
|
||||
"github-app",
|
||||
Credentials::InstallationToken(token_generator),
|
||||
).with_context(|| format!("failed to initialize github webhook client for installation {}", installation.id)) {
|
||||
Ok(client) => client,
|
||||
Err(e) => {
|
||||
error!("{e:#}");
|
||||
continue;
|
||||
}
|
||||
};
|
||||
clients.insert(installation.namespace.to_string(), client);
|
||||
}
|
||||
|
||||
Some(clients)
|
||||
})
|
||||
.as_ref()
|
||||
}
|
||||
|
||||
@@ -237,29 +237,3 @@ pub struct ListCommonBuildExtraArgs {
|
||||
#[typeshare]
|
||||
pub type ListCommonBuildExtraArgsResponse = Vec<String>;
|
||||
|
||||
//
|
||||
|
||||
/// Get whether a Build's target repo has a webhook for the build configured. Response: [GetBuildWebhookEnabledResponse].
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoReadRequest)]
|
||||
#[response(GetBuildWebhookEnabledResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct GetBuildWebhookEnabled {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub build: String,
|
||||
}
|
||||
|
||||
/// Response for [GetBuildWebhookEnabled]
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetBuildWebhookEnabledResponse {
|
||||
/// Whether the repo webhooks can even be managed.
|
||||
/// The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
pub managed: bool,
|
||||
/// Whether pushes to branch trigger build. Will always be false if managed is false.
|
||||
pub enabled: bool,
|
||||
}
|
||||
|
||||
@@ -108,8 +108,6 @@ pub struct GetCoreInfoResponse {
|
||||
pub disable_non_admin_create: bool,
|
||||
/// Whether confirm dialog should be disabled
|
||||
pub disable_confirm_dialog: bool,
|
||||
/// The repo owners for which github webhook management api is available
|
||||
pub github_webhook_owners: Vec<String>,
|
||||
/// Whether to disable websocket automatic reconnect.
|
||||
pub disable_websocket_reconnect: bool,
|
||||
/// Whether to enable fancy toml highlighting.
|
||||
|
||||
@@ -117,34 +117,3 @@ pub struct GetReposSummaryResponse {
|
||||
/// The number of repos with unknown state.
|
||||
pub unknown: u32,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/// Get a target Repo's configured webhooks. Response: [GetRepoWebhooksEnabledResponse].
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoReadRequest)]
|
||||
#[response(GetRepoWebhooksEnabledResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct GetRepoWebhooksEnabled {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub repo: String,
|
||||
}
|
||||
|
||||
/// Response for [GetRepoWebhooksEnabled]
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetRepoWebhooksEnabledResponse {
|
||||
/// Whether the repo webhooks can even be managed.
|
||||
/// The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
pub managed: bool,
|
||||
/// Whether pushes to branch trigger clone. Will always be false if managed is false.
|
||||
pub clone_enabled: bool,
|
||||
/// Whether pushes to branch trigger pull. Will always be false if managed is false.
|
||||
pub pull_enabled: bool,
|
||||
/// Whether pushes to branch trigger build. Will always be false if managed is false.
|
||||
pub build_enabled: bool,
|
||||
}
|
||||
|
||||
@@ -276,32 +276,3 @@ pub struct GetStacksSummaryResponse {
|
||||
/// The number of stacks with Unknown state.
|
||||
pub unknown: u32,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/// Get a target stack's configured webhooks. Response: [GetStackWebhooksEnabledResponse].
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoReadRequest)]
|
||||
#[response(GetStackWebhooksEnabledResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct GetStackWebhooksEnabled {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub stack: String,
|
||||
}
|
||||
|
||||
/// Response for [GetStackWebhooksEnabled]
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetStackWebhooksEnabledResponse {
|
||||
/// Whether the repo webhooks can even be managed.
|
||||
/// The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
pub managed: bool,
|
||||
/// Whether pushes to branch trigger refresh. Will always be false if managed is false.
|
||||
pub refresh_enabled: bool,
|
||||
/// Whether pushes to branch trigger stack execution. Will always be false if managed is false.
|
||||
pub deploy_enabled: bool,
|
||||
}
|
||||
|
||||
@@ -116,32 +116,3 @@ pub struct GetResourceSyncsSummaryResponse {
|
||||
/// The number of syncs with unknown state.
|
||||
pub unknown: u32,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/// Get a target Sync's configured webhooks. Response: [GetSyncWebhooksEnabledResponse].
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoReadRequest)]
|
||||
#[response(GetSyncWebhooksEnabledResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct GetSyncWebhooksEnabled {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub sync: String,
|
||||
}
|
||||
|
||||
/// Response for [GetSyncWebhooksEnabled]
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetSyncWebhooksEnabledResponse {
|
||||
/// Whether the repo webhooks can even be managed.
|
||||
/// The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
pub managed: bool,
|
||||
/// Whether pushes to branch trigger refresh. Will always be false if managed is false.
|
||||
pub refresh_enabled: bool,
|
||||
/// Whether pushes to branch trigger sync execution. Will always be false if managed is false.
|
||||
pub sync_enabled: bool,
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::entities::{
|
||||
NoData,
|
||||
action::{_PartialActionConfig, Action},
|
||||
update::Update,
|
||||
};
|
||||
@@ -104,41 +103,3 @@ pub struct RenameAction {
|
||||
/// The new name.
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
/// Create a webhook on the github action attached to the Action resource.
|
||||
/// passed in request. Response: [CreateActionWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(CreateActionWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct CreateActionWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub action: String,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type CreateActionWebhookResponse = NoData;
|
||||
|
||||
//
|
||||
|
||||
/// Delete the webhook on the github action attached to the Action resource.
|
||||
/// passed in request. Response: [DeleteActionWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(DeleteActionWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct DeleteActionWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub action: String,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type DeleteActionWebhookResponse = NoData;
|
||||
|
||||
@@ -138,43 +138,3 @@ pub struct RefreshBuildCache {
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub build: String,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/// Create a webhook on the github repo attached to the build
|
||||
/// passed in request. Response: [CreateBuildWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(CreateBuildWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct CreateBuildWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub build: String,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type CreateBuildWebhookResponse = NoData;
|
||||
|
||||
//
|
||||
|
||||
/// Delete a webhook on the github repo attached to the build
|
||||
/// passed in request. Response: [CreateBuildWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(DeleteBuildWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct DeleteBuildWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub build: String,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type DeleteBuildWebhookResponse = NoData;
|
||||
|
||||
@@ -133,45 +133,3 @@ pub enum RepoWebhookAction {
|
||||
Pull,
|
||||
Build,
|
||||
}
|
||||
|
||||
/// Create a webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
/// passed in request. Response: [CreateRepoWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(CreateRepoWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct CreateRepoWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub repo: String,
|
||||
/// "Clone" or "Pull" or "Build"
|
||||
pub action: RepoWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type CreateRepoWebhookResponse = NoData;
|
||||
|
||||
//
|
||||
|
||||
/// Delete the webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
/// passed in request. Response: [DeleteRepoWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(DeleteRepoWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct DeleteRepoWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub repo: String,
|
||||
/// "Clone" or "Pull" or "Build"
|
||||
pub action: RepoWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type DeleteRepoWebhookResponse = NoData;
|
||||
|
||||
@@ -155,45 +155,3 @@ pub enum StackWebhookAction {
|
||||
Refresh,
|
||||
Deploy,
|
||||
}
|
||||
|
||||
/// Create a webhook on the github repo attached to the stack
|
||||
/// passed in request. Response: [CreateStackWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(CreateStackWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct CreateStackWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub stack: String,
|
||||
/// "Refresh" or "Deploy"
|
||||
pub action: StackWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type CreateStackWebhookResponse = NoData;
|
||||
|
||||
//
|
||||
|
||||
/// Delete the webhook on the github repo attached to the stack
|
||||
/// passed in request. Response: [DeleteStackWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(DeleteStackWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct DeleteStackWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub stack: String,
|
||||
/// "Refresh" or "Deploy"
|
||||
pub action: StackWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type DeleteStackWebhookResponse = NoData;
|
||||
|
||||
@@ -5,7 +5,6 @@ use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::entities::{
|
||||
NoData,
|
||||
sync::{_PartialResourceSyncConfig, ResourceSync},
|
||||
update::Update,
|
||||
};
|
||||
@@ -178,45 +177,3 @@ pub enum SyncWebhookAction {
|
||||
Refresh,
|
||||
Sync,
|
||||
}
|
||||
|
||||
/// Create a webhook on the github repo attached to the sync
|
||||
/// passed in request. Response: [CreateSyncWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(CreateSyncWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct CreateSyncWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub sync: String,
|
||||
/// "Refresh" or "Sync"
|
||||
pub action: SyncWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type CreateSyncWebhookResponse = NoData;
|
||||
|
||||
//
|
||||
|
||||
/// Delete the webhook on the github repo attached to the sync
|
||||
/// passed in request. Response: [DeleteSyncWebhookResponse]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(KomodoWriteRequest)]
|
||||
#[response(DeleteSyncWebhookResponse)]
|
||||
#[error(serror::Error)]
|
||||
pub struct DeleteSyncWebhook {
|
||||
/// Id or name
|
||||
#[serde(alias = "id", alias = "name")]
|
||||
pub sync: String,
|
||||
/// "Refresh" or "Sync"
|
||||
pub action: SyncWebhookAction,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type DeleteSyncWebhookResponse = NoData;
|
||||
|
||||
@@ -214,25 +214,6 @@ pub struct Env {
|
||||
/// Override `github_oauth.secret` from file
|
||||
pub komodo_github_oauth_secret_file: Option<PathBuf>,
|
||||
|
||||
/// Override `github_webhook_app.app_id`
|
||||
pub komodo_github_webhook_app_app_id: Option<i64>,
|
||||
/// Override `github_webhook_app.app_id` from file
|
||||
pub komodo_github_webhook_app_app_id_file: Option<PathBuf>,
|
||||
/// Override `github_webhook_app.installations[i].id`. Accepts comma seperated list.
|
||||
///
|
||||
/// Note. Paired by index with values in `komodo_github_webhook_app_installations_namespaces`
|
||||
pub komodo_github_webhook_app_installations_ids: Option<Vec<i64>>,
|
||||
/// Override `github_webhook_app.installations[i].id` from file
|
||||
pub komodo_github_webhook_app_installations_ids_file:
|
||||
Option<PathBuf>,
|
||||
/// Override `github_webhook_app.installations[i].namespace`. Accepts comma seperated list.
|
||||
///
|
||||
/// Note. Paired by index with values in `komodo_github_webhook_app_installations_ids`
|
||||
pub komodo_github_webhook_app_installations_namespaces:
|
||||
Option<Vec<String>>,
|
||||
/// Override `github_webhook_app.pk_path`
|
||||
pub komodo_github_webhook_app_pk_path: Option<String>,
|
||||
|
||||
/// Override `database.uri`
|
||||
#[serde(alias = "komodo_mongo_uri")]
|
||||
pub komodo_database_uri: Option<String>,
|
||||
@@ -544,11 +525,6 @@ pub struct CoreConfig {
|
||||
#[serde(default)]
|
||||
pub webhook_base_url: String,
|
||||
|
||||
/// Configure a Github Webhook app.
|
||||
/// Allows users to manage repo webhooks from within the Komodo UI.
|
||||
#[serde(default)]
|
||||
pub github_webhook_app: GithubWebhookAppConfig,
|
||||
|
||||
// ===========
|
||||
// = Logging =
|
||||
// ===========
|
||||
@@ -782,7 +758,6 @@ impl Default for CoreConfig {
|
||||
github_oauth: Default::default(),
|
||||
webhook_secret: Default::default(),
|
||||
webhook_base_url: Default::default(),
|
||||
github_webhook_app: Default::default(),
|
||||
logging: Default::default(),
|
||||
pretty_startup_config: Default::default(),
|
||||
unsafe_unsanitized_startup_config: Default::default(),
|
||||
@@ -879,7 +854,6 @@ impl CoreConfig {
|
||||
},
|
||||
webhook_secret: empty_or_redacted(&config.webhook_secret),
|
||||
webhook_base_url: config.webhook_base_url,
|
||||
github_webhook_app: config.github_webhook_app,
|
||||
database: config.database.sanitized(),
|
||||
aws: AwsCredentials {
|
||||
access_key_id: empty_or_redacted(&config.aws.access_key_id),
|
||||
@@ -942,38 +916,3 @@ pub struct AwsCredentials {
|
||||
/// The aws SECRET_ACCESS_KEY
|
||||
pub secret_access_key: String,
|
||||
}
|
||||
|
||||
/// Provide configuration for a Github Webhook app.
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
pub struct GithubWebhookAppConfig {
|
||||
/// Github app id
|
||||
pub app_id: i64,
|
||||
/// Configure the app installations on multiple accounts / organizations.
|
||||
pub installations: Vec<GithubWebhookAppInstallationConfig>,
|
||||
/// Private key path. Default: /github-private-key.pem.
|
||||
#[serde(default = "default_private_key_path")]
|
||||
pub pk_path: String,
|
||||
}
|
||||
|
||||
fn default_private_key_path() -> String {
|
||||
String::from("/github/private-key.pem")
|
||||
}
|
||||
|
||||
impl Default for GithubWebhookAppConfig {
|
||||
fn default() -> Self {
|
||||
GithubWebhookAppConfig {
|
||||
app_id: 0,
|
||||
installations: Default::default(),
|
||||
pk_path: default_private_key_path(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Provide configuration for a Github Webhook app installation.
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
pub struct GithubWebhookAppInstallationConfig {
|
||||
/// The installation ID
|
||||
pub id: i64,
|
||||
/// The user or organization name
|
||||
pub namespace: String,
|
||||
}
|
||||
|
||||
@@ -85,7 +85,6 @@ export type ReadResponses = {
|
||||
GetStacksSummary: Types.GetStacksSummaryResponse;
|
||||
GetStack: Types.GetStackResponse;
|
||||
GetStackActionState: Types.GetStackActionStateResponse;
|
||||
GetStackWebhooksEnabled: Types.GetStackWebhooksEnabledResponse;
|
||||
GetStackLog: Types.GetStackLogResponse;
|
||||
SearchStackLog: Types.SearchStackLogResponse;
|
||||
InspectStackContainer: Types.InspectStackContainerResponse;
|
||||
@@ -113,7 +112,6 @@ export type ReadResponses = {
|
||||
GetBuild: Types.GetBuildResponse;
|
||||
GetBuildActionState: Types.GetBuildActionStateResponse;
|
||||
GetBuildMonthlyStats: Types.GetBuildMonthlyStatsResponse;
|
||||
GetBuildWebhookEnabled: Types.GetBuildWebhookEnabledResponse;
|
||||
ListBuilds: Types.ListBuildsResponse;
|
||||
ListFullBuilds: Types.ListFullBuildsResponse;
|
||||
ListBuildVersions: Types.ListBuildVersionsResponse;
|
||||
@@ -123,7 +121,6 @@ export type ReadResponses = {
|
||||
GetReposSummary: Types.GetReposSummaryResponse;
|
||||
GetRepo: Types.GetRepoResponse;
|
||||
GetRepoActionState: Types.GetRepoActionStateResponse;
|
||||
GetRepoWebhooksEnabled: Types.GetRepoWebhooksEnabledResponse;
|
||||
ListRepos: Types.ListReposResponse;
|
||||
ListFullRepos: Types.ListFullReposResponse;
|
||||
|
||||
@@ -131,7 +128,6 @@ export type ReadResponses = {
|
||||
GetResourceSyncsSummary: Types.GetResourceSyncsSummaryResponse;
|
||||
GetResourceSync: Types.GetResourceSyncResponse;
|
||||
GetResourceSyncActionState: Types.GetResourceSyncActionStateResponse;
|
||||
GetSyncWebhooksEnabled: Types.GetSyncWebhooksEnabledResponse;
|
||||
ListResourceSyncs: Types.ListResourceSyncsResponse;
|
||||
ListFullResourceSyncs: Types.ListFullResourceSyncsResponse;
|
||||
|
||||
@@ -234,8 +230,6 @@ export type WriteResponses = {
|
||||
RenameStack: Types.Update;
|
||||
WriteStackFileContents: Types.Update;
|
||||
RefreshStackCache: Types.NoData;
|
||||
CreateStackWebhook: Types.CreateStackWebhookResponse;
|
||||
DeleteStackWebhook: Types.DeleteStackWebhookResponse;
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
CreateDeployment: Types.Deployment;
|
||||
@@ -253,8 +247,6 @@ export type WriteResponses = {
|
||||
RenameBuild: Types.Update;
|
||||
WriteBuildFileContents: Types.Update;
|
||||
RefreshBuildCache: Types.NoData;
|
||||
CreateBuildWebhook: Types.CreateBuildWebhookResponse;
|
||||
DeleteBuildWebhook: Types.DeleteBuildWebhookResponse;
|
||||
|
||||
// ==== BUILDER ====
|
||||
CreateBuilder: Types.Builder;
|
||||
@@ -270,8 +262,6 @@ export type WriteResponses = {
|
||||
UpdateRepo: Types.Repo;
|
||||
RenameRepo: Types.Update;
|
||||
RefreshRepoCache: Types.NoData;
|
||||
CreateRepoWebhook: Types.CreateRepoWebhookResponse;
|
||||
DeleteRepoWebhook: Types.DeleteRepoWebhookResponse;
|
||||
|
||||
// ==== ALERTER ====
|
||||
CreateAlerter: Types.Alerter;
|
||||
@@ -303,8 +293,6 @@ export type WriteResponses = {
|
||||
CommitSync: Types.Update;
|
||||
WriteSyncFileContents: Types.Update;
|
||||
RefreshResourceSyncPending: Types.ResourceSync;
|
||||
CreateSyncWebhook: Types.CreateSyncWebhookResponse;
|
||||
DeleteSyncWebhook: Types.DeleteSyncWebhookResponse;
|
||||
|
||||
// ==== TAG ====
|
||||
CreateTag: Types.Tag;
|
||||
|
||||
+16
-228
@@ -965,8 +965,6 @@ export type Procedure = Resource<ProcedureConfig, undefined>;
|
||||
|
||||
export type CopyProcedureResponse = Procedure;
|
||||
|
||||
export type CreateActionWebhookResponse = NoData;
|
||||
|
||||
/** Response for [CreateApiKey]. */
|
||||
export interface CreateApiKeyResponse {
|
||||
/** X-API-KEY */
|
||||
@@ -982,8 +980,6 @@ export interface CreateApiKeyResponse {
|
||||
|
||||
export type CreateApiKeyForServiceUserResponse = CreateApiKeyResponse;
|
||||
|
||||
export type CreateBuildWebhookResponse = NoData;
|
||||
|
||||
/** Configuration to access private image repositories on various registries. */
|
||||
export interface DockerRegistryAccount {
|
||||
/**
|
||||
@@ -1101,14 +1097,8 @@ export type CreateLocalUserResponse = User;
|
||||
|
||||
export type CreateProcedureResponse = Procedure;
|
||||
|
||||
export type CreateRepoWebhookResponse = NoData;
|
||||
|
||||
export type CreateServiceUserResponse = User;
|
||||
|
||||
export type CreateStackWebhookResponse = NoData;
|
||||
|
||||
export type CreateSyncWebhookResponse = NoData;
|
||||
|
||||
/**
|
||||
* A non-secret global variable which can be interpolated into deployment
|
||||
* environment variable values and build argument values.
|
||||
@@ -1136,14 +1126,10 @@ export interface Variable {
|
||||
|
||||
export type CreateVariableResponse = Variable;
|
||||
|
||||
export type DeleteActionWebhookResponse = NoData;
|
||||
|
||||
export type DeleteApiKeyForServiceUserResponse = NoData;
|
||||
|
||||
export type DeleteApiKeyResponse = NoData;
|
||||
|
||||
export type DeleteBuildWebhookResponse = NoData;
|
||||
|
||||
export type DeleteDockerRegistryAccountResponse = DockerRegistryAccount;
|
||||
|
||||
export type DeleteGitProviderAccountResponse = GitProviderAccount;
|
||||
@@ -1184,12 +1170,6 @@ export type DeleteOnboardingKeyResponse = OnboardingKey;
|
||||
|
||||
export type DeleteProcedureResponse = Procedure;
|
||||
|
||||
export type DeleteRepoWebhookResponse = NoData;
|
||||
|
||||
export type DeleteStackWebhookResponse = NoData;
|
||||
|
||||
export type DeleteSyncWebhookResponse = NoData;
|
||||
|
||||
export type DeleteUserResponse = User;
|
||||
|
||||
export type DeleteVariableResponse = Variable;
|
||||
@@ -5020,15 +5000,6 @@ export interface CreateAction {
|
||||
config?: _PartialActionConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a webhook on the github action attached to the Action resource.
|
||||
* passed in request. Response: [CreateActionWebhookResponse]
|
||||
*/
|
||||
export interface CreateActionWebhook {
|
||||
/** Id or name */
|
||||
action: string;
|
||||
}
|
||||
|
||||
/** Create an alerter. Response: [Alerter]. */
|
||||
export interface CreateAlerter {
|
||||
/** The name given to newly created alerter. */
|
||||
@@ -5078,15 +5049,6 @@ export interface CreateBuild {
|
||||
config?: _PartialBuildConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the build
|
||||
* passed in request. Response: [CreateBuildWebhookResponse]
|
||||
*/
|
||||
export interface CreateBuildWebhook {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
|
||||
/** Partial representation of [BuilderConfig] */
|
||||
export type PartialBuilderConfig =
|
||||
| { type: "Url", params: _PartialUrlBuilderConfig }
|
||||
@@ -5218,23 +5180,6 @@ export interface CreateRepo {
|
||||
config?: _PartialRepoConfig;
|
||||
}
|
||||
|
||||
export enum RepoWebhookAction {
|
||||
Clone = "Clone",
|
||||
Pull = "Pull",
|
||||
Build = "Build",
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
* passed in request. Response: [CreateRepoWebhookResponse]
|
||||
*/
|
||||
export interface CreateRepoWebhook {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
/** "Clone" or "Pull" or "Build" */
|
||||
action: RepoWebhookAction;
|
||||
}
|
||||
|
||||
/** Create a sync. Response: [ResourceSync]. */
|
||||
export interface CreateResourceSync {
|
||||
/** The name given to newly created sync. */
|
||||
@@ -5272,38 +5217,6 @@ export interface CreateStack {
|
||||
config?: _PartialStackConfig;
|
||||
}
|
||||
|
||||
export enum StackWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Deploy = "Deploy",
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the stack
|
||||
* passed in request. Response: [CreateStackWebhookResponse]
|
||||
*/
|
||||
export interface CreateStackWebhook {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
/** "Refresh" or "Deploy" */
|
||||
action: StackWebhookAction;
|
||||
}
|
||||
|
||||
export enum SyncWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Sync = "Sync",
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the sync
|
||||
* passed in request. Response: [CreateSyncWebhookResponse]
|
||||
*/
|
||||
export interface CreateSyncWebhook {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
/** "Refresh" or "Sync" */
|
||||
action: SyncWebhookAction;
|
||||
}
|
||||
|
||||
/** Create a tag. Response: [Tag]. */
|
||||
export interface CreateTag {
|
||||
/** The name of the tag. */
|
||||
@@ -5383,15 +5296,6 @@ export interface DeleteAction {
|
||||
id: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the webhook on the github action attached to the Action resource.
|
||||
* passed in request. Response: [DeleteActionWebhookResponse]
|
||||
*/
|
||||
export interface DeleteActionWebhook {
|
||||
/** Id or name */
|
||||
action: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the alerter at the given id, and returns the deleted alerter.
|
||||
* Response: [Alerter]
|
||||
@@ -5436,15 +5340,6 @@ export interface DeleteBuild {
|
||||
id: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a webhook on the github repo attached to the build
|
||||
* passed in request. Response: [CreateBuildWebhookResponse]
|
||||
*/
|
||||
export interface DeleteBuildWebhook {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the builder at the given id, and returns the deleted builder.
|
||||
* Response: [Builder]
|
||||
@@ -5532,17 +5427,6 @@ export interface DeleteRepo {
|
||||
id: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
* passed in request. Response: [DeleteRepoWebhookResponse]
|
||||
*/
|
||||
export interface DeleteRepoWebhook {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
/** "Clone" or "Pull" or "Build" */
|
||||
action: RepoWebhookAction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the sync at the given id, and returns the deleted sync.
|
||||
* Response: [ResourceSync]
|
||||
@@ -5570,28 +5454,6 @@ export interface DeleteStack {
|
||||
id: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the stack
|
||||
* passed in request. Response: [DeleteStackWebhookResponse]
|
||||
*/
|
||||
export interface DeleteStackWebhook {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
/** "Refresh" or "Deploy" */
|
||||
action: StackWebhookAction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the sync
|
||||
* passed in request. Response: [DeleteSyncWebhookResponse]
|
||||
*/
|
||||
export interface DeleteSyncWebhook {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
/** "Refresh" or "Sync" */
|
||||
action: SyncWebhookAction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a tag, and return the deleted tag. Response: [Tag].
|
||||
*
|
||||
@@ -6018,23 +5880,6 @@ export interface GetBuildMonthlyStatsResponse {
|
||||
days: BuildStatsDay[];
|
||||
}
|
||||
|
||||
/** Get whether a Build's target repo has a webhook for the build configured. Response: [GetBuildWebhookEnabledResponse]. */
|
||||
export interface GetBuildWebhookEnabled {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
|
||||
/** Response for [GetBuildWebhookEnabled] */
|
||||
export interface GetBuildWebhookEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger build. Will always be false if managed is false. */
|
||||
enabled: boolean;
|
||||
}
|
||||
|
||||
/** Get a specific builder by id or name. Response: [Builder]. */
|
||||
export interface GetBuilder {
|
||||
/** Id or name */
|
||||
@@ -6119,8 +5964,6 @@ export interface GetCoreInfoResponse {
|
||||
disable_non_admin_create: boolean;
|
||||
/** Whether confirm dialog should be disabled */
|
||||
disable_confirm_dialog: boolean;
|
||||
/** The repo owners for which github webhook management api is available */
|
||||
github_webhook_owners: string[];
|
||||
/** Whether to disable websocket automatic reconnect. */
|
||||
disable_websocket_reconnect: boolean;
|
||||
/** Whether to enable fancy toml highlighting. */
|
||||
@@ -6392,27 +6235,6 @@ export interface GetRepoActionState {
|
||||
repo: string;
|
||||
}
|
||||
|
||||
/** Get a target Repo's configured webhooks. Response: [GetRepoWebhooksEnabledResponse]. */
|
||||
export interface GetRepoWebhooksEnabled {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
}
|
||||
|
||||
/** Response for [GetRepoWebhooksEnabled] */
|
||||
export interface GetRepoWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger clone. Will always be false if managed is false. */
|
||||
clone_enabled: boolean;
|
||||
/** Whether pushes to branch trigger pull. Will always be false if managed is false. */
|
||||
pull_enabled: boolean;
|
||||
/** Whether pushes to branch trigger build. Will always be false if managed is false. */
|
||||
build_enabled: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a summary of data relating to all repos.
|
||||
* Response: [GetReposSummaryResponse].
|
||||
@@ -6566,25 +6388,6 @@ export interface GetStackLog {
|
||||
timestamps?: boolean;
|
||||
}
|
||||
|
||||
/** Get a target stack's configured webhooks. Response: [GetStackWebhooksEnabledResponse]. */
|
||||
export interface GetStackWebhooksEnabled {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
}
|
||||
|
||||
/** Response for [GetStackWebhooksEnabled] */
|
||||
export interface GetStackWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger refresh. Will always be false if managed is false. */
|
||||
refresh_enabled: boolean;
|
||||
/** Whether pushes to branch trigger stack execution. Will always be false if managed is false. */
|
||||
deploy_enabled: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a summary of data relating to all syncs.
|
||||
* Response: [GetStacksSummaryResponse].
|
||||
@@ -6608,25 +6411,6 @@ export interface GetStacksSummaryResponse {
|
||||
unknown: number;
|
||||
}
|
||||
|
||||
/** Get a target Sync's configured webhooks. Response: [GetSyncWebhooksEnabledResponse]. */
|
||||
export interface GetSyncWebhooksEnabled {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
}
|
||||
|
||||
/** Response for [GetSyncWebhooksEnabled] */
|
||||
export interface GetSyncWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger refresh. Will always be false if managed is false. */
|
||||
refresh_enabled: boolean;
|
||||
/** Whether pushes to branch trigger sync execution. Will always be false if managed is false. */
|
||||
sync_enabled: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the system information of the target server.
|
||||
* Response: [SystemInformation].
|
||||
@@ -8953,7 +8737,6 @@ export type ReadRequest =
|
||||
| { type: "GetStacksSummary", params: GetStacksSummary }
|
||||
| { type: "GetStack", params: GetStack }
|
||||
| { type: "GetStackActionState", params: GetStackActionState }
|
||||
| { type: "GetStackWebhooksEnabled", params: GetStackWebhooksEnabled }
|
||||
| { type: "GetStackLog", params: GetStackLog }
|
||||
| { type: "SearchStackLog", params: SearchStackLog }
|
||||
| { type: "InspectStackContainer", params: InspectStackContainer }
|
||||
@@ -8978,20 +8761,17 @@ export type ReadRequest =
|
||||
| { type: "GetBuildActionState", params: GetBuildActionState }
|
||||
| { type: "GetBuildMonthlyStats", params: GetBuildMonthlyStats }
|
||||
| { type: "ListBuildVersions", params: ListBuildVersions }
|
||||
| { type: "GetBuildWebhookEnabled", params: GetBuildWebhookEnabled }
|
||||
| { type: "ListBuilds", params: ListBuilds }
|
||||
| { type: "ListFullBuilds", params: ListFullBuilds }
|
||||
| { type: "ListCommonBuildExtraArgs", params: ListCommonBuildExtraArgs }
|
||||
| { type: "GetReposSummary", params: GetReposSummary }
|
||||
| { type: "GetRepo", params: GetRepo }
|
||||
| { type: "GetRepoActionState", params: GetRepoActionState }
|
||||
| { type: "GetRepoWebhooksEnabled", params: GetRepoWebhooksEnabled }
|
||||
| { type: "ListRepos", params: ListRepos }
|
||||
| { type: "ListFullRepos", params: ListFullRepos }
|
||||
| { type: "GetResourceSyncsSummary", params: GetResourceSyncsSummary }
|
||||
| { type: "GetResourceSync", params: GetResourceSync }
|
||||
| { type: "GetResourceSyncActionState", params: GetResourceSyncActionState }
|
||||
| { type: "GetSyncWebhooksEnabled", params: GetSyncWebhooksEnabled }
|
||||
| { type: "ListResourceSyncs", params: ListResourceSyncs }
|
||||
| { type: "ListFullResourceSyncs", params: ListFullResourceSyncs }
|
||||
| { type: "GetBuildersSummary", params: GetBuildersSummary }
|
||||
@@ -9018,6 +8798,12 @@ export type ReadRequest =
|
||||
| { type: "ListDockerRegistryAccounts", params: ListDockerRegistryAccounts }
|
||||
| { type: "ListOnboardingKeys", params: ListOnboardingKeys };
|
||||
|
||||
export enum RepoWebhookAction {
|
||||
Clone = "Clone",
|
||||
Pull = "Pull",
|
||||
Build = "Build",
|
||||
}
|
||||
|
||||
/** The specific types of permission that a User or UserGroup can have on a resource. */
|
||||
export enum SpecificPermission {
|
||||
/**
|
||||
@@ -9057,6 +8843,16 @@ export enum SpecificPermission {
|
||||
Processes = "Processes",
|
||||
}
|
||||
|
||||
export enum StackWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Deploy = "Deploy",
|
||||
}
|
||||
|
||||
export enum SyncWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Sync = "Sync",
|
||||
}
|
||||
|
||||
export type UserRequest =
|
||||
| { type: "PushRecentlyViewed", params: PushRecentlyViewed }
|
||||
| { type: "SetLastSeenUpdate", params: SetLastSeenUpdate }
|
||||
@@ -9102,8 +8898,6 @@ export type WriteRequest =
|
||||
| { type: "RenameStack", params: RenameStack }
|
||||
| { type: "WriteStackFileContents", params: WriteStackFileContents }
|
||||
| { type: "RefreshStackCache", params: RefreshStackCache }
|
||||
| { type: "CreateStackWebhook", params: CreateStackWebhook }
|
||||
| { type: "DeleteStackWebhook", params: DeleteStackWebhook }
|
||||
| { type: "CreateDeployment", params: CreateDeployment }
|
||||
| { type: "CopyDeployment", params: CopyDeployment }
|
||||
| { type: "CreateDeploymentFromContainer", params: CreateDeploymentFromContainer }
|
||||
@@ -9117,8 +8911,6 @@ export type WriteRequest =
|
||||
| { type: "RenameBuild", params: RenameBuild }
|
||||
| { type: "WriteBuildFileContents", params: WriteBuildFileContents }
|
||||
| { type: "RefreshBuildCache", params: RefreshBuildCache }
|
||||
| { type: "CreateBuildWebhook", params: CreateBuildWebhook }
|
||||
| { type: "DeleteBuildWebhook", params: DeleteBuildWebhook }
|
||||
| { type: "CreateBuilder", params: CreateBuilder }
|
||||
| { type: "CopyBuilder", params: CopyBuilder }
|
||||
| { type: "DeleteBuilder", params: DeleteBuilder }
|
||||
@@ -9130,8 +8922,6 @@ export type WriteRequest =
|
||||
| { type: "UpdateRepo", params: UpdateRepo }
|
||||
| { type: "RenameRepo", params: RenameRepo }
|
||||
| { type: "RefreshRepoCache", params: RefreshRepoCache }
|
||||
| { type: "CreateRepoWebhook", params: CreateRepoWebhook }
|
||||
| { type: "DeleteRepoWebhook", params: DeleteRepoWebhook }
|
||||
| { type: "CreateAlerter", params: CreateAlerter }
|
||||
| { type: "CopyAlerter", params: CopyAlerter }
|
||||
| { type: "DeleteAlerter", params: DeleteAlerter }
|
||||
@@ -9155,8 +8945,6 @@ export type WriteRequest =
|
||||
| { type: "WriteSyncFileContents", params: WriteSyncFileContents }
|
||||
| { type: "CommitSync", params: CommitSync }
|
||||
| { type: "RefreshResourceSyncPending", params: RefreshResourceSyncPending }
|
||||
| { type: "CreateSyncWebhook", params: CreateSyncWebhook }
|
||||
| { type: "DeleteSyncWebhook", params: DeleteSyncWebhook }
|
||||
| { type: "CreateTag", params: CreateTag }
|
||||
| { type: "DeleteTag", params: DeleteTag }
|
||||
| { type: "RenameTag", params: RenameTag }
|
||||
|
||||
-12
@@ -66,7 +66,6 @@ export type ReadResponses = {
|
||||
GetStacksSummary: Types.GetStacksSummaryResponse;
|
||||
GetStack: Types.GetStackResponse;
|
||||
GetStackActionState: Types.GetStackActionStateResponse;
|
||||
GetStackWebhooksEnabled: Types.GetStackWebhooksEnabledResponse;
|
||||
GetStackLog: Types.GetStackLogResponse;
|
||||
SearchStackLog: Types.SearchStackLogResponse;
|
||||
InspectStackContainer: Types.InspectStackContainerResponse;
|
||||
@@ -90,7 +89,6 @@ export type ReadResponses = {
|
||||
GetBuild: Types.GetBuildResponse;
|
||||
GetBuildActionState: Types.GetBuildActionStateResponse;
|
||||
GetBuildMonthlyStats: Types.GetBuildMonthlyStatsResponse;
|
||||
GetBuildWebhookEnabled: Types.GetBuildWebhookEnabledResponse;
|
||||
ListBuilds: Types.ListBuildsResponse;
|
||||
ListFullBuilds: Types.ListFullBuildsResponse;
|
||||
ListBuildVersions: Types.ListBuildVersionsResponse;
|
||||
@@ -98,13 +96,11 @@ export type ReadResponses = {
|
||||
GetReposSummary: Types.GetReposSummaryResponse;
|
||||
GetRepo: Types.GetRepoResponse;
|
||||
GetRepoActionState: Types.GetRepoActionStateResponse;
|
||||
GetRepoWebhooksEnabled: Types.GetRepoWebhooksEnabledResponse;
|
||||
ListRepos: Types.ListReposResponse;
|
||||
ListFullRepos: Types.ListFullReposResponse;
|
||||
GetResourceSyncsSummary: Types.GetResourceSyncsSummaryResponse;
|
||||
GetResourceSync: Types.GetResourceSyncResponse;
|
||||
GetResourceSyncActionState: Types.GetResourceSyncActionStateResponse;
|
||||
GetSyncWebhooksEnabled: Types.GetSyncWebhooksEnabledResponse;
|
||||
ListResourceSyncs: Types.ListResourceSyncsResponse;
|
||||
ListFullResourceSyncs: Types.ListFullResourceSyncsResponse;
|
||||
GetBuildersSummary: Types.GetBuildersSummaryResponse;
|
||||
@@ -173,8 +169,6 @@ export type WriteResponses = {
|
||||
RenameStack: Types.Update;
|
||||
WriteStackFileContents: Types.Update;
|
||||
RefreshStackCache: Types.NoData;
|
||||
CreateStackWebhook: Types.CreateStackWebhookResponse;
|
||||
DeleteStackWebhook: Types.DeleteStackWebhookResponse;
|
||||
CreateDeployment: Types.Deployment;
|
||||
CopyDeployment: Types.Deployment;
|
||||
CreateDeploymentFromContainer: Types.Deployment;
|
||||
@@ -188,8 +182,6 @@ export type WriteResponses = {
|
||||
RenameBuild: Types.Update;
|
||||
WriteBuildFileContents: Types.Update;
|
||||
RefreshBuildCache: Types.NoData;
|
||||
CreateBuildWebhook: Types.CreateBuildWebhookResponse;
|
||||
DeleteBuildWebhook: Types.DeleteBuildWebhookResponse;
|
||||
CreateBuilder: Types.Builder;
|
||||
CopyBuilder: Types.Builder;
|
||||
DeleteBuilder: Types.Builder;
|
||||
@@ -201,8 +193,6 @@ export type WriteResponses = {
|
||||
UpdateRepo: Types.Repo;
|
||||
RenameRepo: Types.Update;
|
||||
RefreshRepoCache: Types.NoData;
|
||||
CreateRepoWebhook: Types.CreateRepoWebhookResponse;
|
||||
DeleteRepoWebhook: Types.DeleteRepoWebhookResponse;
|
||||
CreateAlerter: Types.Alerter;
|
||||
CopyAlerter: Types.Alerter;
|
||||
DeleteAlerter: Types.Alerter;
|
||||
@@ -226,8 +216,6 @@ export type WriteResponses = {
|
||||
CommitSync: Types.Update;
|
||||
WriteSyncFileContents: Types.Update;
|
||||
RefreshResourceSyncPending: Types.ResourceSync;
|
||||
CreateSyncWebhook: Types.CreateSyncWebhookResponse;
|
||||
DeleteSyncWebhook: Types.DeleteSyncWebhookResponse;
|
||||
CreateTag: Types.Tag;
|
||||
DeleteTag: Types.Tag;
|
||||
RenameTag: Types.Tag;
|
||||
|
||||
Vendored
+13
-221
@@ -1100,7 +1100,6 @@ export interface ProcedureConfig {
|
||||
*/
|
||||
export type Procedure = Resource<ProcedureConfig, undefined>;
|
||||
export type CopyProcedureResponse = Procedure;
|
||||
export type CreateActionWebhookResponse = NoData;
|
||||
/** Response for [CreateApiKey]. */
|
||||
export interface CreateApiKeyResponse {
|
||||
/** X-API-KEY */
|
||||
@@ -1114,7 +1113,6 @@ export interface CreateApiKeyResponse {
|
||||
secret: string;
|
||||
}
|
||||
export type CreateApiKeyForServiceUserResponse = CreateApiKeyResponse;
|
||||
export type CreateBuildWebhookResponse = NoData;
|
||||
/** Configuration to access private image repositories on various registries. */
|
||||
export interface DockerRegistryAccount {
|
||||
/**
|
||||
@@ -1239,10 +1237,7 @@ export interface User {
|
||||
}
|
||||
export type CreateLocalUserResponse = User;
|
||||
export type CreateProcedureResponse = Procedure;
|
||||
export type CreateRepoWebhookResponse = NoData;
|
||||
export type CreateServiceUserResponse = User;
|
||||
export type CreateStackWebhookResponse = NoData;
|
||||
export type CreateSyncWebhookResponse = NoData;
|
||||
/**
|
||||
* A non-secret global variable which can be interpolated into deployment
|
||||
* environment variable values and build argument values.
|
||||
@@ -1268,10 +1263,8 @@ export interface Variable {
|
||||
is_secret?: boolean;
|
||||
}
|
||||
export type CreateVariableResponse = Variable;
|
||||
export type DeleteActionWebhookResponse = NoData;
|
||||
export type DeleteApiKeyForServiceUserResponse = NoData;
|
||||
export type DeleteApiKeyResponse = NoData;
|
||||
export type DeleteBuildWebhookResponse = NoData;
|
||||
export type DeleteDockerRegistryAccountResponse = DockerRegistryAccount;
|
||||
export type DeleteGitProviderAccountResponse = GitProviderAccount;
|
||||
/**
|
||||
@@ -1307,9 +1300,6 @@ export interface OnboardingKey {
|
||||
}
|
||||
export type DeleteOnboardingKeyResponse = OnboardingKey;
|
||||
export type DeleteProcedureResponse = Procedure;
|
||||
export type DeleteRepoWebhookResponse = NoData;
|
||||
export type DeleteStackWebhookResponse = NoData;
|
||||
export type DeleteSyncWebhookResponse = NoData;
|
||||
export type DeleteUserResponse = User;
|
||||
export type DeleteVariableResponse = Variable;
|
||||
export type DeploymentImage =
|
||||
@@ -4876,14 +4866,6 @@ export interface CreateAction {
|
||||
/** Optional partial config to initialize the action with. */
|
||||
config?: _PartialActionConfig;
|
||||
}
|
||||
/**
|
||||
* Create a webhook on the github action attached to the Action resource.
|
||||
* passed in request. Response: [CreateActionWebhookResponse]
|
||||
*/
|
||||
export interface CreateActionWebhook {
|
||||
/** Id or name */
|
||||
action: string;
|
||||
}
|
||||
/** Create an alerter. Response: [Alerter]. */
|
||||
export interface CreateAlerter {
|
||||
/** The name given to newly created alerter. */
|
||||
@@ -4929,14 +4911,6 @@ export interface CreateBuild {
|
||||
/** Optional partial config to initialize the build with. */
|
||||
config?: _PartialBuildConfig;
|
||||
}
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the build
|
||||
* passed in request. Response: [CreateBuildWebhookResponse]
|
||||
*/
|
||||
export interface CreateBuildWebhook {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
/** Partial representation of [BuilderConfig] */
|
||||
export type PartialBuilderConfig = {
|
||||
type: "Url";
|
||||
@@ -5062,21 +5036,6 @@ export interface CreateRepo {
|
||||
/** Optional partial config to initialize the repo with. */
|
||||
config?: _PartialRepoConfig;
|
||||
}
|
||||
export declare enum RepoWebhookAction {
|
||||
Clone = "Clone",
|
||||
Pull = "Pull",
|
||||
Build = "Build"
|
||||
}
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
* passed in request. Response: [CreateRepoWebhookResponse]
|
||||
*/
|
||||
export interface CreateRepoWebhook {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
/** "Clone" or "Pull" or "Build" */
|
||||
action: RepoWebhookAction;
|
||||
}
|
||||
/** Create a sync. Response: [ResourceSync]. */
|
||||
export interface CreateResourceSync {
|
||||
/** The name given to newly created sync. */
|
||||
@@ -5110,34 +5069,6 @@ export interface CreateStack {
|
||||
/** Optional partial config to initialize the stack with. */
|
||||
config?: _PartialStackConfig;
|
||||
}
|
||||
export declare enum StackWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Deploy = "Deploy"
|
||||
}
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the stack
|
||||
* passed in request. Response: [CreateStackWebhookResponse]
|
||||
*/
|
||||
export interface CreateStackWebhook {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
/** "Refresh" or "Deploy" */
|
||||
action: StackWebhookAction;
|
||||
}
|
||||
export declare enum SyncWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Sync = "Sync"
|
||||
}
|
||||
/**
|
||||
* Create a webhook on the github repo attached to the sync
|
||||
* passed in request. Response: [CreateSyncWebhookResponse]
|
||||
*/
|
||||
export interface CreateSyncWebhook {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
/** "Refresh" or "Sync" */
|
||||
action: SyncWebhookAction;
|
||||
}
|
||||
/** Create a tag. Response: [Tag]. */
|
||||
export interface CreateTag {
|
||||
/** The name of the tag. */
|
||||
@@ -5210,14 +5141,6 @@ export interface DeleteAction {
|
||||
/** The id or name of the action to delete. */
|
||||
id: string;
|
||||
}
|
||||
/**
|
||||
* Delete the webhook on the github action attached to the Action resource.
|
||||
* passed in request. Response: [DeleteActionWebhookResponse]
|
||||
*/
|
||||
export interface DeleteActionWebhook {
|
||||
/** Id or name */
|
||||
action: string;
|
||||
}
|
||||
/**
|
||||
* Deletes the alerter at the given id, and returns the deleted alerter.
|
||||
* Response: [Alerter]
|
||||
@@ -5257,14 +5180,6 @@ export interface DeleteBuild {
|
||||
/** The id or name of the build to delete. */
|
||||
id: string;
|
||||
}
|
||||
/**
|
||||
* Delete a webhook on the github repo attached to the build
|
||||
* passed in request. Response: [CreateBuildWebhookResponse]
|
||||
*/
|
||||
export interface DeleteBuildWebhook {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
/**
|
||||
* Deletes the builder at the given id, and returns the deleted builder.
|
||||
* Response: [Builder]
|
||||
@@ -5343,16 +5258,6 @@ export interface DeleteRepo {
|
||||
/** The id or name of the repo to delete. */
|
||||
id: string;
|
||||
}
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the (Komodo) Repo resource.
|
||||
* passed in request. Response: [DeleteRepoWebhookResponse]
|
||||
*/
|
||||
export interface DeleteRepoWebhook {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
/** "Clone" or "Pull" or "Build" */
|
||||
action: RepoWebhookAction;
|
||||
}
|
||||
/**
|
||||
* Deletes the sync at the given id, and returns the deleted sync.
|
||||
* Response: [ResourceSync]
|
||||
@@ -5377,26 +5282,6 @@ export interface DeleteStack {
|
||||
/** The id or name of the stack to delete. */
|
||||
id: string;
|
||||
}
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the stack
|
||||
* passed in request. Response: [DeleteStackWebhookResponse]
|
||||
*/
|
||||
export interface DeleteStackWebhook {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
/** "Refresh" or "Deploy" */
|
||||
action: StackWebhookAction;
|
||||
}
|
||||
/**
|
||||
* Delete the webhook on the github repo attached to the sync
|
||||
* passed in request. Response: [DeleteSyncWebhookResponse]
|
||||
*/
|
||||
export interface DeleteSyncWebhook {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
/** "Refresh" or "Sync" */
|
||||
action: SyncWebhookAction;
|
||||
}
|
||||
/**
|
||||
* Delete a tag, and return the deleted tag. Response: [Tag].
|
||||
*
|
||||
@@ -5788,21 +5673,6 @@ export interface GetBuildMonthlyStatsResponse {
|
||||
total_count: number;
|
||||
days: BuildStatsDay[];
|
||||
}
|
||||
/** Get whether a Build's target repo has a webhook for the build configured. Response: [GetBuildWebhookEnabledResponse]. */
|
||||
export interface GetBuildWebhookEnabled {
|
||||
/** Id or name */
|
||||
build: string;
|
||||
}
|
||||
/** Response for [GetBuildWebhookEnabled] */
|
||||
export interface GetBuildWebhookEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger build. Will always be false if managed is false. */
|
||||
enabled: boolean;
|
||||
}
|
||||
/** Get a specific builder by id or name. Response: [Builder]. */
|
||||
export interface GetBuilder {
|
||||
/** Id or name */
|
||||
@@ -5880,8 +5750,6 @@ export interface GetCoreInfoResponse {
|
||||
disable_non_admin_create: boolean;
|
||||
/** Whether confirm dialog should be disabled */
|
||||
disable_confirm_dialog: boolean;
|
||||
/** The repo owners for which github webhook management api is available */
|
||||
github_webhook_owners: string[];
|
||||
/** Whether to disable websocket automatic reconnect. */
|
||||
disable_websocket_reconnect: boolean;
|
||||
/** Whether to enable fancy toml highlighting. */
|
||||
@@ -6127,25 +5995,6 @@ export interface GetRepoActionState {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
}
|
||||
/** Get a target Repo's configured webhooks. Response: [GetRepoWebhooksEnabledResponse]. */
|
||||
export interface GetRepoWebhooksEnabled {
|
||||
/** Id or name */
|
||||
repo: string;
|
||||
}
|
||||
/** Response for [GetRepoWebhooksEnabled] */
|
||||
export interface GetRepoWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger clone. Will always be false if managed is false. */
|
||||
clone_enabled: boolean;
|
||||
/** Whether pushes to branch trigger pull. Will always be false if managed is false. */
|
||||
pull_enabled: boolean;
|
||||
/** Whether pushes to branch trigger build. Will always be false if managed is false. */
|
||||
build_enabled: boolean;
|
||||
}
|
||||
/**
|
||||
* Gets a summary of data relating to all repos.
|
||||
* Response: [GetReposSummaryResponse].
|
||||
@@ -6282,23 +6131,6 @@ export interface GetStackLog {
|
||||
/** Enable `--timestamps` */
|
||||
timestamps?: boolean;
|
||||
}
|
||||
/** Get a target stack's configured webhooks. Response: [GetStackWebhooksEnabledResponse]. */
|
||||
export interface GetStackWebhooksEnabled {
|
||||
/** Id or name */
|
||||
stack: string;
|
||||
}
|
||||
/** Response for [GetStackWebhooksEnabled] */
|
||||
export interface GetStackWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger refresh. Will always be false if managed is false. */
|
||||
refresh_enabled: boolean;
|
||||
/** Whether pushes to branch trigger stack execution. Will always be false if managed is false. */
|
||||
deploy_enabled: boolean;
|
||||
}
|
||||
/**
|
||||
* Gets a summary of data relating to all syncs.
|
||||
* Response: [GetStacksSummaryResponse].
|
||||
@@ -6320,23 +6152,6 @@ export interface GetStacksSummaryResponse {
|
||||
/** The number of stacks with Unknown state. */
|
||||
unknown: number;
|
||||
}
|
||||
/** Get a target Sync's configured webhooks. Response: [GetSyncWebhooksEnabledResponse]. */
|
||||
export interface GetSyncWebhooksEnabled {
|
||||
/** Id or name */
|
||||
sync: string;
|
||||
}
|
||||
/** Response for [GetSyncWebhooksEnabled] */
|
||||
export interface GetSyncWebhooksEnabledResponse {
|
||||
/**
|
||||
* Whether the repo webhooks can even be managed.
|
||||
* The repo owner must be in `github_webhook_app.owners` list to be managed.
|
||||
*/
|
||||
managed: boolean;
|
||||
/** Whether pushes to branch trigger refresh. Will always be false if managed is false. */
|
||||
refresh_enabled: boolean;
|
||||
/** Whether pushes to branch trigger sync execution. Will always be false if managed is false. */
|
||||
sync_enabled: boolean;
|
||||
}
|
||||
/**
|
||||
* Get the system information of the target server.
|
||||
* Response: [SystemInformation].
|
||||
@@ -8725,9 +8540,6 @@ export type ReadRequest = {
|
||||
} | {
|
||||
type: "GetStackActionState";
|
||||
params: GetStackActionState;
|
||||
} | {
|
||||
type: "GetStackWebhooksEnabled";
|
||||
params: GetStackWebhooksEnabled;
|
||||
} | {
|
||||
type: "GetStackLog";
|
||||
params: GetStackLog;
|
||||
@@ -8800,9 +8612,6 @@ export type ReadRequest = {
|
||||
} | {
|
||||
type: "ListBuildVersions";
|
||||
params: ListBuildVersions;
|
||||
} | {
|
||||
type: "GetBuildWebhookEnabled";
|
||||
params: GetBuildWebhookEnabled;
|
||||
} | {
|
||||
type: "ListBuilds";
|
||||
params: ListBuilds;
|
||||
@@ -8821,9 +8630,6 @@ export type ReadRequest = {
|
||||
} | {
|
||||
type: "GetRepoActionState";
|
||||
params: GetRepoActionState;
|
||||
} | {
|
||||
type: "GetRepoWebhooksEnabled";
|
||||
params: GetRepoWebhooksEnabled;
|
||||
} | {
|
||||
type: "ListRepos";
|
||||
params: ListRepos;
|
||||
@@ -8839,9 +8645,6 @@ export type ReadRequest = {
|
||||
} | {
|
||||
type: "GetResourceSyncActionState";
|
||||
params: GetResourceSyncActionState;
|
||||
} | {
|
||||
type: "GetSyncWebhooksEnabled";
|
||||
params: GetSyncWebhooksEnabled;
|
||||
} | {
|
||||
type: "ListResourceSyncs";
|
||||
params: ListResourceSyncs;
|
||||
@@ -8918,6 +8721,11 @@ export type ReadRequest = {
|
||||
type: "ListOnboardingKeys";
|
||||
params: ListOnboardingKeys;
|
||||
};
|
||||
export declare enum RepoWebhookAction {
|
||||
Clone = "Clone",
|
||||
Pull = "Pull",
|
||||
Build = "Build"
|
||||
}
|
||||
/** The specific types of permission that a User or UserGroup can have on a resource. */
|
||||
export declare enum SpecificPermission {
|
||||
/**
|
||||
@@ -8956,6 +8764,14 @@ export declare enum SpecificPermission {
|
||||
*/
|
||||
Processes = "Processes"
|
||||
}
|
||||
export declare enum StackWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Deploy = "Deploy"
|
||||
}
|
||||
export declare enum SyncWebhookAction {
|
||||
Refresh = "Refresh",
|
||||
Sync = "Sync"
|
||||
}
|
||||
export type UserRequest = {
|
||||
type: "PushRecentlyViewed";
|
||||
params: PushRecentlyViewed;
|
||||
@@ -9083,12 +8899,6 @@ export type WriteRequest = {
|
||||
} | {
|
||||
type: "RefreshStackCache";
|
||||
params: RefreshStackCache;
|
||||
} | {
|
||||
type: "CreateStackWebhook";
|
||||
params: CreateStackWebhook;
|
||||
} | {
|
||||
type: "DeleteStackWebhook";
|
||||
params: DeleteStackWebhook;
|
||||
} | {
|
||||
type: "CreateDeployment";
|
||||
params: CreateDeployment;
|
||||
@@ -9128,12 +8938,6 @@ export type WriteRequest = {
|
||||
} | {
|
||||
type: "RefreshBuildCache";
|
||||
params: RefreshBuildCache;
|
||||
} | {
|
||||
type: "CreateBuildWebhook";
|
||||
params: CreateBuildWebhook;
|
||||
} | {
|
||||
type: "DeleteBuildWebhook";
|
||||
params: DeleteBuildWebhook;
|
||||
} | {
|
||||
type: "CreateBuilder";
|
||||
params: CreateBuilder;
|
||||
@@ -9167,12 +8971,6 @@ export type WriteRequest = {
|
||||
} | {
|
||||
type: "RefreshRepoCache";
|
||||
params: RefreshRepoCache;
|
||||
} | {
|
||||
type: "CreateRepoWebhook";
|
||||
params: CreateRepoWebhook;
|
||||
} | {
|
||||
type: "DeleteRepoWebhook";
|
||||
params: DeleteRepoWebhook;
|
||||
} | {
|
||||
type: "CreateAlerter";
|
||||
params: CreateAlerter;
|
||||
@@ -9242,12 +9040,6 @@ export type WriteRequest = {
|
||||
} | {
|
||||
type: "RefreshResourceSyncPending";
|
||||
params: RefreshResourceSyncPending;
|
||||
} | {
|
||||
type: "CreateSyncWebhook";
|
||||
params: CreateSyncWebhook;
|
||||
} | {
|
||||
type: "DeleteSyncWebhook";
|
||||
params: DeleteSyncWebhook;
|
||||
} | {
|
||||
type: "CreateTag";
|
||||
params: CreateTag;
|
||||
|
||||
@@ -568,22 +568,6 @@ export var StackState;
|
||||
/** Server not reachable for status */
|
||||
StackState["Unknown"] = "unknown";
|
||||
})(StackState || (StackState = {}));
|
||||
export var RepoWebhookAction;
|
||||
(function (RepoWebhookAction) {
|
||||
RepoWebhookAction["Clone"] = "Clone";
|
||||
RepoWebhookAction["Pull"] = "Pull";
|
||||
RepoWebhookAction["Build"] = "Build";
|
||||
})(RepoWebhookAction || (RepoWebhookAction = {}));
|
||||
export var StackWebhookAction;
|
||||
(function (StackWebhookAction) {
|
||||
StackWebhookAction["Refresh"] = "Refresh";
|
||||
StackWebhookAction["Deploy"] = "Deploy";
|
||||
})(StackWebhookAction || (StackWebhookAction = {}));
|
||||
export var SyncWebhookAction;
|
||||
(function (SyncWebhookAction) {
|
||||
SyncWebhookAction["Refresh"] = "Refresh";
|
||||
SyncWebhookAction["Sync"] = "Sync";
|
||||
})(SyncWebhookAction || (SyncWebhookAction = {}));
|
||||
/**
|
||||
* Configures the behavior of [CreateTerminal] if the
|
||||
* specified terminal name already exists.
|
||||
@@ -717,6 +701,12 @@ export var IanaTimezone;
|
||||
/** UTC+14:00 */
|
||||
IanaTimezone["PacificKiritimati"] = "Pacific/Kiritimati";
|
||||
})(IanaTimezone || (IanaTimezone = {}));
|
||||
export var RepoWebhookAction;
|
||||
(function (RepoWebhookAction) {
|
||||
RepoWebhookAction["Clone"] = "Clone";
|
||||
RepoWebhookAction["Pull"] = "Pull";
|
||||
RepoWebhookAction["Build"] = "Build";
|
||||
})(RepoWebhookAction || (RepoWebhookAction = {}));
|
||||
/** The specific types of permission that a User or UserGroup can have on a resource. */
|
||||
export var SpecificPermission;
|
||||
(function (SpecificPermission) {
|
||||
@@ -756,3 +746,13 @@ export var SpecificPermission;
|
||||
*/
|
||||
SpecificPermission["Processes"] = "Processes";
|
||||
})(SpecificPermission || (SpecificPermission = {}));
|
||||
export var StackWebhookAction;
|
||||
(function (StackWebhookAction) {
|
||||
StackWebhookAction["Refresh"] = "Refresh";
|
||||
StackWebhookAction["Deploy"] = "Deploy";
|
||||
})(StackWebhookAction || (StackWebhookAction = {}));
|
||||
export var SyncWebhookAction;
|
||||
(function (SyncWebhookAction) {
|
||||
SyncWebhookAction["Refresh"] = "Refresh";
|
||||
SyncWebhookAction["Sync"] = "Sync";
|
||||
})(SyncWebhookAction || (SyncWebhookAction = {}));
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
} from "@components/config/util";
|
||||
import {
|
||||
getWebhookIntegration,
|
||||
useInvalidate,
|
||||
useLocalStorage,
|
||||
usePermissions,
|
||||
useRead,
|
||||
@@ -22,12 +21,10 @@ import {
|
||||
useWrite,
|
||||
} from "@lib/hooks";
|
||||
import { Types } from "komodo_client";
|
||||
import { Ban, CirclePlus, PlusCircle } from "lucide-react";
|
||||
import { PlusCircle } from "lucide-react";
|
||||
import { ReactNode } from "react";
|
||||
import { CopyWebhook, ResourceLink, ResourceSelector } from "../common";
|
||||
import { useToast } from "@ui/use-toast";
|
||||
import { text_color_class_by_intention } from "@lib/color";
|
||||
import { ConfirmButton, ShowHideButton } from "@components/util";
|
||||
import { ShowHideButton } from "@components/util";
|
||||
import { Link } from "react-router-dom";
|
||||
import { SecretsSearch } from "@components/config/env_vars";
|
||||
import { MonacoEditor } from "@components/monaco";
|
||||
@@ -74,7 +71,6 @@ export const BuildConfig = ({
|
||||
const build = useRead("GetBuild", { build: id }).data;
|
||||
const config = build?.config;
|
||||
const name = build?.name;
|
||||
const webhook = useRead("GetBuildWebhookEnabled", { build: id }).data;
|
||||
const global_disabled =
|
||||
useRead("GetCoreInfo", {}).data?.ui_write_disabled ?? false;
|
||||
const [update, set] = useLocalStorage<Partial<Types.BuildConfig>>(
|
||||
@@ -607,72 +603,12 @@ export const BuildConfig = ({
|
||||
/>
|
||||
</ConfigItem>
|
||||
),
|
||||
webhook_enabled: webhook !== undefined && !webhook.managed,
|
||||
webhook_enabled: true,
|
||||
webhook_secret: {
|
||||
description:
|
||||
"Provide a custom webhook secret for this resource, or use the global default.",
|
||||
placeholder: "Input custom secret",
|
||||
},
|
||||
["managed" as any]: () => {
|
||||
const inv = useInvalidate();
|
||||
const { toast } = useToast();
|
||||
const { mutate: createWebhook, isPending: createPending } =
|
||||
useWrite("CreateBuildWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Created" });
|
||||
inv(["GetBuildWebhookEnabled", { build: id }]);
|
||||
},
|
||||
});
|
||||
const { mutate: deleteWebhook, isPending: deletePending } =
|
||||
useWrite("DeleteBuildWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Deleted" });
|
||||
inv(["GetBuildWebhookEnabled", { build: id }]);
|
||||
},
|
||||
});
|
||||
if (!webhook || !webhook.managed) return;
|
||||
return (
|
||||
<ConfigItem label="Manage Webhook">
|
||||
{webhook.enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Good")}>
|
||||
ENABLED
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() => deleteWebhook({ build: id })}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhook.enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention("Critical")}
|
||||
>
|
||||
DISABLED
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Enable Build"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() => createWebhook({ build: id })}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</ConfigItem>
|
||||
);
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
@@ -9,7 +9,6 @@ import {
|
||||
} from "@components/config/util";
|
||||
import {
|
||||
getWebhookIntegration,
|
||||
useInvalidate,
|
||||
useLocalStorage,
|
||||
usePermissions,
|
||||
useRead,
|
||||
@@ -19,10 +18,7 @@ import {
|
||||
} from "@lib/hooks";
|
||||
import { Types } from "komodo_client";
|
||||
import { CopyWebhook, ResourceLink, ResourceSelector } from "../common";
|
||||
import { useToast } from "@ui/use-toast";
|
||||
import { text_color_class_by_intention } from "@lib/color";
|
||||
import { ConfirmButton } from "@components/util";
|
||||
import { Ban, CirclePlus, PlusCircle } from "lucide-react";
|
||||
import { PlusCircle } from "lucide-react";
|
||||
import { Button } from "@ui/button";
|
||||
import { SecretsSearch } from "@components/config/env_vars";
|
||||
import { MonacoEditor } from "@components/monaco";
|
||||
@@ -32,7 +28,6 @@ export const RepoConfig = ({ id }: { id: string }) => {
|
||||
const repo = useRead("GetRepo", { repo: id }).data;
|
||||
const config = repo?.config;
|
||||
const name = repo?.name;
|
||||
const webhooks = useRead("GetRepoWebhooksEnabled", { repo: id }).data;
|
||||
const global_disabled =
|
||||
useRead("GetCoreInfo", {}).data?.ui_write_disabled ?? false;
|
||||
const [update, set] = useLocalStorage<Partial<Types.RepoConfig>>(
|
||||
@@ -286,186 +281,12 @@ export const RepoConfig = ({ id }: { id: string }) => {
|
||||
/>
|
||||
</ConfigItem>
|
||||
),
|
||||
webhook_enabled: webhooks !== undefined && !webhooks.managed,
|
||||
webhook_enabled: true,
|
||||
webhook_secret: {
|
||||
description:
|
||||
"Provide a custom webhook secret for this resource, or use the global default.",
|
||||
placeholder: "Input custom secret",
|
||||
},
|
||||
["managed" as any]: () => {
|
||||
const inv = useInvalidate();
|
||||
const { toast } = useToast();
|
||||
const { mutate: createWebhook, isPending: createPending } =
|
||||
useWrite("CreateRepoWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Created" });
|
||||
inv(["GetRepoWebhooksEnabled", { repo: id }]);
|
||||
},
|
||||
});
|
||||
const { mutate: deleteWebhook, isPending: deletePending } =
|
||||
useWrite("DeleteRepoWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Deleted" });
|
||||
inv(["GetRepoWebhooksEnabled", { repo: id }]);
|
||||
},
|
||||
});
|
||||
if (!webhooks || !webhooks.managed) return;
|
||||
return (
|
||||
<ConfigItem label="Manage Webhook">
|
||||
{webhooks.clone_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention("Good")}
|
||||
>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div
|
||||
className={text_color_class_by_intention("Neutral")}
|
||||
>
|
||||
CLONE
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Clone,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.clone_enabled && webhooks.pull_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention("Good")}
|
||||
>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div
|
||||
className={text_color_class_by_intention("Neutral")}
|
||||
>
|
||||
PULL
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Pull,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{webhooks.build_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention("Good")}
|
||||
>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div
|
||||
className={text_color_class_by_intention("Neutral")}
|
||||
>
|
||||
BUILD
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Build,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.clone_enabled &&
|
||||
!webhooks.pull_enabled &&
|
||||
!webhooks.build_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention(
|
||||
"Critical"
|
||||
)}
|
||||
>
|
||||
DISABLED
|
||||
</div>
|
||||
</div>
|
||||
{(update.server_id ?? config.server_id) && (
|
||||
<ConfirmButton
|
||||
title="Enable Clone"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Clone,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
)}
|
||||
{(update.server_id ?? config.server_id) && (
|
||||
<ConfirmButton
|
||||
title="Enable Pull"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Pull,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
)}
|
||||
{(update.builder_id ?? config.builder_id) && (
|
||||
<ConfirmButton
|
||||
title="Enable Build"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
repo: id,
|
||||
action: Types.RepoWebhookAction.Build,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</ConfigItem>
|
||||
);
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -9,7 +9,6 @@ import {
|
||||
} from "@components/config/util";
|
||||
import {
|
||||
getWebhookIntegration,
|
||||
useInvalidate,
|
||||
useLocalStorage,
|
||||
usePermissions,
|
||||
useRead,
|
||||
@@ -20,10 +19,7 @@ import {
|
||||
import { Types } from "komodo_client";
|
||||
import { ReactNode } from "react";
|
||||
import { CopyWebhook, TagSelector } from "../common";
|
||||
import { useToast } from "@ui/use-toast";
|
||||
import { text_color_class_by_intention } from "@lib/color";
|
||||
import { ConfirmButton, ShowHideButton } from "@components/util";
|
||||
import { Ban, CirclePlus } from "lucide-react";
|
||||
import { ShowHideButton } from "@components/util";
|
||||
import { MonacoEditor } from "@components/monaco";
|
||||
import {
|
||||
Select,
|
||||
@@ -67,7 +63,6 @@ export const ResourceSyncConfig = ({
|
||||
const sync = useRead("GetResourceSync", { sync: id }).data;
|
||||
const config = sync?.config;
|
||||
const name = sync?.name;
|
||||
const webhooks = useRead("GetSyncWebhooksEnabled", { sync: id }).data;
|
||||
const global_disabled =
|
||||
useRead("GetCoreInfo", {}).data?.ui_write_disabled ?? false;
|
||||
const [update, set] = useLocalStorage<Partial<Types.ResourceSyncConfig>>(
|
||||
@@ -373,127 +368,12 @@ export const ResourceSyncConfig = ({
|
||||
/>
|
||||
</ConfigItem>
|
||||
),
|
||||
webhook_enabled: webhooks !== undefined && !webhooks.managed,
|
||||
webhook_enabled: true,
|
||||
webhook_secret: {
|
||||
description:
|
||||
"Provide a custom webhook secret for this resource, or use the global default.",
|
||||
placeholder: "Input custom secret",
|
||||
},
|
||||
["managed" as any]: () => {
|
||||
const inv = useInvalidate();
|
||||
const { toast } = useToast();
|
||||
const { mutate: createWebhook, isPending: createPending } = useWrite(
|
||||
"CreateSyncWebhook",
|
||||
{
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Created" });
|
||||
inv(["GetSyncWebhooksEnabled", { sync: id }]);
|
||||
},
|
||||
}
|
||||
);
|
||||
const { mutate: deleteWebhook, isPending: deletePending } = useWrite(
|
||||
"DeleteSyncWebhook",
|
||||
{
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Deleted" });
|
||||
inv(["GetSyncWebhooksEnabled", { sync: id }]);
|
||||
},
|
||||
}
|
||||
);
|
||||
if (!webhooks || !webhooks.managed) return;
|
||||
return (
|
||||
<ConfigItem label="Manage Webhook">
|
||||
{webhooks.sync_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Good")}>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div className={text_color_class_by_intention("Neutral")}>
|
||||
SYNC EXECUTION
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
sync: id,
|
||||
action: Types.SyncWebhookAction.Sync,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.sync_enabled && webhooks.refresh_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Good")}>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div className={text_color_class_by_intention("Neutral")}>
|
||||
PENDING REFRESH
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
sync: id,
|
||||
action: Types.SyncWebhookAction.Refresh,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.sync_enabled && !webhooks.refresh_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Critical")}>
|
||||
DISABLED
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Enable Refresh"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
sync: id,
|
||||
action: Types.SyncWebhookAction.Refresh,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
<ConfirmButton
|
||||
title="Enable Sync"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
sync: id,
|
||||
action: Types.SyncWebhookAction.Sync,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</ConfigItem>
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
components = {
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
import { Types } from "komodo_client";
|
||||
import {
|
||||
getWebhookIntegration,
|
||||
useInvalidate,
|
||||
useLocalStorage,
|
||||
usePermissions,
|
||||
useRead,
|
||||
@@ -31,14 +30,10 @@ import {
|
||||
SelectValue,
|
||||
} from "@ui/select";
|
||||
import { SecretsSearch } from "@components/config/env_vars";
|
||||
import { ConfirmButton, ShowHideButton } from "@components/util";
|
||||
import { ShowHideButton } from "@components/util";
|
||||
import { MonacoEditor } from "@components/monaco";
|
||||
import { useToast } from "@ui/use-toast";
|
||||
import { text_color_class_by_intention } from "@lib/color";
|
||||
import {
|
||||
Ban,
|
||||
ChevronsUpDown,
|
||||
CirclePlus,
|
||||
MinusCircle,
|
||||
PlusCircle,
|
||||
SearchX,
|
||||
@@ -94,7 +89,6 @@ export const StackConfig = ({
|
||||
const stack = useRead("GetStack", { stack: id }).data;
|
||||
const config = stack?.config;
|
||||
const name = stack?.name;
|
||||
const webhooks = useRead("GetStackWebhooksEnabled", { stack: id }).data;
|
||||
const global_disabled =
|
||||
useRead("GetCoreInfo", {}).data?.ui_write_disabled ?? false;
|
||||
const [update, set] = useLocalStorage<Partial<Types.StackConfig>>(
|
||||
@@ -713,140 +707,12 @@ export const StackConfig = ({
|
||||
description:
|
||||
"Usually the Stack won't deploy unless there are changes to the files. Use this to force deploy.",
|
||||
},
|
||||
webhook_enabled:
|
||||
!!(update.branch ?? config.branch) &&
|
||||
webhooks !== undefined &&
|
||||
!webhooks.managed,
|
||||
webhook_enabled: true,
|
||||
webhook_secret: {
|
||||
description:
|
||||
"Provide a custom webhook secret for this resource, or use the global default.",
|
||||
placeholder: "Input custom secret",
|
||||
},
|
||||
["managed" as any]: () => {
|
||||
const inv = useInvalidate();
|
||||
const { toast } = useToast();
|
||||
const { mutate: createWebhook, isPending: createPending } =
|
||||
useWrite("CreateStackWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Created" });
|
||||
inv(["GetStackWebhooksEnabled", { stack: id }]);
|
||||
},
|
||||
});
|
||||
const { mutate: deleteWebhook, isPending: deletePending } =
|
||||
useWrite("DeleteStackWebhook", {
|
||||
onSuccess: () => {
|
||||
toast({ title: "Webhook Deleted" });
|
||||
inv(["GetStackWebhooksEnabled", { stack: id }]);
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
!(update.branch ?? config.branch) ||
|
||||
!webhooks ||
|
||||
!webhooks.managed
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<ConfigItem label="Manage Webhook">
|
||||
{webhooks.deploy_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Good")}>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div
|
||||
className={text_color_class_by_intention("Neutral")}
|
||||
>
|
||||
DEPLOY
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
stack: id,
|
||||
action: Types.StackWebhookAction.Deploy,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.deploy_enabled && webhooks.refresh_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div className={text_color_class_by_intention("Good")}>
|
||||
ENABLED
|
||||
</div>
|
||||
and will trigger
|
||||
<div
|
||||
className={text_color_class_by_intention("Neutral")}
|
||||
>
|
||||
REFRESH
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Disable"
|
||||
icon={<Ban className="w-4 h-4" />}
|
||||
variant="destructive"
|
||||
onClick={() =>
|
||||
deleteWebhook({
|
||||
stack: id,
|
||||
action: Types.StackWebhookAction.Refresh,
|
||||
})
|
||||
}
|
||||
loading={deletePending}
|
||||
disabled={disabled || deletePending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{!webhooks.deploy_enabled && !webhooks.refresh_enabled && (
|
||||
<div className="flex items-center gap-4 flex-wrap">
|
||||
<div className="flex items-center gap-2">
|
||||
Incoming webhook is{" "}
|
||||
<div
|
||||
className={text_color_class_by_intention("Critical")}
|
||||
>
|
||||
DISABLED
|
||||
</div>
|
||||
</div>
|
||||
<ConfirmButton
|
||||
title="Enable Deploy"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
stack: id,
|
||||
action: Types.StackWebhookAction.Deploy,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
<ConfirmButton
|
||||
title="Enable Refresh"
|
||||
icon={<CirclePlus className="w-4 h-4" />}
|
||||
onClick={() =>
|
||||
createWebhook({
|
||||
stack: id,
|
||||
action: Types.StackWebhookAction.Refresh,
|
||||
})
|
||||
}
|
||||
loading={createPending}
|
||||
disabled={disabled || createPending}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</ConfigItem>
|
||||
);
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user