GitHub Packages — paket yayınlamak ve kullanmak
GitHub Packages — publishing and consuming packages
Bu derste neler öğreneceksin
- GitHub Packages'ın ne olduğunu ve desteklenen registry'leri listelemek
- npm paketi nasıl GitHub Packages'a yayınlanır? Adımları bilmek
- GitHub Container Registry (GHCR) ile Docker image yayınlamayı tanımak
- Packages erişim kontrolü ve visibility ayarlarını anlamak
GitHub Packages, GitHub’a entegre paket registry hizmetidir. Kodu hem barındırır hem de paketler olarak yayınlamanı sağlar. npm, Docker, Maven, NuGet, RubyGems ve Gradle desteklenir.
Desteklenen registry’ler
| Registry | Ekosistem | URL |
|---|---|---|
| npm | Node.js | npm.pkg.github.com |
| Docker / GHCR | Container images | ghcr.io |
| Maven | Java | maven.pkg.github.com |
| NuGet | .NET | nuget.pkg.github.com |
| RubyGems | Ruby | rubygems.pkg.github.com |
| Gradle | Java/Kotlin | maven.pkg.github.com |
npm paketi yayınlamak
# .npmrc dosyası oluştur
echo "@YOUR-USERNAME:registry=https://npm.pkg.github.com" >> ~/.npmrc
# package.json içinde name'i scope ile yaz
{
"name": "@YOUR-USERNAME/my-package",
"version": "1.0.0",
"publishConfig": {
"registry": "https://npm.pkg.github.com"
}
}
# Yayınla
npm publish
Actions ile otomatik yayın
name: Publish Package
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://npm.pkg.github.com'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN — Actions’ta otomatik sağlanan özel token. Manuel secret eklemeye gerek yok.
GitHub Container Registry (GHCR)
Docker image’larını ghcr.io üzerinde yayınlayabilirsin:
# Login
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
# Image tag'le
docker tag my-app:latest ghcr.io/USERNAME/my-app:latest
# Push
docker push ghcr.io/USERNAME/my-app:latest
Packages erişim kontrolü
| Visibility | Kimler erişir? |
|---|---|
| Public | Herkes (anonim de dahil) |
| Private | Sadece sahibi ve davet edilenler |
| Internal | Organizasyon üyeleri (Enterprise) |
Package, bağlı olduğu repo’nun visibility’sini miras alır. Ancak ayrı kontrol edilebilir: package Settings → Manage access.
GITHUB_TOKEN vs. Personal Access Token (PAT)
GITHUB_TOKEN: Actions’ta otomatik, geçici, repo-scoped- PAT (Classic): Manuel oluşturulur, geniş kapsam, uzun süreli
- Fine-grained PAT: Daha kısıtlı, belirli repo ve izinlere
Packages’a Actions dışından erişmek için PAT gerekebilir (write:packages scope).
Packages neden kullanılır?
- Monorepo: Birden fazla iç paketi tek repo’da yönet
- Özel bağımlılıklar: Dış npm registry’ye koymak istemediğin iç kütüphaneler
- Sürüm kontrolü: Paket sürümleri repo ile aynı yerde
- CI/CD entegrasyonu: Aynı Actions token ile hem build hem publish
Sınav perspektifinden dikkat noktaları
GITHUB_TOKENActions’ta otomatik sağlanır — secrets bölümünde manuel tanımlamak gerekmez- Package’ı silmek repo’yu etkilemez (aksine de geçerli)
- GHCR, Docker Hub’dan bağımsız bir registry’dir — aynı image her ikisinde de olabilir
- Packages fiyatlandırması: public paketler ücretsiz, private paketler plan limitine girer
Sırada ne var?
Sonraki derste GitHub Codespaces ile bulut tabanlı geliştirme ortamını tanıyacağız.