diff --git a/.drone.yml b/.drone.yml
index 44c6321..11c8957 100755
--- a/.drone.yml
+++ b/.drone.yml
@@ -1,9 +1,5 @@
-
-kind: pipeline
-type: docker
-name: "test"
-steps:
- - name: test
- image: harbor.front.kjuulh.io/docker-proxy/library/bash:latest
- commands:
- - echo 'Run tests'
+kind: template
+load: bust_rustbin_default_template.yaml
+name: octopush
+data:
+ binName: octopush
diff --git a/.gitignore b/.gitignore
index dddecf9..33117ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
+/target
.cuddle/
+target/
.env
diff --git a/CONFIGURATION_SERVER.md b/CONFIGURATION_SERVER.md
deleted file mode 100644
index 04d5c69..0000000
--- a/CONFIGURATION_SERVER.md
+++ /dev/null
@@ -1 +0,0 @@
-# Configuration server
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..730d0ec
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,1590 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytes"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "335867764ed2de42325fafe6d18b8af74ba97ee0c590fa016f157535b42ab04b"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "strsim 0.10.0",
+ "termcolor",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "dotenv"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
+dependencies = [
+ "clap 2.34.0",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "git2"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "gitea_client"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "gitea_raw_client",
+ "reqwest",
+]
+
+[[package]]
+name = "gitea_raw_client"
+version = "1.17.3"
+dependencies = [
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745"
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "jobserver"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55edcf6c0bb319052dea84732cf99db461780fd5e8d3eb46ab6ff312ab31f197"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.14.0+1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "octopush"
+version = "0.1.0"
+dependencies = [
+ "dotenv",
+ "eyre",
+ "octopush_cli",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "octopush_cli"
+version = "0.1.0"
+dependencies = [
+ "clap 4.0.18",
+ "eyre",
+ "octopush_core",
+ "octopush_infra",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "octopush_core"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "eyre",
+ "git2",
+ "gitea_client",
+ "hex",
+ "rand",
+ "serde",
+ "serde_yaml",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "octopush_infra"
+version = "0.1.0"
+dependencies = [
+ "eyre",
+ "octopush_core",
+ "tracing",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
+
+[[package]]
+name = "openssl"
+version = "0.10.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020433887e44c27ff16365eaa2d380547a94544ad509aff6eb5b6e3e0b27b376"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07d5c8cb6e57b3a3612064d7b18b117912b4ce70955c2504d4b741c9e244b132"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8b3801309262e8184d9687fb697586833e939767aea0dda89f5a8e650e8bd7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d232d893b10de3eb7258ff01974d6ee20663d8e833263c99409d4b13a0209da"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e5fa573d8ac5f1a856f8d7be41d390ee973daf97c806b2c1a465e4e1406e68"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "uuid"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..e8d46f3
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,31 @@
+[package]
+name = "octopush"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[workspace]
+members = [
+ "crates/octopush_cli",
+ "crates/octopush_infra",
+ "crates/octopush_core",
+ "crates/gitea_raw_client",
+ "crates/gitea_client",
+]
+
+[workspace.dependencies]
+eyre = { version = "0.6.8" }
+async-trait = "0.1.58"
+tokio = { version = "1.21.2", features = ["full", "test-util"] }
+tracing = { version = "0.1.37", features = ["log"] }
+
+[dependencies]
+octopush_cli = { path = "crates/octopush_cli" }
+
+eyre = { workspace = true }
+tokio = { workspace = true }
+tracing = { workspace = true }
+
+tracing-subscriber = { version = "0.3.16", features = ["json", "env-filter"] }
+dotenv = { version = "0.15.0", features = ["clap", "cli"] }
diff --git a/README.md b/README.md
index 10ea947..65f05dc 100644
--- a/README.md
+++ b/README.md
@@ -34,10 +34,10 @@ Refer to [roadmap.md](roadmap.md)
## Installation
-Octopush comes in two modes. Client or Client -> Server. Octopush can stand alone as
-a client, for smaller and less secure changes. However, for organisations, it
-may be useful to use Octopush in server mode, which supports more features, and
-has extra security built in.
+Octopush comes in two modes. Client or Client -> Server. Octopush can stand
+alone as a client, for smaller and less secure changes. However, for
+organisations, it may be useful to use Octopush in server mode, which supports
+more features, and has extra security built in.
### Client (CLI)
@@ -182,8 +182,8 @@ To run the script use
octopush process --path "write-a-readme"
```
-This will cause the octopush process to automatically apply the action on the repo
-and open a pr.
+This will cause the octopush process to automatically apply the action on the
+repo and open a pr.
### Query repositories
@@ -212,8 +212,8 @@ to help test locally, as well as not cause serious issues. The server
configuration is pretty much the same, except the command would look like so:
`octopush server process --path "write-a-readme" --apply`. Octopush will try to
infer as much as possible, but it may be needed to apply some extra flags to
-specify upstream repositories and such. Octopush will also help you setup keys and
-such on the first run, using `octopush setup` or `octopush server setup`.
+specify upstream repositories and such. Octopush will also help you setup keys
+and such on the first run, using `octopush setup` or `octopush server setup`.
## Contributing
diff --git a/_examples/actions/add_releaserc/octopush.yml b/_examples/actions/add_releaserc/octopush.yml
index d90c930..34d455a 100644
--- a/_examples/actions/add_releaserc/octopush.yml
+++ b/_examples/actions/add_releaserc/octopush.yml
@@ -1,4 +1,4 @@
-apiVersion: git.front.kjuulh.io/kjuulh/octopush/blob/main/schema/v1
+apiVersion: action
name: write-a-readme
select:
repositories:
diff --git a/_examples/actions/write_a_readme/dist/bin b/_examples/actions/write_a_readme/dist/bin
new file mode 100755
index 0000000..a562e14
Binary files /dev/null and b/_examples/actions/write_a_readme/dist/bin differ
diff --git a/_examples/actions/write_a_readme/main b/_examples/actions/write_a_readme/main
new file mode 100755
index 0000000..9ac7386
Binary files /dev/null and b/_examples/actions/write_a_readme/main differ
diff --git a/_examples/actions/write_a_readme/main.go b/_examples/actions/write_a_readme/main.go
index 5c24133..8326ca8 100644
--- a/_examples/actions/write_a_readme/main.go
+++ b/_examples/actions/write_a_readme/main.go
@@ -1,12 +1,38 @@
package main
-import "github.com/bitfield/script"
+import (
+ "os"
+
+ "github.com/bitfield/script"
+)
func main() {
_, err := script.
Echo("# Readme").
WriteFile("README.md")
+
if err != nil {
panic(err)
}
+ println("ran stuff")
+ entries, err := os.ReadDir(".")
+ if err != nil {
+ panic(err)
+ }
+ for _, entry := range entries {
+ if !entry.IsDir() {
+ file, err := os.ReadFile(entry.Name())
+ if err != nil {
+ panic(err)
+ }
+ println(string(file))
+ }
+ }
+
+ wd, err := os.Getwd()
+ if err != nil {
+ panic(err)
+ }
+
+ println(wd)
}
diff --git a/_examples/actions/write_a_readme/octopush.yml b/_examples/actions/write_a_readme/octopush.yml
index a4bf81e..9d7a62e 100644
--- a/_examples/actions/write_a_readme/octopush.yml
+++ b/_examples/actions/write_a_readme/octopush.yml
@@ -1,11 +1,26 @@
-apiVersion: git.front.kjuulh.io/kjuulh/octopush/blob/main/schema/v1
+apiVersion: action
name: write-a-readme
select:
- repositories:
- - git@git.front.kjuulh.io:kjuulh/octopush-test.git
- # providers:
- # - gitea: https://git.front.kjuulh.io
- # organisation: "cibus"
-actions:
- - type: go
- entry: "main.go"
+ # github:
+ # repositories:
+ # - kjuulh/octopush-test
+ # push:
+ # pull-request:
+ # name: "write a readme"
+
+ # gitea:
+ # repositories:
+ # - kjuulh/octopush-test
+ # push:
+ # pull-request:
+ # name: "write a readme"
+
+ git:
+ repositories:
+ - git@git.front.kjuulh.io:kjuulh/octopush-test.git
+ push:
+ branch:
+ name: "write a readme"
+action:
+ type: go
+ entry: "main.go"
diff --git a/assets/octopush.png b/assets/octopush.png
deleted file mode 100644
index 9d1c499..0000000
Binary files a/assets/octopush.png and /dev/null differ
diff --git a/assets/octopush.svg b/assets/octopush.svg
deleted file mode 100644
index 8812c64..0000000
--- a/assets/octopush.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/cmd/octopush/commands/process.go b/cmd/octopush/commands/process.go
deleted file mode 100644
index dcfa8ba..0000000
--- a/cmd/octopush/commands/process.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package commands
-
-import (
- "context"
- "time"
-
- "git.front.kjuulh.io/kjuulh/octopush/internal/cli"
- "git.front.kjuulh.io/kjuulh/octopush/internal/commands"
- "github.com/spf13/cobra"
- "go.uber.org/zap"
-)
-
-func CreateOctopushProcessCmd(logger *zap.Logger) *cobra.Command {
-
- var (
- actionsRepo string
- branch string
- path string
- )
- cmd := &cobra.Command{
- Use: "process",
- RunE: func(cmd *cobra.Command, args []string) error {
- if err := cmd.ParseFlags(args); err != nil {
- return err
- }
-
- ctx := cmd.Context()
-
- deps, cleanupFunc, err := cli.Start(ctx, logger)
- if err != nil {
- return err
- }
-
- defer func() {
- ctx, _ = context.WithTimeout(ctx, time.Second*5)
- if err := cleanupFunc(ctx); err != nil {
- panic(err)
- }
- }()
-
- err = commands.
- NewProcessRepos(logger, deps).
- Process(ctx, actionsRepo, branch, path)
- if err != nil {
- return err
- }
-
- return nil
- },
- }
-
- pf := cmd.PersistentFlags()
-
- pf.StringVar(&actionsRepo, "actions-repo", "", "actions repo is the location of your actions, not where to apply the actions themselves, that should be self contained")
- cmd.MarkPersistentFlagRequired("actions-repo")
- pf.StringVar(&branch, "branch", "main", "which branch to look for actions in, will default to main")
- pf.StringVar(&path, "path", "", "the location of the path inside the repository")
- cmd.MarkPersistentFlagRequired("path")
-
- return cmd
-}
diff --git a/cmd/octopush/commands/root.go b/cmd/octopush/commands/root.go
deleted file mode 100644
index 3a6654f..0000000
--- a/cmd/octopush/commands/root.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package commands
-
-import (
- "git.front.kjuulh.io/kjuulh/octopush/cmd/octopush/commands/server"
- "github.com/spf13/cobra"
- "go.uber.org/zap"
-)
-
-func CreateOctopushCmd(logger *zap.Logger) *cobra.Command {
- cmd := &cobra.Command{
- Use: "octopush",
- }
-
- cmd.AddCommand(CreateOctopushProcessCmd(logger))
- cmd.AddCommand(server.CreateOctopushServerCmd(logger))
-
- return cmd
-}
diff --git a/cmd/octopush/commands/server/process.go b/cmd/octopush/commands/server/process.go
deleted file mode 100644
index 04f2041..0000000
--- a/cmd/octopush/commands/server/process.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package server
-
-import (
- "bytes"
- "encoding/json"
- "net/http"
-
- "github.com/spf13/cobra"
-)
-
-func CreateOctopushProcessCmd() *cobra.Command {
-
- var (
- actionsRepo string
- branch string
- path string
- )
- cmd := &cobra.Command{
- Use: "process",
- RunE: func(cmd *cobra.Command, args []string) error {
- if err := cmd.ParseFlags(args); err != nil {
- return err
- }
-
- client := http.Client{}
-
- var buf bytes.Buffer
- err := json.NewEncoder(&buf).
- Encode(struct {
- Repository string `json:"repository"`
- Branch string `json:"branch"`
- Path string `json:"path"`
- }{
- Repository: actionsRepo,
- Branch: branch,
- Path: path,
- })
- if err != nil {
- panic(err)
- }
-
- req, err := http.NewRequestWithContext(
- cmd.Context(),
- http.MethodPost,
- "http://localhost:3000/commands/processRepos",
- &buf,
- )
- if err != nil {
- panic(err)
- }
-
- resp, err := client.Do(req)
- if err != nil {
- panic(err)
- }
- if resp.StatusCode >= 300 {
- panic(resp.Status)
- }
-
- return nil
- },
- }
-
- pf := cmd.PersistentFlags()
-
- pf.StringVar(&actionsRepo, "actions-repo", "", "actions repo is the location of your actions, not where to apply the actions themselves, that should be self contained")
- cmd.MarkPersistentFlagRequired("actions-repo")
- pf.StringVar(&branch, "branch", "main", "which branch to look for actions in, will default to main")
- pf.StringVar(&path, "path", "", "the location of the path inside the repository")
- cmd.MarkPersistentFlagRequired("path")
-
- return cmd
-}
diff --git a/cmd/octopush/commands/server/server.go b/cmd/octopush/commands/server/server.go
deleted file mode 100644
index 90287a6..0000000
--- a/cmd/octopush/commands/server/server.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package server
-
-import (
- "github.com/spf13/cobra"
- "go.uber.org/zap"
-)
-
-func CreateOctopushServerCmd(logger *zap.Logger) *cobra.Command {
- cmd := &cobra.Command{
- Use: "server",
- }
-
- cmd.AddCommand(CreateOctopushProcessCmd())
-
- return cmd
-}
diff --git a/cmd/octopush/octopush.go b/cmd/octopush/octopush.go
deleted file mode 100644
index f75223c..0000000
--- a/cmd/octopush/octopush.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package main
-
-import (
- "os"
-
- "git.front.kjuulh.io/kjuulh/octopush/cmd/octopush/commands"
- "git.front.kjuulh.io/kjuulh/octopush/internal/logger"
- "go.uber.org/zap"
-)
-
-func main() {
- logger, err := logger.New()
- if err != nil {
- panic(err)
- }
- _ = logger.Sync()
-
- zap.ReplaceGlobals(logger)
-
- Execute(logger)
-}
-
-func Execute(logger *zap.Logger) {
- err := commands.CreateOctopushCmd(logger).Execute()
- if err != nil {
- os.Exit(1)
- }
-}
diff --git a/cmd/server/commands/root.go b/cmd/server/commands/root.go
deleted file mode 100644
index 379f24e..0000000
--- a/cmd/server/commands/root.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package commands
-
-import (
- "github.com/spf13/cobra"
- "go.uber.org/zap"
-)
-
-func CreateServerCmd(logger *zap.Logger) *cobra.Command {
- cmd := &cobra.Command{
- Use: "octopushserver",
- }
-
- cmd.AddCommand(NewStartServerCommand(logger))
-
- return cmd
-}
diff --git a/cmd/server/commands/start.go b/cmd/server/commands/start.go
deleted file mode 100644
index 7849f57..0000000
--- a/cmd/server/commands/start.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package commands
-
-import (
- "git.front.kjuulh.io/kjuulh/octopush/internal/server"
- "github.com/spf13/cobra"
- "go.uber.org/zap"
-)
-
-func NewStartServerCommand(logger *zap.Logger) *cobra.Command {
- cmd := &cobra.Command{
- Use: "start",
- Short: "Start the octopush server",
- RunE: func(cmd *cobra.Command, args []string) error {
- return server.Start(logger)
- },
- }
-
- return cmd
-}
diff --git a/cmd/server/server.go b/cmd/server/server.go
deleted file mode 100644
index f050505..0000000
--- a/cmd/server/server.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package main
-
-import (
- "os"
-
- "git.front.kjuulh.io/kjuulh/octopush/cmd/server/commands"
- "git.front.kjuulh.io/kjuulh/octopush/internal/logger"
- "go.uber.org/zap"
-)
-
-func main() {
- logger, err := logger.New()
- if err != nil {
- panic(err)
- }
- _ = logger.Sync()
-
- zap.ReplaceGlobals(logger)
-
- Execute(logger)
-}
-
-func Execute(logger *zap.Logger) {
- err := commands.CreateServerCmd(logger).Execute()
- if err != nil {
- logger.Error("execution failed", zap.Error(err))
- os.Exit(1)
- }
-}
diff --git a/crates/gitea_client/Cargo.toml b/crates/gitea_client/Cargo.toml
new file mode 100644
index 0000000..2b8c3a2
--- /dev/null
+++ b/crates/gitea_client/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "gitea_client"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+gitea_raw_client = { path = "../gitea_raw_client" }
+
+async-trait = { workspace = true }
+
+reqwest = "0.11.13"
diff --git a/crates/gitea_client/src/apis/defaults/mod.rs b/crates/gitea_client/src/apis/defaults/mod.rs
new file mode 100644
index 0000000..bb787f4
--- /dev/null
+++ b/crates/gitea_client/src/apis/defaults/mod.rs
@@ -0,0 +1 @@
+pub mod repository;
diff --git a/crates/gitea_client/src/apis/defaults/repository.rs b/crates/gitea_client/src/apis/defaults/repository.rs
new file mode 100644
index 0000000..49b32a1
--- /dev/null
+++ b/crates/gitea_client/src/apis/defaults/repository.rs
@@ -0,0 +1,1115 @@
+use std::sync::Arc;
+
+use async_trait::async_trait;
+use gitea_raw_client::{
+ apis::{configuration::Configuration, repository_api::*, Error},
+ models,
+};
+
+use crate::apis::repository::Repository;
+
+pub struct DefaultRepository {
+ conf: Arc,
+}
+
+impl DefaultRepository {
+ pub fn new(conf: Arc) -> Self {
+ Self { conf }
+ }
+}
+
+#[allow(dead_code, unused_variables)]
+#[async_trait]
+impl Repository for DefaultRepository {
+ async fn accept_transfer(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_current_user_repo(
+ &self,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_fork(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn generate_repo(
+ &self,
+ template_owner: &str,
+ template_repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_annotated_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_blob(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_tree(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ recursive: Option,
+ page: Option,
+ per_page: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn list_forks(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn reject_transfer(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn add_collaborator(
+ &self,
+ owner: &str,
+ repo: &str,
+ collaborator: &str,
+ body: Option,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn add_team(
+ &self,
+ owner: &str,
+ repo: &str,
+ team: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn add_topic(
+ &self,
+ owner: &str,
+ repo: &str,
+ topic: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn apply_diff_patch(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: models::UpdateFileOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn cancel_scheduled_auto_merge(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn check_collaborator(
+ &self,
+ owner: &str,
+ repo: &str,
+ collaborator: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn check_team(
+ &self,
+ owner: &str,
+ repo: &str,
+ team: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_branch(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_branch_protection(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_file(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ body: models::CreateFileOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_key(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_pull_request(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ gitea_raw_client::apis::repository_api::repo_create_pull_request(
+ &self.conf, owner, repo, body,
+ )
+ .await
+ }
+ async fn create_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ body: models::CreatePullReviewOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_pull_review_requests(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ body: models::PullReviewRequestOptions,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn create_release(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_release_attachment(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ attachment: std::path::PathBuf,
+ name: Option<&str>,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_status(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn create_wiki_page(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn delete(&self, owner: &str, repo: &str) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_branch(
+ &self,
+ owner: &str,
+ repo: &str,
+ branch: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_branch_protection(
+ &self,
+ owner: &str,
+ repo: &str,
+ name: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_collaborator(
+ &self,
+ owner: &str,
+ repo: &str,
+ collaborator: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_file(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ body: models::DeleteFileOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn delete_git_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_key(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_pull_review_requests(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ body: models::PullReviewRequestOptions,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_release(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_release_attachment(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ attachment_id: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_release_by_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ tag: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ tag: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_team(
+ &self,
+ owner: &str,
+ repo: &str,
+ team: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_topic(
+ &self,
+ owner: &str,
+ repo: &str,
+ topic: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn delete_wiki_page(
+ &self,
+ owner: &str,
+ repo: &str,
+ page_name: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn dismiss_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ body: models::DismissPullReviewOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn download_commit_diff_or_patch(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ diff_type: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn download_pull_diff_or_patch(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ diff_type: &str,
+ binary: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_branch_protection(
+ &self,
+ owner: &str,
+ repo: &str,
+ name: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_git_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_pull_request(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_release(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_release_attachment(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ attachment_id: i64,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn edit_wiki_page(
+ &self,
+ owner: &str,
+ repo: &str,
+ page_name: &str,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ gitea_raw_client::apis::repository_api::repo_get(&self.conf, owner, repo).await
+ }
+ async fn get_all_commits(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: Option<&str>,
+ path: Option<&str>,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_archive(
+ &self,
+ owner: &str,
+ repo: &str,
+ archive: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn get_assignees(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_branch(
+ &self,
+ owner: &str,
+ repo: &str,
+ branch: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_branch_protection(
+ &self,
+ owner: &str,
+ repo: &str,
+ name: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_by_id(&self, id: i64) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_combined_status_by_ref(
+ &self,
+ owner: &str,
+ repo: &str,
+ r#ref: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_contents(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ r#ref: Option<&str>,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_contents_list(
+ &self,
+ owner: &str,
+ repo: &str,
+ r#ref: Option<&str>,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_editor_config(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ r#ref: Option<&str>,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn get_git_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_issue_templates(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_key(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_languages(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result<::std::collections::HashMap, Error> {
+ todo!("not implemented")
+ }
+ async fn get_note(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_pull_request(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_pull_request_commits(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_pull_review_comments(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_raw_file(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ r#ref: Option<&str>,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn get_raw_file_or_lfs(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ r#ref: Option<&str>,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn get_release(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_release_attachment(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ attachment_id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_release_by_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ tag: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_repo_permissions(
+ &self,
+ owner: &str,
+ repo: &str,
+ collaborator: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_reviewers(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn get_single_commit(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_tag(
+ &self,
+ owner: &str,
+ repo: &str,
+ tag: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_wiki_page(
+ &self,
+ owner: &str,
+ repo: &str,
+ page_name: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_wiki_page_revisions(
+ &self,
+ owner: &str,
+ repo: &str,
+ page_name: &str,
+ page: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn get_wiki_pages(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_all_git_refs(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_branch_protection(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_branches(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_collaborators(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_git_hooks(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_git_refs(
+ &self,
+ owner: &str,
+ repo: &str,
+ r#ref: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_hooks(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_keys(
+ &self,
+ owner: &str,
+ repo: &str,
+ key_id: Option,
+ fingerprint: Option<&str>,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_pull_requests(
+ &self,
+ owner: &str,
+ repo: &str,
+ state: Option<&str>,
+ sort: Option<&str>,
+ milestone: Option,
+ labels: Option>,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_pull_reviews(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_release_attachments(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_releases(
+ &self,
+ owner: &str,
+ repo: &str,
+ draft: Option,
+ pre_release: Option,
+ per_page: Option,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_stargazers(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_statuses(
+ &self,
+ owner: &str,
+ repo: &str,
+ sha: &str,
+ sort: Option<&str>,
+ state: Option<&str>,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_statuses_by_ref(
+ &self,
+ owner: &str,
+ repo: &str,
+ r#ref: &str,
+ sort: Option<&str>,
+ state: Option<&str>,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_subscribers(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_tags(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_teams(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn list_topics(
+ &self,
+ owner: &str,
+ repo: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn merge_pull_request(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ body: Option,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn migrate(
+ &self,
+ body: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn mirror_sync(&self, owner: &str, repo: &str) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn pull_request_is_merged(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn search(
+ &self,
+ q: Option<&str>,
+ topic: Option,
+ include_desc: Option,
+ uid: Option,
+ priority_owner_id: Option,
+ team_id: Option,
+ starred_by: Option,
+ private: Option,
+ is_private: Option,
+ template: Option,
+ archived: Option,
+ mode: Option<&str>,
+ exclusive: Option,
+ sort: Option<&str>,
+ order: Option<&str>,
+ page: Option,
+ limit: Option,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn signing_key(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn submit_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ body: models::SubmitPullReviewOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn test_hook(
+ &self,
+ owner: &str,
+ repo: &str,
+ id: i64,
+ r#ref: Option<&str>,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn tracked_times(
+ &self,
+ owner: &str,
+ repo: &str,
+ user: Option<&str>,
+ since: Option,
+ before: Option,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn transfer(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: models::TransferRepoOption,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn un_dismiss_pull_review(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ id: i64,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn update_file(
+ &self,
+ owner: &str,
+ repo: &str,
+ filepath: &str,
+ body: models::UpdateFileOptions,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn update_pull_request(
+ &self,
+ owner: &str,
+ repo: &str,
+ index: i64,
+ style: Option<&str>,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn update_topics(
+ &self,
+ owner: &str,
+ repo: &str,
+ body: Option,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn topic_search(
+ &self,
+ q: &str,
+ page: Option,
+ limit: Option,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+ async fn user_current_check_subscription(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn user_current_delete_subscription(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result<(), Error> {
+ todo!("not implemented")
+ }
+ async fn user_current_put_subscription(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result> {
+ todo!("not implemented")
+ }
+ async fn user_tracked_times(
+ &self,
+ owner: &str,
+ repo: &str,
+ user: &str,
+ ) -> Result, Error> {
+ todo!("not implemented")
+ }
+}
diff --git a/crates/gitea_client/src/apis/mod.rs b/crates/gitea_client/src/apis/mod.rs
new file mode 100644
index 0000000..4e31914
--- /dev/null
+++ b/crates/gitea_client/src/apis/mod.rs
@@ -0,0 +1,2 @@
+pub mod defaults;
+pub mod repository;
diff --git a/crates/gitea_client/src/apis/repository.rs b/crates/gitea_client/src/apis/repository.rs
new file mode 100644
index 0000000..34a5c64
--- /dev/null
+++ b/crates/gitea_client/src/apis/repository.rs
@@ -0,0 +1,841 @@
+use std::sync::Arc;
+
+use async_trait::async_trait;
+use gitea_raw_client::{apis::Error, models};
+
+pub use gitea_raw_client::apis::repository_api::*;
+
+#[async_trait]
+pub trait Repository {
+ async fn accept_transfer(
+ &self,
+ owner: &str,
+ repo: &str,
+ ) -> Result>;
+ async fn create_current_user_repo(
+ &self,
+ body: Option,
+ ) -> Result