Compare commits

..

3 Commits

Author SHA1 Message Date
spinline
1e39cbb0c5 perf: backend binary boyutunu düşürmek için Swagger UI opsiyonel yapıldı ve build komutu optimize edildi
All checks were successful
Build MIPS Binary / build (push) Successful in 4m31s
2026-02-08 18:16:45 +03:00
spinline
40be58f2fc perf: backend derleme süreci kök dizine taşınarak workspace optimizasyonları aktif edildi
All checks were successful
Build MIPS Binary / build (push) Successful in 4m30s
2026-02-08 18:10:09 +03:00
spinline
3f08b5b54a perf: WASM boyut takibi loglara eklendi ve profil çakışmaları giderildi
All checks were successful
Build MIPS Binary / build (push) Successful in 4m27s
2026-02-08 18:03:52 +03:00
5 changed files with 29 additions and 23 deletions

View File

@@ -30,22 +30,26 @@ jobs:
npx @tailwindcss/cli -i input.css -o public/tailwind.css npx @tailwindcss/cli -i input.css -o public/tailwind.css
trunk build --release trunk build --release
# Manuel WASM Optimizasyonu (Trunk'ın yapamadığını biz yapıyoruz) # Manuel WASM Optimizasyonu
# --all-features kullanarak tüm modern özellikleri tanımasını ve en küçük boyutu üretmesini sağlıyoruz. WASM_FILE=$(ls dist/*.wasm | head -n 1)
WASM_FILE=$(ls dist/*.wasm) BEFORE=$(du -h "$WASM_FILE" | cut -f1)
echo "Optimizing $WASM_FILE..." echo "Before optimization: $BEFORE"
wasm-opt --all-features -Oz "$WASM_FILE" -o "$WASM_FILE" wasm-opt --all-features -Oz "$WASM_FILE" -o "$WASM_FILE"
AFTER=$(du -h "$WASM_FILE" | cut -f1)
echo "After optimization: $AFTER"
echo "Optimization complete!" echo "Optimization complete!"
- name: Build Backend (MIPS) - name: Build Backend (MIPS)
env: env:
# Ensure we are building a fully static binary # -s: Sembolleri siler, -w: DWARF debug bilgilerini siler (Binary boyutunu devasa düşürür)
# -C link-self-contained=no: Let Zig (the linker) handle CRT objects (crt1.o, etc.) RUSTFLAGS: "-C target-feature=+crt-static -C link-self-contained=no -C link-arg=-msoft-float -C link-arg=-s -C link-arg=-w"
RUSTFLAGS: "-C target-feature=+crt-static -C link-self-contained=no -C link-arg=-msoft-float"
CFLAGS_mips_unknown_linux_musl: "-msoft-float" CFLAGS_mips_unknown_linux_musl: "-msoft-float"
run: | run: |
cd backend # Kök dizinden derleyerek workspace profil ayarlarının (LTO, z, strip) uygulanmasını sağlıyoruz
cargo zigbuild --target mips-unknown-linux-musl --release -Z build-std=std,panic_abort # Sadece push-notifications özelliğini aktif ediyoruz (swagger UI kapanır, boyut düşer)
cargo zigbuild -p backend --target mips-unknown-linux-musl --release -Z build-std=std,panic_abort --no-default-features --features push-notifications
file target/mips-unknown-linux-musl/release/backend file target/mips-unknown-linux-musl/release/backend
- name: Rename Binary - name: Rename Binary

View File

@@ -5,10 +5,11 @@ resolver = "2"
# Optimize for size (aggressive) # Optimize for size (aggressive)
[profile.release] [profile.release]
opt-level = "z" opt-level = "z"
lto = true lto = "fat" # Full LTO (En iyisi)
codegen-units = 1 codegen-units = 1
panic = "abort" panic = "abort"
strip = true strip = "symbols" # Sembolleri temizle
incremental = false # Incremental build'i kapat (Boyut için daha iyi)
[patch.crates-io] [patch.crates-io]
coarsetime = { path = "third_party/coarsetime" } coarsetime = { path = "third_party/coarsetime" }

View File

@@ -6,6 +6,7 @@ edition = "2021"
[features] [features]
default = ["push-notifications"] default = ["push-notifications"]
push-notifications = ["web-push", "openssl"] push-notifications = ["web-push", "openssl"]
swagger = ["utoipa-swagger-ui"]
[dependencies] [dependencies]
axum = { version = "0.8", features = ["macros", "ws"] } axum = { version = "0.8", features = ["macros", "ws"] }
@@ -29,7 +30,7 @@ shared = { path = "../shared" }
thiserror = "2.0.18" thiserror = "2.0.18"
dotenvy = "0.15.7" dotenvy = "0.15.7"
utoipa = { version = "5.4.0", features = ["axum_extras"] } utoipa = { version = "5.4.0", features = ["axum_extras"] }
utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] } utoipa-swagger-ui = { version = "9.0.2", features = ["axum"], optional = true }
web-push = { version = "0.10", default-features = false, features = ["hyper-client"], optional = true } web-push = { version = "0.10", default-features = false, features = ["hyper-client"], optional = true }
base64 = "0.22" base64 = "0.22"
openssl = { version = "0.10", features = ["vendored"], optional = true } openssl = { version = "0.10", features = ["vendored"], optional = true }

View File

@@ -33,6 +33,7 @@ use tower_http::{
trace::TraceLayer, trace::TraceLayer,
}; };
use utoipa::OpenApi; use utoipa::OpenApi;
#[cfg(feature = "swagger")]
use utoipa_swagger_ui::SwaggerUi; use utoipa_swagger_ui::SwaggerUi;
#[derive(Clone)] #[derive(Clone)]
@@ -98,6 +99,7 @@ struct Args {
reset_password: Option<String>, reset_password: Option<String>,
} }
#[cfg(feature = "swagger")]
#[cfg(feature = "push-notifications")] #[cfg(feature = "push-notifications")]
#[derive(OpenApi)] #[derive(OpenApi)]
#[openapi( #[openapi(
@@ -146,6 +148,7 @@ struct Args {
)] )]
struct ApiDoc; struct ApiDoc;
#[cfg(feature = "swagger")]
#[cfg(not(feature = "push-notifications"))] #[cfg(not(feature = "push-notifications"))]
#[derive(OpenApi)] #[derive(OpenApi)]
#[openapi( #[openapi(
@@ -462,9 +465,13 @@ async fn main() {
} }
}); });
let app = Router::new() let app = Router::new();
.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()))
#[cfg(feature = "swagger")]
let app = app.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()));
// Setup & Auth Routes // Setup & Auth Routes
let app = app
.route("/api/setup/status", get(handlers::setup::get_setup_status_handler)) .route("/api/setup/status", get(handlers::setup::get_setup_status_handler))
.route("/api/setup", post(handlers::setup::setup_handler)) .route("/api/setup", post(handlers::setup::setup_handler))
.route( .route(

View File

@@ -52,10 +52,3 @@ web-sys = { version = "0.3", features = [
shared = { path = "../shared" } shared = { path = "../shared" }
tailwind_fuse = "0.3.2" tailwind_fuse = "0.3.2"
js-sys = "0.3.85" js-sys = "0.3.85"
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
strip = true