Compare commits

..

3 Commits

Author SHA1 Message Date
spinline
48221b039e fix: build stabilitesi için wasm-opt ve bulk-memory ayarları geri alındı
All checks were successful
Build MIPS Binary / build (push) Successful in 4m52s
2026-02-08 17:37:21 +03:00
spinline
60354b66d1 fix: rustflags sadece wasm32 hedefine özel hale getirilerek uyarılar temizlendi
Some checks failed
Build MIPS Binary / build (push) Failing after 1m2s
2026-02-08 17:31:31 +03:00
spinline
0433406288 perf: WASM boyutunu minimize etmek için agresif profil ayarları ve Brotli eklendi
Some checks failed
Build MIPS Binary / build (push) Failing after 1m14s
2026-02-08 17:29:19 +03:00
5 changed files with 45 additions and 43 deletions

View File

@@ -26,22 +26,23 @@ jobs:
run: | run: |
cd frontend cd frontend
npm install npm install
# Run Tailwind manually first
npx @tailwindcss/cli -i input.css -o public/tailwind.css npx @tailwindcss/cli -i input.css -o public/tailwind.css
# Trunk'ın optimizasyonunu kapalı (0) tutuyoruz çünkü Cargo.toml'daki opt-level='z' zaten o işi yapıyor.
trunk build --release trunk build --release
- name: Build Backend (MIPS) - name: Build Backend (MIPS)
env: env:
# -s ve -w ile binary içindeki gereksiz tüm yükleri siliyoruz. # Ensure we are building a fully static binary
RUSTFLAGS: "-C target-feature=+crt-static -C link-self-contained=no -C link-arg=-msoft-float -C link-arg=-s -C link-arg=-w" # -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"
CFLAGS_mips_unknown_linux_musl: "-msoft-float" CFLAGS_mips_unknown_linux_musl: "-msoft-float"
run: | run: |
# Sadece gerekli özellikleri derliyoruz (Boyut tasarrufu için swagger kapalı) cd backend
cargo zigbuild -p backend --target mips-unknown-linux-musl --release -Z build-std=std,panic_abort --no-default-features --features push-notifications cargo zigbuild --target mips-unknown-linux-musl --release -Z build-std=std,panic_abort
file target/mips-unknown-linux-musl/release/backend
- name: Create Release Assets - name: Rename Binary
run: | run: mv target/mips-unknown-linux-musl/release/backend target/mips-unknown-linux-musl/release/vibetorrent-mips
mv target/mips-unknown-linux-musl/release/backend target/mips-unknown-linux-musl/release/vibetorrent-mips
- name: Generate Release Tag - name: Generate Release Tag
id: tag id: tag
@@ -55,10 +56,8 @@ jobs:
REPO="admin/vibetorrent" REPO="admin/vibetorrent"
API_URL="${{ gitea.server_url }}/api/v1" API_URL="${{ gitea.server_url }}/api/v1"
RELEASE_RESPONSE=$(curl -s -X POST "${API_URL}/repos/${REPO}/releases" \ # Create release
-H "Authorization: token ${RELEASE_TOKEN}" \ RELEASE_RESPONSE=$(curl -s -X POST "${API_URL}/repos/${REPO}/releases" -H "Authorization: token ${RELEASE_TOKEN}" -H "Content-Type: application/json" -d "{
-H "Content-Type: application/json" \
-d "{
\"tag_name\": \"${TAG}\", \"tag_name\": \"${TAG}\",
\"name\": \"Release ${TAG}\", \"name\": \"Release ${TAG}\",
\"body\": \"Automated build from commit ${{ gitea.sha }}\", \"body\": \"Automated build from commit ${{ gitea.sha }}\",
@@ -67,9 +66,15 @@ jobs:
}") }")
RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id') RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id')
if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then exit 1; fi echo "Release ID: $RELEASE_ID"
curl -s -X POST "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=vibetorrent-mips" \ if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then
-H "Authorization: token ${RELEASE_TOKEN}" \ echo "Failed to create release:"
-H "Content-Type: application/octet-stream" \ echo "$RELEASE_RESPONSE"
--data-binary @target/mips-unknown-linux-musl/release/vibetorrent-mips exit 1
fi
# Upload binary as release asset
curl -s -X POST "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=vibetorrent-mips" -H "Authorization: token ${RELEASE_TOKEN}" -H "Content-Type: application/octet-stream" --data-binary @target/mips-unknown-linux-musl/release/vibetorrent-mips
echo "Release ${TAG} created with binary attached."

View File

@@ -2,19 +2,13 @@
members = ["backend", "frontend", "shared"] members = ["backend", "frontend", "shared"]
resolver = "2" resolver = "2"
# Optimize for size (aggressive)
[profile.release] [profile.release]
# En küçük binary boyutu
opt-level = "z" opt-level = "z"
# En derin kod temizliği (dead code elimination) lto = true
lto = "fat"
# En iyi optimizasyon için tek birim derleme
codegen-units = 1 codegen-units = 1
# Hata izleme kodlarını atarak yer kazan
panic = "abort" panic = "abort"
# Sembolleri ve hata ayıklama bilgilerini kesin sil
strip = true strip = true
# Artık (incremental) build'i kapat ki optimizasyon tam olsun
incremental = false
[patch.crates-io] [patch.crates-io]
coarsetime = { path = "third_party/coarsetime" } coarsetime = { path = "third_party/coarsetime" }

View File

@@ -4,9 +4,8 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[features] [features]
default = ["push-notifications", "swagger"] 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"] }
@@ -30,7 +29,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"], optional = true } utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] }
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

@@ -32,9 +32,7 @@ use tower_http::{
cors::CorsLayer, cors::CorsLayer,
trace::TraceLayer, trace::TraceLayer,
}; };
#[cfg(feature = "swagger")]
use utoipa::OpenApi; use utoipa::OpenApi;
#[cfg(feature = "swagger")]
use utoipa_swagger_ui::SwaggerUi; use utoipa_swagger_ui::SwaggerUi;
#[derive(Clone)] #[derive(Clone)]
@@ -100,7 +98,6 @@ 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(
@@ -149,7 +146,6 @@ 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(
@@ -466,13 +462,9 @@ 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")] // Setup & Auth Routes
let app = app.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()));
// 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(
@@ -524,9 +516,9 @@ async fn main() {
.layer(TraceLayer::new_for_http()) .layer(TraceLayer::new_for_http())
.layer( .layer(
CompressionLayer::new() CompressionLayer::new()
.br(false) .br(true)
.gzip(true) .gzip(true)
.quality(CompressionLevel::Fastest), .quality(CompressionLevel::Best),
) )
.layer( .layer(
ServiceBuilder::new() ServiceBuilder::new()

View File

@@ -51,4 +51,16 @@ 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]
# En yüksek seviyede boyut optimizasyonu
opt-level = "z"
# Tüm kütüphaneler arasında link-time optimizasyonu yapar (Çok etkilidir)
lto = true
# Kod üretim birimini 1'e düşürerek daha iyi optimizasyon sağlar
codegen-units = 1
# Hata durumunda stack unwinding yerine doğrudan durur (Kod boyutunu düşürür)
panic = "abort"
# Sembolleri ve debug bilgilerini siler
strip = true