Skip to content

Commit 0fa6c28

Browse files
committed
feat: GitHub Actions で .NET ビルドを自動化
1 parent 3d1963c commit 0fa6c28

3 files changed

Lines changed: 88 additions & 14 deletions

File tree

.github/workflows/dotnet.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Build and Test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: read
14+
15+
jobs:
16+
build:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 0
23+
24+
- name: Set up .NET
25+
uses: actions/setup-dotnet@v4
26+
with:
27+
global-json-file: global.json
28+
29+
- name: Cache NuGet packages
30+
uses: actions/cache@v4
31+
with:
32+
path: ~/.nuget/packages
33+
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
34+
restore-keys: |
35+
${{ runner.os }}-nuget-
36+
37+
- name: Restore dependencies
38+
run: dotnet restore FolderDiffIL4DotNet.sln
39+
40+
- name: Build
41+
run: dotnet build FolderDiffIL4DotNet.sln --configuration Release --no-restore
42+
43+
- name: Test
44+
if: ${{ hashFiles('**/*Tests.csproj', '**/*.Tests.csproj') != '' }}
45+
run: dotnet test FolderDiffIL4DotNet.sln --configuration Release --no-build --nologo
46+
47+
- name: Publish
48+
run: dotnet publish FolderDiffIL4DotNet.csproj --configuration Release --no-build --output publish
49+
50+
- name: Remove debugging symbols
51+
run: find publish -name '*.pdb' -delete
52+
53+
- name: Upload artifact
54+
uses: actions/upload-artifact@v4
55+
with:
56+
name: FolderDiffIL4DotNet
57+
path: publish/**

README.md

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
2つのフォルダの差分をレポート出力するコンソールアプリケーションです。.NET アセンブリに関してはビルド固有情報(例: MVID)が存在する場合はこれを除外して IL 比較するため、ビルド日時が異なっていても実質同じ挙動であれば同一と判定します。
44

5-
## 必要環境
6-
7-
- .NET SDK 8.x
8-
- macOS/Windows/Linuxで動作
5+
## 必要環境
6+
7+
- .NET SDK 8.x
8+
- macOS/Windows/Linuxで動作
99
- IL 逆アセンブラ(自動で候補順に試行します)
1010
- 優先: `dotnet-ildasm` または `dotnet ildasm`
1111
- 代替: `ilspycmd`
@@ -18,15 +18,32 @@ dotnet tool install --global dotnet-ildasm
1818
# Windows: %USERPROFILE%\.dotnet\tools を PATH に追加
1919
```
2020
```bash
21-
dotnet tool install -g ilspycmd
22-
# 必要に応じて PATH に追加
23-
# macOS/Linux: $HOME/.dotnet/tools を PATH に追加
24-
# Windows: %USERPROFILE%\.dotnet\tools を PATH に追加
25-
```
26-
27-
## 処理概要
28-
29-
- 旧バージョン側(比較元)と新バージョン側(比較先)のフォルダ(コマンドライン第1引数と第2引数に指定)の内容を再帰的に比較
21+
dotnet tool install -g ilspycmd
22+
# 必要に応じて PATH に追加
23+
# macOS/Linux: $HOME/.dotnet/tools を PATH に追加
24+
# Windows: %USERPROFILE%\.dotnet\tools を PATH に追加
25+
```
26+
27+
## CI (GitHub Actions)
28+
29+
リポジトリには GitHub Actions 用のワークフロー(`.github/workflows/dotnet.yml`)を用意しています。`main` ブランチへの push / pull request で自動実行され、`workflow_dispatch` から手動でも起動できます。
30+
31+
- `actions/checkout``fetch-depth: 0` で完全な履歴を取得し、Nerdbank.GitVersioning がコミット履歴を参照できるようにしています。
32+
- `actions/setup-dotnet``global.json` を読み取り、ローカルと同じ .NET SDK (例: 8.0.413) をインストールしたうえで `dotnet restore` と Release ビルドを実行します。
33+
- `**/*Tests.csproj` または `**/*.Tests.csproj` が存在する場合のみ `dotnet test` を動かします(現時点でテスト プロジェクトがないリポジトリでも失敗しません)。
34+
- `actions/cache` で NuGet(`~/.nuget/packages`)をキャッシュし、2 回目以降のビルドを高速化します。
35+
- Release ビルドの成果物は `dotnet publish FolderDiffIL4DotNet.csproj --output publish` で生成し、アップロード前に `*.pdb` などのデバッグシンボルを削除したうえで、`actions/upload-artifact` により `FolderDiffIL4DotNet` という名前でアップロードされます(Actions 実行ページの「Artifacts」からダウンロードできます)。
36+
37+
利用手順:
38+
39+
1. このリポジトリを GitHub に push するだけでワークフローが動きます。
40+
2. デフォルトブランチ名が `main` 以外の場合は、`.github/workflows/dotnet.yml` 内の `on.push.branches``on.pull_request.branches` を目的のブランチ名に変更してください。
41+
3. テスト プロジェクトを追加したらファイル名に `Tests` を含めるか、必要に応じて `Test` ステップの条件式を調整してください。
42+
4. 作成された成果物は Actions 実行ページの `Artifacts > FolderDiffIL4DotNet` から取得できます。アーカイブ内には Release ビルド済みのファイル一式が含まれます。
43+
44+
## 処理概要
45+
46+
- 旧バージョン側(比較元)と新バージョン側(比較先)のフォルダ(コマンドライン第1引数と第2引数に指定)の内容を再帰的に比較
3047
- ファイルごとに一致/不一致及びその判定根拠(以下)を記録
3148
- MD5Match: MD5ハッシュが一致
3249
- MD5Mismatch: MD5ハッシュが不一致

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
3-
"version": "1.1.3",
3+
"version": "1.1.4",
44
"publicReleaseRefSpec": [
55
"^refs/heads/main$",
66
"^refs/tags/v\\d+\\.\\d+(?:\\.\\d+)?$"

0 commit comments

Comments
 (0)