我有以下 github Actions 脚本要部署到 NuGet:
name: NuGet Publish
on:
push:
tags:
- 'v*.*.*' # Specify the tag pattern, e.g., 'v1.0.0'
jobs:
deploy:
name: Deploy
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
- uses: actions/cache@v2
id: cacheStep
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Restore dependencies
run: dotnet restore
- name: Setup NuGet.exe for use with actions
uses: NuGet/[email protected]
- name: Restore NuGet
if: steps.cacheStep.outputs.cache-hit != 'true'
run: nuget restore Octane.sln
- name: Set VERSION variable from tag
run: echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
- name: Build
run: dotnet build OctaneEngine/OctaneEngine.csproj --no-restore --configuration Release /p:Version=${VERSION} /p:AssemblyVersion=${VERSION}
- name: Publish NuGet package
run: dotnet nuget push OctaneEngine/bin/Release/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} /p:Version=${VERSION}
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
此代码在构建步骤中失败并给出错误:
MSB4044:“GenerateDepsFile”任务未给出所需参数“AssemblyVersion”的值
我也尝试在脚本中手动指定这一点,但仍然没有解决。我在 .csproj 文件中禁用了GenerateAssemblyInfo,并定义了默认程序集版本1.0.0.0。
您正在使用 Windows 运行程序 (
windows-latest
) 及其默认 shell,即 pwsh(截至目前为 PowerShell 7.2.17)。您应该使用您正在使用的运行程序的相应 shell 支持的 run
部分下的命令。
以下语法用于访问PowerShell下的环境变量:
$Env:<variable-name>
您需要更新工作流程中所有环境变量的语法:
$GITHUB_REF
=> $Env:GITHUB_REF
GITHUB_REF_NAME
代替,即 $Env:GITHUB_REF_NAME
TrimStart("v")
来修剪 v
前缀$GITHUB_ENV
=> $Env:GITHUB_ENV
$VERSION
=> $Env:VERSION
合并这些更改后,您的步骤将如下所示:
- name: Set VERSION variable from tag
run: |
$VERSION=$Env:GITHUB_REF_NAME.TrimStart("v")
echo "VERSION=$VERSION" >> $Env:GITHUB_ENV
- name: Build
run: dotnet build OctaneEngine/OctaneEngine.csproj --no-restore --configuration Release /p:Version=$Env:VERSION /p:AssemblyVersion=$Env:VERSION
- name: Publish NuGet package
run: dotnet nuget push OctaneEngine/bin/Release/*.nupkg --source https://api.nuget.org/v3/index.json --api-key $Env:NUGET_API_KEY /p:Version=$Env:VERSION
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
在 GitHub Actions 工作流程中,您可以使用以下方法设置
VERSION
变量:
- name: Set VERSION variable from tag
run: echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
这会在环境中设置
VERSION
变量。但是,环境变量在后续步骤中不会自动可用。
您需要在同一步骤中加载环境变量或在后续步骤中使用它。因此,您应该修改构建步骤以正确使用
VERSION
变量。
下一步应该修改为包含如下所示的
env
部分来声明所需的变量:
- name: Build
run: dotnet build OctaneEngine/OctaneEngine.csproj --no-restore --configuration Release /p:Version=${VERSION} /p:AssemblyVersion=${VERSION}
env:
VERSION: ${{ env.VERSION }}
考虑到上述情况,
Publish NuGet package
步骤也需要修改:
- name: Publish NuGet package
run: dotnet nuget push OctaneEngine/bin/Release/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_API_KEY} /p:Version=${VERSION}
env:
VERSION: ${{ env.VERSION }}
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}