Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# GitHub Actions のアクションの更新
# GitHub Actions のアクションと NuGet パッケージの更新
# ワークフローは actions.lock でロックしているが、Dependabot は更新の PR でロックファイルも作り直す
# 新しいリリースは、Dependabot の既定(cooldown 3日)で、リリースから3日経ってから更新する
version: 2
Expand All @@ -7,3 +7,14 @@ updates:
directory: /
schedule:
interval: weekly

- package-ecosystem: nuget
directory: /
schedule:
interval: weekly
groups:
# SkiaSharp と、テスト用のネイティブライブラリ(NativeAssets)はバージョンを揃える必要がある
skiasharp:
patterns:
- SkiaSharp
- SkiaSharp.*
9 changes: 5 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 4 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。

## バーコード処理

Expand Down
13 changes: 11 additions & 2 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
<Project>

<PropertyGroup>
<!-- CI ではタグ(v2.0.0 など)のバージョンを -p:Version で指定する -->
<Version>2.0.0</Version>
<!--
CI では、タグ(v2.0.0 など)のときはタグのバージョンを -p:Version で指定し、
それ以外は -p:VersionSuffix=ci.N でプレリリース版(2.0.0-ci.N)にする。
アセンブリのバージョンがここから決まり、PackageValidationBaselineVersion 以上である必要がある
-->
<VersionPrefix>2.0.0</VersionPrefix>
<Authors>cssho</Authors>
<Product>ZipConvertCustomerBarCode</Product>
<Copyright>Copyright (c) 2015 cssho</Copyright>
Expand All @@ -23,6 +27,11 @@
(#if で net8.0 版から API が欠けるとエラー CP0002。net8.0 版にだけ API を足すのは検出しない)
-->
<EnablePackageValidation>true</EnablePackageValidation>
<!--
nuget.org に公開済みのバージョンと比べて、公開 API を削除・変更していないかも確認する
(破壊的変更をするメジャーバージョンアップでは、この基準を外すか更新する)
-->
<PackageValidationBaselineVersion>2.0.0</PackageValidationBaselineVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
Expand Down
Loading