Sürümler ve özel depolar¶
Ders deponuz özel (private) olmalı ve çoğu öğrenci ücretsiz GitHub Free planındadır. Bu
sayfa bunun neye izin verip neye izin vermediğini ve 10-release'in izin vermediği tek şeyi --
özel GitHub Pages'i -- nasıl aştığını anlatır.
Özel bir depoda GitHub Free'de ne çalışır¶
| Özellik | Free (özel depo) | Pro / Team / Student Pack |
|---|---|---|
| Releases (etiket + ikili varlıklar (binary assets), dosya başına 2 GiB'a, 1000 varlığa kadar) | Evet -- yalnızca işbirlikçilere (collaborator) görünür | Evet |
| GitHub Pages (deponun herkese açığa yakın bir web sitesi adresi) | Özel depoda Hayır | Evet |
| GitHub Actions dakikaları | ayda 2.000 dk, 500 MB artefakt depolama | ayda 3.000 dk, 1 GB artefakt depolama |
(Bu yazı yazılırken GitHub'ın kendi belgelerine göre; güncel sayılar için GitHub'ın fiyatlandırma sayfasına bakın.)
Pages, özel bir Free depoda çalışmadığı için bu şablon Pages'i asla zorunlu kılmaz. 7-build-all + 9-open-site
siteyi kendi diskinizden sunar (bkz. Projenizi GitHub Pages olmadan göstermek),
10-release / CI ise üretilen bütün siteyi her sürümün içine <proje>-<sürüm>-site.zip olarak paketler -- ders sorumlusunun (veya
depoya erişimi olan herkesin) Pages olmadan görmesini sağlayan yöntem budur. Herkese açık
(public) bir depoda (ör. bu şablonun kendi ucoruh/vs-net-core-template'i) Pages normal şekilde
çalışır ve bunların hiçbirine ihtiyaç duymaz -- bkz. aşağıdaki "Pages dağıtım iş akışı".
CI iş akışı ve Pages dağıtımı¶
.github/workflows/ci.yml tek bir boru hattıdır: Windows ve Linux işleri derler, test eder, her raporu ve API
dokümanını üretir (7-build-all-<platform> --no-site) ve platform başına artefakt yükler; macOS işi yalnızca
uygulamayı derler; site işi iki platformu birleştirir, MkDocs ve DocFX sitelerini üretir, bağlantıları denetler ve
siteyi yükler; deploy-pages, main'e push'ta (veya elle) gh-pages dalına yayınlar; release bir v* etiketinde
çalışır. Önce github.event.repository.private denetlenir:
- Herkese açık depo: Pages normal dağıtılır:
https://<siz>.github.io/<deponuz>/. - Özel depo: Pages adımı atlanır (
::noticeve iş özeti nedenini söyler ve Projenizi GitHub Pages olmadan göstermek sayfasına yönlendirir); depo değişkeniPAGES_ON_PRIVATEtrueise atlanmaz (Settings -> Secrets and variables -> Actions -> Variables). Bunu GitHub Pro (veya Student Developer Pack) sahibi olup Settings -> Pages'ten Pages'i açtıktan sonra ayarlarsınız.
Her iki durumda da sürüm siteyi <proje>-<sürüm>-site.zip olarak ekler; özel depolarda sürümler asla atlanmaz.
GitHub Student Developer Pack alın (isteğe bağlı, Pro verir)¶
Yine de Pages istiyorsanız (ör. ileride bir portföy parçası için), üniversite e-postanızla GitHub Student Developer Pack'e başvurun. Onay, GitHub kaydınızı nasıl doğruladığına bağlı olarak dakikalar ile birkaç gün arasında sürebilir (bazen bir öğrenci/mezun kimliği fotoğrafı istenir) -- bir teslim tarihinden önce geleceğine güvenmeyin. Onaylandığında GitHub Pro hesabınıza otomatik uygulanır ve depo özel kalırken bile Settings -> Pages altından Pages'i etkinleştirebilirsiniz.
Ders sorumlusunu işbirlikçi olarak ekleyin¶
Özel bir sürüm ve özel bir deponun içeriği, erişimi olmayan kimseye görünmez. Çalışmanızın değerlendirilebilmesi için ders sorumlusunu ekleyin:
Settings -> Collaborators -> Add people, dersinizin proje rehberinde belirtilen hesabı ekleyin (ör. ders sorumlusunun GitHub kullanıcı adı); erişimin etkili olması için davetin kabul edilmesi gerekir.
GitHub CLI'yi (gh) kurun ve giriş yapın¶
10-release, her seferinde tarayıcı açmadan terminalden bir sürüm yayınlanabilsin diye web
arayüzü yerine gh kullanır.
# Windows
winget install GitHub.cli
# Linux/WSL
sudo apt-get install gh # ya da bkz. https://github.com/cli/cli/blob/trunk/docs/install_linux.md
gh auth login
gh auth login sizi tarayıcı tabanlı veya token tabanlı kimlik doğrulamadan geçirir; başka bir şey
gerektiğini bilmiyorsanız github.com, HTTPS ve "Login with a web browser" seçin. Doğrulayın:
gh auth status
beklenen çıktı şuna benzer:
github.com
✓ Logged in to github.com account <kullanıcı-adınız> (keyring)
✓ Git operations for github.com configured to use https protocol.
✓ Token: gho_************************************
WSL'in kendi gh girişi vardır
Windows'taki gh ve git kimlik bilgileri WSL ile paylaşılmaz. Ubuntu içinde gh auth login, ardından
gh auth setup-git çalıştırın (özel depoda git clone/git push çalışsın diye) ve gh auth status ile doğrulayın.
Bunu yapmazsanız WSL'de özel depoyu klonlarken komut parola sorarak takılır.
Her sürüm dosyası (yerelde ve GitHub'da aynı adlar)¶
<proje>-<sürüm>[-<platform>[-<arch>]]-<içerik>[-<araç>].<uzantı> (sürüm "v" olmadan; project.env'den)
| Dosya | Ne |
|---|---|
calculator-2.1.2-windows-x64-app.zip, -linux-x64-app.tar.gz, -macos-arm64-app.tar.gz |
uygulama, kendi kendine yeten (macOS: yalnız CI) |
calculator-2.1.2-<platform>-report-tests.zip |
birim test sonuçları (TRX + HTML) |
-report-coverage-reportgenerator.zip, -report-coverage-lcov.zip |
kod kapsaması, iki aile |
-report-doccoverage-reportgenerator.zip, -report-doccoverage-lcov.zip |
dokümantasyon kapsaması, iki aile |
-api-doxygen.zip, -api-docfx.zip |
API dokümanları (Doxygen; DocFX eksiksiz bir sitedir) |
calculator-2.1.2-source.zip, -site.zip |
etiketteki kaynak; tüm MkDocs sitesi (iki platform) |
ASSETS.md, SHA256SUMS.txt |
her dosyanın tablosu (platform, içerik, araç, site bağlantısı); sağlama toplamları |
<platform> windows veya linux'tur (yerel Linux ve WSL ikisi de linux). Windows ikilileri ve tüm HTML için .zip;
Linux/macOS ikilileri için .tar.gz. Yerelde release/, bu platformun dosyalarını ve tarafsız olanları içerir;
eksik olanı ASSETS.md söyler; CI iki platformu da üretir.
10-release'i kullanma¶
10-release-windows.bat --dry-run
10-release-windows.bat
Linux/WSL'de: ./10-release-linux.sh --dry-run vb. Sürüm project.env içindeki VERSION'dır (etiket v<VERSION>):
düzenleyin, commit'leyin, sonra yayınlayın. --dry-run her şeyi üretir (7-build-all), release/'i paketler, sonra
çalıştırmak yerine tam gh release create komutunu ve dosya listesini yazdırır. Betik kirli bir çalışma
ağacından gerçek sürümü reddeder; o etiketin sürümü zaten varsa (örn. CI oluşturduysa) yenisini yaratmak yerine
gh release upload --clobber ile ona yükler.
İlk gerçek sürümden önce bilmeniz gerekenler¶
- Önce push edin.
gh release createyeni etiketi yerel commit'inize değil, uzakmainbaşına koyar. Gerçek bir10-release'ten önce her şeyi (VERSIONartışı dahil) commit edipgit pushyapın; yoksa etiket eski koda işaret eder. - Yeniden üretilen dosyaları commit edin.
7-build-all,docs/assets/içindeki izlenen kapsama rozetlerini yeniden yazar;2-create-gitignoreda.gitignore'u yenileyebilir. Gerçek sürüm kirli çalışma ağacını reddeder; bu yüzden derlemeden sonragit statusbakın, bu dosyaları commit edip push yapın, sonra sürümü çıkarın. - Bir
VERSION, bir etiket. Her yeni sürüm içinproject.enviçinde yeni birVERSIONgerekir (etiketv<VERSION>). O etiketin sürümü zaten varsa betik hata vermez, dosyaları ona yükler (--clobber); yeni bir sürüm yayımlamak için önceVERSION'ı artırın, commit edip push yapın. - Yerel sürüm + aynı etikette CI birleşir. Betik etiketi oluşturur, CI de her
v*etiketinde çalışır; böylece aynı sürümde hem bu platformun yerel dosyaları hem CI'nin Windows, Linux ve macOS dosyaları bulunur (aynı adlılar değiştirilir). Bu beklenen davranıştır; bir kez de Actions dakikası harcar.
İsteğe bağlı: CI sürümü¶
Bir etiket gönderin (git tag v2.1.2 && git push origin v2.1.2); ci.yml iki platformu ve macOS'u derler, sonra
yukarıdaki her dosyayı, canlı siteye ve her rapor sayfasına bağlanan notlarla GitHub Release'e ekler. Actions
dakikası harcar (üç çalıştırıcıda tam bir çalışma birkaç dakikadır); kaç dakikanız kaldığından emin değilseniz yerelde
10-release tercih edin (Free: özel depolarda ayda 2.000 dk).
Sürüm sorun giderme¶
| Belirti | Neden | Çözüm |
|---|---|---|
gh release create, HTTP 404 ile başarısız |
Yanlış depo algılandı, ya da sahibi olmadığınız özel bir depoda işbirlikçi değilsiniz | Klonlanan depo klasörünün içinden çalıştırın; gh repo view'ın doğru depoyu gösterdiğini doğrulayın |
gh release create, HTTP 403 ile başarısız |
Kimlik doğrulanmamış, ya da token'da repo kapsamı eksik |
Tekrar gh auth login; ince taneli (fine-grained) bir PAT için bu depoda Contents: Read and write iznine sahip olduğundan emin olun |
gh auth login'den sonra bile gh: not logged in |
Beklenenden farklı bir gh host/hesabına giriş yapılmış |
Hangi hesabın etkin olduğunu görmek için gh auth status; birden fazla hesabınız varsa gh auth switch |
| Yükleme, varlık çok büyük mesajıyla başarısız | Tek bir varlık GitHub'ın 2 GiB sınırını aşıyor | Bu şablonun varlıklarıyla olmamalı; olursa publish/'in kazayla budanmadan bırakılmadığını (ör. hata ayıklama sembolleri) kontrol edin |
| Ders sorumlusu sürümü göremediğini söylüyor | Henüz işbirlikçi olarak eklenmedi, ya da davet kabul edilmedi | Yukarıdaki "Ders sorumlusunu işbirlikçi olarak ekleyin" bölümüne bakın |
Sırada¶
Sorun gh değil de bir scriptin kendisiyse bkz. Sorun giderme.