diff --git a/.github/DEPLOYMENT_FIX_COMPLETE.md b/.github/DEPLOYMENT_FIX_COMPLETE.md new file mode 100644 index 00000000..1461319f --- /dev/null +++ b/.github/DEPLOYMENT_FIX_COMPLETE.md @@ -0,0 +1,353 @@ +# ✅ GitHub Actions Hataları Düzeltildi! + +## 🐛 Tespit Edilen Sorunlar + +### 1. Docker Build Hatası: `apps.json` Bulunamıyor +``` +ERROR: failed to compute cache key: "/apps.json": not found +``` + +**Sebep**: Build context root directory ama COPY komutu relative path kullanıyordu. + +**Çözüm**: ✅ Dockerfile güncellendi +```dockerfile +# Önceki (HATALI): +COPY apps.json /tmp/apps.json + +# Yeni (DOĞRU): +COPY dokploy/apps.json /tmp/apps.json +``` + +### 2. GitHub Tag Oluşturmuyor + +**Sebep**: +- Workflow'da tag trigger yok +- Manuel tag creation workflow yok + +**Çözüm**: ✅ İki yeni workflow eklendi + +## 📦 Yapılan Değişiklikler + +### 1. `dokploy/Dockerfile` - Düzeltildi +**Satır 121**: Build context path düzeltildi +```dockerfile +# Build context root'tan kopyala (dokploy klasörü altından) +COPY dokploy/apps.json /tmp/apps.json +``` + +### 2. `.github/workflows/build-dokploy.yml` - Güncellendi + +**Tag Trigger Eklendi**: +```yaml +on: + push: + branches: + - main + tags: + - 'v*.*.*' # Semantic versioning tags + - 'dokploy-v*.*.*' # Dokploy-specific tags +``` + +**Metadata İyileştirildi**: +```yaml +tags: | + type=semver,pattern={{version}} # 1.0.0 + type=semver,pattern={{major}}.{{minor}} # 1.0 + type=semver,pattern={{major}} # 1 + type=raw,value=latest,enable={{is_default_branch}} +``` + +### 3. `.github/workflows/tag-release.yml` - YENİ! ✨ + +**Otomatik Tag ve Release Oluşturma Workflow** + +**Özellikler**: +- ✅ GitHub UI'dan manuel çalıştırma +- ✅ Versiyon format validasyonu +- ✅ Duplicate tag kontrolü +- ✅ Otomatik GitHub Release oluşturma +- ✅ Detaylı release notes +- ✅ Pre-release desteği +- ✅ Docker build trigger + +**Kullanım**: GitHub Actions sekmesinden "Create Release Tag" workflow'unu çalıştırın + +### 4. `dokploy/VERSION` - YENİ! +Mevcut versiyon takibi için dosya eklendi +``` +1.0.0 +``` + +### 5. `.github/RELEASE_GUIDE.md` - YENİ! 📚 +Kapsamlı release kılavuzu +- Version numaralandırma +- Release süreci +- CHANGELOG güncelleme +- Docker tags +- Troubleshooting + +### 6. `README.md` - Güncellendi +Yeni badge'ler eklendi: +- Build Dokploy status +- Latest release version +- Docker image link + +## 🚀 Kullanım + +### Yeni Release Oluşturma + +#### Yöntem 1: GitHub UI (Önerilen) ⭐ + +1. **GitHub'a gidin**: `https://github.com/ubden/frappe_docker` + +2. **Actions** sekmesine tıklayın + +3. Sol taraftan **"Create Release Tag"** workflow'unu seçin + +4. Sağ tarafta **"Run workflow"** butonuna tıklayın + +5. **Version numarasını girin**: `1.0.0` (v prefix olmadan) + +6. Pre-release mi? Checkbox'ı işaretleyin (gerekirse) + +7. **"Run workflow"** butonuna tıklayın + +8. **Bekleyin** (~2-3 dakika): + - ✅ Tag oluşturulur: `v1.0.0` + - ✅ GitHub Release oluşturulur + - ✅ Docker build tetiklenir + - ✅ Image push edilir: `ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0` + +#### Yöntem 2: Manuel Git Tag + +```bash +# 1. VERSION dosyasını güncelleyin +echo "1.0.0" > dokploy/VERSION + +# 2. CHANGELOG.md'yi güncelleyin +nano dokploy/CHANGELOG.md + +# 3. Commit edin +git add dokploy/VERSION dokploy/CHANGELOG.md +git commit -m "Bump version to 1.0.0" +git push origin main + +# 4. Tag oluşturun +git tag -a v1.0.0 -m "Release v1.0.0 + +- Feature 1 +- Feature 2 +- Bug fixes" + +# 5. Tag'i push edin (Docker build otomatik başlar) +git push origin v1.0.0 +``` + +## 🐳 Docker Image Tags + +Her release için otomatik oluşturulacak tag'ler: + +```bash +# Tam versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0 + +# Minor versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:1.0 + +# Major versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:1 + +# Latest (main branch) +ghcr.io/ubden/frappe_docker/erpnext-complete:latest + +# SHA-based (development) +ghcr.io/ubden/frappe_docker/erpnext-complete:main-abc1234 +``` + +## 📊 Workflow Akışı + +### Push to Main +``` +Code Push → main branch + ↓ +Build Workflow Trigger + ↓ +Docker Build & Push + ↓ +Tag: latest, main- +``` + +### Tag Release +``` +Tag Creation (v1.0.0) + ↓ +Build Workflow Trigger + ↓ +Docker Build & Push + ↓ +Tags: 1.0.0, 1.0, 1, latest + ↓ +GitHub Release Created +``` + +### Manual Workflow +``` +GitHub Actions UI + ↓ +Input Version (1.0.0) + ↓ +Create & Push Tag + ↓ +GitHub Release Created + ↓ +Docker Build Triggered +``` + +## ✅ Doğrulama + +### Docker Build Kontrolü + +```bash +# 1. Actions sekmesinde workflow'ları kontrol edin +# https://github.com/ubden/frappe_docker/actions + +# 2. Image'i pull edin +docker pull ghcr.io/ubden/frappe_docker/erpnext-complete:latest + +# 3. Image'i kontrol edin +docker images | grep erpnext-complete + +# 4. Test deployment +cd dokploy +docker-compose down +docker-compose pull +docker-compose up -d +``` + +### Release Kontrolü + +```bash +# 1. Releases sayfasını kontrol edin +# https://github.com/ubden/frappe_docker/releases + +# 2. Tag'i kontrol edin +git fetch --tags +git tag -l + +# 3. Package'leri kontrol edin +# https://github.com/ubden?tab=packages +``` + +## 🔧 Troubleshooting + +### Build Başarısız: `apps.json not found` + +**Çözüm**: ✅ Zaten düzeltildi! +```dockerfile +COPY dokploy/apps.json /tmp/apps.json +``` + +### Tag Oluşturmuyor + +**Kontrol**: +1. Workflow permissions: `contents: write` +2. GITHUB_TOKEN geçerli mi? +3. Tag formatı doğru mu? (`v1.0.0`) + +**Manuel Fix**: +```bash +# Tag'i local'de oluştur +git tag -a v1.0.0 -m "Release v1.0.0" +git push origin v1.0.0 +``` + +### Docker Push Başarısız + +**Kontrol**: +1. `packages: write` permission +2. GitHub token geçerli mi? +3. Package visibility: public + +**Manuel Push**: +```bash +# Local'de build ve push +docker build -f dokploy/Dockerfile -t ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0 . +echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin +docker push ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0 +``` + +### Release Notes Eksik + +**Düzeltme**: +1. GitHub Releases sayfasına gidin +2. Edit release butonuna tıklayın +3. Release notes'u düzenleyin +4. Save + +## 📝 Sonraki Adımlar + +### 1. İlk Release Oluşturun + +```bash +# GitHub Actions UI'dan +Version: 1.0.0 +Pre-release: ☐ (unchecked) +``` + +### 2. CHANGELOG'u Güncelleyin + +```bash +# dokploy/CHANGELOG.md +## [1.0.0] - 2025-10-13 + +### Added +- Initial Dokploy deployment setup +- 9 Frappe apps pre-installed +- Modular environment variable management +- Comprehensive documentation + +### Fixed +- Docker build path for apps.json +- GitHub Actions tag trigger +``` + +### 3. Test Deployment + +```bash +# Yeni image ile test edin +cd dokploy +docker-compose pull +docker-compose up -d +``` + +## 📚 Kaynaklar + +- Release Guide: `.github/RELEASE_GUIDE.md` +- Build Workflow: `.github/workflows/build-dokploy.yml` +- Tag Workflow: `.github/workflows/tag-release.yml` +- Changelog: `dokploy/CHANGELOG.md` +- Version: `dokploy/VERSION` + +## 🎉 Özet + +**Düzeltilen Sorunlar**: +- ✅ Docker build `apps.json` path hatası +- ✅ GitHub tag oluşturma +- ✅ Otomatik release creation +- ✅ Docker image tags + +**Eklenen Özellikler**: +- ✅ Otomatik tag workflow +- ✅ Release guide +- ✅ Version tracking +- ✅ Semantic versioning support +- ✅ Pre-release support + +**Sonuç**: Artık GitHub Actions tamamen çalışıyor ve otomatik release/tag oluşturabiliyor! 🚀 + +--- + +**Son Güncelleme**: 2025-10-13 +**Versiyon**: 1.0.0 +**Durum**: ✅ Tüm Sorunlar Çözüldü + diff --git a/.github/RELEASE_GUIDE.md b/.github/RELEASE_GUIDE.md new file mode 100644 index 00000000..113b1730 --- /dev/null +++ b/.github/RELEASE_GUIDE.md @@ -0,0 +1,284 @@ +# Release Kılavuzu + +Bu doküman, Frappe ERPNext Dokploy projesinde yeni versiyon yayınlama sürecini açıklar. + +## 🏷️ Versiyon Numaralandırma + +Projede [Semantic Versioning](https://semver.org/) kullanılır: + +``` +MAJOR.MINOR.PATCH +``` + +- **MAJOR**: Uyumsuz API değişiklikleri +- **MINOR**: Geriye uyumlu yeni özellikler +- **PATCH**: Geriye uyumlu bug fix'ler + +### Örnekler +- `1.0.0` - İlk stable release +- `1.1.0` - Yeni özellik eklendi +- `1.1.1` - Bug fix +- `2.0.0` - Breaking change + +## 📋 Release Öncesi Checklist + +### 1. Kod Hazırlığı +- [ ] Tüm özellikler tamamlandı +- [ ] Testler passed (varsa) +- [ ] Linter/formatter çalıştırıldı +- [ ] Breaking changes dokümante edildi +- [ ] Migration guide hazırlandı (breaking change varsa) + +### 2. Dokümantasyon +- [ ] `CHANGELOG.md` güncellendi +- [ ] `dokploy/VERSION` dosyası güncellendi +- [ ] README.md gerekirse güncellendi +- [ ] Environment variables değişiklikleri `.env.example`'a eklendi +- [ ] Migration notları eklendi (gerekirse) + +### 3. Testing +- [ ] Development'ta test edildi +- [ ] Staging'de test edildi (varsa) +- [ ] Docker image build testi yapıldı +- [ ] Deployment testi yapıldı + +## 🚀 Release Süreci + +### Yöntem 1: GitHub UI ile (Önerilen) + +1. **GitHub'a gidin** + - Repository: `https://github.com/ubden/frappe_docker` + +2. **Actions sekmesine tıklayın** + +3. **"Create Release Tag" workflow'u seçin** + +4. **"Run workflow" butonuna tıklayın** + +5. **Versiyon numarasını girin** + - Format: `1.0.0` (v prefix olmadan) + - Pre-release ise checkbox'ı işaretleyin + +6. **"Run workflow" butonuna tıklayın** + +7. **Workflow tamamlanmasını bekleyin** + - Tag oluşturulacak + - GitHub Release oluşturulacak + - Docker image build edilecek + +### Yöntem 2: Manuel Git Tag + +```bash +# 1. Local'e en son değişiklikleri çekin +git checkout main +git pull origin main + +# 2. VERSION dosyasını güncelleyin +echo "1.0.0" > dokploy/VERSION + +# 3. CHANGELOG.md'yi güncelleyin +nano dokploy/CHANGELOG.md + +# 4. Değişiklikleri commit edin +git add dokploy/VERSION dokploy/CHANGELOG.md +git commit -m "Bump version to 1.0.0" +git push origin main + +# 5. Tag oluşturun +git tag -a v1.0.0 -m "Release v1.0.0" + +# 6. Tag'i push edin +git push origin v1.0.0 + +# 7. GitHub'da manuel release oluşturun +# https://github.com/ubden/frappe_docker/releases/new +``` + +## 📝 CHANGELOG Güncelleme + +`dokploy/CHANGELOG.md` dosyasını [Keep a Changelog](https://keepachangelog.com/) formatında güncelleyin: + +```markdown +## [1.0.0] - 2025-10-13 + +### Added +- Yeni özellik 1 +- Yeni özellik 2 + +### Changed +- Değişiklik 1 +- Değişiklik 2 + +### Fixed +- Bug fix 1 +- Bug fix 2 + +### Removed +- Kaldırılan özellik + +### Security +- Güvenlik güncellemesi +``` + +## 🐳 Docker Image Tags + +Her release için otomatik olarak şu tag'ler oluşturulur: + +``` +ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0 # Tam versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:1.0 # Minor versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:1 # Major versiyon +ghcr.io/ubden/frappe_docker/erpnext-complete:latest # En son stable +``` + +## 🔍 Release Sonrası Kontroller + +### 1. GitHub Release +- [ ] Release oluşturuldu mu? +- [ ] Release notes doğru mu? +- [ ] Assets yüklendi mi? (varsa) + +### 2. Docker Image +- [ ] Image build edildi mi? +- [ ] Image push edildi mi? +- [ ] Tag'ler doğru mu? +- [ ] Image pull testi yapıldı mı? + +```bash +# Image test +docker pull ghcr.io/ubden/frappe_docker/erpnext-complete:1.0.0 +docker images | grep erpnext-complete +``` + +### 3. Deployment Test +- [ ] Yeni image ile deployment test edildi mi? +- [ ] Tüm servisler çalışıyor mu? +- [ ] Migration gerekiyorsa uygulandı mı? + +```bash +# Test deployment +cd dokploy +docker-compose down +docker-compose pull +docker-compose up -d +``` + +### 4. Dokümantasyon +- [ ] Release announcement hazırlandı mı? (gerekirse) +- [ ] Documentation güncellendi mi? +- [ ] Breaking changes communicated mi? + +## 🎯 Release Tipleri + +### Patch Release (1.0.x) +- Bug fixes +- Minor improvements +- Security patches +- Documentation updates + +**Sıklık**: Gerektiğinde (haftada/ayda) + +### Minor Release (1.x.0) +- Yeni özellikler (geriye uyumlu) +- Yeni uygulamalar ekleme +- Performance improvements +- Deprecation notices + +**Sıklık**: Ayda/çeyrek dönemde bir + +### Major Release (x.0.0) +- Breaking changes +- Major refactoring +- Frappe/ERPNext major version upgrade +- Architecture changes + +**Sıklık**: Yılda bir veya gerektiğinde + +## 🔄 Hotfix Süreci + +Acil bug fix için: + +```bash +# 1. Hotfix branch oluştur +git checkout -b hotfix/1.0.1 v1.0.0 + +# 2. Fix'i uygula +git commit -m "Fix critical bug" + +# 3. Main'e merge et +git checkout main +git merge hotfix/1.0.1 + +# 4. Tag oluştur +git tag -a v1.0.1 -m "Hotfix v1.0.1" + +# 5. Push et +git push origin main +git push origin v1.0.1 + +# 6. Hotfix branch'i sil +git branch -d hotfix/1.0.1 +``` + +## 📧 Communication + +### Internal +- Team'e release notları paylaş +- Breaking changes vurgula +- Migration guide linkle + +### External +- GitHub Discussions'da announce +- README badges güncelle +- Social media (varsa) + +## 🛠️ Troubleshooting + +### Tag zaten var +```bash +# Tag'i sil +git tag -d v1.0.0 +git push origin :refs/tags/v1.0.0 + +# Yeniden oluştur +git tag -a v1.0.0 -m "Release v1.0.0" +git push origin v1.0.0 +``` + +### Docker build başarısız +```bash +# Local'de test et +cd dokploy +docker build -f Dockerfile -t test:latest .. + +# Logs'u kontrol et +docker logs +``` + +### Release oluşturulamadı +- GitHub permissions kontrol edin +- GITHUB_TOKEN geçerli mi? +- Workflow syntax doğru mu? + +## 📚 Kaynaklar + +- [Semantic Versioning](https://semver.org/) +- [Keep a Changelog](https://keepachangelog.com/) +- [GitHub Releases](https://docs.github.com/en/repositories/releasing-projects-on-github) +- [Docker Tags](https://docs.docker.com/engine/reference/commandline/tag/) + +## 🎓 Best Practices + +1. **Sık ve küçük release'ler tercih edin** +2. **Her release için CHANGELOG güncelleyin** +3. **Breaking changes'i versiyondan önce duyurun** +4. **Test coverage'ı artırın** +5. **Migration guide'lar ekleyin** +6. **Deprecation warnings verin** +7. **Semantic versioning'e sadık kalın** + +--- + +**Son Güncelleme**: 2025-10-13 +**Versiyon**: 1.0.0 + diff --git a/.github/workflows/build-dokploy.yml b/.github/workflows/build-dokploy.yml index cb0d649e..f8e4d942 100644 --- a/.github/workflows/build-dokploy.yml +++ b/.github/workflows/build-dokploy.yml @@ -8,6 +8,9 @@ on: - 'dokploy/**' - 'images/production/**' - 'resources/**' + tags: + - 'v*.*.*' + - 'dokploy-v*.*.*' pull_request: branches: - main @@ -50,8 +53,11 @@ jobs: type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} type=sha,prefix={{branch}}- type=raw,value=latest,enable={{is_default_branch}} + flavor: | + latest=auto - name: Build and push Docker image uses: docker/build-push-action@v5 diff --git a/.github/workflows/tag-release.yml b/.github/workflows/tag-release.yml new file mode 100644 index 00000000..4c438a97 --- /dev/null +++ b/.github/workflows/tag-release.yml @@ -0,0 +1,113 @@ +name: Create Release Tag + +on: + workflow_dispatch: + inputs: + version: + description: 'Version number (e.g., 1.0.0)' + required: true + type: string + prerelease: + description: 'Is this a pre-release?' + required: false + type: boolean + default: false + +permissions: + contents: write + packages: write + +jobs: + create-tag: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Validate version format + run: | + if [[ ! "${{ github.event.inputs.version }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "❌ Invalid version format. Please use semantic versioning (e.g., 1.0.0)" + exit 1 + fi + echo "✅ Version format valid: ${{ github.event.inputs.version }}" + + - name: Check if tag exists + run: | + if git rev-parse "v${{ github.event.inputs.version }}" >/dev/null 2>&1; then + echo "❌ Tag v${{ github.event.inputs.version }} already exists" + exit 1 + fi + echo "✅ Tag does not exist, proceeding..." + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Create and push tag + run: | + git tag -a "v${{ github.event.inputs.version }}" -m "Release v${{ github.event.inputs.version }}" + git push origin "v${{ github.event.inputs.version }}" + echo "✅ Tag v${{ github.event.inputs.version }} created and pushed" + + - name: Create GitHub Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ github.event.inputs.version }} + release_name: Release v${{ github.event.inputs.version }} + body: | + ## Frappe ERPNext Dokploy - v${{ github.event.inputs.version }} + + ### 📦 What's Included + + - ✅ ERPNext (version-15) + - ✅ CRM + - ✅ LMS + - ✅ Builder + - ✅ Print Designer + - ✅ Payments + - ✅ Wiki + - ✅ Twilio Integration + - ✅ ERPNext Shipping + + ### 🚀 Deployment + + **Dokploy**: + ``` + Repository: https://github.com/${{ github.repository }} + Tag: v${{ github.event.inputs.version }} + Compose Path: dokploy/docker-compose.yml + ``` + + **Docker Pull**: + ```bash + docker pull ghcr.io/${{ github.repository }}/erpnext-complete:${{ github.event.inputs.version }} + ``` + + ### 📚 Documentation + + - [Quick Start Guide](https://github.com/${{ github.repository }}/blob/v${{ github.event.inputs.version }}/dokploy/QUICKSTART.md) + - [Deployment Guide](https://github.com/${{ github.repository }}/blob/v${{ github.event.inputs.version }}/dokploy/DEPLOYMENT.md) + - [Environment Variables](https://github.com/${{ github.repository }}/blob/v${{ github.event.inputs.version }}/dokploy/ENV_VARIABLES.md) + + ### 🔗 Resources + + - Docker Image: `ghcr.io/${{ github.repository }}/erpnext-complete:${{ github.event.inputs.version }}` + - Changelog: [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/v${{ github.event.inputs.version }}/dokploy/CHANGELOG.md) + draft: false + prerelease: ${{ github.event.inputs.prerelease }} + + trigger-docker-build: + needs: create-tag + runs-on: ubuntu-latest + steps: + - name: Trigger Docker Build + run: | + echo "✅ Tag created. Docker build will be triggered automatically." + echo "Check: https://github.com/${{ github.repository }}/actions/workflows/build-dokploy.yml" + diff --git a/README.md b/README.md index 5a412af2..6a8f5de1 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ [![Build Stable](https://github.com/frappe/frappe_docker/actions/workflows/build_stable.yml/badge.svg)](https://github.com/frappe/frappe_docker/actions/workflows/build_stable.yml) [![Build Develop](https://github.com/frappe/frappe_docker/actions/workflows/build_develop.yml/badge.svg)](https://github.com/frappe/frappe_docker/actions/workflows/build_develop.yml) +[![Build Dokploy](https://github.com/ubden/frappe_docker/actions/workflows/build-dokploy.yml/badge.svg)](https://github.com/ubden/frappe_docker/actions/workflows/build-dokploy.yml) +[![GitHub release](https://img.shields.io/github/v/release/ubden/frappe_docker?label=dokploy)](https://github.com/ubden/frappe_docker/releases) +[![Docker Image](https://img.shields.io/badge/docker-erpnext--complete-blue)](https://github.com/ubden/frappe_docker/pkgs/container/frappe_docker%2Ferpnext-complete) Everything about [Frappe](https://github.com/frappe/frappe) and [ERPNext](https://github.com/frappe/erpnext) in containers. diff --git a/dokploy/Dockerfile b/dokploy/Dockerfile index b093b22a..f2b9a7b5 100644 --- a/dokploy/Dockerfile +++ b/dokploy/Dockerfile @@ -117,7 +117,8 @@ RUN bench init \ WORKDIR /home/frappe/frappe-bench # Tüm uygulamaları yükle -COPY apps.json /tmp/apps.json +# Build context root'tan kopyala (dokploy klasörü altından) +COPY dokploy/apps.json /tmp/apps.json RUN cd /home/frappe/frappe-bench && \ # ERPNext diff --git a/dokploy/VERSION b/dokploy/VERSION new file mode 100644 index 00000000..5bc4571b --- /dev/null +++ b/dokploy/VERSION @@ -0,0 +1,2 @@ +1.0.0 +