🔧
GitHub Actions で Visual Studio プロジェクトをビルド配布
概要
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 を使いこなせるようになりたいという気持ちがちょっと大きくなりました。こうしたほうがいいとかあれば教えて下さい!
Discussion