name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest steps: - name: Kaynak kodu çek uses: actions/checkout@v4 - name: .env.production oluştur run: | cat > .env.production <<'EOF' BETTER_AUTH_SECRET=${{ secrets.BETTER_AUTH_SECRET }} BETTER_AUTH_URL=${{ secrets.BETTER_AUTH_URL }} NEXT_PUBLIC_APP_URL=${{ secrets.NEXT_PUBLIC_APP_URL }} GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }} GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }} RESEND_API_KEY=${{ secrets.RESEND_API_KEY }} EMAIL_FROM=${{ secrets.EMAIL_FROM }} IYZICO_API_KEY=${{ secrets.IYZICO_API_KEY }} IYZICO_SECRET_KEY=${{ secrets.IYZICO_SECRET_KEY }} IYZICO_BASE_URL=${{ secrets.IYZICO_BASE_URL }} AI_SAGLAYICI=${{ secrets.AI_SAGLAYICI }} ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }} GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }} EOF # BuildKit'te "docker build --memory" YOK SAYILIR (moby/buildkit#1362); # gerçek sınır ancak buildkitd'yi kendi cgroup'u olan bir container'da # (buildx docker-container driver) koşturarak konur. Böylece build OOM # olursa yalnızca builder container'ı ölür — uygulama + Gitea ayakta kalır # ve adım 35-90 dk sessiz kilitlenme yerine hızlı, görünür hata verir. # # Sınırlar container İLK oluşturulduğunda donar; değerleri değiştirmek için # önce: docker buildx rm sinirli && docker rm -f buildx_buildkit_sinirli0 - name: Sınırlı builder hazırla run: | cat > buildkitd.toml <<'EOF' [worker.oci] enabled = true max-parallelism = 1 EOF # Act container'ı her koşuda sıfırdan geldiği için client kaydı hep # yeniden oluşturulur; host'taki buildx_buildkit_sinirli0 container'ı # (ve build cache'i) varsa bootstrap'ta aynen yeniden kullanılır. docker buildx create --name sinirli \ --driver docker-container \ --driver-opt memory=2200m \ --driver-opt memory-swap=4200m \ --driver-opt cpu-quota=150000 \ --buildkitd-config ./buildkitd.toml \ 2>/dev/null || true docker buildx inspect sinirli --bootstrap >/dev/null - name: Build (sınırlı builder) run: | docker compose -p kolaytercih build --builder sinirli # docker-container driver'da imajın daemon'a --load ile düştüğünü doğrula; # düşmediyse aynı cache'ten yeniden build edip elle yükle. docker image inspect kolaytercih-app >/dev/null 2>&1 || \ docker buildx build --builder sinirli --load -t kolaytercih-app . - name: Deploy run: docker compose -p kolaytercih up -d --no-build --remove-orphans - name: Temizlik (başarısız build'de de çalışır) if: always() run: | docker image prune -f || true # sinirli builder'ın cache'ini 4 GB'ta tut (flag adı buildx sürümüne göre değişti) docker buildx prune --builder sinirli -f --max-used-space 4gb 2>/dev/null || \ docker buildx prune --builder sinirli -f --keep-storage 4gb || true # eski varsayılan-builder cache artıkları docker builder prune -f --filter "until=72h" || true