From 2c27754fa222f0a4dbd209ed102308a36474c22b Mon Sep 17 00:00:00 2001 From: cssho Date: Fri, 6 Nov 2026 23:43:52 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Dependabot=20=E3=81=A7=20NuGet=20=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8=E3=82=82=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E3=81=97=E3=80=81=E5=85=AC=E9=96=8B=E6=B8=88=E3=81=BF=E3=81=AE?= =?UTF-8?q?=202.0.0=20=E3=81=A8=20API=20=E4=BA=92=E6=8F=9B=E6=80=A7?= =?UTF-8?q?=E3=82=92=E6=AF=94=E8=BC=83=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dependabot に nuget を追加(SkiaSharp と NativeAssets はグループで一緒に更新) - PackageValidationBaselineVersion を 2.0.0 にし、公開 API の削除・変更を検出する - CLAUDE.md に上記と master のルールセットについて追記 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01HNb8H3hV3ndoRpyuu59g1u --- .github/dependabot.yml | 13 ++++++++++++- CLAUDE.md | 3 +++ Directory.Build.props | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d4ee88a..a1edc23 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,4 +1,4 @@ -# GitHub Actions のアクションの更新 +# GitHub Actions のアクションと NuGet パッケージの更新 # ワークフローは actions.lock でロックしているが、Dependabot は更新の PR でロックファイルも作り直す # 新しいリリースは、Dependabot の既定(cooldown 3日)で、リリースから3日経ってから更新する version: 2 @@ -7,3 +7,14 @@ updates: directory: / schedule: interval: weekly + + - package-ecosystem: nuget + directory: / + schedule: + interval: weekly + groups: + # SkiaSharp と、テスト用のネイティブライブラリ(NativeAssets)はバージョンを揃える必要がある + skiasharp: + patterns: + - SkiaSharp + - SkiaSharp.* diff --git a/CLAUDE.md b/CLAUDE.md index c32aad1..fff2bf3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,6 +43,9 @@ - ワークフローのアクションは `.github/workflows/actions.lock`(`gh actions-lock`)でコミットに固定している。`uses:` を追加・変更したら `gh actions-lock` でロックし直し、`gh actions-lock --verify` で確認してから、ロックファイルとワークフローを一緒にコミットする(ワークフローを編集すると、フックが `--verify-local` で漏れを知らせる)。JSON 出力は `--json=valid,findings` のように `=` でつなぐ(空白区切りだとパスとして解釈される)。 - CI の `verify-lockfile.yml` が PR・push・週1回でロックファイルを検証する。アクションの更新は Dependabot(`.github/dependabot.yml`、既定の cooldown でリリースから3日待つ)が、ロックファイルの作り直しも含めて PR にする。 - パッケージ作成時の検証(`EnablePackageValidation`)で、net8.0 版から netstandard2.0 版の公開 API が欠けているとエラー(CP0002)になる(net8.0 版にだけ API を足すのは検出しない)。 +- あわせて、公開済みのバージョン(`Directory.Build.props` の `PackageValidationBaselineVersion`)と比べて公開 API を削除・変更していないかも確認する。破壊的変更をするメジャーバージョンアップでは、この基準を外すか更新する。 +- NuGet パッケージの更新も Dependabot が PR にする。`SkiaSharp` とテスト用の `SkiaSharp.NativeAssets.Linux.NoDependencies` はバージョンを揃える必要があるので、グループにまとめて一緒に更新する。 +- master はルールセットで保護している(PR 経由のみ、CI の test 4 ジョブと verify-lockfile の成功が必須)。CI のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。 ## バーコード処理 diff --git a/Directory.Build.props b/Directory.Build.props index 7132875..1a2dd6a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -23,6 +23,11 @@ (#if で net8.0 版から API が欠けるとエラー CP0002。net8.0 版にだけ API を足すのは検出しない) --> true + + 2.0.0 From fa49f154887208fdf1530b79c3b6a3b4eeef4dc9 Mon Sep 17 00:00:00 2001 From: cssho Date: Fri, 6 Nov 2026 23:54:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CI=20=E3=81=AE=E3=83=97=E3=83=AC=E3=83=AA?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=82=B9=E7=89=88=E3=81=AE=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=202.0.0-ci.N=20=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.0.0-ci.N だとアセンブリのバージョンが基準の 2.0.0 より低く、 パッケージの検証で CP0003 エラーになっていた。 Directory.Build.props を VersionPrefix にし、タグ以外は VersionSuffix で ci.N を付ける。 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01HNb8H3hV3ndoRpyuu59g1u --- .github/workflows/build.yml | 9 +++++---- CLAUDE.md | 4 ++-- Directory.Build.props | 8 ++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e78267b..6c1e3eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,13 +43,14 @@ jobs: shell: bash run: | if [[ "$GITHUB_REF" == refs/tags/v* ]]; then - echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" + echo "args=-p:Version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" else - # タグ以外はプレリリース版(公開はしない) - echo "version=0.0.0-ci.${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT" + # タグ以外は Directory.Build.props の VersionPrefix のプレリリース版(公開はしない) + # 0.0.0 などにすると、公開済みバージョンとの API 互換性の確認でエラー(CP0003)になる + echo "args=-p:VersionSuffix=ci.${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT" fi - name: パッケージ作成 - run: dotnet pack ZipConvertCustomerBarCode.sln -c Release -o artifacts -p:Version=${{ steps.version.outputs.version }} + run: dotnet pack ZipConvertCustomerBarCode.sln -c Release -o artifacts ${{ steps.version.outputs.args }} - uses: actions/upload-artifact@v7.0.2 with: name: packages diff --git a/CLAUDE.md b/CLAUDE.md index fff2bf3..e214b3e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,13 +39,13 @@ - `.github/workflows/build.yml`: push・PR で Ubuntu と Windows × コアの両方のビルドをテストし、パッケージを作る。 - リリースは `v2.0.0` のようなタグを push すると、タグのバージョンで3パッケージを nuget.org に公開する(Trusted Publishing。ワークフローのファイル名 `build.yml` と Environment 名 `release` を nuget.org に登録しているので、どちらも名前を変えない)。nuget.org 側のポリシーは「新しいバージョンの追加のみ」なので、公開済みのバージョンは出し直せない(修正は次のバージョンで出す)。 -- 公開ジョブは GitHub の `release` Environment で動く(`v*` タグのみ、cssho の承認後に実行。Secret `NUGET_USER` もこの Environment にある)。`Directory.Build.props` の `Version` はローカル用で、公開時はタグが優先される。 +- 公開ジョブは GitHub の `release` Environment で動く(`v*` タグのみ、cssho の承認後に実行。Secret `NUGET_USER` もこの Environment にある)。`Directory.Build.props` の `VersionPrefix` はローカルと CI のプレリリース版(`2.0.0-ci.N`)用で、公開時はタグのバージョンが優先される。`VersionPrefix` は `PackageValidationBaselineVersion` 以上にしておく(低いとアセンブリのバージョンが基準より低くなり CP0003 エラー)。 - ワークフローのアクションは `.github/workflows/actions.lock`(`gh actions-lock`)でコミットに固定している。`uses:` を追加・変更したら `gh actions-lock` でロックし直し、`gh actions-lock --verify` で確認してから、ロックファイルとワークフローを一緒にコミットする(ワークフローを編集すると、フックが `--verify-local` で漏れを知らせる)。JSON 出力は `--json=valid,findings` のように `=` でつなぐ(空白区切りだとパスとして解釈される)。 - CI の `verify-lockfile.yml` が PR・push・週1回でロックファイルを検証する。アクションの更新は Dependabot(`.github/dependabot.yml`、既定の cooldown でリリースから3日待つ)が、ロックファイルの作り直しも含めて PR にする。 - パッケージ作成時の検証(`EnablePackageValidation`)で、net8.0 版から netstandard2.0 版の公開 API が欠けているとエラー(CP0002)になる(net8.0 版にだけ API を足すのは検出しない)。 - あわせて、公開済みのバージョン(`Directory.Build.props` の `PackageValidationBaselineVersion`)と比べて公開 API を削除・変更していないかも確認する。破壊的変更をするメジャーバージョンアップでは、この基準を外すか更新する。 - NuGet パッケージの更新も Dependabot が PR にする。`SkiaSharp` とテスト用の `SkiaSharp.NativeAssets.Linux.NoDependencies` はバージョンを揃える必要があるので、グループにまとめて一緒に更新する。 -- master はルールセットで保護している(PR 経由のみ、CI の test 4 ジョブと verify-lockfile の成功が必須)。CI のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。 +- master はルールセットで保護している(PR 経由のみ、CI の test 4 ジョブ・pack・verify-lockfile の成功が必須)。CI のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。 ## バーコード処理 diff --git a/Directory.Build.props b/Directory.Build.props index 1a2dd6a..7eaff55 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,8 +1,12 @@ - - 2.0.0 + + 2.0.0 cssho ZipConvertCustomerBarCode Copyright (c) 2015 cssho