簡體   English   中英

如何在使用 Github 操作進行發布時簽署 nuget package

[英]How to sign a nuget package while using Github actions for publishing

We were using successfully Github actions for publishing one of our Nuget packages, and recently our company published another package on our Nuget organization account which is signed and it's managed by another team. so suddenly we noticed our Github publish actions aren't working anymore because our package is not signed and due to Nuget rules if one package is signed under an organization then all the future publishes must use signed packages.

我們試圖找到一種使用 Github 操作的方法,但我們無法在線找到任何示例或教程。

現在我們又開始手動發布 package,有人知道如何使用 Github 操作簽署和發布 package 嗎? package 是開源的,因此必須有辦法將證書保密,而不是在公共存儲庫中。

這是我們的行動:

name: Publish Nuget Package When Pre-Released

on:
  release:
    types: [prereleased]

jobs:
  build:
    runs-on: ubuntu-latest

    env:
      BUILD_CONFIG: 'Release'
      PROJECT: 'src/OpenAPI.Net/OpenAPI.Net.csproj'

    steps:
    - uses: actions/checkout@v2

    - name: Setup NuGet
      uses: NuGet/setup-nuget@v1.0.5
      with:
        nuget-api-key: ${{secrets.NUGET_API_KEY}}
        nuget-version: 'latest'

    - name: Restore dependencies
      run: nuget restore $PROJECT

    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '6.0.x'

    - name: Build
      run: dotnet build $PROJECT --configuration $BUILD_CONFIG --no-restore
    
    - name: Set Execution Permission For decrypt_certificate.sh
      run: chmod +x ./decrypt_certificate.sh

    - name: Decrypt Certificate
      run: ./decrypt_certificate.sh
      env:
          CERTIFICATE_GPG_PASSPHRASE: ${{secrets.CERTIFICATE_GPG_PASSPHRASE}}

    - name: Importing Certificate
      run: sudo cp $HOME/secrets/certificate.pfx /usr/share/ca-certificates/certificate.pfx ; sudo dpkg-reconfigure ca-certificates ; sudo update-ca-certificates ; git config --global http.sslCAInfo /usr/share/ca-certificates/certificate.pfx

    - name: Sign Package
      run: nuget sign **\*.nupkg -CertificatePath $HOME/secrets/certificate.pfx -Timestamper http://timestamp.digicert.com/ -CertificatePassword ${{secrets.CERTIFICATE_PASSWORD}} -NonInteractive

    - name: Publish Package
      run: nuget push **\*.nupkg -Source 'https://api.nuget.org/v3/index.json'

    - name: Publish Symbols
      run: nuget push **\*.snupkg -Source 'https://api.nuget.org/v3/index.json'


它在 Sign Package 步驟中失敗並出現以下錯誤:

NU3018:部分鏈:部分鏈

警告:NU3018:RevocationStatusUnknown:RevocationStatusUnknown

警告:NU3018:OfflineRevocation:OfflineRevocation

NU3018:證書鏈驗證失敗。

錯誤:進程已完成,退出代碼為 1。

我們使用 GPG 加密證書文件,然后根據 Github 機密文檔對其進行解密,它工作正常。

我在我的本地系統上使用了相同的證書,它工作正常,我已經使用這個證書發布了我們的 package 的幾個版本。

我們發現了這個問題,看起來 PFX 文件不適用於 Linux。

所以我們決定在 Windows 上運行該操作,但是沒有內置的證書解密工具,我們使用 AES 開發了自己的工具。

這是一個輕量級的 .NET 加密/解密工具,用於加密本地系統上的證書文件,然后使用該工具在 Github 操作中解密回加密文件。

它使用 AES,Github 存儲庫: https://github.com/afhacker/FileEncrypt/

我們能夠使用它在 Nuget 上成功發布 package,現在一切正常!

如果您遇到類似問題,請查看 FileEncrypt 自述文件。

暫無
暫無

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

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