🔧

GitHub Actions で Visual Studio プロジェクトをビルド配布

2024/06/12に公開

概要

Windows のコンソールアプリを Visual Studio で作ることがあって、GitHub に Push するたびに ビルドしたバイナリが Release から自動で配布されるようにしたくなりました!

書いていく

.github/workflows/msbuild.ymlを作成します。

Visual Studio プロジェクトのビルドにはmicrosoft/setup-msbuildという GitHub Action を使用します。以下がテンプレです。GitHub → Actions から MSBuild based project という Workflow を選んだのと同じ内容です。

name: MSBuild

on:
  push:
    branches: ["main"]

  pull_request:
    branches: ["main"]

env:
  SOLUTION_FILE_PATH: .

  BUILD_CONFIGURATION: Release

permissions:
  contents: read

jobs:
  build:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v4

      - name: Add MSBuild to PATH
        uses: microsoft/setup-msbuild@v1.0.2

      - name: Restore NuGet packages
        working-directory: ${{env.GITHUB_WORKSPACE}}
        run: nuget restore ${{env.SOLUTION_FILE_PATH}}

      - name: Build
        working-directory: ${{env.GITHUB_WORKSPACE}}
        run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}}

これで、.\x64\Releaseに exe ファイルが生成されるようになります。

リリースを作成する

softprops/action-gh-release という GitHub Action を使って、ワークフロー内でリリースを作成できます。

steps の末尾に新たに追加します。

  steps:
    ...
+   - name: Rename
+     run: mv .\x64\Release\*.exe ${{github.event.repository.name}}-${{github.ref_name}}.exe
+
+   - name: Release
+     uses: softprops/action-gh-release@v2
+     with:
+       files: ${{github.event.repository.name}}-${{github.ref_name}}.exe

先にファイル名をreponame-v1.0.0.exeのような形に変更しておき、with: files: ファイル名とすることでリリースの Assets に新たに exe ファイルが追加されます。

いろいろ調整する

リリースにはタグが必須とのことで、タグが付与されているプッシュのみトリガーされるように変更します。

  on:
    push:
-     branches: ["main"]
+     tags:
+       - "v*.*.*"

-   pull_request:
-     branches: ["main"]

mv でファイルの書き込みを行うので、permissions で書き込み権限を付与します。

  permissions:
-   contents: read
+   contents: write

最終的にはこうなります。

name: MSBuild

on:
  push:
    tags:
      - "v*.*.*"

env:
  SOLUTION_FILE_PATH: .

  BUILD_CONFIGURATION: Release

permissions:
  contents: write

jobs:
  build:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v4

      - name: Add MSBuild to PATH
        uses: microsoft/setup-msbuild@v1.0.2

      - name: Restore NuGet packages
        working-directory: ${{env.GITHUB_WORKSPACE}}
        run: nuget restore ${{env.SOLUTION_FILE_PATH}}

      - name: Build
        working-directory: ${{env.GITHUB_WORKSPACE}}
        run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}}

      - name: Rename
        run: mv .\x64\Release\*.exe ${{github.event.repository.name}}-${{github.ref_name}}.exe

      - name: Release
        uses: softprops/action-gh-release@v2
        with:
          files: ${{github.event.repository.name}}-${{github.ref_name}}.exe

おわりに

GitHub Actions を使いこなせるようになりたいという気持ちがちょっと大きくなりました。こうしたほうがいいとかあれば教えて下さい!

GitHubで編集を提案

Discussion