Files
secret-manager/CLAUDE.md
T
claude 2a15304e4c
Helm Chart Release / release-chart (push) Successful in 7s
fix: values.schema.json の $schema 行を削除(デプロイ時のスキーマ解決エラー対策)
no schema with key or ref "https://json-schema.org/draft-07/schema#" で
デプロイできない環境(新しめの JSON Schema バリデータ内蔵の Helm/Argo CD/Flux 等)への対応。
santhosh-tekuri 系バリデータが https 版 draft-07 メタスキーマを持たず解決に失敗するため、
$schema 行を削除。本スキーマはドラフト非依存キーワードのみ使用のため lint --strict の
検証は従来どおり機能する。
2026-09-08 13:17:30 +09:00

112 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` は持たない(組織ルールの例外)
- 組織共通の「各リポジトリ共通の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)
**症状**: 一部のデプロイ環境(新しめの 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` の検証(未知キーの検出など)は従来どおり機能する。
**対象ファイル**: `values.schema.json`, `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`