本文件說明 WTM 套件如何發佈到 GitHub Packages,以及其他專案如何從 GitHub Packages 安裝。
目前本 repo 的 NuGet package 來源為:
- Registry:
https://nuget.pkg.github.com/cct08311github/index.json - Repository:
https://github.com/cct08311github/WTM
WTM 目前主要發佈以下三個 package:
WalkingTec.Mvvm.CoreWalkingTec.Mvvm.MvcWalkingTec.Mvvm.TagHelpers.LayUI
版本號統一由 version.props 的 VersionPrefix 控制。
若套件是 private,安裝端必須先準備一個具有 read:packages 權限的 GitHub PAT。
dotnet nuget add source \
--username <GITHUB_USERNAME> \
--password <PAT_WITH_READ_PACKAGES> \
--store-password-in-clear-text \
--name github-wtm \
"https://nuget.pkg.github.com/cct08311github/index.json"也可以在專案或使用者層級建立 NuGet.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="github-wtm" value="https://nuget.pkg.github.com/cct08311github/index.json" />
</packageSources>
<packageSourceCredentials>
<github-wtm>
<add key="Username" value="YOUR_GITHUB_USERNAME" />
<add key="ClearTextPassword" value="YOUR_PAT_WITH_READ_PACKAGES" />
</github-wtm>
</packageSourceCredentials>
</configuration>安裝指定版本:
dotnet add package WalkingTec.Mvvm.Core --version 8.2.1
dotnet add package WalkingTec.Mvvm.Mvc --version 8.2.1
dotnet add package WalkingTec.Mvvm.TagHelpers.LayUI --version 8.2.1如果你只依賴 MVC 入口,通常會由 WalkingTec.Mvvm.Mvc 連帶帶入其他相依;是否單獨安裝 Core 或 LayUI,取決於你的使用方式。
正式版建議先做完整建置與測試:
dotnet build WalkingTec.Mvvm.sln -c Release
dotnet test WalkingTec.Mvvm.sln -c Release然後打包:
dotnet pack src/WalkingTec.Mvvm.Core/WalkingTec.Mvvm.Core.csproj -c Release -o nupkgs
dotnet pack src/WalkingTec.Mvvm.TagHelpers.LayUI/WalkingTec.Mvvm.TagHelpers.LayUI.csproj -c Release -o nupkgs
dotnet pack src/WalkingTec.Mvvm.Mvc/WalkingTec.Mvvm.Mvc.csproj -c Release -o nupkgs輸出會在 nupkgs/:
WalkingTec.Mvvm.Core.<version>.nupkgWalkingTec.Mvvm.TagHelpers.LayUI.<version>.nupkgWalkingTec.Mvvm.Mvc.<version>.nupkg
直接修改 version.props:
<VersionPrefix>8.2.1</VersionPrefix>Release 組態下,最終 package version 會直接等於 VersionPrefix。
workflow dispatch 時可帶 version_suffix,例如:
alpha.20260306.1beta.1rc.1
組合後會變成:
8.2.1-alpha.20260306.18.2.1-beta.18.2.1-rc.1
本 repo 已內建 workflow:
它具備以下行為:
- 可手動觸發
workflow_dispatch - 可在 push tag
v*時自動觸發 - 使用
GITHUB_TOKEN發佈到 GitHub Packages - 目標 source 為
https://nuget.pkg.github.com/cct08311github/index.json
repo 內提供:
穩定版:
./scripts/release-github-package.sh 8.2.2預發布版:
./scripts/release-github-package.sh 8.2.2 beta.1預覽但不執行:
./scripts/release-github-package.sh --dry-run 8.2.2這個腳本會:
- 修改 version.props 的
VersionPrefix - 建立 release commit
- push 到
origin/dotnet8 - 觸發
publish-nuget.yml
補充:
- 若
VersionPrefix已經等於目標版本,腳本不會重複 commit,只會直接觸發發佈 workflow - 腳本會先檢查
gh auth是否已登入 --dry-run可用於確認版本、commit 與 workflow 參數,不會修改檔案
- 先把
VersionPrefix改到目標版本,例如8.2.1 - push 到遠端分支
- 在 GitHub Actions 手動執行
Publish NuGet to GitHub Packages version_suffix留空
- 保持
VersionPrefix為基礎版本,例如8.2.1 - 在 workflow dispatch 時填入
version_suffix - workflow 會自動組合最終版本號
也可以使用 tag 觸發:
git tag v8.2.1
git push origin v8.2.1注意:這個 workflow 目前只用 repo 內的 VersionPrefix 與 version_suffix 來決定版本號,tag 名稱本身不會覆寫 package version。
- GitHub Actions:使用
GITHUB_TOKEN,workflow 需有packages: write - 本機發佈:需要具有
write:packages的 PAT
- private package:需要具有
read:packages的 PAT
若要不用 Actions,直接從本機推送:
dotnet nuget add source \
--username <GITHUB_USERNAME> \
--password <PAT_WITH_WRITE_PACKAGES> \
--store-password-in-clear-text \
--name github-wtm \
"https://nuget.pkg.github.com/cct08311github/index.json"dotnet nuget push "nupkgs/*.nupkg" \
--source github-wtm \
--api-key <PAT_WITH_WRITE_PACKAGES> \
--skip-duplicate先確認:
- source 是否已加到
NuGet.Config - PAT 是否有
read:packages - package 是否授權給目前 repo 或使用者
NuGet package version 應視為不可變。若已發過:
- 穩定版請升 patch,例如
8.2.2 - 預發布版請改 suffix,例如
alpha.20260306.2
因為目前 workflow 的版本來源是 version.props 與 version_suffix,不是從 tag 名稱解析。