Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7792211df | ||
|
|
2a15304e4c | ||
|
|
8d297fe5f3 | ||
|
|
6988ecefab | ||
|
|
257699fbff |
@@ -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.
|
||||||
@@ -1,6 +1,14 @@
|
|||||||
# .gitea/workflows/helm-release.yaml
|
# .gitea/workflows/helm-release.yaml
|
||||||
# 汎用Helmチャート公開ワークフロー(全リポジトリ共通)
|
# -------------------------------------------------------------------------
|
||||||
|
# secret-manager 用のチャート公開ワークフロー。
|
||||||
|
#
|
||||||
|
# 他リポジトリの「毎 push で無条件公開」する共通版とは異なり、この版は
|
||||||
|
# 「Chart.yaml の version が Package Registry に未公開のときだけリリースする」。
|
||||||
|
# 既に同じバージョンが公開済みなら何もしない(README や examples だけの
|
||||||
|
# 変更で push してもリリースは発生しない)。
|
||||||
|
#
|
||||||
|
# リリース = Package Registry への発行 + Git タグ + Gitea リリース(tgz 添付)。
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
name: Helm Chart Release
|
name: Helm Chart Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -8,6 +16,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 +33,132 @@ 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
|
||||||
|
uses: azure/setup-helm@v3
|
||||||
|
with:
|
||||||
|
version: 'v3.12.0'
|
||||||
|
|
||||||
|
- name: Ensure jq
|
||||||
run: |
|
run: |
|
||||||
echo "📦 Installing Helm..."
|
command -v jq >/dev/null 2>&1 || { apt-get update -qq && apt-get install -y -qq jq; }
|
||||||
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
jq --version
|
||||||
helm version
|
|
||||||
echo "✅ Helm installed"
|
|
||||||
|
|
||||||
- name: Get Chart Info
|
- name: Get chart info
|
||||||
id: chart_info
|
id: info
|
||||||
run: |
|
run: |
|
||||||
# Chart.yamlからチャート名とバージョンを取得
|
set -e
|
||||||
CHART_NAME=$(grep '^name:' Chart.yaml | awk '{print $2}')
|
CHART_NAME=$(grep '^name:' Chart.yaml | head -1 | sed 's/^name:[[:space:]]*//; s/"//g; s/[[:space:]]*$//')
|
||||||
CHART_VERSION=$(grep '^version:' Chart.yaml | awk '{print $2}')
|
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}"
|
||||||
|
|
||||||
echo "Chart Name: ${CHART_NAME}"
|
- name: Validate chart
|
||||||
echo "Chart Version: ${CHART_VERSION}"
|
run: helm lint --strict .
|
||||||
|
|
||||||
# GitHub Actionsの環境変数として設定
|
- name: Check whether this version is already released
|
||||||
echo "CHART_NAME=${CHART_NAME}" >> $GITHUB_ENV
|
id: check
|
||||||
echo "CHART_VERSION=${CHART_VERSION}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Validate Chart
|
|
||||||
run: |
|
run: |
|
||||||
echo "🔍 Validating Helm chart..."
|
set -e
|
||||||
helm lint .
|
NAME="${{ steps.info.outputs.name }}"
|
||||||
echo "✅ Chart validation passed"
|
VERSION="${{ steps.info.outputs.version }}"
|
||||||
|
|
||||||
- name: Package Chart
|
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)
|
||||||
|
echo "Registry entries for ${NAME} ${VERSION}: ${FOUND}"
|
||||||
|
|
||||||
|
if [ "${FOUND:-0}" -gt 0 ]; then
|
||||||
|
echo "release_needed=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "✅ v${VERSION} は既にリリース済み。処理をスキップします。"
|
||||||
|
else
|
||||||
|
echo "release_needed=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "🆕 v${VERSION} は未リリース。リリースを実行します。"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Package chart
|
||||||
|
if: steps.check.outputs.release_needed == 'true'
|
||||||
run: |
|
run: |
|
||||||
echo "📦 Packaging Helm chart..."
|
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: Publish to Gitea Package Registry
|
- name: Publish to Gitea Package Registry
|
||||||
|
if: steps.check.outputs.release_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 Git tag
|
||||||
|
if: steps.check.outputs.release_needed == 'true'
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
VERSION="${{ steps.info.outputs.version }}"
|
||||||
|
git config user.name "Claude"
|
||||||
|
git config user.email "claude@cafepieters.com"
|
||||||
|
if git rev-parse "v${VERSION}" >/dev/null 2>&1; then
|
||||||
|
echo "Tag v${VERSION} already exists, skipping"
|
||||||
|
else
|
||||||
|
git tag -a "v${VERSION}" -m "Release ${VERSION}"
|
||||||
|
git push origin "v${VERSION}"
|
||||||
|
echo "Git tag v${VERSION} created"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- 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"
|
||||||
|
|
||||||
|
EXISTING=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/v${VERSION}" | jq -r '.id // empty')
|
||||||
|
|
||||||
|
if [ -n "${EXISTING}" ]; then
|
||||||
|
echo "Release v${VERSION} already exists (id=${EXISTING}), skipping"
|
||||||
|
else
|
||||||
|
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')
|
||||||
|
|
||||||
|
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}"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
if: success()
|
|
||||||
run: |
|
run: |
|
||||||
echo "================================"
|
if [ "${{ steps.check.outputs.release_needed }}" = "true" ]; then
|
||||||
echo "✅ Deployment Successful!"
|
echo "================================"
|
||||||
echo "================================"
|
echo "✅ Released secret-manager v${{ steps.info.outputs.version }}"
|
||||||
echo "Repository: ${{ github.repository }}"
|
echo "================================"
|
||||||
echo "Chart Name: ${CHART_NAME}"
|
echo "helm repo add cafepieters ${REGISTRY_URL}/api/packages/${OWNER}/helm"
|
||||||
echo "Chart Version: ${CHART_VERSION}"
|
echo "helm repo update"
|
||||||
echo "Chart File: ${CHART_FILE}"
|
echo "helm upgrade --install secrets cafepieters/secret-manager"
|
||||||
echo "Branch: ${{ github.ref }}"
|
else
|
||||||
echo "Commit: ${{ github.sha }}"
|
echo "ℹ️ No release: v${{ steps.info.outputs.version }} is already published."
|
||||||
echo "================================"
|
echo " バージョンを上げたい場合は Chart.yaml の version / appVersion を更新して push してください。"
|
||||||
echo ""
|
fi
|
||||||
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 "================================"
|
|
||||||
|
|||||||
@@ -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,51 @@
|
|||||||
- Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、
|
- Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、
|
||||||
`namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。
|
`namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。
|
||||||
- 資格情報は `stringData` で書き込む(テンプレート側で全値を文字列へ強制)。
|
- 資格情報は `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)
|
### 初版設計・実装(2026-08-31, v0.1.0)
|
||||||
|
|
||||||
空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、
|
空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、
|
||||||
|
|||||||
+2
-2
@@ -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.1
|
||||||
appVersion: "0.1.0"
|
appVersion: "0.1.1"
|
||||||
keywords:
|
keywords:
|
||||||
- secrets
|
- secrets
|
||||||
- credentials
|
- credentials
|
||||||
|
|||||||
@@ -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` も併置する。
|
||||||
@@ -30,6 +30,7 @@ Secret として配布** します。
|
|||||||
- [他プロジェクトからの参照方法](#他プロジェクトからの参照方法)
|
- [他プロジェクトからの参照方法](#他プロジェクトからの参照方法)
|
||||||
- [代表的なメールプロバイダの設定値](#代表的なメールプロバイダの設定値)
|
- [代表的なメールプロバイダの設定値](#代表的なメールプロバイダの設定値)
|
||||||
- [変更の反映(伝播)とライフサイクル](#変更の反映伝播とライフサイクル)
|
- [変更の反映(伝播)とライフサイクル](#変更の反映伝播とライフサイクル)
|
||||||
|
- [自動化ワークフロー(Gitea Actions)](#自動化ワークフローgitea-actions)
|
||||||
- [reflector / Reloader 連携](#reflector--reloader-連携)
|
- [reflector / Reloader 連携](#reflector--reloader-連携)
|
||||||
- [トラブルシューティング](#トラブルシューティング)
|
- [トラブルシューティング](#トラブルシューティング)
|
||||||
|
|
||||||
@@ -307,6 +308,26 @@ 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` → **現在の `version` が Package Registry に未公開のときだけ**
|
||||||
|
リリースする(公開済みなら何もしない。README・examples だけの変更ではリリースされない)。
|
||||||
|
リリース内容は **Package Registry への発行 + Git タグ `v<version>` + Gitea リリース
|
||||||
|
(`.tgz` 添付)**。
|
||||||
|
|
||||||
|
> **上流イメージの週次自動追従は行わない** — 他チャート(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 +345,18 @@ Secret 更新時に自動でローリング再起動されます。
|
|||||||
|
|
||||||
各リリースの詳細は `CLAUDE.md` の「チャート改修履歴」を参照。
|
各リリースの詳細は `CLAUDE.md` の「チャート改修履歴」を参照。
|
||||||
|
|
||||||
|
### 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 リリースまで実施。上流イメージが無いため
|
||||||
|
週次の自動更新ワークフローは持たない。
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user