diff options
author | rtkay123 <dev@kanjala.com> | 2025-08-10 17:29:11 +0200 |
---|---|---|
committer | rtkay123 <dev@kanjala.com> | 2025-08-10 17:29:11 +0200 |
commit | 8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0 (patch) | |
tree | ef7e9f9ce3acff22f647184e6cdd1866e3f29823 | |
parent | 4e070c8205c7039b8b63260976ffc81b5ac67beb (diff) | |
download | warden-8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0.tar.bz2 warden-8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0.zip |
build(docker): pseudonyms
-rw-r--r-- | .github/workflows/dockerfile.yaml | 34 | ||||
-rw-r--r-- | crates/pseudonyms/.dockerignore | 3 | ||||
-rw-r--r-- | crates/pseudonyms/Cargo.toml | 5 | ||||
-rw-r--r-- | crates/pseudonyms/Dockerfile | 27 | ||||
-rw-r--r-- | crates/pseudonyms/tests/grpc/mod.rs | 1 | ||||
-rw-r--r-- | crates/pseudonyms/tests/grpc/mutate.rs | 1 | ||||
-rw-r--r-- | crates/pseudonyms/tests/grpc/mutate/create.rs | 23 | ||||
-rw-r--r-- | crates/pseudonyms/tests/helpers.rs | 54 | ||||
-rw-r--r-- | crates/pseudonyms/tests/main.rs | 3 | ||||
-rw-r--r-- | lib/warden-stack/Cargo.toml | 5 | ||||
-rw-r--r-- | lib/warden-stack/examples/tracing.rs | 10 |
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"); -} |