
Mon Sep 14 2026

İlk başladığımızda, birkaç satırlık kod ve küçük bir fikirle küçük bir side project olarak OpenClaw'u hayal ettik. "Görsel tabanlı bir çekiliş aracı" diye düşündük ve birkaç arkadaşa gösterdik. Sonra beklenmedik bir şey oldu – insanlar bunu herkese göndermeye başladı. İşte viral yolculuğumuz başladı!
Neden başladık?
Viral olduğu an 🌟
Topluluk büyümesi
Sonuç olarak 🚀
Hikayemizden çıkarmamız gereken ders şu: Çok miktarda veriye sahip olmanıza gerek yok. Eğer ilham verici, kolay ve paylaşılabilir bir şey yaparsanız, insanlar sizi büyütmek ister. Açık kaynakçılar ve yaratıcıları bir araya getiren şey budur; biz sadece bir parçası olduk. 🎉
Birdenbire gelen katkı dalgası, ilk başta neşelendirici olsa da, projeyi birçok yeni zorlukla karşı karşıya bırakıyor. Hadi bu zorlukları örnekler üzerinden gözden geçirelim.
Açığa çıkan issue patlaması
Güvenlik açıkları
Maintainer yorgunluğu (burnout)
Tutarlılık sorunları
Yeni gelen issue sayısı yüzlerle ölçüldüğünde, manuel bir workflow sıkıcı olmaya başlıyor. İşte basit bir terminal komutu, yeni gelen issue sayısını sayıyor ve kritik derecelendirmesine göre filtreliyor. Bunu hemen bir bash script’i içinde ekleyebilirsin.
#!/usr/bin/env bash
# issue-triage.sh – Yeni gelen issue’ları say ve etiketle
# Repository yolunu ayarla (projene göre güncelle)
REPO_PATH="/path/to/your/repo"
cd "$REPO_PATH" || exit 1
# Kritik olmayan yeni gelen issue’ları say (etiket "bug" + "priority: low")
new_issues=$(gh issue list --label "bug, priority: low" --state "opened" --json number --jq '. | length')
# Kritik olmayan yeni gelen issue’ları etiketle (demo amacıyla "triage: pending")
gh issue list --label "bug, priority: low" --state "opened" --limit "$new_issues" |
xargs -I {} gh issue edit {} --add-label "triage: pending"
echo "✅ $new_issues yeni gelen issue’a 'triage: pending' etiketi eklendi."
Ne oluyor?
triage: pending etiketi ekleyerek hızlı bir işaretleme sistemi oluşturuyor.Böylece çok sayıdaki PR’yi/düzeltmeyi manuel olarak kontrol etmek zorunda kalmadan, en acil konuları hemen işaretleyebilir ve burada çalışan kişi için iş yükünü kontrol altında tutabilirsin.
Kısa vadede heyecan verici olsa da, hızlı büyümek aynı zamanda sürdürülebilirlik ve sağlık konularında da ciddi testler getiriyor. Bu sorunların başından çıkar çıkmaz, projenin hem insani kaynakları hem de kod tabanını korumak için harekete geç.
Devam ederken sorunlara nasıl uyum sağlayacağını öğrendikçe, sana yardımcı olacak daha fazla ipucu vereceğim. 🚀
Katkı sürecini standartlaştırmak hem yeni gelenleri hem de bakımcıları rahatlatır. Şu dört araç bir arada kullanıldığında “şablonu kopyala‑yapıştır” hissi oluşur 🎯:
git clone, bağımlılık yükleme, test çalıştırma.main koruma, feature/*, bugfix/* isimlendirme.feat:, fix:, chore:).npm test && npm run lint çalıştır.İpucu: Dosyayı repo köküne koyun, GitHub otomatik olarak “Contributing” bağlantısı gösterir ✅.
.github/ISSUE_TEMPLATE/ klasörüne YAML dosyaları atarsınız. Örnek bug_report.yml:
name: 🐛 Hata Raporu
description: Beklenmeyen bir davranış bildir
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
**Lütfen aşağıdaki alanları doldurun.** Eksik bilgi verirse inceleme gecikebilir.
- type: input
id: version
attributes:
label: Sürüm / Commit SHA
placeholder: v2.3.1 veya abc1234
validations:
required: true
- type: textarea
id: steps
attributes:
label: Yenileme Adımları
description: Hata nasıl tekrarlanır?
placeholder: |
1. Uygulamayı aç
2. 'Ayarlar' sekmesine git
3. 'Kaydet' butonuna bas
validations:
required: true
- type: textarea
id: expected
attributes:
label: Beklenen Davranış
placeholder: Ne olmalıydı?
validations:
required: true
- type: textarea
id: actual
attributes:
label: Gerçekleşen Davranış
placeholder: Ne oldu?
validations:
required: true
- type: dropdown
id: severity
attributes:
label: Önem Derecesi
options:
- Düşük
- Orta
- Yüksek
- Kritik
validations:
required: true
Ne oluyor burada?
name ve description GitHub’a “New issue” sayfasında görünür.body altındaki her type bir form alanı oluşturur (metin, dropdown, markdown).validations.required: true alan boş bırakılamaz ❗️.| Aşama | Sorumlu | Kontrol Listesi |
|---|---|---|
| Otomatik CI | GitHub Actions | Testler, lint, güvenlik taraması ✅ |
| Otomat atama | CODEOWNERS |
İlgili dosya sahipleri eklenir 🔁 |
| İnsan inceleme | En az 2 onay | Mantık, naming, breaking change kontrolü |
| Merge | Maintainer | Squash‑merge, branch silme |
Küçük hatırlatma: PR şablonu (.github/pull_request_template.md) da ekleyin; açıklama, ilgili issue linki, test notları zorunlu hale getirilir.
.github/CODEOWNERS örnek:
# Tüm docs dosyaları @doc-team
/docs/ @doc-team
# Backend servisleri @backend-leads
/services/** @backend-leads
# UI bileşenleri @frontend-leads
/src/components/** @frontend-leads
* yerine ** kullanarak alt klasörleri de kapsarsınız.Bu dört parçayı birleştirince yeni katkıda bulunan “nereden başlayayım?” diye şaşırmadan, hazır şablonları doldurup PR açar 🚀. Hazırsan bir sonraki adımda bu dosyaları repoya ekleyelim!
Hadi beraber bakalım, güvenlik açıklarını nasıl sistematik olarak kapatabiliriz? Benim ekibimizde dört ana çubuğu bir arada tutuyoruz: Dependabot, CodeQL, Secret Scanning ve manuel denetimler. Her birinin neden olduğu ve nasıl entegre ettiğimizi sırayla anlatayım 👇
Neden Dependabot?
Outdated package’lar en yaygın saldırı vektörüdür. Dependabot, package.json, pom.xml, requirements.txt gibi dosyaları sürekli tarar ve yeni sürüm çıktığı anda PR açar. Böylece:
dependabot.yml ile haftalık/aralık ayarı, grup güncellemeleri vs. yapılandırılırİpucu:
allow/ignorelisteleriyle sadecepatch/minorgüncellemelerini otomatik merge edebilir,majorsürümler için manuel onay bırakırsınız.
Neden CodeQL?
SAST (Static Application Security Testing) araçları arasında CodeQL, query tabanlı yapısıyla öne çıkar. Kendi yazdığınız sorgularla (ör. “hardcoded secret”, “SQL injection pattern”) projeye özel kurallar tanımlayabilirsiniz.
codeql-analysis.yml ile dil bazlı (JavaScript, Python, Java, Go…) matrix yapılandırabilirsinizNeden Secret Scanning?
Bir developer yanlışlıkla .env veya config.json içine API key, DB şifresi, JWT secret pushladığında GitHub anında uyarır ve (isterseniz) push’u bloklar.
push protection açarsanız, secret içeren commit reddedilir → production’a sızma riski sıfırlanırNeden Manuel Denetim?
Araçlar bilinen pattern’leri bulur. Mantık hataları, business logic açıkları, race condition’lar gibi şeyler insan gözü ister.
Kuralım: Her kritik sürüm öncesi en az bir güvenlik odaklı code review yapılır.
security-scan.yml ÖrneğiAşağıdaki workflow CodeQL ve Dependabot alert tetiklemelerini tek bir pipeline’da birleştirir. main branch’ine push ve PR’lerde çalışır, ayrıca haftalık scheduled tarama da yapar.
name: 🛡 Security Scan Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 2 * * 1' # Her Pazartesi 02:00 UTC
workflow_dispatch: # Manuel tetikleme
permissions:
contents: read
security-events: write # SARIF yüklemek için
actions: read # Dependabot alert’larını okumak için
jobs:
codeql-analysis:
name: CodeQL Analizi
runs-on: ubuntu-latest
strategy:
matrix:
language: [javascript, python] # Projenize göre ekleyin
steps:
- name: ⬇️ Checkout repository
uses: actions/checkout@v4
- name: 🔧 Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: +security-extended,+security-and-quality
- name: 🏗 Build (dil için gerekliyse)
run: |
if [ "${{ matrix.language }}" = "javascript" ]; then npm ci; fi
if [ "${{ matrix.language }}" = "python" ]; then pip install -r requirements.txt; fi
- name: 🔍 Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
dependabot-alerts:
name: Dependabot Uyarılarını Kontrol Et
runs-on: ubuntu-latest
steps:
- name: 📥 Fetch Dependabot alerts
uses: actions/github-script@v7
with:
script: |
const alerts = await github.rest.dependabot.listAlertsForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100
});
const critical = alerts.data.filter(a => a.security_advisory.severity === 'critical');
const high = alerts.data.filter(a => a.security_advisory.severity === 'high');
if (critical.length > 0 || high.length > 0) {
core.setFailed(`🚨 ${critical.length} critical, ${high.length} high severity Dependabot alerts open!`);
} else {
console.log('✅ No critical/high Dependabot alerts.');
}
secret-scan:
name: Secret Scanning (Push Protection)
runs-on: ubuntu-latest
steps:
- name: 🔐 Secret scanning is enabled at repo/org level
run: |
echo "✅ Secret scanning & push protection should be enabled in repository settings."
echo " This job exists as a reminder and for CI visibility."
| Adım | Ne Sağlar? |
|---|---|
| CodeQL matrix | Her dil için izole, paralel tarama → hız + kapsam |
| Scheduled cron | PR açılmasa bile haftada bir full scan → gecikmeli CVE’ler yakalanır |
| Dependabot alert job | CI’nın kendisi “açık critical/u yüksek uyarı var mı?” diye sorar → merge gate’e koyabilirsiniz |
| Secret scan job | Repo ayarlarının doğru yapıldığını hatırlatır, CI logunda görünür |
dependabot.yml → haftalık, grup güncellemeleri, auto-merge (patch/minor)codeql-analysis.yml (veya yukarıdaki security-scan.yml) → PR + push + scheduledBu dörtlü otomatik + manuel döngüsü kurulduğunda, güvenlik “sonradan eklenen bir özellik” olmaktan çıkar, geliştirme yaşam döngüsünün doğal bir parçası haline gelir 🚀
Hazırsan bir sonraki bölümde bu pipeline’ı nasıl stage’lere (dev/stage/prod) ayırıp, gate’ler koyduğumuzu anlatabiliriz. Ne dersin? 😊
Küçük otomasyon, büyük rahatlama 🎯
Projeyi canlı tutmak için sürekli el ile sürüm notu yazmak, changelog güncellemek ve sponsorları takip etmek yorucudur. İşte bu noktada otomasyon devreye girer.
release.yml (GitHub Actions)# .github/workflows/release.yml
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
Ne oluyor burada?
main branch’ine push her yaptığınızda workflow tetiklenir.semantic-release commit geçmişini okur, versiyon atlar, changelog yazar ve npm/GitHub’a yayınlar.| Platform | Ne sağlar? | Otomasyon ipucu |
|---|---|---|
| OpenCollective | Topluluk bağışı, harcama şeffaflığı | Webhook ile her yeni bağışta Slack/Discord bildirimi gönder |
| GitHub Sponsors | Tek tıkla sponsorluk | github/sponsors.yml ile hedef ve teşekkür mesajlarını otomatik güncelle |
dependabot gibi bir bot, aylık gelir raporunu README’ye yazabilir. Böylece sponsorlar güncel durumu anında görür.semantic-release kurulu ve test edilmiş mi?Son söz: Otomasyonu bir kez kurarsınız, sonra her release’de “Küçük otomasyon, büyük rahatlama” hissini yaşarsınız 🚀. Hem zaman kazanırsınız hem de topluluk güveniniz artar.
OpenClaw'u geliştirirken edindiğim deneyimler, sadece bu projeye özgü kalmadı. Aşağıdaki öğütler, herhangi bir yazılım projesinde — küçük olsun büyük olsun — işinizi kolaylaştıracak pratik alışkanlıklar. Hemen not alıp uygulaya başlayabilirsiniz 👇
Ne yapmalısın?
Proje ilk günden itibaren v0.1.0 gibi bir versiyonla başlasın. Her anlamlı değişiklikte (yeni özellik, hata düzeltmesi, breaking change) CHANGELOG.md dosyasını güncelleyin. Semantic Versioning (SemVer) kurallarına uyun.
Neden işe yarar?
standard-version, changesets) bu işi sizin yerinize halleder.Ne yapmalısın?
Her PR için: lint → test → build → (varsa) security scan. main branch'e sadece CI yeşil olduğunda merge izin verin. Deploy adımını da ayrı bir job olarak tutun, manuel onaylı (approval) yapın.
Neden işe yarar?
main'e asla bulaşmaz — gece yarısı acil deploy senaryolarında bile..env şablonu version control'e koyun ⚙️Ne yapmalısın?
.env.example dosyası oluşturun, tüm gerekli değişkenleri (boş değerlerle) listeleyin. Gerçek .env dosyasını .gitignore'a ekleyin. Uygulama başlarken eksik değişken varsa açıkça hata verin, sessizce varsayılan kullanmayın.
Neden işe yarar?
cp .env.example .env yapar, 5 dakikada ayakta olur.Ne yapmalısın?
console.log / print yerine JSON formatında, seviyeli (info/warn/error) loglayın. correlationId (request ID) ekleyin ki dağıtık sistemlerde tek bir isteği takip edebilesiniz. Kütüphane: pino (Node), zap (Go), structlog (Python).
Neden işe yarar?
Ne yapmalısın?
Her migrasyon dosyası:
UP (ileri) ve DOWN (geri alma) içermeli.CREATE TABLE IF NOT EXISTS, ALTER TABLE ... ADD COLUMN IF NOT EXISTS.golang-migrate, Flyway, Alembic, Prisma Migrate.Neden işe yarar?
DOWN ile saniyeler içinde geriye dönersiniz.Ne yapmalısın?
OpenAPI/Swagger spec'ini koddan üretin (ör. springdoc, fastapi, tsoa, nestjs/swagger). Client SDK'ları da bu spec'ten generate edin. Spec'i repo'ya commit edin, CI'de "spec breaking change var mı?" kontrolü yapın.
Neden işe yarar?
Ne yapmalısın?
TECH_DEBT.md (veya GitHub issue'ları tech-debt etiketiyle) dosyası açın. Her "şimdilik bu böyle kalsın, sonra düzeltirim" anında:
Neden işe yarar?
CHANGELOG.md ve .env.example ekleyin.main'e koruma ekleyin.Küçük adımlar, büyük fark yaratır. Hangi maddeyi önce uygulayacaksınız? 🚀
Hadi durup dururken "bu iş benden değil" demiyoruz artık 🙅♂️
Küçük bir adım bile büyüme döngüsünü tetikler.
Bugün yapabileceğin 3 micro-action:
Kural basit: Bugün bir adım at, yarın fark edersin ✨
| Etki | Ne Oluyor? |
|---|---|
| Görünürlük | Profilin "aktif geliştirici" sinyali vermeye başlar |
| Geri bildirim | Başkaları senin işini görür, düzeltir, önerir |
| Motivasyon | Küçük başarılar dopamin döngüsü kurar 🔁 |
| Fırsatlar | Mentor, iş teklifi, açık kaynak katkısı… hepsi bir paylaşımdan başlar |
#KüçükAdımlarBüyükEtki — biz de görelim, alkışlayalım 👏Unutma: Büyük सफलlıklar (evet, Hindi'ye de mixed yazdım 😄) asla bir günde olmaz.
Ama her gün bir adım atan kişi, yıl sonunda 365 adım önde olur.
Hadi, klavyeni al — şimdi bir şeyler yaz 🎹✨
— Yanında kod yazan, kahvesini paylaşan bir arkadaş daha ☕💻
Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.
All rights reserved