Skip to content

Commit 28d062e

Browse files
Merge pull request #535 from OpenTouryoProject/3rd_agent
3rd agent
2 parents 8f9141d + d34937a commit 28d062e

4 files changed

Lines changed: 271 additions & 1 deletion

File tree

.github/secret_scanning.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# --------------------------------------------------
2+
# Secret scanning のアラートから除外するパス
3+
#
4+
# ここに書いたパスは「アラートを出さない」だけである。
5+
# **Push protection には効かない。** Push protection は除外設定を見ず、
6+
# 検知したら push を止める(通したい場合はバイパスする)。
7+
#
8+
# したがって本ファイルの目的は、
9+
# **テスト専用の資材で Security タブが埋まり、本物が見えなくなるのを防ぐこと**にある。
10+
#
11+
# 参考: https://docs.github.com/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/excluding-folders-and-files-from-secret-scanning
12+
# --------------------------------------------------
13+
paths-ignore:
14+
15+
# --------------------------------------------------
16+
# 暗号・署名テスト用の証明書と秘密鍵(19 件)
17+
#
18+
# Public.Security(JWT / JWS / JWE / 鍵交換 / X.509)のテストと、
19+
# サンプルの SSL/TLS・クライアント証明書認証で使う。
20+
# **すべてテスト専用の自己署名で、実運用の証明書は含まない。**
21+
#
22+
# 実体は次で参照される。
23+
# Frameworks/Tests/EncAndDecUtil, EncAndDecUtilCUI
24+
# Frameworks/Tests/TestCode
25+
# Samples/WS_sample ほか
26+
# --------------------------------------------------
27+
- "root/files/resource/X509/**"
28+
29+
# --------------------------------------------------
30+
# ClickOnce の署名用(テンポラリ キー)
31+
#
32+
# WSClientWinCone_sample.csproj が拇印で証明書ストアを検索するため、
33+
# 当該証明書が無い環境ではビルドできない(BUILDING.md 4 節)。
34+
# 検証 3 本では MSB3482 / MSB3325 / MSB3321 を既知として除外している。
35+
# --------------------------------------------------
36+
- "root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample_TemporaryKey.pfx"
37+
38+
# --------------------------------------------------
39+
# ここに足していないもの、と その理由
40+
#
41+
# ・テスト・サンプルの接続文字列(Password= を含む app.config / appsettings.json、49 件)
42+
# Non-provider patterns(汎用のパスワードらしき文字列)を**無効のまま**にしていれば
43+
# 検知されない。既定は無効。
44+
# 広く paths-ignore に足すと、本物を取りこぼす側のリスクが上がるため入れない。
45+
#
46+
# ・Frameworks/Tests/** や Samples/** をまとめて除外すること
47+
# 範囲が広すぎる。**本物のキーを誤って置いたときに気付けなくなる。**
48+
# 除外は「中身が分かっているファイル」に限る。
49+
# --------------------------------------------------

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ https://github.com/OpenTouryoProject/OpenTouryo/
1313
"プルリクエスト" の粒度は、人もエージェントも同じ規約による。
1414
本書は、そこに書かれていない**エージェント固有の制約**を扱う。
1515

16+
> **手順を思い出したいだけなら [`CHEATSHEET.md`](root/programs/CHEATSHEET.md) を見る。**
17+
> 検証・リリース・VB ビルド・ツール・規約の要点と、よく踏む落とし穴を 1 枚にまとめてある。
18+
> **理由や判断が要ることは書いていない**ので、迷ったらそこからリンク先へ辿ること。
19+
1620
### Git 操作は行わない(状態を変える操作をしない)
1721

