export ENV=${1:-dev} echo "Env değeri: ${ENV}" cd ~/sozsoft-platform git checkout main # --tags --force: sürüm notları git tag'lerinden üretiliyor; yerel tag origin'den # farklı commit'e bakıyorsa --force olmadan reddedilir ve yeni tag'ler gelmez. git fetch --prune --prune-tags --tags --force && git pull # Sürüm notları imaja gömülü değil; konteynere configs/change-logs klasöründen # mount ediliyor ve API açılışta veritabanına senkronize ediyor (DbMigrator # gerekmez). `bash ...` ile çağrılır: depo Windows'tan yönetildiği için # çalıştırma biti kaybolunca "Permission denied" verip notları sessizce düşürüyordu. RELEASE_NOTES=~/sozsoft-platform/configs/change-logs/change-logs.json RELEASE_NOTES_BEFORE=$(md5sum "$RELEASE_NOTES" 2>/dev/null | cut -d' ' -f1) bash ~/sozsoft-platform/configs/change-logs/generate-change-logs.sh # Dosya yoksa API açılışta "change-logs.json bulunamadı" uyarısı verir ve # changelog eskir; sessizce devam etmek yerine burada dur. if [ ! -s "$RELEASE_NOTES" ]; then echo "HATA: ${RELEASE_NOTES} üretilemedi, deploy durduruldu." >&2 exit 1 fi cd ~/sozsoft-platform/configs/deployment COMPOSE="docker compose -f docker-compose-app.yml -f docker-compose-app.${ENV}.yml" # Konteynerler önceden durdurulup silinmez: imajlar önce indirilir, `up -d` değişen # servisi yerinde yeniden oluşturur. Böylece kesinti pull süresi kadar değil, konteyner # değişimi kadardır; UI'nin eski sürüm chunk'ları da `ui-assets` volume'unda kalır. $COMPOSE --profile api --profile ui pull $COMPOSE --profile api up -d --remove-orphans $COMPOSE --profile ui up -d --remove-orphans # API sürüm notlarını yalnızca açılışta okur. Yalnızca tag eklenen deploy'da imaj # değişmediği için `up -d` konteynere dokunmaz ve yeni sürüm veritabanına hiç # yazılmazdı; dosya değiştiyse API yeniden başlatılır. if [ "$RELEASE_NOTES_BEFORE" != "$(md5sum "$RELEASE_NOTES" | cut -d' ' -f1)" ]; then echo "change-logs.json değişti, API yeniden başlatılıyor." $COMPOSE --profile api restart api fi