最近使用的一个 C++ DLL 项目没有官方发布版本,只能自己手搓,实现同步上游更新自动发布版本

直接使用 microsoft/setup-msbuild 即可,示例 workflow 文件如下

name: Publish

on:
  workflow_dispatch:
  push:
    branches: [ branch-name-here ]
    paths-ignore:
      - '**/**.md'
      - '.github/**'

jobs:
  publish:
    name: Publish the app
    runs-on: windows-latest
    permissions:
      contents: write

    steps:
    - name: Checkout source code
      uses: actions/checkout@v4
    
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v2
    
    - name: Publish
      shell: pwsh
      run: |
        Set-Location "$env:GITHUB_WORKSPACE"
        MSBuild Solution-name.sln /p:configuration=Release /p:platform=x64 /nologo
        ls .\path\to\publish\folder
        Compress-Archive -Path ".\path\to\publish\folder" -DestinationPath "build.zip"

    - name: Create Release
      uses: "marvinpinto/action-automatic-releases@latest"
      with:
        repo_token: "${{ secrets.GITHUB_TOKEN }}"
        automatic_release_tag: "latest"
        prerelease: false
        files: ./build.zip

 

问题描述

自托管 Runner 在运行 setup-dotnet 时出错,查看日志有错误信息

mkdir: cannot create directory '/usr/share/dotnet': Permission denied

无法创建目录所以无法安装 dotnet

解决方法

在 setup-dotnet 的 issue 有相关讨论,但官方还没有计划解决

目前可以通过手动设置 dotnet 的安装目录来规避此问题

编辑 Actions 的配置文件,在任务下添加 env 环境变量,并设置 DOTNET_INSTALL_DIR 值

jobs:
  job1:
    name: very important job
    runs-on: [self-hosted]
    env:
        DOTNET_INSTALL_DIR: "$HOME/.dotnet"