7 Commits
Author SHA1 Message Date
claude 2b17088fae fix: mail プロバイダの msmtprc を既定で常に出力 + SMTP メタ項目を拡充
Helm Chart Release / release-chart (push) Successful in 7s
phpfpm の smtp.existingMsmtprcSecret が「references non-existent secret key:
msmtprc」でマウント失敗する件の対処。renderMsmtprc が opt-in で忘れやすかった。

- renderMsmtprc を既定 true に(明示 false のときだけ抑止)
- smtp.tlsVerify(既定 true)を追加。false で msmtprc に tls_certcheck off
  values.schema.json の smtp にも tlsVerify を追加
- 派生キー SMTP_TLS / SMTP_SSL / SMTP_TLS_VERIFY / SMTP_AUTH を Secret に追加
- from 未設定時に msmtprc へ空の from 行を出さないよう修正
- values.yaml / examples / README を更新。0.1.2。
2026-09-08 18:47:25 +09:00
claude 13cb27a5ec chore: helm-release のリリース判定を registry/tag/release の3独立フラグに分離
Helm Chart Release / release-chart (push) Successful in 5s
「Registry 発行済み」と「タグ/リリース作成」が同一フラグに束ねられていたため、
タグ push だけ失敗しても回復できなかった。各成果物を個別に冪等チェックし、
不足分だけを作る構造に変更。途中失敗しても次の push で自己修復する。
タグ有無は git ls-remote でリモート基準に確認。
2026-09-08 13:37:04 +09:00
claude e7792211df chore: v0.1.1 リリース(values.schema.json の $schema 削除を反映)
Helm Chart Release / release-chart (push) Successful in 7s
0.1.0 は登録済みで同一バージョンは再発行されないため、スキーマ解決エラーの
修正を届けるパッチリリース。挙動・設定項目の変更なし。
2026-09-08 13:20:18 +09:00
claude 2a15304e4c fix: values.schema.json の $schema 行を削除(デプロイ時のスキーマ解決エラー対策)
Helm Chart Release / release-chart (push) Successful in 7s
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
claude 8d297fe5f3 chore: 週次の image-update-and-release.yaml を削除
追従すべき上流イメージが存在しないチャートのため、Docker Hub 等の
更新チェックを行う週次ワークフローに意味が無いと判断し削除。
リリースは push トリガの helm-release.yaml(未公開バージョンのときだけ
リリース)の1本に一本化。README.md / CLAUDE.md からも該当記述を除去し、
組織ルールに対する例外として CLAUDE.md に明記した。
2026-09-05 11:33:36 +09:00
claude 6988ecefab docs: CLAUDE.md を階層化した共通ルールに合わせて整理し、GEMINI.md と .agents/rules(Antigravity 用参照)を追加 2026-09-04 13:24:48 +09:00
claude 257699fbff 自動更新・リリースワークフローを2本体制に整備
Helm Chart Release / release-chart (push) Successful in 7s
他チャート(phpfpm/n8n)を参照し、リリース自動化を実装。

