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/.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 c32aad1..e214b3e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,10 +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 ジョブ・pack・verify-lockfile の成功が必須)。CI のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。 ## バーコード処理 diff --git a/Directory.Build.props b/Directory.Build.props index 7132875..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 @@ -23,6 +27,11 @@ (#if で net8.0 版から API が欠けるとエラー CP0002。net8.0 版にだけ API を足すのは検出しない) --> true + + 2.0.0