From d761e49a642578ad60d4d23966eb6dd58b95b971 Mon Sep 17 00:00:00 2001 From: beckerinj Date: Sat, 10 Dec 2022 23:12:59 -0500 Subject: [PATCH] only copy what each dockerfile needs to improve caching --- .vscode/tasks.json | 18 ++++++++++++++++++ Dockerfile.core | 6 +++++- Dockerfile.periphery | 4 +++- core/src/actions/server.rs | 2 +- core/src/auth/jwt.rs | 2 ++ install_periphery_dependencies.sh | 6 ++---- lib/db_client/src/lib.rs | 1 + lib/types/src/lib.rs | 11 +++++++++++ tests/src/main.rs | 11 +++++++---- tests/src/tests.rs | 8 +++----- 10 files changed, 53 insertions(+), 16 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1a86fd4f2..4c1cc5f7b 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -102,6 +102,24 @@ "cwd": "${workspaceFolder}/tests" }, "problemMatcher": [] + }, + { + "type": "shell", + "command": "docker compose down && docker compose up -d", + "label": "docker compose restart", + "options": { + "cwd": "${workspaceFolder}/tests" + }, + "problemMatcher": [] + }, + { + "type": "shell", + "command": "docker compose build && docker compose down && docker compose up -d", + "label": "docker compose build and restart", + "options": { + "cwd": "${workspaceFolder}/tests" + }, + "problemMatcher": [] } ] } \ No newline at end of file diff --git a/Dockerfile.core b/Dockerfile.core index 54b84ba30..46564f5e1 100644 --- a/Dockerfile.core +++ b/Dockerfile.core @@ -1,7 +1,11 @@ FROM rust:latest as builder WORKDIR /core -COPY . . +COPY ./lib/db_client . +COPY ./lib/helpers . +COPY ./lib/periphery_client . +COPY ./lib/types . +COPY ./core . RUN cargo build -p core --release diff --git a/Dockerfile.periphery b/Dockerfile.periphery index 6da2383b6..78377361b 100644 --- a/Dockerfile.periphery +++ b/Dockerfile.periphery @@ -1,7 +1,9 @@ FROM rust:latest as builder WORKDIR /periphery -COPY . . +COPY ./lib/helpers . +COPY ./lib/types . +COPY ./periphery . RUN cargo build -p periphery --release diff --git a/core/src/actions/server.rs b/core/src/actions/server.rs index c839816d9..227031d8e 100644 --- a/core/src/actions/server.rs +++ b/core/src/actions/server.rs @@ -33,7 +33,7 @@ impl State { address: String, user: &RequestUser, ) -> anyhow::Result { - if !user.is_admin { + if !user.is_admin && !user.create_server_permissions { return Err(anyhow!( "user does not have permissions to add server (not admin)" )); diff --git a/core/src/auth/jwt.rs b/core/src/auth/jwt.rs index 98a1e0b47..634d82311 100644 --- a/core/src/auth/jwt.rs +++ b/core/src/auth/jwt.rs @@ -17,6 +17,7 @@ pub type RequestUserExtension = Extension>; pub struct RequestUser { pub id: String, pub is_admin: bool, + pub create_server_permissions: bool, } #[derive(Serialize, Deserialize)] @@ -93,6 +94,7 @@ impl JwtClient { let user = RequestUser { id: claims.id, is_admin: user.admin, + create_server_permissions: user.create_server_permissions, }; Ok(user) } else { diff --git a/install_periphery_dependencies.sh b/install_periphery_dependencies.sh index f5ee963c3..403d118cc 100644 --- a/install_periphery_dependencies.sh +++ b/install_periphery_dependencies.sh @@ -1,8 +1,6 @@ apt-get update -apt-get install ca-certificates curl gnupg lsb-release -y +apt-get install ca-certificates curl gnupg lsb-release make cmake g++ python3 node-gyp build-essential libssl-dev git -y curl -fsSL https://get.docker.com | sh -apt-get update -apt-get install git -y -git config pull.rebase false curl -fsSL https://deb.nodesource.com/setup_19.x | bash - && apt-get install -y nodejs +git config pull.rebase false corepack enable \ No newline at end of file diff --git a/lib/db_client/src/lib.rs b/lib/db_client/src/lib.rs index 89e614de9..52146fb34 100644 --- a/lib/db_client/src/lib.rs +++ b/lib/db_client/src/lib.rs @@ -38,6 +38,7 @@ impl DbClient { builds: builds_collection(&mungos, db_name) .await .expect("failed to make builds collection"), + // build_records: updates: updates_collection(&mungos, db_name) .await .expect("failed to make updates collection"), diff --git a/lib/types/src/lib.rs b/lib/types/src/lib.rs index df00f8ef0..3a3d0bfdd 100644 --- a/lib/types/src/lib.rs +++ b/lib/types/src/lib.rs @@ -48,6 +48,9 @@ pub struct User { #[diff(attr(#[serde(skip_serializing_if = "Option::is_none")]))] pub admin: bool, + #[diff(attr(#[serde(skip_serializing_if = "Option::is_none")]))] + pub create_server_permissions: bool, + #[serde(skip_serializing_if = "Option::is_none")] #[diff(attr(#[serde(skip_serializing_if = "option_diff_no_change")]))] pub avatar: Option, @@ -70,8 +73,10 @@ pub struct User { pub google_id: Option, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub created_at: i64, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub updated_at: i64, } @@ -130,8 +135,10 @@ pub struct Server { pub instance_id: Option, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub created_at: i64, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub updated_at: i64, } @@ -222,8 +229,10 @@ pub struct Deployment { pub on_clone: Option, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub created_at: i64, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub updated_at: i64, } @@ -283,8 +292,10 @@ pub struct Build { pub docker_account: Option, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub created_at: i64, #[serde(default)] + #[diff(attr(#[serde(skip)]))] pub updated_at: i64, } diff --git a/tests/src/main.rs b/tests/src/main.rs index b062edd6a..adf4ae306 100644 --- a/tests/src/main.rs +++ b/tests/src/main.rs @@ -20,13 +20,16 @@ async fn main() -> anyhow::Result<()> { // let stats = get_server_stats(&monitor).await?; // println!("{stats:#?}"); - // let (server, deployment, build) = create_test_setup(&monitor, "test").await?; + let (server, deployment, build) = create_test_setup(&monitor, "test").await?; + + let server_stats = get_server_stats(&monitor).await?; + println!("{server_stats:#?}\n"); let (update, container) = deploy_mongo(&monitor).await?; - println!("{update:#?}\n{container:#?}"); + println!("{update:#?}\n{container:#?}\n"); - // let update = test_build(&monitor).await?; - // println!("{update:#?}"); + let update = test_build(&monitor).await?; + println!("{update:#?}"); let end_ts = unix_timestamp_ms(); let finished_in = (end_ts - start_ts) as f64 / 1000.0; diff --git a/tests/src/tests.rs b/tests/src/tests.rs index 7a053136e..b378d98d7 100644 --- a/tests/src/tests.rs +++ b/tests/src/tests.rs @@ -47,7 +47,6 @@ pub async fn deploy_mongo( .await .context("failed at list servers")?; let server = servers.get(0).ok_or(anyhow!("no servers"))?; - println!("got server"); let mut deployment = monitor.create_deployment("mongo_test", &server.id).await?; println!("created deployment"); deployment.docker_run_args.image = "mongo".to_string(); @@ -68,9 +67,8 @@ pub async fn test_build(monitor: &MonitorClient) -> anyhow::Result { .await .context("failed at list servers")?; let server = servers.get(0).ok_or(anyhow!("no servers"))?; - println!("got server"); - let mut build = monitor.create_build("periphery", &server.id).await?; - println!("created build"); + let mut build = monitor.create_build("old_periphery", &server.id).await?; + println!("created build. updating..."); build.repo = Some("mbecker20/monitor".to_string()); build.on_clone = Some(Command { path: ".".to_string(), @@ -85,7 +83,7 @@ pub async fn test_build(monitor: &MonitorClient) -> anyhow::Result { dockerfile_path: None, }); let build = monitor.update_build(build).await?; - println!("updated build"); + println!("updated build."); let update = monitor.build(&build.id).await?; Ok(update) }