SuperAPI AI 工具集

dotnet-gha-publish

设计与创作

查看项目

更新于 10-16 02:33

技能介绍

用途:为 .NET 项目在 GitHub Actions 中编排发布流程,覆盖 NuGet 包推送、容器镜像构建与推送、产物签名、SBOM 生成,以及基于标签或 Release 的条件发布。

主要能力:NuGet 包推送到 nuget.org 和 GitHub Packages;容器镜像构建并推送到 GHCR、DockerHub、ACR;使用 NuGet 签名和 sigstore 对产物签名;使用 Microsoft SBOM 工具生成 SBOM;按标签和 Release 触发条件发布。版本假设:actions/setup-dotnet@v4 用于 .NET 8/9/10,docker/build-push-action@v6 用于镜像构建,docker/login-action@v3 用于仓库认证,dotnet publish 配合 PublishContainer 实现无 Dockerfile 的容器构建。

使用方式:以标签触发为例,工作流在 push tags 为 v* 时运行,用 actions/checkout@v4 检出,setup-dotnet 安装 SDK,从标签提取版本后执行 dotnet pack 打包,再用 dotnet nuget push 推送,命令为 dotnet nuget push ./nupkgs/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate。推送到 GitHub Packages 时 source 改为 https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json,api-key 用 ${{ secrets.GITHUB_TOKEN }}。容器镜像可用 docker/build-push-action@v6 构建推送,或用 SDK 容器发布:dotnet publish src/MyApp/MyApp.csproj -c Release -p:PublishProfile=DefaultContainer -p:ContainerRegistry=ghcr.io -p:ContainerRepository=${{ github.repository }}。签名可用 dotnet nuget sign 配合证书,或 cosign sign --yes 做无密钥签名;SBOM 可用 microsoft/sbom-action@v0 或 anchore/sbom-action@v0 生成。

适用场景:需要从 GitHub Actions 自动发布 .NET 库、容器镜像并附带签名与 SBOM 的项目。

限制:不涵盖容器镜像编写(Dockerfile、基础镜像选择)、Native AOT MSBuild 配置、CLI 发布流水线、入门 CI 模板、Azure DevOps 发布以及目标环境部署。注意事项:dotnet nuget push 应始终加 --skip-duplicate 以保证幂等;不要硬编码 API 密钥;多行 bash 步骤使用 set -euo pipefail;签名证书需在 if: always() 步骤中清理;SDK 容器发布需要运行器上有 Docker;AOT 发布需匹配 RID;标签触发的工作流不会在 PR 上运行。GHCR 认证使用 GITHUB_TOKEN 而非 PAT。