aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-08-10 17:29:11 +0200
committerrtkay123 <dev@kanjala.com>2025-08-10 17:29:11 +0200
commit8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0 (patch)
treeef7e9f9ce3acff22f647184e6cdd1866e3f29823
parent4e070c8205c7039b8b63260976ffc81b5ac67beb (diff)
downloadwarden-8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0.tar.bz2
warden-8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0.zip
build(docker): pseudonyms
-rw-r--r--.github/workflows/dockerfile.yaml34
-rw-r--r--crates/pseudonyms/.dockerignore3
-rw-r--r--crates/pseudonyms/Cargo.toml5
-rw-r--r--crates/pseudonyms/Dockerfile27
-rw-r--r--crates/pseudonyms/tests/grpc/mod.rs1
-rw-r--r--crates/pseudonyms/tests/grpc/mutate.rs1
-rw-r--r--crates/pseudonyms/tests/grpc/mutate/create.rs23
-rw-r--r--crates/pseudonyms/tests/helpers.rs54
-rw-r--r--crates/pseudonyms/tests/main.rs3
-rw-r--r--lib/warden-stack/Cargo.toml5
-rw-r--r--lib/warden-stack/examples/tracing.rs10
11 files changed, 151 insertions, 15 deletions
diff --git a/.github/workflows/dockerfile.yaml b/.github/workflows/dockerfile.yaml
new file mode 100644
index 0000000..c3bac8a
--- /dev/null
+++ b/.github/workflows/dockerfile.yaml
@@ -0,0 +1,34 @@
+permissions:
+ contents: read
+on:
+ push:
+ branches: [master]
+ pull_request:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+name: dockerfile
+jobs:
+ pseudonyms:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+ matrix:
+ crate: ["pseudonyms"]
+ name: build / ${{ matrix.crate }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ submodules: true
+ - name: set up docker buildx
+ uses: docker/setup-buildx-action@v3
+ - name: build and push
+ uses: docker/build-push-action@v6
+ with:
+ push: false
+ context: .
+ file: crates/${{ matrix.crate }}/Dockerfile
+ tags: warden/${{ matrix.crate }}:latest
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
diff --git a/crates/pseudonyms/.dockerignore b/crates/pseudonyms/.dockerignore
new file mode 100644
index 0000000..27fd8a4
--- /dev/null
+++ b/crates/pseudonyms/.dockerignore
@@ -0,0 +1,3 @@
+/target
+.env
+.git
diff --git a/crates/pseudonyms/Cargo.toml b/crates/pseudonyms/Cargo.toml
index 1efd5c5..9f06188 100644
--- a/crates/pseudonyms/Cargo.toml
+++ b/crates/pseudonyms/Cargo.toml
@@ -32,3 +32,8 @@ warden-core = { workspace = true, features = ["pseudonyms", "serde-time"] }
[dependencies.warden-stack]
workspace = true
features = ["api", "cache", "postgres", "opentelemetry-tonic", "tracing-loki"]
+
+[profile.release]
+lto = true
+strip = true
+codegen-units = 1
diff --git a/crates/pseudonyms/Dockerfile b/crates/pseudonyms/Dockerfile
new file mode 100644
index 0000000..b4158d3
--- /dev/null
+++ b/crates/pseudonyms/Dockerfile
@@ -0,0 +1,27 @@
+FROM rust:1.89.0-slim AS builder
+
+ENV SQLX_OFFLINE=true
+
+RUN rustup target add x86_64-unknown-linux-musl
+RUN apt update && apt install -y musl-tools musl-dev protobuf-compiler curl
+RUN update-ca-certificates
+
+WORKDIR /usr/src/app
+
+RUN mkdir -p crates
+
+COPY ./.sqlx .sqlx
+COPY ./crates/pseudonyms crates/pseudonyms
+COPY ./lib lib
+COPY ./Cargo.toml .
+COPY ./Cargo.lock .
+
+RUN cargo fetch
+
+COPY ./proto proto
+
+RUN cargo build --target x86_64-unknown-linux-musl --release
+
+FROM scratch
+COPY --from=builder /usr/src/app/target/x86_64-unknown-linux-musl/release/warden-pseudonyms ./
+CMD [ "./warden-pseudonyms" ]
diff --git a/crates/pseudonyms/tests/grpc/mod.rs b/crates/pseudonyms/tests/grpc/mod.rs
new file mode 100644
index 0000000..bfc9852
--- /dev/null
+++ b/crates/pseudonyms/tests/grpc/mod.rs
@@ -0,0 +1 @@
+mod mutate;
diff --git a/crates/pseudonyms/tests/grpc/mutate.rs b/crates/pseudonyms/tests/grpc/mutate.rs
new file mode 100644
index 0000000..0f562a4
--- /dev/null
+++ b/crates/pseudonyms/tests/grpc/mutate.rs
@@ -0,0 +1 @@
+mod create;
diff --git a/crates/pseudonyms/tests/grpc/mutate/create.rs b/crates/pseudonyms/tests/grpc/mutate/create.rs
new file mode 100644
index 0000000..02f1bc3
--- /dev/null
+++ b/crates/pseudonyms/tests/grpc/mutate/create.rs
@@ -0,0 +1,23 @@
+use anyhow::Result;
+use sqlx::PgPool;
+use tonic::{Code, IntoRequest};
+use warden_core::pseudonyms::transaction_relationship::CreatePseudonymRequest;
+
+use crate::helpers::TestApp;
+
+#[sqlx::test]
+async fn data_loss_tr(pool: PgPool) -> Result<()> {
+ let mut app = TestApp::new(pool).await;
+
+ let user_request = CreatePseudonymRequest::default();
+
+ let response = app
+ .mutate
+ .create_pseudonym(user_request.into_request())
+ .await;
+
+ dbg!(&response);
+ assert!(response.is_err_and(|value| { value.code() == Code::DataLoss }));
+
+ Ok(())
+}
diff --git a/crates/pseudonyms/tests/helpers.rs b/crates/pseudonyms/tests/helpers.rs
new file mode 100644
index 0000000..9f512df
--- /dev/null
+++ b/crates/pseudonyms/tests/helpers.rs
@@ -0,0 +1,54 @@
+use sqlx::PgPool;
+use warden_stack::{Configuration, cache::RedisManager};
+use tokio::sync::oneshot;
+use tonic::transport::Channel;
+use warden_core::pseudonyms::transaction_relationship::mutate_pseudonym_client::MutatePseudonymClient;
+use warden_pseudonyms::state::{AppHandle, AppState, Services};
+
+use std::sync::Arc;
+
+pub struct TestApp {
+ state: AppHandle,
+ pub mutate: MutatePseudonymClient<Channel>,
+}
+
+impl TestApp {
+ pub async fn new(pool: PgPool) -> Self {
+ let (tx, rx) = oneshot::channel();
+ // Set port to 0 so tests can spawn multiple servers on OS assigned ports.
+ //
+ let config_path = "pseudonyms.toml";
+
+ let config = config::Config::builder()
+ .add_source(config::File::new(config_path, config::FileFormat::Toml))
+ .build()
+ .unwrap();
+
+ let mut config = config.try_deserialize::<Configuration>().unwrap();
+ config.application.port = 0;
+
+ let cache = RedisManager::new(&config.cache).await.unwrap();
+
+ let services = Services {
+ postgres: pool,
+ cache,
+ };
+
+ let state = AppHandle(Arc::new(AppState::new(services, config, None).unwrap()));
+
+ dbg!(&state.addr.port());
+
+ tokio::spawn(warden_pseudonyms::run(state.clone(), tx));
+ let port = rx.await.expect("channel to be open");
+ let addr = format!("http://[::1]:{port}");
+
+ let mutation_client = MutatePseudonymClient::connect(addr.to_string())
+ .await
+ .expect("expect server to be running");
+
+ Self {
+ state,
+ mutate: mutation_client,
+ }
+ }
+}
diff --git a/crates/pseudonyms/tests/main.rs b/crates/pseudonyms/tests/main.rs
new file mode 100644
index 0000000..5dd7f19
--- /dev/null
+++ b/crates/pseudonyms/tests/main.rs
@@ -0,0 +1,3 @@
+#[cfg(target_os = "linux")]
+mod grpc;
+mod helpers;
diff --git a/lib/warden-stack/Cargo.toml b/lib/warden-stack/Cargo.toml
index a2e910b..e8fe317 100644
--- a/lib/warden-stack/Cargo.toml
+++ b/lib/warden-stack/Cargo.toml
@@ -61,11 +61,6 @@ tracing = ["dep:tracing", "tracing-subscriber/env-filter"]
opentelemetry-tonic = ["dep:tonic", "opentelemetry"]
tracing-loki = ["dep:tracing-loki", "tracing"]
-[[example]]
-name = "tracing"
-path = "examples/tracing.rs"
-required-features = ["tracing"]
-
[dev-dependencies]
tokio = { version = "*", features = ["macros", "rt"] }
sqlx = { version = "*", features = ["runtime-tokio"] }
diff --git a/lib/warden-stack/examples/tracing.rs b/lib/warden-stack/examples/tracing.rs
deleted file mode 100644
index 7ebe41e..0000000
--- a/lib/warden-stack/examples/tracing.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-use warden_stack::{Monitoring, tracing::TracingBuilder};
-
-fn main() {
- let config = Monitoring {
- log_level: "info".to_string(),
- };
- let _tracing = TracingBuilder::default().build(&config);
-
- tracing::info!("hello from tracing");
-}