Modül 4 · Modern development · ⏱ 10 dakika

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

RegistryEkosistemURL
npmNode.jsnpm.pkg.github.com
Docker / GHCRContainer imagesghcr.io
MavenJavamaven.pkg.github.com
NuGet.NETnuget.pkg.github.com
RubyGemsRubyrubygems.pkg.github.com
GradleJava/Kotlinmaven.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ü

VisibilityKimler erişir?
PublicHerkes (anonim de dahil)
PrivateSadece sahibi ve davet edilenler
InternalOrganizasyon ü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_TOKEN Actions’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.