1822
**成果物の検収は人が行う。** エージェントは作業結果をワーキング ツリーに残すところまでを担当し、
@@ -99,6 +103,7 @@ Copyright ブロックの扱い、`ArgumentException` 系の引数の順、`.bat
99103

100104
| 目的 | 読む文書 |
101105
|---|---|
106+
| **手順だけを引く(早見)** | [`CHEATSHEET.md`](root/programs/CHEATSHEET.md) |
102107
| リリース時の作業全体 | [`RELEASE.md`](root/programs/RELEASE.md) |
103108
| 全ビルドの実行と判定 | [`BUILDING.md`](root/programs/BUILDING.md) |
104109
| 単体テストの実行と判定 | [`TESTING.md`](root/programs/TESTING.md) |

root/programs/CHEATSHEET.md

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
# チートシート
2+
3+
**手順だけを並べたもの。** 理由・詳細・落とし穴の背景は、各項のリンク先が一次情報。
4+
5+
> ここは**意図的に二重管理**している。手順は「思い出すため」に転記し、
6+
> **判断が要ることは書かない。** 迷ったらリンク先を読むこと。
7+
8+
---
9+
10+
## 1. 検証(変更したら必ず)
11+
12+
```powershell
13+
cd root\programs
14+
.\0_RunAll.ps1 # 1 → 2 → 3 を順に実行する
15+
```
16+
17+
個別に回すとき。**順序は固定**(1 のクリーンとアセンブリ配置が 2・3 の前提)。
18+
19+
```powershell
20+
.\1_BuildAll.ps1 -IgnoreErrors 'error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj'
21+
.\2_RunAllTests.ps1
22+
.\3_SmokeTest.ps1
23+
```
24+
25+
| | 合格の目安 | 詳細 |
26+
|---|---|---|
27+
| ビルド | 全ステップ OK | [`BUILDING.md`](BUILDING.md) |
28+
| 単体テスト | 8/8 OK、差分 0 | [`TESTING.md`](TESTING.md) |
29+
| 疎通 | 22/22 OK | [`SMOKETEST.md`](SMOKETEST.md) |
30+
31+
- **`-IgnoreErrors` を付けないと `MSB3482` で NG になる。** ClickOnce の署名で、
32+
証明書が無い環境では必ず出る([`BUILDING.md`](BUILDING.md) 4 節)。
33+
**`0_RunAll.ps1` はこれを渡さない**ので、`1_BuildAll.ps1``1` を返すことがある。
34+
終了コードだけで判断せず、エラー一覧の内容を見ること
35+
- `2_RunAllTests.ps1``Result*.txt` を書き換える。**差分 0 なら中身は同じ**
36+
- 前提(DB・サービス・IIS Express)は [`RELEASE.md`](RELEASE.md) 2 節
37+
38+
---
39+
40+
## 2. リリース(NuGet 公開)
41+
42+
**一次情報は [`RELEASE.md`](RELEASE.md)[`CS/NuGet/README.md`](CS/NuGet/README.md)**
43+
44+
```
45+
1. develop → master へマージ(--no-ff)し、タグをプッシュ
46+
2. .\0_SetVersion.ps1 -Version 3.3.0
47+
3. コミット & push ← Source Link はこのコミットに固定される
48+
4. CS\0_Release4Nuget.bat ← 版はアセンブリに焼き込まれる
49+
5. CS\NuGet\_NuGetPack.bat ← 版の一致(ソース・DLL)を自動検査
50+
6. 確認 5 点 ← README.md 2 節
51+
7. set NUGET_API_KEY=<キー>
52+
CS\NuGet\out\sp\_NuGetPush.bat
53+
8. キーを Revoke(Delete しない)
54+
```
55+
56+
### バージョンを上げる
57+
58+
```powershell
59+
cd root\programs
60+
.\0_SetVersion.ps1 -Version 3.3.0-alpha1 -WhatIf # 変更内容の確認
61+
.\0_SetVersion.ps1 -Version 3.3.0-alpha1 # 実行
62+
```
63+
64+
`Directory.Build.props` と net48 6 本の `AssemblyInfo.cs` を一括更新する。
65+
**プレリリース サフィックスはアセンブリの版には入らない。**
66+
[`RELEASE.md`](RELEASE.md) フェーズ 0
67+
68+
### 公開前の確認 5 点
69+
70+
[`CS/NuGet/README.md`](CS/NuGet/README.md) 2 節
71+
72+
```
73+
1. .nupkg と .snupkg が対で出ている(.nupkg に pdb が入っていない)
74+
2. PDB が portable(先頭 4 バイトが BSJB)
75+
3. Source Link の URL が入っている(net48 と net10.0 の両方)
76+
4. nuspec の <repository commit> が PDB のコミットと一致
77+
5. そのコミットが GitHub 上にある(raw URL が 200)+ ワーキング ツリーが綺麗
78+
```
79+
80+
### テスト公開(`Erutcurtsarfni.Oyruot.Public`
81+
82+
```
83+
CS\0_Release4Nuget.bat
84+
CS\NuGet\_T_NuGetPack.bat 3.3.0-alpha2 ← 版は引数で渡す
85+
set NUGET_API_KEY=<キー>
86+
CS\NuGet\out\sp\_T_NuGetPush.bat
87+
```
88+
89+
作業ブランチ上で行ってよい。→ [`CS/NuGet/README.md`](CS/NuGet/README.md) 4 節
90+
91+
### 生成物を消す
92+
93+
```
94+
CS\NuGet\_Cleanup.bat ← in\ と out\ の全パッケージ
95+
CS\NuGet\_Cleanup.bat Touryo.Infrastructure ← その接頭辞だけ
96+
```
97+
98+
パック バッチが自動で呼ぶので、通常は不要。→ [`CS/NuGet/README.md`](CS/NuGet/README.md) 6 節
99+
100+
---
101+
102+
## 3. VB 側のビルド
103+
104+
```
105+
root\programs\VB\0_ExecAllBat.bat ← 通し(先に CS 側を建てる)
106+
```
107+
108+
- 先頭で `cd "..\CS"` して C# 側の `2_Build_NuGet_net48.bat` を呼ぶ。**VB は C# の成果物に依存する**
109+
- **個別実行では見つからない不具合がある。** `1_DeleteDir.bat``obj` / `packages`
110+
消した後にだけ露見するものがあるため、**通しで確かめること**#533
111+
- 合格の目安 : ビルド成功 22 / 失敗 0
112+
113+
---
114+
115+
## 4. ツールを CLI で使う
116+
117+
**引数の一覧は README に無い。`/HELP` が一次情報。**
118+
119+
| ツール | 場所 |
120+
|---|---|
121+
| `DaoGen_Tool`(墨壺) | [`README.md`](CS/Frameworks/Tools/DaoGen_Tool/README.md) |
122+
| `DeployZipPackWithHTTP` | [`README.md`](CS/Frameworks/Tools/DeployZipPackWithHTTP/README.md) |
123+
124+
終了コードだけで判断せず、**生成物の存在も確認する**(パス区切りを誤ると成功を返しつつ別の場所に出る)。
125+
126+
---
127+
128+
## 5. コードを書く前に
129+
130+
**規約は [`CODING.md`](CODING.md)、領域ごとの事情は各 `ANALYSIS.md`**
131+
132+
| | |
133+
|---|---|
134+
| ファイル ヘッダ・更新者名・Copyright ブロック | [`CODING.md`](CODING.md) 1 節 |
135+
| `ArgumentException` だけ引数の順が違う | [`CODING.md`](CODING.md) 3 節 |
136+
| フレームワーク本体 | [`CS/Frameworks/ANALYSIS.md`](CS/Frameworks/ANALYSIS.md) |
137+
| net48 サンプル | [`CS/Samples/ANALYSIS.md`](CS/Samples/ANALYSIS.md) |
138+
| netcore サンプル | [`CS/Samples4NetCore/ANALYSIS.md`](CS/Samples4NetCore/ANALYSIS.md) |
139+
140+
### `.bat` を書くとき
141+
142+
- **リリース・公開に使う bat は非 ASCII を書かない**(コメントも英語)。BOM も不要
143+
- **`chcp` を bat の中で使わない**
144+
- 非 ASCII が**外部プログラムへ渡す引数**なら消せない。その場合は
145+
コンソールのコード ページに合わせる(Shift-JIS・BOM なし)
146+
- 改行は **CRLF**
147+
148+
[`CODING.md`](CODING.md) 4 節
149+
150+
### `.ps1` を書くとき
151+
152+
- **UTF-8 BOM 付き**
153+
- **PowerShell 5.1 と 7 の両方で動くこと。** 変更したら 5.1 でも実行する
154+
155+
```powershell
156+
powershell.exe -NoProfile -Command "Set-Location 'root\programs'; .\3_SmokeTest.ps1"
157+
```
158+
159+
[`CODING.md`](CODING.md) 5 節
160+
161+
---
162+
163+
## 6. よく踏む落とし穴
164+
165+
| 症状 | 原因 | 対処 |
166+
|---|---|---|
167+
| `'xxx' is not recognized` が大量に出る | bat の非 ASCII とコード ページ | ASCII 化。[`CODING.md`](CODING.md) 4 節 |
168+
| `MSB4226``Microsoft.WebApplication.targets`| nuget が別製品の MSBuild を拾った | `nuget.exe restore ... %NUGET_MSBUILD%` |
169+
170+
**NuGet パッケージ作成の落とし穴は
171+
[`CS/NuGet/README.md`](CS/NuGet/README.md) 9 節**にまとめてある。
172+
173+
```
174+
.snupkg だけ 403 / F11 でローカルが開く / nuspec と PDB のコミット不一致
175+
リビルド忘れ / net48 だけ効かない / 公開したコミットが消えた
176+
```
177+
178+
**上 5 つは公開前に机上で分かる。** 2 節の確認 5 点を省かないこと。
179+
180+
---
181+
182+
## 7. エージェントとして守ること
183+
184+
**一次情報は [`AGENTS.md`](../../AGENTS.md)**
185+
186+
- **Git 操作をしない**`add` / `commit` / `push` / `checkout` / `switch` / `branch` /
187+
`reset` / `restore` / `stash`)。参照系(`status` / `diff` / `log` / `show` 等)は自由
188+
- **GitHub への投稿は、文面を提示して承認を得てから。** `gh` で行い、`--body-file` を使う。
189+
アカウントは `OsscJpDevInfra``gh auth status` で確認)
190+
- **Issue のクローズ・ラベル・アサイン、PR の作成やマージは人が行う**
191+
- **NuGet への push は人のみ**(外部公開で取り消しが困難)
192+
- 前提となるサービスや DB の状態が足りないときは、**勝手に変えず対処方法とともに報告する**

root/programs/CS/NuGet/README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# NuGet パッケージの作成と公開
1+
# NuGet パッケージの作成と公開
22

33
パッケージの作成と公開の手順。
44
**シンボル サーバー(`.snupkg`)とソース サーバー(Source Link)を機能させる**ところまでを含む。
@@ -653,3 +653,27 @@ Touryo.Infrastructure
653653
654654
> `Regenerate`**値だけを新しくする**(キーは有効になる)。
655655
> 使い終わったキーを無効化する目的では使えない。**無効化は `Revoke`**
656+
657+
---
658+
659+
## 9. よく踏む落とし穴
660+
661+
**いずれも「気付かないまま公開してしまう」類。** 詳細は右端の節を読むこと。
662+
663+
| 症状 | 原因 | 詳細 |
664+
|---|---|---|
665+
| `.nupkg` は通るが **`.snupkg` だけ 403** | `-ApiKey` はシンボル サーバーに使われない。**`-SymbolApiKey` も渡す** | 8 節 |
666+
| **F11 でローカルのソースが開く** | PDB に絶対パスが残っている。**Source Link を通っていない** | 1 節(2) |
667+
| nuspec と PDB のコミットが食い違う | PDB は**ビルド時**、nuspec は**パック時**に決まる。間でコミットしない | 2 節 確認 4 |
668+
| 中身が古いのに新しい版で出る | リビルドを飛ばした。`_NuGetPack.bat` が DLL を検査して止める | 1 節(3) |
669+
| net48 側だけ Source Link / パス正規化が効かない | 旧形式 csproj は SDK の自動処理が効かない。明示指定が要る | 5 節 |
670+
| 公開したコミットが消えた | rebase / squash / ブランチ削除。**公開後は直せない** | 7 節 |
671+
672+
**上 5 つは公開前に机上で分かる。** 2 節の確認 5 点を省かないこと。
673+
最後の 1 つだけは、公開後に他人の操作で起こり得る。
674+
675+
> **`MSB4226``Microsoft.WebApplication.targets` が見つからない)**
676+
> パッケージ作成ではなくビルドの問題。
677+
> nuget が別製品(SQL Server Management Studio 等)同梱の MSBuild を拾っている。
678+
> `nuget.exe restore ... %NUGET_MSBUILD%` を渡す
679+
> [`Frameworks/ANALYSIS.md`](../Frameworks/ANALYSIS.md) 7 章)。

0 commit comments

Comments
 (0)