diff --git a/.cargo/config.toml b/.cargo/config.toml index cdbb109..52a909a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,5 +1,7 @@ [target.x86_64-unknown-linux-musl] +linker = "clang" rustflags = ["-C", "link-arg=-fuse-ld=mold"] [target.aarch64-unknown-linux-musl] +linker = "clang" rustflags = ["-C", "link-arg=-fuse-ld=mold"] \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..df27000 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.git +target +Dockerfile +.dockerignore diff --git a/Cargo.lock b/Cargo.lock index df95e86..5084af4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,7 +6,6 @@ version = 4 name = "UniQUE-API" version = "1.0.0-alpha.16" dependencies = [ - "anyhow", "axum", "bitflags", "chrono", @@ -18,9 +17,7 @@ dependencies = [ "sea-orm-migration", "serde", "serde_json", - "serde_with", "sha2", - "thiserror", "tokio", "tower 0.4.13", "tower-http", @@ -29,7 +26,6 @@ dependencies = [ "ulid", "utoipa", "uuid", - "validator", ] [[package]] @@ -123,12 +119,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - [[package]] name = "arrayvec" version = "0.7.6" @@ -563,18 +553,8 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", + "darling_core", + "darling_macro", ] [[package]] @@ -590,38 +570,13 @@ dependencies = [ "syn 2.0.113", ] -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.113", -] - [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.113", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core 0.21.3", + "darling_core", "quote", "syn 2.0.113", ] @@ -698,12 +653,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - [[package]] name = "ecdsa" version = "0.16.9" @@ -1305,17 +1254,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - [[package]] name = "indexmap" version = "2.12.1" @@ -1941,26 +1879,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.113", -] - [[package]] name = "regex" version = "1.12.2" @@ -2143,30 +2061,6 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -2301,7 +2195,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bae0cbad6ab996955664982739354128c58d16e126114fe88c2a493642502aab" dependencies = [ - "darling 0.20.11", + "darling", "heck 0.4.1", "proc-macro2", "quote", @@ -2424,37 +2318,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "3.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" -dependencies = [ - "base64", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.12.1", - "schemars 0.9.0", - "schemars 1.2.0", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.113", -] - [[package]] name = "sha1" version = "0.10.6" @@ -2597,7 +2460,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.12.1", + "indexmap", "log", "memchr", "once_cell", @@ -2996,7 +2859,7 @@ version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.12.1", + "indexmap", "toml_datetime", "toml_parser", "winnow", @@ -3211,7 +3074,7 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" dependencies = [ - "indexmap 2.12.1", + "indexmap", "serde", "serde_json", "utoipa-gen", @@ -3242,21 +3105,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "validator" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa" -dependencies = [ - "idna", - "once_cell", - "regex", - "serde", - "serde_derive", - "serde_json", - "url", -] - [[package]] name = "valuable" version = "0.1.1" diff --git a/Cargo.toml b/Cargo.toml index f733014..88fe756 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,18 +10,14 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" uuid = { version = "1", features = ["v4", "serde"] } chrono = { version = "0.4", features = ["serde"] } -sea-orm = { version = "1.1.19", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] } +sea-orm = { version = "1.1.19", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros"] } sea-orm-migration = "1.1.19" dotenvy = "0.15" -thiserror = "2.0.17" -anyhow = "1" -validator = "0.20.0" jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] } hex = "0.4.3" sha2 = "0.10.9" futures = "0.3.31" ulid = "1.2.1" -serde_with = "3.15.1" tracing-subscriber = "0.3.20" tracing = "0.1.41" bitflags = "2.10.0" @@ -29,3 +25,12 @@ utoipa = { version = "5", features = ["axum_extras", "chrono", "uuid"] } tower-http = { version = "0.6", features = ["cors"] } tower = "0.4" + +[profile.release] +lto = false +codegen-units = 16 +opt-level = 2 + +[profile.dev] +opt-level = 0 +debug = 0 diff --git a/Dockerfile b/Dockerfile index ff944fd..c1ee99d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,31 @@ FROM rust:1-alpine AS builder -WORKDIR /usr/src/app +RUN apk add --no-cache musl-dev mold clang build-base -COPY . . +WORKDIR /usr/src/app -RUN apk add --no-cache musl-dev mold clang build-base +COPY .cargo .cargo +COPY Cargo.toml Cargo.lock ./ -RUN cargo fix --bin "UniQUE-API" +RUN mkdir src && echo "fn main() {}" > src/main.rs -RUN cargo build --release +RUN --mount=type=cache,target=/root/.cargo/registry \ + --mount=type=cache,target=/root/.cargo/git \ + --mount=type=cache,target=/usr/src/app/target \ + cargo build --release -j $(nproc) -FROM alpine:latest +RUN rm -rf src -WORKDIR /root/ +COPY . . +RUN touch src/main.rs -COPY --from=builder /usr/src/app/target/release/UniQUE-API . +RUN --mount=type=cache,target=/root/.cargo/registry \ + --mount=type=cache,target=/root/.cargo/git \ + --mount=type=cache,target=/usr/src/app/target \ + cargo build --release -j $(nproc) && \ + cp target/release/UniQUE-API /usr/local/bin/ +FROM alpine:latest +WORKDIR /root/ +COPY --from=builder /usr/local/bin/UniQUE-API . CMD ["./UniQUE-API"] \ No newline at end of file