İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • DevOps
  • VSIX Yayınını GitHub Actions’a Devretmek: Sade ve Tekrar Edilebilir Bir Yol
DevOps Geliştirici Araçları CI/CD, GitHub Actions, Marketplace, otomasyon, sürüm yönetimi, Visual Studio eklentisi, VSIX Aşkın KILIÇ 29/06/2026 3 Yorumlar

VSIX Yayınını GitHub Actions’a Devretmek: Sade ve Tekrar Edilebilir Bir Yol

VSIX Yayınını GitHub Actions'a Devretmek: Sade ve Tekrar Edilebilir Bir Yol
📑 İçindekiler
  1. Neden GitHub Actions? Azure DevOps Pipelines Dururken…
  2. Mads'in Uc Küçük Action'i: Tekerleği Tekrar Tekrar Icad Etmemek
  3. Tam Bir Workflow Örneği
  4. Versiyon Damgalama: Sandığınızdan Daha Önemli
  5. Pratikte Ne Değişiyor?
  6. VSIX Gallery: Marketplace'in "Beta" Versiyonu
  7. Kurumsal Tarafta Durum: Türkiye'deki Şirketler İçin Notlar
  8. Pipeline'ı Üretime Hazır Hâle Getirmek
  9. 1. Marketplace Yayınını Sadece Release'lerde Yap
  10. 2. Manifest Doğrulama Adımı
  11. 3. Test Adımı (Evet, VSIX'lerde de Test Olur)
  12. Karşılaştırma: Manuel vs Scripted vs Actions Tabanlı
  13. İlgili Konular: DevOps Tarafında Daha Geniş Resim
  14. Pratik Başlangıç Rehberi: İlk Eklentinizi Bugün Yayına Alın
  15. Son Söz: Süslü Değil Ama İşini Görüyor
  16. Sıkça Sorulan Sorular
  17. windows-latest yerine Linux runner kullanabilir mıyım?
  18. VSIX'ımı imzalamadan Marketplace'e yükleyebilir mıyım?
  19. Aynı pipeline'ı Azure DevOps için nasıl yazarım?
  20. Pre-release ve stable sürümleri nasıl ayırırım?
  21. Build sırasında token sızabilir mi?
  22. Kaynaklar ve İleri Okuma
⏱️ 13 dk okuma📅 29 Haziran 2026🔄 Güncelleme: 15 Temmuz 2026

Visual Studio için eklenti yazmaya bir kere bulaştıysanız, teknik kısım aslında en keyifli yer oluyor. Asıl dert başka yerde başlıyor; paketleme, sürüm artirma. Marketplace’e yükleme döngüsü var ya, işte insanın sınırını en çok orası bozuyor. Hani su “build aldım, versiyonu unuttum, manifest’i elle duzelttim, tekrar build aldım” sarmali… Evet.

Işin doğrusu, yıllar içinde kim ne yapıyor diye bakarken Mads Kristensen’in (Visual Studio ekibinden tanidigimiz o velut eklenti yazarı) yaklaşımı hep dikkatimi cekmisti. Adam 100’un üzerinde eklenti yayınlıyor ve hepsinde kabaca aynı GitHub Actions iskeleti çalışıyor; yanı bir kere oturtmus, sonra da üstüne fazla dokunmadan götürüyor gibi. Yakında bunu kendi bloğunda yazdı — ben de hem o yazidan hareketle, hem kendi DevOps tecrübemden süzüp sahaya nasıl indirilir, kurumsal tarafta nelere dikkat etmek lazım, onları anlatayım dedim. İşte, peki neden?

Kısa bir not düşeyim buraya.

Lafı uzatmadan girelim. Çünkü bazen en temiz başlangıç bu oluyor; önce omurgayi görüyorsun, sonra detaylar kendiliğinden yerine oturuyor (ya da en azından oturuyor gibi yapıyor), yoksa konu dağılıp gidiyor. Neyse, çok dağıttım, konumuza dönelim.

Neden GitHub Actions? Azure DevOps Pipelines Dururken…

Bu soruyu ben de epey kurcaladım. Yıllardır Microsoft tarafında Azure DevOps Pipelines kullanıyorum, hâlâ da kurumsal işlerde çoğu zaman ilk aklıma o geliyor (bu beni çok şaşırttı). Ama VSIX gibi açık kaynak, GitHub üstünde yaşayan ve küçük-orta ölçekli projelerde iş gören senaryolarda, tablo biraz değişiyor.

Şöyle bakınca daha net oluyor: Eklentinin kodu zaten GitHub’da dürüyor. Issue’lar orada, PR’lar orada, release’ler orada; yanı her şey aynı çatı altında. Build pipeline’ını Azure DevOps’a taşıyınca iki ayrı yerde context kovalamaya başlıyorsunuz, bu da ufak ekipte gereksiz bir yük yaratıyor. GitHub Actions işe .github/workflows klasöründe yaşıyor, repo ile birlikte version’lanıyor, fork eden biri de çoğu zaman aynı akışı hiç uğraşmadan kullanabiliyor.

Ve işler burada ilginçleşiyor.

Burada güzel taraf şu, ama dur bir saniye — kurumsal tarafta işler aynı rahatlıkta ilerlemiyor. Neden önemli bu? Önü birazdan ayrı bir bölümde açacağım; şimdilik “küçük ve orta ölçekli işlerde GitHub Actions baya iş görüyor, büyük kurumsal yapılarda işe ADO Pipelines hâlâ güçlü bir aday” diyelim.

Mads’in Uc Küçük Action’i: Tekerleği Tekrar Tekrar Icad Etmemek

Mads’in burada yaptığı şey aslında baya akıllıca. VSIX yayın akışında her repoda tekrar eden üç kalıbı alıp ayrı GitHub Action olarak paketlemiş, böylece yeni bir eklenti projesi açınca aynı bash ya da PowerShell script’lerini kopyala-yapistir yapmıyorsunuz (eh, fena değil). Peki bunu neden söylüyorum? Güzel fikir, ama dur bir saniye — is biraz orada bitmiyor.

Çok konuştum, örnekle göstereyim.

  • vsix-version-stamp — Build sırasında manifest dosyasındaki sürümü otomatik güncelliyor. Tarih + commit say bazlı bir versiyon damgalama.
  • publish-vsixgallery — CI build’lerini VSIX Gallery’ye atıyor. Bu önemli, çünkü Marketplace’e atmadan önce test sürümlerini buradan dağıtabiliyorsunuz.
  • publish-marketplace — Resmî Visual Studio Marketplace yayınını yapıyor. (bu kritik)

Üçü de bağımsız çalışabiliyor, yanı tek başına da is görüyorlar. Isterseniz sadece sürüm damgalama için kullanırsınız, isterseniz hepsini ardarda dizersiniz; ben açık konuşayım, üçünü birlikte kullanmak daha mantıklı geliyor çünkü birbirini tamamliyorlar ve sonradan el ile düzeltme derdi azalıyor. Evet.

Tam Bir Workflow Örneği

Şimdi gelelim esas yere. Sıfırdan baslayacaksaniz .github/workflows/build.yml için su iskelet fena değil:

name: Build
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: windows-latest
env:
Configuration: Release
VsixManifestPath: src\source.extension.vsixmanifest
VsixSourcePath: src\source.extension.cs
steps:
— uses: actions/checkout@v6
— name: Setup MSBuild
uses: microsoft/setup-msbuild@v3
— name: Restore
run: msbuild /t:Restore
— name: Version stamp
uses: madskristensen/vsix-version-stamp@v2
with:
manifest-file: ${{ env.VsixManifestPath }}
vsix-token-source-file: ${{ env.VsixSourcePath }}
— name: Build
run: msbuild /p:Configuration=$(Configuration)
— name: Publish to VSIX Gallery
uses: madskristensen/publish-vsixgallery@v1
with:
vsix-file: '**/*.vsix'
— name: Publish to Marketplace
uses: madskristensen/publish-marketplace@v2
with:
extension-file: '**/*.vsix'
publish-manifest-file: vs-publish.json
personal-access-code: ${{ secrets.VS_MARKETPLACE_TOKEN }}

Lafı gevelemeden söyleyeyim, olay özünde bu kadar. Checkout var, MSBuild kuruluyor, restore çalışıyor, sürüm damgalaniyor, build alınıyor ve iki farklı yere yayın gidiyor. windows-latest runner kullanmak şart; çünkü MSBuild ve VSIX SDK Linux tarafında yok, hani bazen insanlar bunu unutuyor sonra neden patladı diye şaşırıyorlar. Neyse, peki neden?

Bence burada en hoş kısım dosyanın okunabilir kalması. Birisi PR atmak için repo’yu fork ettiginde, neyin nasıl aktığını anlamak için iki dakika YAML’a bakması yetiyor; üstelik gereksiz script kalabalığı da olmuyor (hele birden fazla eklenti üzerinde çalışıyorsanız bu rahatlık iyice hissediliyor). Bu çok değerli bir şey — özellikle açık kaynakta.

Versiyon Damgalama: Sandığınızdan Daha Önemli

Versiyonlama, eklenti işinde insanın en kolay tökezlediği yerlerden biri. Manuel gidiyorsanız, bir noktada şu sahne geliyor: Marketplace’e attığınız VSIX’in sürümü GitHub release’tekiyle tutmuyor, ya da hotfix basıyorsunuz ama manifest’i artırmayı unutuyorsunuz; sonra Marketplace de çıkıp “aynı versiyon var” diye yüzünüze kapatıyor. Evet, tam sınır bozucu şey.

vsix-version-stamp burada baya iş görüyor. Manifest içindeki versiyon alanını build sırasında dinamik olarak güncelliyor — genelde 1.0.{yıl}{ay}{gün}{commitSayısı} gibi bir kalıpla, yanı bugün aldığınız build ile yarın aldığınız build aynı koda dayansa bile numara çakışmıyor. Açık konuşayım, ilk bakışta ufak bir detay gibi dürüyor ama sonradan “iyi ki bunu koymuşum” dedirtiyor.

İnanın, VSIX Synchronizer eklentisiyle birlikte kullanınca iş biraz daha toparlanıyor. Synchronizer manifest’ten .cs dosyası üretiyor — bir düşüneyim… böylece kodun içinde de aynı versiyona Vsix.Version gibi tek bir yerden erişebiliyorsunuz. Tek kaynak, her yerde aynı değer; kulağa düz geliyor ama pratikte kafa karışıklığını ciddi azaltıyor.

Pratikte Ne Değişiyor?

İlginç olan şu ki, Bunu kullanmaya başladığımdan beri “Marketplace’e yüklemeden önce manifest’i artırdım mı?” diye dönüp durma hali bitti sayılır. Hani insan bazen küçük bir şeyi unutuyor ya, işte o unutkanlık burada pek can sıkmıyor artık — valla güzel iş çıkarmışlar —. Bir yandan da geliştirici tarafında ufak ufak kemiren o zihinsel yük azalıyor.

İnanın, Neyse, çok dağıtmayayım, mesele şu: versiyon damgalama sadece düzen olsun diye yapılmıyor. Bir hata çıktığında hangi build’in yayınlandığını daha rahat görüyorsunuz (özellikle aynı gün içinde birkaç kez paket atıyorsanız), geri dönüş yaparken de eliniz daha az dolaşıyor. Sız ne dersiniz?

Peki neden?

VSIX Gallery: Marketplace’in “Beta” Versiyonu

Bu kısım biraz kenarda kalıyor, ama açık konuşayım, baya işe yarıyor. Marketplace’e bir sürüm yüklediniz mi, işin rengi değişiyor; geri almak kolay değil, herkes görüyor, sonra uğraş dur. Peki test edilmemiş build’leri nasıl dağıtacaksınız?

İşte VSIX Gallery tam burada devreye giriyor. Mads’in kendi kurduğu, topluluğun da kullandığı bir CI build deposu bu (kendi tecrübem). Her PR ya da commit sonrası çıkan build’leri buraya atıyorsunuz; beta testçileriniz de sız de Visual Studio’ya bu galeriyi ek bir kaynak gibi tanıtıp oradan kurabiliyorsunuz. Kulağa basit geliyor, ama pratikte epey rahatlatıyor.

Eh, Yanı akış şöyle oluyor:

  1. Push veya PR olunca GitHub Actions build alıyor
  2. VSIX Gallery’ye atıyor — bunu es geçmeyin
  3. Sız veya test ekibiniz oradan kuruyor, deniyor
  4. Her şey yolundaysa, sadece main branch’inde Marketplace’e gidiyor

Bu ikili dağıtım modeli, Microsoft’un kendi ürünlerinde gördüğümüz “Insider” / “Stable” ayrımına benziyor aslında. Küçük ölçekte aynı disiplini kuruyor, hatta bazen daha da düzenli hissettiriyor. Evet.

Kurumsal Tarafta Durum: Türkiye’deki Şirketler İçin Notlar

Açıkçası, Bu yazıyı okuyup “tamamdır, hemen kurarım” diyenler için küçük bir fren koyayım. Eğer iş kurumsal taraftaysa, hele finans, kamu ya da sağlık gibi alanlardaysanız, olay o kadar düz değil. Sahada en çok takıldığım yerler de zaten hep aynı üç dört nokta oluyor, garip ama gerçek — valla güzel iş çıkarmışlar —

Personal Access Token yönetimi. VS_MARKETPLACE_TOKEN dediğimiz şey aslında kişisel erişim token’ı. Kim adına çıkarıldıysa yayın da onun üstünden görünüyor. Şirket hesabıyla açılan eklentilerde token sahibi ayrılırsa pipeline bir anda patlıyor; o yüzden bunu service account gibi ayrı bir hesapta tutmak, rotasyonu da Azure Key Vault gibi bir yerde takip etmek gerekiyor (ki bu çoğu kişinin gözünden kaçıyor). Kısacası, işin kritik kısmı kod değil, erişim tarafı.

Çok konuştum, örnekle göstereyim.

Runner seçimi. GitHub Actions’taki windows-latest runner’ı public çalışıyor. Kod hassassa ve build sırasında Microsoft-hosted runner’a çıkması compliance açısından sıkıntı yaratıyorsa, self-hosted Windows runner kurmanız lazım. Evet, bu da masraf demek; bir Windows VM alıyorsunuz, üstüne Visual Studio Build Tools yüklüyorsunuz, MSBuild SDK’larını ayarlıyorsunuz, sertifika store’u ile uğraşıyorsunuz… İlk bakışta basit dürüyor ama sonra ufak ufak büyüyor işte.

İmzalama (code signing). Mads’in örneğinde yok. Kurumsal eklentilerde Authenticode imzası neredeyse kaçınılmaz hâle geliyor. SmartScreen uyarılarından sıyrılmak için VSIX dosyasını çoğu zaman Extended Validation sertifikasıyla imzalamak gerekiyor; bu sertifikalar da öyle ucuz sayılmaz, yıllık 300-500 USD bandında geziyor ve bazen donanım token istiyor (HSM isteyen YubiKey tarzı çözümler gibi). GitHub Actions üzerinden bunu yapmak için Azure Key Vault ile AzureSignTool ikilisi bana göre Türkiye şartlarında baya iş görüyor. Tabiî her ortamda aynı sonucu vermez, ama çoğu senaryoda idare eder.

Evet, doğru duydunuz.

💡 Bilgi: Küçük ekipseniz veya bireysel geliştiriciyseniz Mads’in basit pipeline’ı yeter de artar. Ama 50+ kişilik bir geliştirme organizasyonundaysanız ve eklentiler iç araç olarak dağıtılacaksa, Azure Artifacts üzerinde private VSIX feed kurmak, GitHub Actions yerine Azure DevOps Pipelines kullanmak daha akıllıca olabilir. Tek tip pipeline’ı her yere uygulamak çoğu zaman doğru değil.

Pipeline’ı Üretime Hazır Hâle Getirmek

Yukarıdaki YAML fena değil, ama production tarafında birkaç ek dokunuş lazım. Ben olsam işi biraz daha sıkı tutarım,. Bir noktada küçük bir hata, yanlışlıkla herkese giden bir yayına dönüşebiliyor (ve sonra uğraş dur).

1. Marketplace Yayınını Sadece Release’lerde Yap

Yukarıdaki örnekte her main push’unda Marketplace’e yayın yapılıyor. Bu biraz riskli, açık konuşayım; yanlışlıkla merge ettiğiniz bir commit direkt kullanıcılara gider (kendi tecrübem). Bunu şöyle sınırlandırın:

 — name: Publish to Marketplace
if: github.event_name == 'release'
uses: madskristensen/publish-marketplace@v2
with:
extension-file: '**/*.vsix'
publish-manifest-file: vs-publish.json
personal-access-code: ${{ secrets.VS_MARKETPLACE_TOKEN }}

Vallahi, Sadece GitHub Release oluşturulduğunda tetiklensin (inanın bana). VSIX Gallery’ye atan adım her commit’te çalışsın, sorun değil. Hatta bu ayrım baya iş görüyor; biri dağıtım, öteki sadece paketleme.

Evet.

2. Manifest Doğrulama Adımı

Build’den önce manifest’in geçerli olduğundan emin olun. Boş guid mi var, publisher eksik mi, targetVersion mı yanlış yazılmış; bunları daha başta yakalamak iyi oluyor,. Sonradan bulunca insanın canı sıkılıyor (yanlış duymadınız) Daha fazla bilgi için

Bak şimdi, burada asıl mesele hata vermek değil, hatayı erken görmek. Küçük gibi duran bir alan yüzünden neredeyse tüm pipeline’ın patlaması da mümkün (özellikle aceleyle girilmiş değişikliklerde), o yüzden bu adımı ben atlamam.

3. Test Adımı (Evet, VSIX’lerde de Test Olur)

Çoğu eklenti yazarı bu kısmı geçiyor — anlıyorum, Visual Studio extensibility’sını test etmek pek kolay değil. Ama en azından unit testlerinizi pipeline’a ekleyin; dotnet test ya da VSTest ile ilerlemek gayet yeterli olabilir.

Bir bakıma, peki neden? Çünkü test yoksa geriye sadece tahmin kalıyor (inanın bana). Şey yanı, eklenti tarafında UI ve entegrasyon işleri biraz kaygan olabiliyor; o yüzden hiç olmazsa mantık katmanını pipeline içinde doğrulamak insana rahat nefes aldırıyor.

Karşılaştırma: Manuel vs Scripted vs Actions Tabanlı

Kriter Manuel PowerShell Script GitHub Actions + reusable
Kurulum süresi 0 dk 2-4 saat 30 dk
Hata payı Yüksek Orta Düşük
Tekrar uretilabilirlik Yok Lokalde var Tam
Yeni proje maliyeti Her seferinde sıfırdan Kopyala-uyarla YAML’i kopyala, çalıştır
Onboarding kolaylığı Çok zor Orta Çok kolay

Açıkçası, Tabloya bakınca mesele biraz daha netleşiyor. Manuel tarafta iş hızlı gibi dürüyor, ama ilk günün rahatlığı sonradan küçük bir borca dönüşüyor; yeni ekip arkadaşı gelince, aynı adımları bir daha, bir daha, bir daha anlatıyorsunuz.

Peki neden Actions tarafına kaymak mantıklı? Çünkü ilk kurulum için harcadığınız o 30 dakika, sonra size geri dönüyor; yeni bir proje açtığınızda aynı akışı yeniden yazmıyorsunuz, sadece hazır YAML dosyasını alıp ufak birkaç path değiştiriyorsunuz, işte olay bu kadar sade.

Evet.

Ama dur bir saniye. PowerShell script de boş değil; lokal testte baya iş görüyor, özellikle tek kişinin yönettiği küçük senaryolarda idare eder, fakat ekip büyüyünce “bu script kimde çalıştı, hangi makinede patladı?” soruları başlıyor. Orada işler biraz dağılıyor.

Neyse, çok uzatmayayım. GitHub Actions + reusable yaklaşımı bana göre asıl farkı tekrar üretilebilirlikte veriyor; aynı işi farklı projelerde aynı davranışla koşturabiliyorsunuz,. Biri “bende çalıştı” dediğinde içim biraz daha rahat ediyor.

Şunu söyleyeyim, Sız ne dersiniz? Eğer her yeni proje için sıfırdan uğraşmak yerine hazır bir akışla başlamak mümkünse, açık konuşayım ben ikinciyi seçerim.

İlgili Konular: DevOps Tarafında Daha Geniş Resim

Kendi deneyimimden konuşuyorum, VSIX yayını, işin aslı, DevOps tarafındaki koca tablonun küçük bir köşesi (şaşırtıcı ama gerçek). Eğer kurumsal tarafta CI/CD’yi biraz daha geniş görmek istiyorsanız, Azure DevOps Server Haziran Yamaları: Sahadan Notlar. Geçiş Rehberi yazımda Azure DevOps tarafında benzer senaryolara değinmiştim. Kısa ama faydalıydı.

Bunun yanında, GitHub Actions’tan Azure’a kimlik doğrulama yaparken eski PAT yaklaşımı yavaş yavaş kenara çekiliyor; yerine Workload Identity Federation geliyor (evet, biraz işim kalabalığı var. Mevzu net). Bu konuyu Azure DevOps Issuer Emekliye Ayrılıyor: WIF Geçişi Şart yazımda detaylıca anlattım — Marketplace yayını dışındaki Azure servislerine pipeline’dan erişiyorsanız, açık konuşayım, bunu bir gözden geçirmeniz iyi olur.

Pratik Başlangıç Rehberi: İlk Eklentinizi Bugün Yayına Alın

Bi saniye — Eğer bu işe daha yeni giriyorsanız, lafı gevelemeden şu sırayla ilerleyin:

  1. Visual Studio Marketplace’e yayıncı hesabı açın (ücretsiz)
  2. Marketplace üzerinden bir Personal Access Token oluşturun, Manage scope’u verin
  3. GitHub repo’nuzun Settings > Secrets bölümüne VS_MARKETPLACE_TOKEN olarak ekleyin
  4. Yukarıdaki YAML’ı .github/workflows/build.yml olarak repo’ya koyun
  5. vs-publish.json dosyanızı hazırlayın (publisher, ID, kategoriler vs.)
  6. Bir release tag’i oluşturun, pipeline’ın çalışmasını izleyin

Tuhaf ama, Burası kritik. İlk denemede bir şeyler kırılacak, büyük ihtimalle de küçük ama can sıkan bir detay yüzünden; mesela vs-publish.json içindeki publisher adı Marketplace hesabıyla uyuşmuyor olabilir ya da token tarafında yetki eksik kalmış olabilir.

Evet.

Panik yapmayın. Logları okuyun, çünkü hata mesajları çoğu zaman sandığınızdan daha açık konuşuyor; biraz satır arası bakınca nerede takıldığını görüyorsunuz, sonra iş aslında beklediğinizden hızlı toparlanıyor.

Peki neden?

Neyse, çok dağıtmayayım: ilk kurulumda amaç kusursuz gitmek değil, akışı ayağa kaldırmak. Sonrası zaten geliyor.

Son Söz: Süslü Değil Ama İşini Görüyor

Ne yalan söyleyeyim, Açık konuşayım, Mads’in bu yaklaşımı öyle parlatılmış bir şey değil. Reusable actions’lar da çok iddialı durmuyor; içine bakınca işin çoğu birkaç PowerShell çağrısına çıkıyor. Ama garip olan şu: tam da bu sade hâliyle iş görüyor (inanın bana). Anlaması kolay, debug etmesi daha kolay, bir de fork edip kendi kafanıza göre kurcalaması baya rahat.

Kısacası, bi saniye — Bence burada asıl mesele şu, VSIX yayını gibi dar bir alanda kalkıp “framework” diye ortalığı şişirmek yerine, küçük parçaları yan yana koymak daha temiz bir yol. Hani biraz da pragmatik davranıyorsunuz. Bir gün Marketplace API değişirse, sadece ilgili action’ı elden geçirirsiniz (başka yerlere dokunmadan), gerisi büyük ihtimalle aynı kalır. İyi tarafı bu.

Eğer hâlâ VSIX’leri elle build edip elle yüklüyorsanız — açık konuşayım, biraz zaman kaybediyorsunuz. Yatırım küçük, dönüşü fena değil. Bu hafta sonu iki saat ayırın, bir workflow yazın; ilk başta ufak tefek pürüz çıkar ama sonra işin akışı kendi kendine oturuyor (ben de ilk duyduğumda şaşırmıştım)

Sıkça Sorulan Sorular

windows-latest yerine Linux runner kullanabilir mıyım?

Maalesef hayır. VSIX build için MSBuild ve Visual Studio extensibility SDK’sı lazım, bunlar yalnızca Windows’ta çalışıyor. Aslında Mono ile zorlayanlar var ama production’da işe yaramıyor açıkçası. windows-latest kullanmak zorundasınız, başka yolu yok.

Bakın, burayı atlarsanız yazının kalanı anlamsız kalır.

VSIX’ımı imzalamadan Marketplace’e yükleyebilir mıyım?

Hani, Evet, teknik olarak imza şart değil. Ama imzasız VSIX kuran kullanıcılar Visual Studio’da güvenlik uyarısı görüyor — bu da pek iyi bir izlenim bırakmıyor bence. Eklentinizin düzgün görünmesi için Authenticode sertifikasıyla imzalamanızı tavsiye ederim. Yanı açık kaynak projeler için DigiCert’in güzel indirimleri var, bir bakın derim.

Aynı pipeline’ı Azure DevOps için nasıl yazarım?

Şunu söyleyeyim, Mantık aynı, sözdizimi farklı. azure-pipelines.yml içinde VSBuild task’ı kullanıyorsunuz, MSBuild parametrelerini benzer şekilde geçiyorsunuz. Marketplace yayını için işe TfxInstaller ve PublishExtension task’larına ihtiyacınız var. Bir de versiyon damgalama meselesi var — hani Mads’in action’ı gibi hazır bir şey Azure DevOps tarafında yok, manifest’i PowerShell script’iyle kendiniz parse etmek zorunda kalıyorsunuz.

Pre-release ve stable sürümleri nasıl ayırırım?

VSIX manifest’inde Prerelease attribute’u var. Bunu true yapınca Marketplace bu sürümü “preview” olarak işaretliyor (ciddiyim). Pipeline’da branch’e göre bu değeri değiştirebilirsiniz mesela — main’den gelen build’ler stable, develop’tan gelenler prerelease olsun. Gayet temiz bir yöntem aslında.

Build sırasında token sızabilir mi?

Şunu fark ettim: GitHub Actions’ta secrets log’lara otomatik maskeleniyor, yanı pipeline çıktısında token görünmüyor. Ama dikkat edilmesi gereken bir nokta var: fork’lardan gelen PR’larda secrets erişilebilir değil — bu aslında kasıtlı bir güvenlik özelliği. Eğer PR’larda da publish yapmak istiyorsanız pull_request_target kullanmanız gerek,. Bu da başka bir güvenlik riski açıyor açıkçası. Tecrübeme göre en sağlıklısı şu: PR’larda sadece build ve test çalıştırın, yayını main’e merge sonrasına bırakın.

Kaynaklar ve İleri Okuma

Automating your Visual Studio extension builds with GitHub Actions — Mads Kristensen, Microsoft DevBlogs

Visual Studio Extension Yayınlama Resmî Dokümantasyonu — Microsoft Learn

vsix-version-stamp GitHub Action Repository

VSIX Gallery — Topluluk CI Build Deposu

🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

Azure DevOps Remote MCP Server Genel Kullanıma Açıldı
Azure DevOps Remote MCP Server Genel Kullanıma Açıldı5 Ağu 2026
Azure SDK Eylül 2025: Playwright Rüzgârı, Kimlikte Güçlenme ve Beta Sürprizleri
Azure SDK Eylül 2025: Playwright Rüzgârı, Kimlikte Güçlenme ve Beta Sürprizleri18 Mar 2026
vcpkg Haziran 2026: Cache Atlama, OHOS ve 2.849 Port Hazır
vcpkg Haziran 2026: Cache Atlama, OHOS ve 2.849 Port Hazır9 Tem 2026
Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı11 Nis 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket CI/CD GitHub Actions Marketplace otomasyon sürüm yönetimi Visual Studio eklentisi VSIX
Önceki yazı

Spring AI 2.0 GA: Cosmos DB ile Java Tarafında Vektör Devri

Sonraki yazı

Claude Opus 4.8 Fast Mode: Copilot’ta Hız ve Maliyet

İlginizi Çekebilir

SQL Server Express'ten Azure SQL Free Tier'a Geçiş
Aşkın KILIÇ 0

SQL Server Express’ten Azure SQL Free Tier’a Geçiş

20/08/2026
GitHub Copilot App: My Work ile İşlerini Yönetmek
Aşkın KILIÇ 0

GitHub Copilot App: My Work ile İşlerini Yönetmek

19/08/2026
VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
Aşkın KILIÇ 0

VS Code Python Environments Eklentisi Genel Kullanıma Açıldı

19/08/2026

3 comments

comments user
Ebru G. 29/06/2026 21:25

VSIX yayınlarken sürekli aynı adımları tekrarlamaktan bıkmıştım, bu workflow tam ihtiyacım olan şeydi. Sürüm artırma kısmını nasıl yönettiğinizi merak ediyordum, açıkça anlatmışsınız. Bu arada şu yazınız da güzeldi: MSSQL Extension v1.43: Azure SQL’i VS Code’dan Kurmak Artık Mümkün — https://www.askinkilic.com.tr/mssql-extension-v143-azure-sqli-vs-codedan-kurmak-artik-mumk/

Yanıtla
comments user
Gamze E. 30/06/2026 03:25

Ben de benzer bir VSIX eklentisi için her sürümde elle paketleyip yüklemekten bıkmıştım, tam da böyle bir çözüme ihtiyacım vardı. Sürüm artırma kısmını nasıl hallettiğinizi merak ediyorum, git tag üzerinden mi yoksa başka bir yöntemle mi yönetiyorsunuz?

Yanıtla
comments user
Koray M. 30/06/2026 06:56

Ben de uzun süredir VSIX paketlemeyi elle yapıyordum, sürüm numarasını atlayıp Marketplace’e yanlış versiyon yüklemek çok can sıkıyor. Workflow’u sadece tag push’a mı bağladınız yoksa main’e her merge’de mi tetikleniyor?

Yanıtla

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • SQL Server Express'ten Azure SQL Free Tier'a Geçiş
    20/08/2026 SQL Server Express’ten Azure SQL Free Tier’a Geçiş
  • GitHub Copilot App: My Work ile İşlerini Yönetmek
    19/08/2026 GitHub Copilot App: My Work ile İşlerini Yönetmek
  • VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
    19/08/2026 VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
  • Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
    19/08/2026 Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
  • Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar
    19/08/2026 Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • ASP.NET Core 2.3 İçin Saat İşliyor: Ne Yapmalı?
    07/04/2026 ASP.NET Core 2.3 İçin Saat İşliyor: Ne Yapmalı?
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

SİZİN İÇİN DERLEDİK

SQL Server Express'ten Azure SQL Free Tier'a Geçiş
Bulut Altyapı Geliştirici Araçları Microsoft Azure

SQL Server Express’ten Azure SQL Free Tier’a Geçiş

20/08/2026 Aşkın KILIÇ
GitHub Copilot App: My Work ile İşlerini Yönetmek
Geliştirici Araçları Yapay Zeka

GitHub Copilot App: My Work ile İşlerini Yönetmek

19/08/2026 Aşkın KILIÇ
VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
Bulut Altyapı Geliştirici Araçları

VS Code Python Environments Eklentisi Genel Kullanıma Açıldı

19/08/2026 Aşkın KILIÇ
Microsoft, 2026 Gartner Cloud-Native Platform Raporunda
Bulut Altyapı Microsoft Azure Yapay Zeka

Microsoft, 2026 Gartner Cloud-Native Platform Raporunda

19/08/2026 Aşkın KILIÇ
Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar
Bulut Altyapı Geliştirici Araçları Yapay Zeka

Azure Cosmos DB VS Code Eklentisi: Ajanlar İçin Yeni Araçlar

19/08/2026 Aşkın KILIÇ
Canvases: Ajanlı Copilot Akışlarını Görünür Kılan Katman
Geliştirici Araçları Yapay Zeka

Canvases: Ajanlı Copilot Akışlarını Görünür Kılan Katman

18/08/2026 Aşkın KILIÇ
Windows Terminal Preview 1.25: Yeni Ayarlar ve Kitty Desteği
Bulut Altyapı Geliştirici Araçları

Windows Terminal Preview 1.25: Yeni Ayarlar ve Kitty Desteği

18/08/2026 Aşkın KILIÇ
Azure Pipelines'a Apple Silicon ve Xcode 27 Geldi
Bulut Altyapı DevOps

Azure Pipelines’a Apple Silicon ve Xcode 27 Geldi

18/08/2026 Aşkın KILIÇ
BlockOnPossibleDataLoss=True: Neden Dostunuz?
DevOps Geliştirici Araçları Güvenlik & Kimlik Microsoft Azure

BlockOnPossibleDataLoss=True: Neden Dostunuz?

18/08/2026 Aşkın KILIÇ
TypeScript 6.0 RC Duyuruldu: 7.0'a Hazırlık Sürümü
Geliştirici Araçları Kurumsal Teknoloji

TypeScript 6.0 RC Duyuruldu: 7.0’a Hazırlık Sürümü

17/08/2026 Aşkın KILIÇ
GitHub Kişisel Depolarda Yorumdan Kullanıcı Engelleme
Geliştirici Araçları Kurumsal Teknoloji

GitHub Kişisel Depolarda Yorumdan Kullanıcı Engelleme

17/08/2026 Aşkın KILIÇ
Microsoft.Testing.Platform ile Test Raporlama Rehberi
Bulut Altyapı DevOps Geliştirici Araçları

Microsoft.Testing.Platform ile Test Raporlama Rehberi

17/08/2026 Aşkın KILIÇ

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps Azure Functions Azure OpenAI azure sdk Azure SQL bulut bilişim C++ CI/CD copilot Copilot CLI DevOps DevSecOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu Microsoft Agent Framework Microsoft Azure Microsoft Foundry MSVC otomasyon performans Pull Request Python RAG SEO uyumlu verimlilik veri yönetimi Visual Studio VS Code yapay zeka yapay zeka ajanları Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 339 yazı 🏗️ Bulut Altyapı 280 yazı 🤖 Yapay Zeka 240 yazı 🔧 DevOps 198 yazı ☁️ Microsoft Azure 186 yazı 🔒 Güvenlik & Kimlik 161 yazı 🏢 Kurumsal Teknoloji 65 yazı 📊 Veri & Analitik 57 yazı 🐳 Konteyner & Kubernetes 47 yazı 📧 Microsoft 365 21 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← Spring AI 2.0 GA: Cosmos DB il...
    Claude Opus 4.8 Fast Mode: Cop... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS