# 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` + Gitea リリース(`.tgz` 添付)。 タグ・リリースは既存なら skip(冪等)。 ### `.gitea/workflows/image-update-and-release.yaml` は持たない(組織ルールの例外) - 組織共通の「各リポジトリ共通の2本」構成の例外。このチャートは Secret を生成するだけで **追従対象の上流イメージが存在しない**ため、週次の自動更新ワークフロー自体を置かない。 - バージョンは常に手動で `Chart.yaml` の `version` / `appVersion` を更新して判断する。 - 将来サブチャート等の追従対象ができた場合は、このワークフローを新設して対応する。 ### 手動リリース(臨時) - 改修作業で臨時リリースが必要なら `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` 済み。絶対にコミットしない。 ## チャート改修履歴 ### values.schema.json の $schema 行を削除(2026-09-08, v0.1.1) **症状**: 一部のデプロイ環境(新しめの JSON Schema バリデータを内蔵する Helm / Argo CD / Flux 等)で `An error occurred: no schema with key or ref "https://json-schema.org/draft-07/schema#"` が出てデプロイできない。 **原因**: `values.schema.json` の `"$schema": "https://json-schema.org/draft-07/schema#"` を メタスキーマとして解決しようとし、オフライン環境で失敗していた。`santhosh-tekuri/jsonschema` 系のバリデータは `https://` 版の draft-07 メタスキーマ URL をバンドルしていない。 **修正内容**: `$schema` 行を削除。Helm は `$schema` を必須としておらず、本スキーマは ドラフト非依存のキーワード(`type` / `properties` / `required` / `enum` / `additionalProperties` / `minLength` / `minimum` / `maximum` / `minProperties` / 単一スキーマの `items`)しか使って いないため、`helm lint --strict` の検証(未知キーの検出など)は従来どおり機能する。 **修正リリース**: `0.1.0` は登録済みのため(同一バージョンは再発行されない)、`0.1.1` として発行。 **対象ファイル**: `values.schema.json`, `Chart.yaml`, `README.md`, `CLAUDE.md` ### 週次ワークフローの削除(2026-09-05) `image-update-and-release.yaml`(週次セーフティネット)を削除。追従すべき上流イメージが 無いチャートに「更新チェック」ワークフローを持たせる意味が無いと判断。リリースは `helm-release.yaml`(push トリガ・未公開バージョンのみリリース)の1本のみに一本化。 組織共通の「各リポジトリ共通の2本」構成の例外として本ファイルに明記。 **対象ファイル**: `.gitea/workflows/image-update-and-release.yaml`(削除), `README.md`, `CLAUDE.md` ### 自動更新・リリースワークフローの整備(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`