mirror of
https://github.com/kemalai/FreeCrawl-SEO-Tool.git
synced 2026-10-18 00:39:38 +02:00
191 lines
5.8 KiB
Bash
Executable File
191 lines
5.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# FreeCrawl SEO Tool — Launcher (macOS / Linux mirror of FreeCrawl-SEO-Tool-Start.bat)
|
||
#
|
||
# İlk çalıştırma:
|
||
# 1) chmod +x FreeCrawl-SEO-Tool-Start.sh
|
||
# 2) ./FreeCrawl-SEO-Tool-Start.sh
|
||
#
|
||
# .bat tarafındaki Windows-spesifik bölümler (color, title, pause) yerine
|
||
# burada ANSI renkleri + sondaki "Enter ile çık" promptu kullanılır.
|
||
|
||
set -u
|
||
|
||
# Çift-tıklatma ile başlatılan terminallerde script kendi dizininden bağımsız
|
||
# olarak fire edilebilir — symlink'i de takip ederek gerçek dizine cd ediyoruz.
|
||
SCRIPT_DIR="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || echo "${BASH_SOURCE[0]}")")" && pwd)"
|
||
cd "$SCRIPT_DIR"
|
||
|
||
# Renk kısayolları — `tput` çıkışa terminal yoksa boş döner, böylece bir log
|
||
# dosyasına pipe'lansa bile escape kodları output'u kirletmez.
|
||
if [ -t 1 ]; then
|
||
C_RESET="$(tput sgr0 2>/dev/null || echo)"
|
||
C_OK="$(tput setaf 2 2>/dev/null || echo)"
|
||
C_ERR="$(tput setaf 1 2>/dev/null || echo)"
|
||
C_INFO="$(tput setaf 6 2>/dev/null || echo)"
|
||
C_HEAD="$(tput setaf 14 2>/dev/null || tput setaf 6 2>/dev/null || echo)"
|
||
else
|
||
C_RESET=""
|
||
C_OK=""
|
||
C_ERR=""
|
||
C_INFO=""
|
||
C_HEAD=""
|
||
fi
|
||
|
||
ok() { printf '%s[OK]%s %s\n' "$C_OK" "$C_RESET" "$*"; }
|
||
info() { printf '%s[BILGI]%s %s\n' "$C_INFO" "$C_RESET" "$*"; }
|
||
err() { printf '%s[HATA]%s %s\n' "$C_ERR" "$C_RESET" "$*" >&2; }
|
||
head_() { printf '%s%s%s\n' "$C_HEAD" "$*" "$C_RESET"; }
|
||
hr() { head_ "============================================================"; }
|
||
sub() { head_ "------------------------------------------------------------"; }
|
||
|
||
# Çift-tıklatma akışlarında pencerenin anında kapanmaması için sondaki
|
||
# "Enter ile çık" promptu. Stdin TTY değilse (CI, pipe) atlanır.
|
||
final_pause() {
|
||
if [ -t 0 ]; then
|
||
printf '\n'
|
||
read -r -p "Cikmak icin Enter'a basin..." _ || true
|
||
fi
|
||
}
|
||
|
||
trap 'final_pause' EXIT
|
||
|
||
# ============================================================================
|
||
hr
|
||
head_ " FreeCrawl SEO Tool - Launcher"
|
||
hr
|
||
echo
|
||
|
||
# ---- 1) Node.js kontrolu ----------------------------------------------------
|
||
if ! command -v node >/dev/null 2>&1; then
|
||
err "Node.js bulunamadi."
|
||
echo
|
||
echo "FreeCrawl SEO Tool Node.js 22+ gerektirir."
|
||
echo "Lutfen https://nodejs.org/ adresinden LTS surumunu indirip kurun."
|
||
echo "Kurulumdan sonra bu betigi tekrar calistirin."
|
||
exit 1
|
||
fi
|
||
NODE_VERSION="$(node -v)"
|
||
ok "Node.js bulundu: ${NODE_VERSION}"
|
||
|
||
# ---- 2) npm kontrolu --------------------------------------------------------
|
||
if ! command -v npm >/dev/null 2>&1; then
|
||
err "npm bulunamadi. Node.js kurulumunuz bozuk olabilir."
|
||
exit 1
|
||
fi
|
||
NPM_VERSION="$(npm -v)"
|
||
ok "npm bulundu: v${NPM_VERSION}"
|
||
echo
|
||
|
||
# ---- 3) Bagimlilik kontrolu -------------------------------------------------
|
||
NEED_INSTALL=0
|
||
[ -d "node_modules" ] || NEED_INSTALL=1
|
||
[ -d "apps/desktop/node_modules" ] || NEED_INSTALL=1
|
||
[ -d "node_modules/electron" ] || NEED_INSTALL=1
|
||
|
||
if [ "$NEED_INSTALL" -eq 1 ]; then
|
||
info "Gerekli kutuphaneler yuklu degil veya eksik."
|
||
echo
|
||
echo "Bu islem ilk calistirmada birkac dakika surebilir ve yaklasik"
|
||
echo "500-800 MB disk alani kullanir."
|
||
echo
|
||
CONFIRM=""
|
||
read -r -p "Kutuphaneleri simdi yuklemek istiyor musunuz? (E/H): " CONFIRM || true
|
||
case "${CONFIRM:-}" in
|
||
E|e|Y|y)
|
||
echo
|
||
sub
|
||
head_ " npm install calisiyor..."
|
||
sub
|
||
if ! npm install; then
|
||
err "npm install basarisiz oldu. Internet baglantinizi kontrol edin veya hata mesajini inceleyin."
|
||
exit 1
|
||
fi
|
||
echo
|
||
ok "Kutuphaneler basariyla yuklendi."
|
||
echo
|
||
;;
|
||
*)
|
||
echo
|
||
echo "Kurulum iptal edildi. Program baslatilamaz."
|
||
exit 1
|
||
;;
|
||
esac
|
||
else
|
||
ok "Gerekli kutuphaneler yuklu."
|
||
echo
|
||
fi
|
||
|
||
# ---- 4) Paylasilan workspace paketlerini derle ------------------------------
|
||
NEED_BUILD=0
|
||
[ -f "packages/shared-types/dist/index.js" ] || NEED_BUILD=1
|
||
[ -f "packages/db/dist/index.js" ] || NEED_BUILD=1
|
||
[ -f "packages/core/dist/index.js" ] || NEED_BUILD=1
|
||
|
||
if [ "$NEED_BUILD" -eq 1 ]; then
|
||
sub
|
||
head_ " Paylasilan paketler derleniyor (ilk calisma)..."
|
||
sub
|
||
if ! npx tsc -b; then
|
||
err "Paket derlemesi basarisiz oldu."
|
||
exit 1
|
||
fi
|
||
ok "Paketler hazir."
|
||
echo
|
||
else
|
||
ok "Paylasilan paketler hazir."
|
||
echo
|
||
fi
|
||
|
||
# ---- 4b) Desktop uygulamasini production build et ---------------------------
|
||
# Dev mod (electron-vite dev) ilk acilista 1700+ modulu on-demand transform
|
||
# ediyor ve 20-30 sn cold start suruyor. Production build'de tum moduller
|
||
# tek bir bundle'a derlenmis oldugu icin acilis 1-2 sn'ye iniyor.
|
||
NEED_DESKTOP_BUILD=0
|
||
[ -f "apps/desktop/out/main/index.js" ] || NEED_DESKTOP_BUILD=1
|
||
[ -f "apps/desktop/out/preload/index.js" ] || NEED_DESKTOP_BUILD=1
|
||
[ -f "apps/desktop/out/renderer/index.html" ] || NEED_DESKTOP_BUILD=1
|
||
|
||
if [ "$NEED_DESKTOP_BUILD" -eq 1 ]; then
|
||
sub
|
||
head_ " Desktop uygulamasi build ediliyor (production)..."
|
||
echo " Bu islem yaklasik 10-15 sn surer ve sadece ilk calistirmada"
|
||
echo " (veya kod degisikligi sonrasi) yeniden yapilir."
|
||
sub
|
||
if ! npm --workspace apps/desktop run build; then
|
||
err "Desktop build basarisiz oldu."
|
||
exit 1
|
||
fi
|
||
ok "Desktop bundle hazir."
|
||
echo
|
||
else
|
||
ok "Desktop bundle hazir."
|
||
echo
|
||
fi
|
||
|
||
# ---- 5) Uygulamayi baslat ---------------------------------------------------
|
||
hr
|
||
head_ " FreeCrawl SEO Tool baslatiliyor (production)..."
|
||
echo " Bu pencereyi KAPATMAYIN - uygulamanin yasam dongusu buna bagli."
|
||
hr
|
||
echo
|
||
|
||
# `node:sqlite` Node 24'te kararli ama hala "experimental" bayragi tasiyor
|
||
# ve modul yuklenirken ExperimentalWarning basiyor. NODE_NO_WARNINGS=1
|
||
# ile bu kozmetik uyariyi sustururuz; gercek hatalar (TypeError vs.)
|
||
# yine konsola yazilir.
|
||
export NODE_NO_WARNINGS=1
|
||
|
||
npm --workspace apps/desktop run start
|
||
APP_EXIT=$?
|
||
|
||
echo
|
||
sub
|
||
if [ "$APP_EXIT" -eq 0 ]; then
|
||
head_ " Uygulama kapatildi."
|
||
else
|
||
err "Uygulama hatayla sonlandi (exit code: ${APP_EXIT})."
|
||
fi
|
||
sub
|
||
|
||
exit "$APP_EXIT"
|