diff --git a/Cargo.lock b/Cargo.lock index 3f506588c..46bd88a66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,6 +19,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -75,6 +84,322 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "aws-config" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3d1e2a1f1ab3ac6c4b884e37413eaa03eb9d901e4fc68ee8f5c1d49721680e" +dependencies = [ + "aws-credential-types", + "aws-http", + "aws-sdk-sso", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "hex", + "http", + "hyper", + "ring", + "time 0.3.17", + "tokio", + "tower", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-credential-types" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0696a0523a39a19087747e4dafda0362dc867531e3d72a3f195564c84e5e08" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-endpoint" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80a4f935ab6a1919fbfd6102a80c4fccd9ff5f47f94ba154074afe1051903261" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "http", + "regex", + "tracing", +] + +[[package]] +name = "aws-http" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82976ca4e426ee9ca3ffcf919d9b2c8d14d0cd80d43cc02173737a8f07f28d4d" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "http-body", + "lazy_static", + "percent-encoding", + "pin-project-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-ec2" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40ee2d853d8300a49513778beb79b1574ff9e9c94b30b1531bc0171d730ad64" +dependencies = [ + "aws-credential-types", + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "fastrand", + "http", + "regex", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "aws-sdk-sso" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0119bacf0c42f587506769390983223ba834e605f049babe514b2bd646dbb2" +dependencies = [ + "aws-credential-types", + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "regex", + "tokio-stream", + "tower", +] + +[[package]] +name = "aws-sdk-sts" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "270b6a33969ebfcb193512fbd5e8ee5306888ad6c6d5d775cdbfb2d50d94de26" +dependencies = [ + "aws-credential-types", + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "http", + "regex", + "tower", + "tracing", +] + +[[package]] +name = "aws-sig-auth" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "660a02a98ab1af83bd8d714afbab2d502ba9b18c49e7e4cddd6bf8837ff778cb" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-http", + "aws-types", + "http", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdaf11005b7444e6cd66f600d09861a3aeb6eb89a0f003c7c9820dbab2d15297" +dependencies = [ + "aws-smithy-http", + "form_urlencoded", + "hex", + "hmac", + "http", + "once_cell", + "percent-encoding", + "regex", + "sha2", + "time 0.3.17", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e8615bf58d144dec3fcdb5110941b84e904c68054cb74ed240b9588fc337a5" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", + "tokio-stream", +] + +[[package]] +name = "aws-smithy-client" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c1df4c1d03e1ce299ae4e24c19d0f4cd8bebceac60828530e579977d70289a" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-types", + "bytes", + "fastrand", + "http", + "http-body", + "hyper", + "hyper-rustls", + "lazy_static", + "pin-project-lite", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-http" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78abf16f8667b9176737cfffd1dd4ad07d350ef5dba01d01fdec5f31265f7134" +dependencies = [ + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http", + "http-body", + "hyper", + "once_cell", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "aws-smithy-http-tower" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d517ac2476efc1820228c2fdfdcb17d3bea8695558bd67584a62a47c12b41918" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "bytes", + "http", + "http-body", + "pin-project-lite", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a23cc091168c5d969b150d7cc11a5a202bfa88dc36494e6659d2499b0cf227b" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-query" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a1218021362bc1faa56648397b8cc4ac7631a3944e087d314d0187ef88d782" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-types" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8d2056dc5f10094d5e753ac5c649e8996869f0649b641e470950151596db73" +dependencies = [ + "base64-simd", + "itoa", + "num-integer", + "ryu", + "time 0.3.17", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.54.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a3029cbb4a49656456b3f2b34daee7f68dd93c61cc5d03fa90788cb1d25d5b4" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f15b34253b68cde08e39b0627cc6101bcca64351229484b4743392c035d057" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-types", + "http", + "rustc_version 0.4.0", + "tracing", +] + [[package]] name = "axum" version = "0.6.4" @@ -180,6 +505,15 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +[[package]] +name = "base64-simd" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +dependencies = [ + "simd-abstraction", +] + [[package]] name = "bcrypt" version = "0.14.0" @@ -299,6 +633,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +[[package]] +name = "bytes-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9" +dependencies = [ + "bytes", + "either", +] + [[package]] name = "cc" version = "1.0.79" @@ -415,8 +759,8 @@ dependencies = [ "hex", "hmac", "jwt", - "monitor_helpers 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "monitor_helpers", + "monitor_types 0.1.15", "mungos", "periphery_client", "serde", @@ -654,7 +998,7 @@ name = "db_client" version = "0.1.15" dependencies = [ "anyhow", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "monitor_types 0.1.15", "mungos", ] @@ -1104,6 +1448,21 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1454,7 +1813,7 @@ dependencies = [ "rand", "rustc_version_runtime", "rustls", - "rustls-pemfile", + "rustls-pemfile 0.3.0", "serde", "serde_bytes", "serde_with", @@ -1516,32 +1875,14 @@ version = "0.1.15" dependencies = [ "anyhow", "async_timing_util", + "aws-config", + "aws-sdk-ec2", "axum", "bollard", "futures", "futures-util", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", - "rand", - "run_command", - "serde", - "serde_derive", - "serde_json", - "toml", -] - -[[package]] -name = "monitor_helpers" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2e58a1c8a1e92c967b5c4ba10511bc4bbf65c824230d234b78ad9d3ed992b75" -dependencies = [ - "anyhow", - "async_timing_util", - "axum", - "bollard", - "futures", - "futures-util", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "monitor_types 0.1.15", + "periphery_client", "rand", "run_command", "serde", @@ -1563,8 +1904,8 @@ dependencies = [ "dotenv", "envy", "futures-util", - "monitor_helpers 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "monitor_helpers", + "monitor_types 0.1.15", "run_command", "serde", "serde_derive", @@ -1816,6 +2157,12 @@ version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +[[package]] +name = "outref" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" + [[package]] name = "parking_lot" version = "0.12.1" @@ -1860,8 +2207,7 @@ version = "0.1.15" dependencies = [ "anyhow", "futures-util", - "monitor_helpers 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", - "monitor_types 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "monitor_types 0.1.15", "reqwest", "serde", "serde_json", @@ -2022,6 +2368,23 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "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" @@ -2108,7 +2471,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.16", ] [[package]] @@ -2117,8 +2489,8 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f" dependencies = [ - "rustc_version", - "semver", + "rustc_version 0.2.3", + "semver 0.9.0", ] [[package]] @@ -2147,6 +2519,18 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.2", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "0.3.0" @@ -2156,6 +2540,15 @@ dependencies = [ "base64 0.13.1", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.0", +] + [[package]] name = "rustversion" version = "1.0.11" @@ -2231,6 +2624,12 @@ dependencies = [ "semver-parser", ] +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + [[package]] name = "semver-parser" version = "0.7.0" @@ -2372,6 +2771,15 @@ dependencies = [ "libc", ] +[[package]] +name = "simd-abstraction" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" +dependencies = [ + "outref", +] + [[package]] name = "slab" version = "0.4.7" @@ -2666,6 +3074,17 @@ dependencies = [ "webpki", ] +[[package]] +name = "tokio-stream" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-tungstenite" version = "0.18.0" @@ -2795,9 +3214,21 @@ 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" @@ -3233,6 +3664,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "xmlparser" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" + [[package]] name = "zeroize" version = "1.5.7" diff --git a/core/Cargo.toml b/core/Cargo.toml index 50e9c86b9..2bdb085f5 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,10 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -# helpers = { package = "monitor_helpers", path = "../lib/helpers" } -# types = { package = "monitor_types", path = "../lib/types" } -helpers = { package = "monitor_helpers", version = "0.1.15" } -types = { package = "monitor_types", version = "0.1.15" } +helpers = { package = "monitor_helpers", path = "../lib/helpers" } +types = { package = "monitor_types", path = "../lib/types" } db = { package = "db_client", path = "../lib/db_client" } periphery = { package = "periphery_client", path = "../lib/periphery_client" } axum_oauth2 = { path = "../lib/axum_oauth2" } diff --git a/lib/db_client/Cargo.toml b/lib/db_client/Cargo.toml index 571957c78..d11f5a398 100644 --- a/lib/db_client/Cargo.toml +++ b/lib/db_client/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -types = { package = "monitor_types", version = "0.1.15" } -# types = { package = "monitor_types", path = "../types" } +types = { package = "monitor_types", path = "../types" } mungos = "0.3.0" anyhow = "1.0" \ No newline at end of file diff --git a/lib/helpers/Cargo.toml b/lib/helpers/Cargo.toml index 4c04ff4b0..495640dc2 100644 --- a/lib/helpers/Cargo.toml +++ b/lib/helpers/Cargo.toml @@ -9,8 +9,8 @@ license = "GPL-3.0-or-later" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -# types = { package = "monitor_types", path = "../types" } -types = { package = "monitor_types", version = "0.1.15" } +types = { package = "monitor_types", path = "../types" } +periphery_client = { path = "../periphery_client" } async_timing_util = "0.1.14" bollard = "0.13" anyhow = "1.0" @@ -23,3 +23,5 @@ run_command = { version = "0.0.5", features = ["async_tokio"] } rand = "0.8" futures = "0.3" futures-util = "0.3.25" +aws-config = "0.54" +aws-sdk-ec2 = "0.24" diff --git a/lib/helpers/src/aws/mod.rs b/lib/helpers/src/aws/mod.rs new file mode 100644 index 000000000..7062922a0 --- /dev/null +++ b/lib/helpers/src/aws/mod.rs @@ -0,0 +1,73 @@ +use anyhow::{anyhow, Context}; +use aws_sdk_ec2::{model::InstanceType, Client, Region}; +use periphery_client::PeripheryClient; + +/// must provide creds in env or with ~/.aws/credentials +pub async fn create_ec2_client( + region: String, + access_key_id: &str, + secret_access_key: String, +) -> Client { + std::env::set_var("AWS_ACCESS_KEY_ID", access_key_id); + std::env::set_var("AWS_SECRET_ACCESS_KEY", secret_access_key); + let region = Region::new(region); + let config = aws_config::from_env().region(region).load().await; + let client = Client::new(&config); + std::env::remove_var("AWS_ACCESS_KEY_ID"); + std::env::remove_var("AWS_SECRET_ACCESS_KEY"); + client +} + +pub struct Ec2Instance { + pub id: String, + pub periphery_address: String, +} + +const POLL_RATE_SECS: i32 = 1; +const MAX_POLL_TRIES: usize = 30; + +/// should poll the periphery +pub async fn create_instance_with_ami( + client: Client, + ami_id: &str, + instance_type: &str, + security_groups_ids: &Vec, +) -> anyhow::Result { + let instance_type = InstanceType::from(instance_type); + if let InstanceType::Unknown(t) = instance_type { + return Err(anyhow!("unknown instance type {t:?}")); + } + let mut req = client + .run_instances() + .image_id(ami_id) + .instance_type(instance_type) + .min_count(1) + .max_count(1); + + for sg_id in security_groups_ids { + req = req.security_group_ids(sg_id); + } + + let res = req + .send() + .await + .context("failed to start builder ec2 instance")?; + let instance = res + .instances() + .ok_or(anyhow!("got None for created instances"))? + .get(0) + .ok_or(anyhow!("instances array is empty"))?; + let instance_id = instance + .instance_id() + .ok_or(anyhow!("instance does not have instance_id"))? + .to_string(); + let ip = instance + .private_ip_address() + .ok_or(anyhow!("instance does not have private ip"))?; + // client.describe_instances(). + let periphery_address = format!("http://{ip}:8000"); + Ok(Ec2Instance { + id: instance_id, + periphery_address, + }) +} diff --git a/lib/helpers/src/git.rs b/lib/helpers/src/git.rs index 3625710e4..3ab8c52c2 100644 --- a/lib/helpers/src/git.rs +++ b/lib/helpers/src/git.rs @@ -2,47 +2,10 @@ use std::path::PathBuf; use ::run_command::async_run_command; use anyhow::anyhow; -use serde::{Deserialize, Serialize}; -use types::{monitor_timestamp, Build, Command, Deployment, GithubToken, GithubUsername, Log}; +use types::{monitor_timestamp, CloneArgs, Command, GithubToken, Log}; use crate::{run_monitor_command, to_monitor_name}; -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct CloneArgs { - name: String, - repo: Option, - branch: Option, - on_clone: Option, - on_pull: Option, - pub github_account: Option, -} - -impl From<&Deployment> for CloneArgs { - fn from(d: &Deployment) -> Self { - CloneArgs { - name: d.name.clone(), - repo: d.repo.clone(), - branch: d.branch.clone(), - on_clone: d.on_clone.clone(), - on_pull: d.on_pull.clone(), - github_account: d.github_account.clone(), - } - } -} - -impl From<&Build> for CloneArgs { - fn from(b: &Build) -> Self { - CloneArgs { - name: b.name.clone(), - repo: b.repo.clone(), - branch: b.branch.clone(), - on_clone: b.on_clone.clone(), - on_pull: None, - github_account: b.github_account.clone(), - } - } -} - pub async fn pull( mut path: PathBuf, branch: &Option, diff --git a/lib/helpers/src/lib.rs b/lib/helpers/src/lib.rs index 37a10bf22..9e4ee9bcf 100644 --- a/lib/helpers/src/lib.rs +++ b/lib/helpers/src/lib.rs @@ -7,6 +7,7 @@ use run_command::{async_run_command, CommandOutput}; use serde::de::DeserializeOwned; use types::{monitor_timestamp, Log}; +pub mod aws; pub mod docker; pub mod git; diff --git a/lib/monitor_client/Cargo.toml b/lib/monitor_client/Cargo.toml index c82a8c927..072700617 100644 --- a/lib/monitor_client/Cargo.toml +++ b/lib/monitor_client/Cargo.toml @@ -10,7 +10,6 @@ license = "GPL-3.0-or-later" [dependencies] monitor_types = "0.1.15" -# monitor_types = { path = "../types" } reqwest = { version = "0.11", features = ["json"] } tokio-tungstenite = { version = "0.18", features=["native-tls"] } tokio = { version = "1.25", features = ["full"] } diff --git a/lib/periphery_client/Cargo.toml b/lib/periphery_client/Cargo.toml index 1bf202ab2..8a652fddc 100644 --- a/lib/periphery_client/Cargo.toml +++ b/lib/periphery_client/Cargo.toml @@ -6,10 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -helpers = { package = "monitor_helpers", version = "0.1.15" } -types = { package = "monitor_types", version = "0.1.15" } -# types = { package = "monitor_types", path = "../types" } -# helpers = { package = "monitor_helpers", path = "../helpers" } +types = { package = "monitor_types", path = "../types" } tokio-tungstenite = { version = "0.18", features=["native-tls"] } tokio = "1.25" reqwest = { version = "0.11", features = ["json"] } diff --git a/lib/periphery_client/src/git.rs b/lib/periphery_client/src/git.rs index 9fac1432e..576647f98 100644 --- a/lib/periphery_client/src/git.rs +++ b/lib/periphery_client/src/git.rs @@ -1,7 +1,6 @@ use anyhow::Context; -use helpers::git::CloneArgs; use serde_json::json; -use types::{Command, Log, Server}; +use types::{CloneArgs, Command, Log, Server}; use crate::PeripheryClient; diff --git a/lib/periphery_client/src/lib.rs b/lib/periphery_client/src/lib.rs index 8ad102503..6e3546de8 100644 --- a/lib/periphery_client/src/lib.rs +++ b/lib/periphery_client/src/lib.rs @@ -23,7 +23,7 @@ impl PeripheryClient { pub fn new(passkey: String) -> PeripheryClient { PeripheryClient { http_client: Default::default(), - passkey + passkey, } } diff --git a/lib/types/src/lib.rs b/lib/types/src/lib.rs index 350e654a1..0715fb0ac 100644 --- a/lib/types/src/lib.rs +++ b/lib/types/src/lib.rs @@ -38,6 +38,16 @@ pub const GITHUB_WEBHOOK_USER_ID: &str = "github"; #[typeshare] pub type PermissionsMap = HashMap; +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct CloneArgs { + pub name: String, + pub repo: Option, + pub branch: Option, + pub on_clone: Option, + pub on_pull: Option, + pub github_account: Option, +} + #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Diff)] #[diff(attr(#[derive(Debug, PartialEq, Serialize)]))] diff --git a/lib/types/src/traits.rs b/lib/types/src/traits.rs index da2a1e939..7fde54861 100644 --- a/lib/types/src/traits.rs +++ b/lib/types/src/traits.rs @@ -1,5 +1,5 @@ use crate::{ - Build, BuildActionState, Deployment, DeploymentActionState, Group, PermissionLevel, + Build, BuildActionState, CloneArgs, Deployment, DeploymentActionState, Group, PermissionLevel, PermissionsMap, Procedure, Server, ServerActionState, }; @@ -68,3 +68,29 @@ impl Busy for BuildActionState { self.building || self.recloning || self.updating } } + +impl From<&Deployment> for CloneArgs { + fn from(d: &Deployment) -> Self { + CloneArgs { + name: d.name.clone(), + repo: d.repo.clone(), + branch: d.branch.clone(), + on_clone: d.on_clone.clone(), + on_pull: d.on_pull.clone(), + github_account: d.github_account.clone(), + } + } +} + +impl From<&Build> for CloneArgs { + fn from(b: &Build) -> Self { + CloneArgs { + name: b.name.clone(), + repo: b.repo.clone(), + branch: b.branch.clone(), + on_clone: b.on_clone.clone(), + on_pull: None, + github_account: b.github_account.clone(), + } + } +} diff --git a/periphery/Cargo.toml b/periphery/Cargo.toml index a6c39feca..85d24f3fe 100644 --- a/periphery/Cargo.toml +++ b/periphery/Cargo.toml @@ -13,10 +13,8 @@ path = "src/main.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -# helpers = { package = "monitor_helpers", path = "../lib/helpers" } -# types = { package = "monitor_types", path = "../lib/types" } -helpers = { package = "monitor_helpers", version = "0.1.15" } -types = { package = "monitor_types", version = "0.1.15" } +helpers = { package = "monitor_helpers", path = "../lib/helpers" } +types = { package = "monitor_types", path = "../lib/types" } run_command = { version = "0.0.5", features = ["async_tokio"] } async_timing_util = "0.1.14" tokio = { version = "1.25", features = ["full"] } diff --git a/periphery/src/api/git.rs b/periphery/src/api/git.rs index 0ce6cec6d..8b4dbdcf8 100644 --- a/periphery/src/api/git.rs +++ b/periphery/src/api/git.rs @@ -1,10 +1,7 @@ use axum::{routing::post, Extension, Json, Router}; -use helpers::{ - git::{self, CloneArgs}, - handle_anyhow_error, to_monitor_name, -}; +use helpers::{git, handle_anyhow_error, to_monitor_name}; use serde::Deserialize; -use types::{Command, Log}; +use types::{CloneArgs, Command, Log}; use crate::{helpers::get_github_token, PeripheryConfigExtension};