簡體   English   中英

使用 powershell 將多個 nupkg 文件推送到 Github 包?

[英]Push multiple nupkg files to Github Packages using powershell?

We are consolidating on Github, and I am looking into how to get one of our C# projects to build using Github Actions, and push the generated nuget packages to Github Packages. 我的測試項目生成了大約 15 個包。

看來“dotnet nuget push”命令只支持一次推送一個文件,所以我正在嘗試編寫一個 powershell 腳本,該腳本與此 Z2591C98B70119FE624898B1E424BE 命令大致相同

find . -name '*.nupkg' -exec '/usr/bin/echo' 'dotnet nuget push "{}" --source github' ';' | sh -v -

換句話說,為找到的每個 nupkg 文件生成一個“dotnet nuget push "..." --source github" 命令。

到目前為止,我已經找到了 powershell 命令Get-Childitem -Path. -Recurse -Include *.nupkg Get-Childitem -Path. -Recurse -Include *.nupkg據我所知獲取文件,但我需要“在文件上執行命令”位。 我還希望在執行之前也回顯執行的命令,類似於“-v”標志的作用。

此外,如果有更簡單的方法可以做到這一點(其他人之前一定遇到過這個問題並且更優雅地解決了它)我會考慮改為。

謝謝。

如何

要推送到 nuget.org,您應該能夠使用以下命令:

dotnet nuget push "**/*.nupkg" --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.PUBLISH_TO_NUGET_ORG }} --skip-duplicate

要推送到您的 github.com 提要,您應該能夠使用以下命令,您應該會發現該命令始終有效(也適用於更大的 nuget 包,例如多目標包):

nuget.exe push "**/*.nupkg" -NoSymbols -SkipDuplicate

如果您使用 GitHub 操作,

name: .NET Core

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: windows-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2
    
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1.7.2
      with:
        dotnet-version: 3.1.301
        # Authenticates packages to push to GPR
        source-url: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json
      env:
        NUGET_AUTH_TOKEN: '%NUGET_AUTH_TOKEN%'
    
    - name: Setup MSBuild
      uses: microsoft/setup-msbuild@v1.0.2
    
    - name: Install dependencies
      run: msbuild /t:Restore
      env:
        NUGET_AUTH_TOKEN: ${{ github.token }}
    
    - name: Build
      run: |
        msbuild /t:Pack /p:Configuration=Debug Library/MintPlayer.MVVM/MintPlayer.MVVM.csproj
        dotnet pack Library\MintPlayer.MVVM.BaseModel\MintPlayer.MVVM.BaseModel.csproj --configuration=Release
    
    - name: PushNuget
      run: dotnet nuget push "**/*.nupkg" --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.PUBLISH_TO_NUGET_ORG }} --skip-duplicate
    
    - name: PushGithub
      run: nuget.exe push "**/*.nupkg" -NoSymbols -SkipDuplicate
      env:
        NUGET_AUTH_TOKEN: ${{ github.token }}

目前 github.com 沒有符號服務器,因此使用-NoSymbols標志。

這里的慣用解決方案是 pipe 生成的文件信息對象到ForEach-Object

Get-ChildItem -Path . -Recurse -Filter *.nupkg |ForEach-Object {
  Write-Host "About to push a package named '$($_.Name)'..." 
  dotnet nuget push $_.FullName --source github
}

ForEach-Object塊中, $_指的是當前正在處理/迭代的單個項目。

請注意,大多數 PowerShell cmdlet 返回復雜對象(與基於字符串的輸出相反) - 因此$_.FullName表達式 - FullName屬性包含相關文件的根路徑(即C:\path\to\package.nupkg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM