87 lines
5.9 KiB
Markdown
87 lines
5.9 KiB
Markdown
# CLAUDE.md — secret-manager Helm Chart
|
||
|
||
> **共通ルール(要約)** — 詳細は `P:\Claude\CLAUDE.md`(全体共通)と `P:\Claude\HelmChart\CLAUDE.md`(Helm チャート共通: リリースフロー・ワークフロー・Gitea Secrets)を参照。
|
||
> 作業前に pull / 機能変更時は README 更新 / 作業単位ごとに commit → push まで / コミットに AI クレジットを付けない / pull で入った変更を revert しない / Helm はローカル実行不可(Python のみ可)。
|
||
|
||
## リポジトリ概要
|
||
|
||
クラスター内の複数プロジェクトで横断的に使う「認証情報」を 1 つの Helm チャートで
|
||
一元管理する。外部メールの SMTP/IMAP 設定・API キー・汎用資格情報を定義し、
|
||
指定した複数ネームスペースへ同一の Kubernetes Secret として配布する。
|
||
|
||
**設計目標**: 認証情報の変更が発生したら、このチャートの values を更新して
|
||
`helm upgrade` するだけで、クラスター上の全プロジェクトに反映される。
|
||
|
||
- **Gitea リポジトリ**: `ssh://git@192.168.9.65/helmchart/secret-manager`
|
||
- **Helm リポジトリ**: `https://git.cafepieters.com/api/packages/helmchart/helm`
|
||
|
||
## バージョン方針(組織ルールの例外)
|
||
|
||
- このチャートには「主アプリ」となる外部プロダクトが存在しない(チャート自身がアプリ)。
|
||
そのため `Chart.yaml` の `version` / `appVersion` は **チャート独自に SemVer で採番**する。
|
||
(組織ルール「主アプリのバージョンと同一」は適用対象外)
|
||
- 破壊的変更 = メジャー、機能追加 = マイナー、修正 = パッチ。
|
||
|
||
## リリースフロー(組織ルールとの差分)
|
||
|
||
新バージョンを出す手順は「`Chart.yaml` の `version` / `appVersion` を上げて `main` に push」だけ。
|
||
以降は CI が処理する。
|
||
|
||
### `.gitea/workflows/helm-release.yaml`(push トリガ)
|
||
- `main` への push(`Chart.yaml` / `values.yaml` / `values.schema.json` / `templates/**` 変更時)
|
||
および手動実行で発火。
|
||
- `helm lint --strict` → **現在の `version` が Package Registry に未公開のときだけ**
|
||
リリースする(`helm search repo --version` で存在確認)。
|
||
- 他リポジトリの「毎 push で無条件公開」する共通版とは意図的に異なる。README・examples
|
||
だけの変更で push してもリリースは発生しない。
|
||
- リリース内容 = Package Registry 発行 + Git タグ `v<version>` + Gitea リリース(`.tgz` 添付)。
|
||
タグ・リリースは既存なら skip(冪等)。
|
||
|
||
### `.gitea/workflows/image-update-and-release.yaml`(週次)
|
||
- 毎週月曜 03:00 UTC(JST 12:00)+ 手動実行。
|
||
- **上流イメージの自動追従はしない**(このチャートは Secret を生成するだけで
|
||
追従対象イメージが無い)。バージョンは常に手動で `Chart.yaml` を更新する。
|
||
- 役割は「push 側の取りこぼし対策」— `version` が未公開なら週次でリリースを実行する。
|
||
- 将来サブチャート等の追従対象が増えたときの追加ポイントは同ファイル内にコメントで用意済み。
|
||
|
||
### 手動リリース(臨時)
|
||
- 改修作業で臨時リリースが必要なら `version` 末尾にアルファベットを付与(例: `0.2.0` → `0.2.0-a`)。
|
||
|
||
## アーキテクチャ要点
|
||
|
||
- `templates/_helpers.tpl` の `secret-manager.secret` が中核。
|
||
1 論理 Secret を受け取り、実効ネームスペースごとに複製した Secret マニフェストを出力する。
|
||
- 配布先の決定順:
|
||
1. エントリの `namespacesOverride`(非空ならそれを使用)
|
||
2. `distribution.reflector.enabled` が true → リリース先ネームスペースのみに作成し reflector アノテーション付与
|
||
3. それ以外 → `distribution.namespaces` (+ `includeReleaseNamespace`) を重複排除した一覧
|
||
- Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、
|
||
`namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。
|
||
- 資格情報は `stringData` で書き込む(テンプレート側で全値を文字列へ強制)。
|
||
- 平文の資格情報を含む values(`secrets.values.yaml` 等)は `.gitignore` 済み。絶対にコミットしない。
|
||
|
||
## チャート改修履歴
|
||
|
||
### 自動更新・リリースワークフローの整備(2026-09-03, v0.1.0)
|
||
|
||
`.gitea/workflows/` を 2 本体制に。`helm-release.yaml` を「無条件公開」から
|
||
「未公開バージョンのみリリース」に変更(`helm search repo --version` で存在確認し、
|
||
未公開時のみ Package Registry 発行 + Git タグ + Gitea リリース)。`paths` フィルタで
|
||
`Chart.yaml`/`values.yaml`/`values.schema.json`/`templates/**` の変更時のみ発火。
|
||
`image-update-and-release.yaml` を新設(週次)。上流イメージが無いチャートのため
|
||
バージョン自動採番はせず、push 側の取りこぼし対策(未公開バージョンの週次リリース)
|
||
として動作。将来の追従対象追加用コメントブロックを同梱。
|
||
|
||
**対象ファイル**: `.gitea/workflows/helm-release.yaml`,
|
||
`.gitea/workflows/image-update-and-release.yaml`, `README.md`, `CLAUDE.md`
|
||
|
||
### 初版設計・実装(2026-08-31, v0.1.0)
|
||
|
||
空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、
|
||
`common`(namePrefix・labels・annotations・immutable)、`mail.providers`(SMTP/IMAP/POP3 +
|
||
`smtp.env` + 任意の `msmtprc`)、`api.credentials`、`generic.secrets`(任意 type)を実装。
|
||
`values.schema.json`、`examples/`、`.gitea/workflows/helm-release.yaml` を追加。
|
||
|
||
**対象ファイル**: `Chart.yaml`, `values.yaml`, `values.schema.json`, `templates/*`,
|
||
`examples/*`, `.gitea/workflows/helm-release.yaml`, `README.md`, `.gitignore`, `CLAUDE.md`
|