- helm-release.yaml(push トリガ): 「毎 push 無条件公開」から
  「Chart.yaml の version が Package Registry に未公開のときだけリリース」に変更。
  helm search repo --version で存在確認し、未公開時のみ
  Package Registry 発行 + Git タグ v<version> + Gitea リリース(tgz 添付)を実施。
  paths フィルタで Chart.yaml/values.yaml/values.schema.json/templates/** 変更時のみ発火。
  helm lint --strict でスキーマ検証。
- image-update-and-release.yaml(週次 月曜03:00 UTC): 新設。
  このチャートは Secret を生成するだけで追従すべき上流イメージが無いため
  バージョン自動採番はしない。push 側がレジストリ障害等で取りこぼした
  未公開バージョンを週次でリリースするセーフティネットとして動作。
  将来サブチャート等の追従対象が増えたときの追加ポイントをコメントで用意。
- タグ/リリース作成は既存なら skip(冪等)。jq 未導入環境向けのガードを追加。
- README.md / CLAUDE.md に自動化ワークフローの節を追加
2026-09-03 10:29:53 +09:00
10 changed files with 386 additions and 128 deletions
+7
View File
@@ -0,0 +1,7 @@
---
trigger: always_on
description: Read the CLAUDE.md hierarchy via GEMINI.md before doing anything in this workspace
---
最初に、このディレクトリの `GEMINI.md` を読み、そこに列挙された CLAUDE.md を上から順にすべて読んで従うこと。
Read `GEMINI.md` in this directory first, then read and follow every CLAUDE.md it lists, in order.
+134 -66
View File
@@ -1,6 +1,20 @@
# .gitea/workflows/helm-release.yaml # .gitea/workflows/helm-release.yaml
# 汎用Helmチャート公開ワークフロー(全リポジトリ共通) # -------------------------------------------------------------------------
# secret-manager 用のチャート公開ワークフロー。
#
# 他リポジトリの「毎 push で無条件公開」する共通版とは異なり、この版は
# 3 つのリリース成果物を **それぞれ独立に冪等チェック** する:
#
# 1. Package Registry ... `Chart.yaml` の version が未登録なら発行
# 2. Git タグ v<version> ... リモートに無ければ作成して push
# 3. Gitea リリース ... 同名リリースが無ければ作成(tgz 添付)
#
# 独立チェックにしている理由: いずれかのステップだけ失敗しても、次の push で
# 不足分だけが再実行されて自己修復する(例: registry 発行は成功したがタグ
# push が権限エラーで失敗 → 次回 push でタグだけ作成される)。
# どれも不要なら全ステップが no-op(README や examples だけの変更で発火しても
# リリースは発生しない)。
# -------------------------------------------------------------------------
name: Helm Chart Release name: Helm Chart Release
on: on:
@@ -8,6 +22,12 @@ on:
branches: branches:
- main - main
- master - master
paths:
- 'Chart.yaml'
- 'values.yaml'
- 'values.schema.json'
- 'templates/**'
- '.gitea/workflows/helm-release.yaml'
workflow_dispatch: workflow_dispatch:
env: env:
@@ -19,88 +39,136 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
run: | uses: actions/checkout@v3
echo "🔄 Cloning repository..." with:
git clone --depth 1 $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git . fetch-depth: 0
echo "✅ Repository cloned"
- name: Install Helm - name: Install Helm
run: | uses: azure/setup-helm@v3
echo "📦 Installing Helm..." with:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash version: 'v3.12.0'
helm version
echo "✅ Helm installed"
- name: Get Chart Info - name: Ensure jq
id: chart_info
run: | run: |
# Chart.yamlからチャート名とバージョンを取得 command -v jq >/dev/null 2>&1 || { apt-get update -qq && apt-get install -y -qq jq; }
CHART_NAME=$(grep '^name:' Chart.yaml | awk '{print $2}') jq --version
CHART_VERSION=$(grep '^version:' Chart.yaml | awk '{print $2}')
echo "Chart Name: ${CHART_NAME}"
echo "Chart Version: ${CHART_VERSION}"
# GitHub Actionsの環境変数として設定
echo "CHART_NAME=${CHART_NAME}" >> $GITHUB_ENV
echo "CHART_VERSION=${CHART_VERSION}" >> $GITHUB_ENV
- name: Validate Chart - name: Get chart info
id: info
run: | run: |
echo "🔍 Validating Helm chart..." set -e
helm lint . CHART_NAME=$(grep '^name:' Chart.yaml | head -1 | sed 's/^name:[[:space:]]*//; s/"//g; s/[[:space:]]*$//')
echo "✅ Chart validation passed" CHART_VERSION=$(grep '^version:' Chart.yaml | head -1 | sed 's/^version:[[:space:]]*//; s/"//g; s/[[:space:]]*$//')
echo "name=${CHART_NAME}" >> $GITHUB_OUTPUT
echo "version=${CHART_VERSION}" >> $GITHUB_OUTPUT
echo "Chart: ${CHART_NAME} v${CHART_VERSION}"
- name: Package Chart - name: Validate chart
run: helm lint --strict .
- name: Decide what is missing (registry / tag / release)
id: check
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: | run: |
echo "📦 Packaging Helm chart..." set -e
NAME="${{ steps.info.outputs.name }}"
VERSION="${{ steps.info.outputs.version }}"
TAG="v${VERSION}"
# --- 1. Package Registry ---
helm repo add cafepieters "${REGISTRY_URL}/api/packages/${OWNER}/helm" \
--username "${{ secrets.REGISTRY_USER }}" \
--password "${{ secrets.REGISTRY_TOKEN }}" >/dev/null 2>&1 || true
helm repo update cafepieters >/dev/null 2>&1 || true
FOUND=$(helm search repo "cafepieters/${NAME}" --version "${VERSION}" --output json 2>/dev/null | jq 'length' 2>/dev/null || echo 0)
if [ "${FOUND:-0}" -gt 0 ]; then REG=false; else REG=true; fi
# --- 2. Git タグ(リモート基準)---
if [ -n "$(git ls-remote --tags origin "refs/tags/${TAG}" 2>/dev/null)" ]; then TAG_NEEDED=false; else TAG_NEEDED=true; fi
# --- 3. Gitea リリース ---
REL_ID=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" | jq -r '.id // empty')
if [ -n "${REL_ID}" ]; then REL=false; else REL=true; fi
if [ "$REG" = "true" ] || [ "$TAG_NEEDED" = "true" ] || [ "$REL" = "true" ]; then ANY=true; else ANY=false; fi
echo "registry_needed=${REG}" >> $GITHUB_OUTPUT
echo "tag_needed=${TAG_NEEDED}" >> $GITHUB_OUTPUT
echo "release_needed=${REL}" >> $GITHUB_OUTPUT
echo "any_needed=${ANY}" >> $GITHUB_OUTPUT
echo "registry=${REG} / tag=${TAG_NEEDED} / release=${REL} (${NAME} ${TAG})"
- name: Package chart
if: steps.check.outputs.any_needed == 'true'
run: |
set -e
helm package . helm package .
CHART_FILE=$(ls "${{ steps.info.outputs.name }}"-*.tgz | head -1)
CHART_FILE=$(ls *.tgz)
echo "✅ Packaged: ${CHART_FILE}"
echo "CHART_FILE=${CHART_FILE}" >> $GITHUB_ENV echo "CHART_FILE=${CHART_FILE}" >> $GITHUB_ENV
echo "Packaged: ${CHART_FILE}"
- name: Create Git tag
if: steps.check.outputs.tag_needed == 'true'
run: |
set -e
VERSION="${{ steps.info.outputs.version }}"
git config user.name "Claude"
git config user.email "claude@cafepieters.com"
git tag -a "v${VERSION}" -m "Release ${VERSION}" || true
git push origin "v${VERSION}"
echo "Git tag v${VERSION} pushed"
- name: Publish to Gitea Package Registry - name: Publish to Gitea Package Registry
if: steps.check.outputs.registry_needed == 'true'
run: | run: |
echo "🚀 Publishing ${CHART_FILE} to Gitea Package Registry..." set -e
curl --fail-with-body \ curl --fail-with-body \
-u "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_TOKEN }}" \ -u "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_TOKEN }}" \
-X POST \ -X POST \
--upload-file "${CHART_FILE}" \ --upload-file "${CHART_FILE}" \
"${REGISTRY_URL}/api/packages/${OWNER}/helm/api/charts" "${REGISTRY_URL}/api/packages/${OWNER}/helm/api/charts"
echo "✅ Published ${CHART_FILE} to Package Registry"
echo "✅ Chart published successfully!"
- name: Create Gitea Release
if: steps.check.outputs.release_needed == 'true'
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -e
VERSION="${{ steps.info.outputs.version }}"
NAME="${{ steps.info.outputs.name }}"
PACKAGE_FILE="${NAME}-${VERSION}.tgz"
RELEASE_ID=$(curl -s -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"v${VERSION}\",\"name\":\"v${VERSION}\",\"body\":\"secret-manager Helm Chart v${VERSION}\"}" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" | jq -r '.id')
if [ -z "${RELEASE_ID}" ] || [ "${RELEASE_ID}" = "null" ]; then
echo "❌ リリース作成に失敗しました" >&2
exit 1
fi
curl -s -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/gzip" \
--data-binary "@${PACKAGE_FILE}" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${PACKAGE_FILE}"
echo "Gitea release v${VERSION} created with asset ${PACKAGE_FILE}"
- name: Summary - name: Summary
if: success()
run: | run: |
echo "================================" REG="${{ steps.check.outputs.registry_needed }}"
echo "✅ Deployment Successful!" TAG="${{ steps.check.outputs.tag_needed }}"
echo "================================" REL="${{ steps.check.outputs.release_needed }}"
echo "Repository: ${{ github.repository }}" V="${{ steps.info.outputs.version }}"
echo "Chart Name: ${CHART_NAME}" if [ "$REG" = "true" ] || [ "$TAG" = "true" ] || [ "$REL" = "true" ]; then
echo "Chart Version: ${CHART_VERSION}" echo "✅ secret-manager v${V} — registry:${REG} tag:${TAG} release:${REL} を処理しました"
echo "Chart File: ${CHART_FILE}" else
echo "Branch: ${{ github.ref }}" echo "ℹ️ v${V} は registry / タグ / リリース すべて揃っています。処理なし。"
echo "Commit: ${{ github.sha }}" echo " 新バージョンを出すには Chart.yaml の version / appVersion を上げて push。"
echo "================================" fi
echo ""
echo "📦 Install with:"
echo "helm repo add cafepieters ${REGISTRY_URL}/api/packages/${OWNER}/helm"
echo "helm repo update"
echo "helm install my-${CHART_NAME} cafepieters/${CHART_NAME}"
- name: Error Report
if: failure()
run: |
echo "================================"
echo "❌ Deployment Failed!"
echo "================================"
echo "Check the logs above for details"
echo "Common issues:"
echo "- Missing Chart.yaml"
echo "- Invalid Helm chart structure"
echo "- Missing REGISTRY_USER or REGISTRY_TOKEN secrets"
echo "- Insufficient permissions on Personal Access Token"
echo "================================"
+114 -38
View File
@@ -1,5 +1,8 @@
# CLAUDE.md — secret-manager Helm Chart # 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 チャートで クラスター内の複数プロジェクトで横断的に使う「認証情報」を 1 つの Helm チャートで
@@ -12,53 +15,36 @@
- **Gitea リポジトリ**: `ssh://git@192.168.9.65/helmchart/secret-manager` - **Gitea リポジトリ**: `ssh://git@192.168.9.65/helmchart/secret-manager`
- **Helm リポジトリ**: `https://git.cafepieters.com/api/packages/helmchart/helm` - **Helm リポジトリ**: `https://git.cafepieters.com/api/packages/helmchart/helm`
## 作業ルール(必読) ## バージョン方針(組織ルールの例外)
1. **機能を追加・変更したら、必ず `README.md` を更新してから作業完了とする。**
- 追加・変更した機能・パラメータ・挙動を README.md に反映する。
2. **変更は必ず Git Commit / Push すること。**
- 作業単位ごとにコミットし、`origin(main)` へ push するまでが作業完了。
3. **コミットメッセージに Claude クレジット(`Co-Authored-By` 等)を追記することは禁止。**
- `user.name = Claude` でコミットされるため、ユーザー名で判別可能。
4. `git pull` で取り込まれた変更は常に尊重する。revert して push することは禁止。
不適切に見える場合はユーザーに改善提案を提示し、承認を得てから対応する。
## バージョン方針
- このチャートには「主アプリ」となる外部プロダクトが存在しない(チャート自身がアプリ)。 - このチャートには「主アプリ」となる外部プロダクトが存在しない(チャート自身がアプリ)。
そのため `Chart.yaml` の `version` / `appVersion` は **チャート独自に SemVer で採番**する。 そのため `Chart.yaml` の `version` / `appVersion` は **チャート独自に SemVer で採番**する。
(他チャートの「主アプリのバージョンと同一」ルールは適用対象外) (組織ルール「主アプリのバージョンと同一」は適用対象外)
- 破壊的変更 = メジャー、機能追加 = マイナー、修正 = パッチ。 - 破壊的変更 = メジャー、機能追加 = マイナー、修正 = パッチ。
- 改修作業で臨時の手動リリースが必要な場合は末尾にアルファベットを付与する
(例: `0.2.0` → `0.2.0-a`)。
## リリースフロー ## リリースフロー(組織ルールとの差分)
- `main` への push で `.gitea/workflows/helm-release.yaml` が発火し、 新バージョンを出す手順は「`Chart.yaml` の `version` / `appVersion` を上げて `main` に push」だけ。
`helm lint` → `helm package` → Gitea Package Registry へ発行する。 以降は CI が処理する。
- 正式リリース時は `Chart.yaml` のバージョンを上げ、Git タグと Gitea リリースも作成する。
## 必要な Gitea Secrets ### `.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 を生成するだけで
| `GITEA_TOKEN` | Gitea API(リリース作成・タグ操作) | **追従対象の上流イメージが存在しない**ため、週次の自動更新ワークフロー自体を置かない。
| `REGISTRY_USER` | Gitea Package Registry ユーザー名 | - バージョンは常に手動で `Chart.yaml` の `version` / `appVersion` を更新して判断する。
| `REGISTRY_TOKEN` | Gitea Package Registry トークン | - 将来サブチャート等の追従対象ができた場合は、このワークフローを新設して対応する。
## Git Configuration (local) ### 手動リリース(臨時)
- 改修作業で臨時リリースが必要なら `version` 末尾にアルファベットを付与(例: `0.2.0` → `0.2.0-a`)。
| 項目 | 値 |
|---|---|
| user.name | Claude |
| user.email | claude@cafepieters.com |
| core.sshCommand | `ssh -i P:/Claude/.ssh/id_claude -o StrictHostKeyChecking=no` |
## 実行環境
- **Helm はローカル未インストール**。テンプレートのレンダリング確認は CI(`helm lint`)に依存する。
ローカルでは YAML 構文・Go テンプレート構文を目視で慎重に確認すること。
- OS: Windows 11 Pro
## アーキテクチャ要点 ## アーキテクチャ要点
@@ -71,9 +57,99 @@
- Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、 - Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、
`namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。 `namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。
- 資格情報は `stringData` で書き込む(テンプレート側で全値を文字列へ強制)。 - 資格情報は `stringData` で書き込む(テンプレート側で全値を文字列へ強制)。
- 平文の資格情報を含む values(`secrets.values.yaml` 等)は `.gitignore` 済み。絶対にコミットしない。
## チャート改修履歴 ## チャート改修履歴
### renderMsmtprc を既定 true 化 + SMTP メタ項目の拡充(2026-09-08, v0.1.2)
**症状**: phpfpm 側で `smtp.existingMsmtprcSecret: cred-<名前>` を指定したら
`MountVolume.SetUp failed ... references non-existent secret key: msmtprc`。
配布された `cred-*` Secret に `msmtprc` キーが無かった。
**原因**: `mail.providers.<名前>.renderMsmtprc` が opt-in(既定で出力しない)で、
`values.yaml` 上もコメント例にしか無かったため、指定を忘れると `msmtprc` キーが
生成されない。`mail` カテゴリは「完成済み msmtprc も含めて一元管理する」のが目的なので
opt-out にすべきだった。
**修正内容**(`templates/mail-secrets.yaml`):
- `renderMsmtprc` を既定 `true` に(`hasKey` で明示 `false` のときだけ抑止)。
- `smtp.tlsVerify`(既定 `true`)を追加。`false` で `msmtprc` に `tls_certcheck off` を挿入。
`values.schema.json` の `smtp`(`additionalProperties: false`)にも `tlsVerify` を追加。
- 派生キーを Secret に追加: `SMTP_TLS`(starttls か)/ `SMTP_SSL`(暗黙TLSか)/
`SMTP_TLS_VERIFY` / `SMTP_AUTH`(username 有無)。すべて `"true"`/`"false"` の文字列。
`smtp.env` にもこれらが入る(msmtprc 生成より前に env を組み立てているため)。
- `values.yaml` のキー一覧コメント / プロバイダ例、`examples/mail-providers.values.yaml`
(`tlsVerify: false` の社内リレー例を追加)、README を更新。
**対象ファイル**: `templates/mail-secrets.yaml`, `values.schema.json`, `values.yaml`,
`examples/mail-providers.values.yaml`, `Chart.yaml`, `README.md`, `CLAUDE.md`
### helm-release.yaml のリリース判定を3系統に分離 + v0.1.0 タグ補完(2026-09-08)
**症状**: Git タグ `v0.1.0` がリモートに存在しなかった(Registry には
`secret-manager-0.1.0.tgz` は発行済み)。
**原因**: 初回リリース(run #1 / `f374cd2`)時点の `helm-release.yaml` は
共通版のコピー(タグ作成ステップ無し)だった。タグ作成ステップを持つ現行版に
差し替えたのは run #2 だが、その時点で `0.1.0` は既に Registry 登録済みのため
`release_needed=false` となり、タグ作成を含む全ステップがスキップされていた。
= 「Registry 発行済み」と「タグ/リリース作成」が同一フラグに束ねられており、
一方だけ欠けた状態を回復できない構造だった。
**修正内容**:
- `helm-release.yaml` の判定を `registry_needed` / `tag_needed` / `release_needed`
の3独立フラグに分離。各成果物を個別に冪等チェックし、不足分だけを作る。
途中のステップだけ失敗しても次の push で自己修復する。
- タグ有無は `git ls-remote --tags` でリモート基準に確認。
- 欠けていた `v0.1.0` タグを `f374cd2`(Registry の 0.1.0 tgz と同じツリー)に
対して手動で作成・push(過去分の履歴補完。Gitea リリースは 0.1.0 が既知不具合
バージョンのため作らない)。
**対象ファイル**: `.gitea/workflows/helm-release.yaml`, `README.md`, `CLAUDE.md`
(+ リモートタグ `v0.1.0` を追加)
### 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) ### 初版設計・実装(2026-08-31, v0.1.0)
空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、 空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、
+2 -2
View File
@@ -4,8 +4,8 @@ description: >-
クラスター横断で使う認証情報(外部メールのSMTP/IMAP設定・APIキー・汎用資格情報)を クラスター横断で使う認証情報(外部メールのSMTP/IMAP設定・APIキー・汎用資格情報)を
一元管理し、複数ネームスペースへ同一Secretとして配布するHelmチャート。 一元管理し、複数ネームスペースへ同一Secretとして配布するHelmチャート。
type: application type: application
version: 0.1.0 version: 0.1.2
appVersion: "0.1.0" appVersion: "0.1.2"
keywords: keywords:
- secrets - secrets
- credentials - credentials
+24
View File
@@ -0,0 +1,24 @@
# GEMINI.md — Antigravity (Gemini) 用エントリポイント(HelmChart\secret-manager)
このディレクトリのルールはすべて **`CLAUDE.md`** に記載されている。本ファイルにはルール本文を書かず、読むべき CLAUDE.md への参照だけを置く(正本は常に CLAUDE.md)。
## 必ず最初に実行すること
以下のファイルを**上から順に**読み込み、すべての指示に従うこと。上位ほど広い範囲に適用される共通ルールで、下位は上位を前提とした補足・例外である。
1. `P:\Claude\CLAUDE.md` — 全組織共通ルール(Git 運用・コミット書式・実行環境・情報記載の原則)
2. `P:\Claude\HelmChart\CLAUDE.md` — HelmChart 組織共通ルール
3. `P:\Claude\HelmChart\secret-manager\CLAUDE.md` — secret-manager リポジトリ固有ルール(このディレクトリ)
> Antigravity はワークスペース(または git ルート)直下のルールしか自動で読まず、親フォルダを遡らない。そのため上位階層のパスをここに明示している。`P:\Claude` はクラウド同期されており、デスクトップ・ノート PC とも同じパスで存在する。
## 読み替え
- CLAUDE.md 中の「Claude」「Claude Code」は、Antigravity で作業する場合は Gemini 自身のことと読み替える。
- Git のコミット者は Antigravity でも `user.name = Claude` / `user.email = claude@cafepieters.com` のまま使う(変更しない)。コミットメッセージに AI クレジットを付けない。
- Claude Code 固有の機能(`.claude/` 設定、スキル、メモリ等)に関する記述は無視してよい。
## 保守ルール
- ルールの追加・変更は **CLAUDE.md にのみ**行う。本ファイルと `.agents/rules/claude-md.md` は参照だけを保持し、内容を増やさない。
- CLAUDE.md を新しいディレクトリに追加したときは、同じ形式の `GEMINI.md` と `.agents/rules/claude-md.md` も併置する。
+56 -6
View File
@@ -30,6 +30,7 @@ Secret として配布** します。
- [他プロジェクトからの参照方法](#他プロジェクトからの参照方法) - [他プロジェクトからの参照方法](#他プロジェクトからの参照方法)
- [代表的なメールプロバイダの設定値](#代表的なメールプロバイダの設定値) - [代表的なメールプロバイダの設定値](#代表的なメールプロバイダの設定値)
- [変更の反映(伝播)とライフサイクル](#変更の反映伝播とライフサイクル) - [変更の反映(伝播)とライフサイクル](#変更の反映伝播とライフサイクル)
- [自動化ワークフロー(Gitea Actions)](#自動化ワークフローgitea-actions)
- [reflector / Reloader 連携](#reflector--reloader-連携) - [reflector / Reloader 連携](#reflector--reloader-連携)
- [トラブルシューティング](#トラブルシューティング) - [トラブルシューティング](#トラブルシューティング)
@@ -151,9 +152,10 @@ SMTP/IMAP/POP3 のサーバ情報も一元管理** できます。
| `smtp.fromName` | `string` | | 送信者表示名。 | | `smtp.fromName` | `string` | | 送信者表示名。 |
| `smtp.replyTo` | `string` | | Reply-To アドレス。 | | `smtp.replyTo` | `string` | | Reply-To アドレス。 |
| `smtp.authMethod` | `string` | | `plain`(既定) / `login` / `cram-md5`。 | | `smtp.authMethod` | `string` | | `plain`(既定) / `login` / `cram-md5`。 |
| `smtp.tlsVerify` | `bool` | | 既定 `true`。`false` で TLS 証明書検証を無効化(社内リレー・自己署名向け。生成される `msmtprc` に `tls_certcheck off` が入る)。 |
| `imap.host` ほか | | | 受信 (IMAP) 情報。`host` があれば `IMAP_*` キーを追加。`username`/`password` 省略時は SMTP の値を流用。既定ポート `993`。 | | `imap.host` ほか | | | 受信 (IMAP) 情報。`host` があれば `IMAP_*` キーを追加。`username`/`password` 省略時は SMTP の値を流用。既定ポート `993`。 |
| `pop3.host` ほか | | | 受信 (POP3) 情報。同上。既定ポート `995`。 | | `pop3.host` ほか | | | 受信 (POP3) 情報。同上。既定ポート `995`。 |
| `renderMsmtprc` | `bool` | | `true` で Secret に `msmtprc`(msmtp / PHP sendmail 用設定)を含める。 | | `renderMsmtprc` | `bool` | | **既定 `true`**。Secret に完成済み `msmtprc`(msmtp / PHP sendmail 用)を含める。IMAP だけ使う等で不要なら `false`。 |
| `namespacesOverride` | `[]string` | | このエントリだけ別のネームスペースへ配布する。 | | `namespacesOverride` | `[]string` | | このエントリだけ別のネームスペースへ配布する。 |
| `annotations` | `map` | | このエントリの Secret だけに付ける追加アノテーション。 | | `annotations` | `map` | | このエントリの Secret だけに付ける追加アノテーション。 |
@@ -191,8 +193,12 @@ SMTP/IMAP/POP3 のサーバ情報も一元管理** できます。
SMTP_HOST=smtp.gmail.com SMTP_HOST=smtp.gmail.com
SMTP_PORT=587 SMTP_PORT=587
SMTP_SECURITY=starttls SMTP_SECURITY=starttls
SMTP_TLS=true # security=starttls のとき true(派生フラグ)
SMTP_SSL=false # security=tls(暗黙TLS)のとき true
SMTP_TLS_VERIFY=true # smtp.tlsVerify の値
SMTP_USERNAME=no-reply@example.com SMTP_USERNAME=no-reply@example.com
SMTP_PASSWORD=******** SMTP_PASSWORD=********
SMTP_AUTH=true # username があれば true
SMTP_FROM=no-reply@example.com SMTP_FROM=no-reply@example.com
SMTP_FROM_NAME=Example SMTP_FROM_NAME=Example
SMTP_REPLY_TO= SMTP_REPLY_TO=
@@ -202,11 +208,10 @@ IMAP_PORT=993
IMAP_SECURITY=tls IMAP_SECURITY=tls
IMAP_USERNAME=no-reply@example.com IMAP_USERNAME=no-reply@example.com
IMAP_PASSWORD=******** IMAP_PASSWORD=********
smtp.env # ↓ source して使える env ファイル smtp.env # ↑ 全キーを `export KEY="value"` にした source 可能なファイル
export SMTP_HOST="smtp.gmail.com" export SMTP_HOST="smtp.gmail.com"
export SMTP_PORT="587"
... ...
msmtprc # renderMsmtprc: true のとき。msmtp / PHP sendmail 用 msmtprc # 完成済み msmtp 設定(既定で常に含む。renderMsmtprc: false で抑止)
``` ```
### api / generic エントリ ### api / generic エントリ
@@ -307,6 +312,32 @@ distribution:
が付きます。参照側 Deployment に `reloader.stakater.com/auto: "true"` を付けておくと、 が付きます。参照側 Deployment に `reloader.stakater.com/auto: "true"` を付けておくと、
Secret 更新時に自動でローリング再起動されます。 Secret 更新時に自動でローリング再起動されます。
## 自動化ワークフロー(Gitea Actions)
`.gitea/workflows/helm-release.yaml` の 1 本のみ。`main` への push(`Chart.yaml` /
`values.yaml` / `values.schema.json` / `templates/**` 変更時)と手動実行で発火し、
`helm lint --strict` のあと、次の 3 つの成果物を **それぞれ独立に冪等チェック**して、
不足しているものだけを作る:
1. **Package Registry** — `Chart.yaml` の `version` が未登録なら `.tgz` を発行
2. **Git タグ `v<version>`** — リモートに無ければ作成して push
3. **Gitea リリース** — 同名リリースが無ければ作成(`.tgz` 添付)
3 つすべて揃っていれば何もしない(README・examples だけの変更ではリリースされない)。
独立チェックなので、いずれかのステップだけ失敗しても次の push で不足分だけが
再実行されて自己修復する。
> **上流イメージの週次自動追従は行わない** — 他チャート(phpfpm・n8n 等)は
> `image-update-and-release.yaml` で Docker Hub の最新イメージを毎週チェックしバージョンを
> 自動採番するが、secret-manager は Secret を生成するだけで追従対象の上流イメージが
> 無いため、このワークフロー自体を持たない。バージョンは常に手動で `Chart.yaml` を更新する。
新しいバージョンを出す手順: `Chart.yaml` の `version` と `appVersion` を上げて
`main` に push するだけ。あとは `helm-release.yaml` がリリースする。
必要な Gitea Secrets: `GITEA_TOKEN`(リリース・タグ)、`REGISTRY_USER` /
`REGISTRY_TOKEN`(Package Registry)。
## トラブルシューティング ## トラブルシューティング
| 症状 | 原因 / 対処 | | 症状 | 原因 / 対処 |
@@ -324,9 +355,28 @@ Secret 更新時に自動でローリング再起動されます。
各リリースの詳細は `CLAUDE.md` の「チャート改修履歴」を参照。 各リリースの詳細は `CLAUDE.md` の「チャート改修履歴」を参照。
### v0.1.2(2026-09-08)
- **`renderMsmtprc` の既定を `true` に変更**。`mail.providers.<名前>` を定義すれば
`msmtprc` キーが常に生成されるようになった(従来は明示 `true` が必要で、忘れると
phpfpm 等の `smtp.existingMsmtprcSecret` が `references non-existent secret key: msmtprc`
でマウント失敗した)。不要なら `renderMsmtprc: false`。
- `smtp.tlsVerify`(既定 `true`)を追加。`false` で `msmtprc` に `tls_certcheck off` を出力。
- 派生キー `SMTP_TLS` / `SMTP_SSL` / `SMTP_TLS_VERIFY` / `SMTP_AUTH` を Secret に追加
(フレームワーク側が 3 値 enum を解釈しなくて済むよう真偽値文字列で提供)。
### v0.1.1(2026-09-08)
- `values.schema.json` の `$schema` 行を削除。新しめの JSON Schema バリデータを内蔵する
デプロイ環境(Helm / Argo CD / Flux 等)で
`no schema with key or ref "https://json-schema.org/draft-07/schema#"` エラーが出て
デプロイできない問題を修正。`helm lint --strict` の検証内容は不変。
### v0.1.0(2026-08-31) ### v0.1.0(2026-08-31)
- 初版。`distribution`(namespaces 複製 / reflector / reloader)、`common`、 - 初版。`distribution`(namespaces 複製 / reflector / reloader)、`common`、
`mail.providers`(SMTP/IMAP/POP3 + `smtp.env` + 任意 `msmtprc`)、`api.credentials`、 `mail.providers`(SMTP/IMAP/POP3 + `smtp.env` + 任意 `msmtprc`)、`api.credentials`、
`generic.secrets`(任意 type)を実装。`values.schema.json`・`examples/`・ `generic.secrets`(任意 type)を実装。`values.schema.json`・`examples/` を同梱。
Gitea リリースワークフローを同梱。 - CI: `helm-release.yaml`(push 時・未公開バージョンのみリリース)を追加。
Package Registry 発行 + Git タグ + Gitea リリースまで実施。上流イメージが無いため
週次の自動更新ワークフローは持たない。
+17 -6
View File
@@ -41,7 +41,7 @@ mail:
host: "imap.gmail.com" host: "imap.gmail.com"
port: 993 port: 993
security: "tls" security: "tls"
renderMsmtprc: true renderMsmtprc: true # 既定値なので本来は省略可
# ---- Microsoft 365 / Exchange Online --------------------------------- # ---- Microsoft 365 / Exchange Online ---------------------------------
m365: m365:
@@ -58,7 +58,7 @@ mail:
host: "outlook.office365.com" host: "outlook.office365.com"
port: 993 port: 993
security: "tls" security: "tls"
renderMsmtprc: true renderMsmtprc: true # 既定値なので本来は省略可
# ---- SendGrid ------------------------------------------------------- # ---- SendGrid -------------------------------------------------------
# username は固定文字列 "apikey"、password が API キー本体。 # username は固定文字列 "apikey"、password が API キー本体。
@@ -73,7 +73,7 @@ mail:
from: "no-reply@your-domain.com" from: "no-reply@your-domain.com"
fromName: "Your Service" fromName: "Your Service"
authMethod: "plain" authMethod: "plain"
renderMsmtprc: true renderMsmtprc: true # 既定値なので本来は省略可
# ---- Amazon SES --------------------------------------------------- # ---- Amazon SES ---------------------------------------------------
# SES SMTP 認証情報(IAM のアクセスキーとは別物)を使う。リージョンをホスト名に反映。 # SES SMTP 認証情報(IAM のアクセスキーとは別物)を使う。リージョンをホスト名に反映。
@@ -87,7 +87,7 @@ mail:
password: "REPLACE_VIA_--set" password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com" from: "no-reply@your-domain.com"
authMethod: "login" authMethod: "login"
renderMsmtprc: true renderMsmtprc: true # 既定値なので本来は省略可
# ---- Mailgun ----------------------------------------------------- # ---- Mailgun -----------------------------------------------------
mailgun: mailgun:
@@ -100,7 +100,7 @@ mail:
password: "REPLACE_VIA_--set" password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com" from: "no-reply@your-domain.com"
authMethod: "plain" authMethod: "plain"
renderMsmtprc: true renderMsmtprc: true # 既定値なので本来は省略可
# ---- 汎用 / 社内 SMTP リレー(認証なし・TLSなし)-------------------- # ---- 汎用 / 社内 SMTP リレー(認証なし・TLSなし)--------------------
internal-relay: internal-relay:
@@ -110,4 +110,15 @@ mail:
port: 25 port: 25
security: "none" security: "none"
from: "no-reply@your-domain.com" from: "no-reply@your-domain.com"
renderMsmtprc: true
# ---- 社内 SMTP(自己署名証明書。STARTTLS だが証明書検証はしない)------
internal-tls-relay:
enabled: false
smtp:
host: "mail.internal.example"
port: 587
security: "starttls"
username: "app"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
tlsVerify: false # 自己署名のため証明書検証を無効化(msmtprc に tls_certcheck off)
+18 -4
View File
@@ -13,12 +13,22 @@ mail.providers.<name> ごとに 1 つの Secret を生成し、配布先ネー
{{- $username := $smtp.username | default "" }} {{- $username := $smtp.username | default "" }}
{{- $password := $smtp.password | default "" }} {{- $password := $smtp.password | default "" }}
{{- $from := $smtp.from | default $username }} {{- $from := $smtp.from | default $username }}
{{- /* tlsVerify は既定 true。明示 false で証明書検証を無効化(社内リレー等) */ -}}
{{- $tlsVerify := true }}
{{- if hasKey $smtp "tlsVerify" }}{{- $tlsVerify = $smtp.tlsVerify }}{{- end }}
{{- /* renderMsmtprc は既定 true。明示 false で msmtprc キーを出力しない */ -}}
{{- $renderMsmtprc := true }}
{{- if hasKey $p "renderMsmtprc" }}{{- $renderMsmtprc = $p.renderMsmtprc }}{{- end }}
{{- $sd := dict }} {{- $sd := dict }}
{{- $_ := set $sd "SMTP_HOST" (printf "%v" $smtp.host) }} {{- $_ := set $sd "SMTP_HOST" (printf "%v" $smtp.host) }}
{{- $_ := set $sd "SMTP_PORT" (printf "%v" ($smtp.port | default 587)) }} {{- $_ := set $sd "SMTP_PORT" (printf "%v" ($smtp.port | default 587)) }}
{{- $_ := set $sd "SMTP_SECURITY" (printf "%v" $security) }} {{- $_ := set $sd "SMTP_SECURITY" (printf "%v" $security) }}
{{- $_ := set $sd "SMTP_TLS" (ternary "true" "false" (eq $security "starttls")) }}
{{- $_ := set $sd "SMTP_SSL" (ternary "true" "false" (eq $security "tls")) }}
{{- $_ := set $sd "SMTP_TLS_VERIFY" (ternary "true" "false" $tlsVerify) }}
{{- $_ := set $sd "SMTP_USERNAME" (printf "%v" $username) }} {{- $_ := set $sd "SMTP_USERNAME" (printf "%v" $username) }}
{{- $_ := set $sd "SMTP_PASSWORD" (printf "%v" $password) }} {{- $_ := set $sd "SMTP_PASSWORD" (printf "%v" $password) }}
{{- $_ := set $sd "SMTP_AUTH" (ternary "true" "false" (ne $username "")) }}
{{- $_ := set $sd "SMTP_FROM" (printf "%v" $from) }} {{- $_ := set $sd "SMTP_FROM" (printf "%v" $from) }}
{{- $_ := set $sd "SMTP_FROM_NAME" (printf "%v" ($smtp.fromName | default "")) }} {{- $_ := set $sd "SMTP_FROM_NAME" (printf "%v" ($smtp.fromName | default "")) }}
{{- $_ := set $sd "SMTP_REPLY_TO" (printf "%v" ($smtp.replyTo | default "")) }} {{- $_ := set $sd "SMTP_REPLY_TO" (printf "%v" ($smtp.replyTo | default "")) }}
@@ -41,21 +51,25 @@ mail.providers.<name> ごとに 1 つの Secret を生成し、配布先ネー
{{- $_ := set $sd "POP3_USERNAME" (printf "%v" ($pop3.username | default $username)) }} {{- $_ := set $sd "POP3_USERNAME" (printf "%v" ($pop3.username | default $username)) }}
{{- $_ := set $sd "POP3_PASSWORD" (printf "%v" ($pop3.password | default $password)) }} {{- $_ := set $sd "POP3_PASSWORD" (printf "%v" ($pop3.password | default $password)) }}
{{- end }} {{- end }}
{{- /* source 可能な env ファイル */ -}} {{- /* source 可能な env ファイル(msmtprc 追加より前に生成する) */ -}}
{{- $lines := list }} {{- $lines := list }}
{{- range $k, $v := $sd }} {{- range $k, $v := $sd }}
{{- $lines = append $lines (printf "export %s=%s" $k (quote $v)) }} {{- $lines = append $lines (printf "export %s=%s" $k (quote $v)) }}
{{- end }} {{- end }}
{{- $_ := set $sd "smtp.env" (printf "%s\n" (join "\n" (sortAlpha $lines))) }} {{- $_ := set $sd "smtp.env" (printf "%s\n" (join "\n" (sortAlpha $lines))) }}
{{- /* msmtprc スニペット(任意) */ -}} {{- /* msmtprc スニペット(既定で含む。renderMsmtprc: false で抑止) */ -}}
{{- if $p.renderMsmtprc }} {{- if $renderMsmtprc }}
{{- $tls := "tls on" }} {{- $tls := "tls on" }}
{{- $starttls := "tls_starttls on" }} {{- $starttls := "tls_starttls on" }}
{{- if eq $security "tls" }}{{- $starttls = "tls_starttls off" }}{{- end }} {{- if eq $security "tls" }}{{- $starttls = "tls_starttls off" }}{{- end }}
{{- if eq $security "none" }}{{- $tls = "tls off" }}{{- $starttls = "tls_starttls off" }}{{- end }} {{- if eq $security "none" }}{{- $tls = "tls off" }}{{- $starttls = "tls_starttls off" }}{{- end }}
{{- $certcheck := "" }}
{{- if not $tlsVerify }}{{- $certcheck = "tls_certcheck off\n" }}{{- end }}
{{- $auth := "auth off" }} {{- $auth := "auth off" }}
{{- if $username }}{{- $auth = printf "auth on\nuser %s\npassword %s" $username $password }}{{- end }} {{- if $username }}{{- $auth = printf "auth on\nuser %s\npassword %s" $username $password }}{{- end }}
{{- $msmtprc := printf "# secret-manager が生成 (%s)\ndefaults\n%s\n%s\ntls_trust_file /etc/ssl/certs/ca-certificates.crt\nlogfile -\naccount default\nhost %s\nport %v\nfrom %s\n%s\n" $name $tls $starttls $smtp.host ($smtp.port | default 587) $from $auth }} {{- $fromLine := "" }}
{{- if $from }}{{- $fromLine = printf "from %s\n" $from }}{{- end }}
{{- $msmtprc := printf "# secret-manager が生成 (%s)\ndefaults\n%s\n%s\n%stls_trust_file /etc/ssl/certs/ca-certificates.crt\nlogfile -\naccount default\nhost %s\nport %v\n%s%s\n" $name $tls $starttls $certcheck $smtp.host ($smtp.port | default 587) $fromLine $auth }}
{{- $_ := set $sd "msmtprc" $msmtprc }} {{- $_ := set $sd "msmtprc" $msmtprc }}
{{- end }} {{- end }}
{{- include "secret-manager.secret" (dict "ctx" $ "name" $name "stringData" $sd "type" "Opaque" "annotations" ($p.annotations | default dict) "namespacesOverride" ($p.namespacesOverride | default list)) }} {{- include "secret-manager.secret" (dict "ctx" $ "name" $name "stringData" $sd "type" "Opaque" "annotations" ($p.annotations | default dict) "namespacesOverride" ($p.namespacesOverride | default list)) }}
+2 -2
View File
@@ -1,5 +1,4 @@
{ {
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "secret-manager values", "title": "secret-manager values",
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
@@ -75,7 +74,8 @@
"from": { "type": "string" }, "from": { "type": "string" },
"fromName": { "type": "string" }, "fromName": { "type": "string" },
"replyTo": { "type": "string" }, "replyTo": { "type": "string" },
"authMethod": { "type": "string", "enum": ["plain", "login", "cram-md5"] } "authMethod": { "type": "string", "enum": ["plain", "login", "cram-md5"] },
"tlsVerify": { "type": "boolean" }
} }
}, },
"imap": { "imap": {
+12 -4
View File
@@ -65,20 +65,28 @@ common:
# mail: 外部メールの接続情報(パスワード + サーバ情報) # mail: 外部メールの接続情報(パスワード + サーバ情報)
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# providers.<キー> ごとに 1 つの Secret を生成する。Secret には以下が入る: # providers.<キー> ごとに 1 つの Secret を生成する。Secret には以下が入る:
# 個別キー: # 個別キー(送信 SMTP):
# SMTP_HOST / SMTP_PORT / SMTP_SECURITY / SMTP_USERNAME / SMTP_PASSWORD # SMTP_HOST / SMTP_PORT / SMTP_SECURITY (none|starttls|tls)
# SMTP_TLS ... "true" if starttls (フレームワーク互換の派生フラグ)
# SMTP_SSL ... "true" if 暗黙TLS(tls) (同上)
# SMTP_TLS_VERIFY ... 証明書検証 "true"/"false"
# SMTP_USERNAME / SMTP_PASSWORD / SMTP_AUTH ("true" if username あり)
# SMTP_FROM / SMTP_FROM_NAME / SMTP_REPLY_TO / SMTP_AUTH_METHOD # SMTP_FROM / SMTP_FROM_NAME / SMTP_REPLY_TO / SMTP_AUTH_METHOD
# 個別キー(受信・任意):
# IMAP_HOST / IMAP_PORT / IMAP_SECURITY / IMAP_USERNAME / IMAP_PASSWORD (imap 定義時) # IMAP_HOST / IMAP_PORT / IMAP_SECURITY / IMAP_USERNAME / IMAP_PASSWORD (imap 定義時)
# POP3_HOST / POP3_PORT / POP3_SECURITY / POP3_USERNAME / POP3_PASSWORD (pop3 定義時) # POP3_HOST / POP3_PORT / POP3_SECURITY / POP3_USERNAME / POP3_PASSWORD (pop3 定義時)
# まとめ: # まとめ:
# smtp.env ... `export KEY=VALUE` 形式。コンテナ内で `source` して利用可能 # smtp.env ... `export KEY=VALUE` 形式。コンテナ内で `source` して利用可能
# msmtprc ... msmtp / PHP sendmail 用設定(renderMsmtprc: true のとき) # msmtprc ... msmtp / PHP sendmail 用の完成済み設定ファイル
# ★ 既定で常に含まれる。抑止したい場合のみ renderMsmtprc: false
# #
# 代表的なプロバイダの設定値は examples/ および README.md の一覧表を参照。 # 代表的なプロバイダの設定値は examples/ および README.md の一覧表を参照。
mail: mail:
providers: {} providers: {}
# gmail: # gmail:
# enabled: true # enabled: true
# # msmtprc キーを出力するか(既定 true)。IMAP だけ使いたい等で不要なら false
# renderMsmtprc: true
# smtp: # smtp:
# host: "smtp.gmail.com" # host: "smtp.gmail.com"
# port: 587 # port: 587
@@ -89,6 +97,7 @@ mail:
# fromName: "Example" # fromName: "Example"
# replyTo: "" # replyTo: ""
# authMethod: "plain" # plain | login | cram-md5 # authMethod: "plain" # plain | login | cram-md5
# tlsVerify: true # false で証明書検証を無効化(社内リレー等)
# imap: # imap:
# host: "imap.gmail.com" # host: "imap.gmail.com"
# port: 993 # port: 993
@@ -99,7 +108,6 @@ mail:
# # host: "pop.gmail.com" # # host: "pop.gmail.com"
# # port: 995 # # port: 995
# # security: "tls" # # security: "tls"
# renderMsmtprc: true
# # このプロバイダだけ別ネームスペースへ配る場合(省略時は distribution 準拠) # # このプロバイダだけ別ネームスペースへ配る場合(省略時は distribution 準拠)
# namespacesOverride: [] # namespacesOverride: []
# # このプロバイダ Secret だけに付ける追加アノテーション # # このプロバイダ Secret だけに付ける追加アノテーション