From 8d297fe5f32cddd9e63e420e3db850bc909b0679 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 5 Sep 2026 11:33:36 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=E9=80=B1=E6=AC=A1=E3=81=AE=20image-up?= =?UTF-8?q?date-and-release.yaml=20=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 追従すべき上流イメージが存在しないチャートのため、Docker Hub 等の 更新チェックを行う週次ワークフローに意味が無いと判断し削除。 リリースは push トリガの helm-release.yaml(未公開バージョンのときだけ リリース)の1本に一本化。README.md / CLAUDE.md からも該当記述を除去し、 組織ルールに対する例外として CLAUDE.md に明記した。 --- .../workflows/image-update-and-release.yaml | 188 ------------------ CLAUDE.md | 20 +- README.md | 27 ++- 3 files changed, 26 insertions(+), 209 deletions(-) delete mode 100644 .gitea/workflows/image-update-and-release.yaml diff --git a/.gitea/workflows/image-update-and-release.yaml b/.gitea/workflows/image-update-and-release.yaml deleted file mode 100644 index cf20213..0000000 --- a/.gitea/workflows/image-update-and-release.yaml +++ /dev/null @@ -1,188 +0,0 @@ -# .gitea/workflows/image-update-and-release.yaml -# ------------------------------------------------------------------------- -# 週次の自動更新 & リリース ワークフロー(毎週月曜 3:00 AM / JST 12:00 PM)。 -# -# ■ 他チャートとの違い -# phpfpm / n8n などは「Docker Hub の上流イメージ最新版」を毎週チェックし、 -# 更新があれば values.yaml / Chart.yaml のバージョンを上げてリリースする。 -# secret-manager は Secret を生成するだけで **追従すべき上流イメージが無い** -# ため、バージョンの自動採番は行わない(バージョンは常に手動で Chart.yaml -# を更新する)。 -# -# ■ このワークフローの役割 -# 1. (将来用)追従対象が増えたときに上流チェックを追加する場所を用意する -# (下部のコメントアウト済みサンプルを参照)。 -# 2. リリースの取りこぼし対策 — Chart.yaml の version が Package Registry に -# 未公開なら、週次でリリースを実行する(push トリガの helm-release.yaml が -# レジストリ障害等で失敗していた場合のセーフティネット)。 -# ------------------------------------------------------------------------- -name: Weekly Update and Release - -on: - schedule: - - cron: '0 3 * * 1' # 毎週月曜 3:00 AM UTC(JST 12:00 PM) - workflow_dispatch: - -env: - REGISTRY_URL: https://git.cafepieters.com - OWNER: helmchart - -jobs: - update-and-release: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Install Helm - uses: azure/setup-helm@v3 - with: - version: 'v3.12.0' - - - name: Ensure jq - run: | - command -v jq >/dev/null 2>&1 || { apt-get update -qq && apt-get install -y -qq jq; } - jq --version - - # ------------------------------------------------------------------- - # ▼▼▼ 将来、追従対象(イメージ / サブチャート等)が増えたらここに追加 ▼▼▼ - # - # 例: 上流コンテナの最新タグを Docker Hub から取得して values.yaml を書き換え、 - # 必要なら Chart.yaml の version / appVersion も更新する。 - # - # - name: Check upstream image - # id: upstream - # run: | - # set -e - # CURRENT=$(grep 'tag:' values.yaml | head -1 | sed 's/.*tag: *"\([^"]*\)".*/\1/') - # LATEST=$(curl -s "https://registry.hub.docker.com/v2/repositories//tags?page_size=100" \ - # | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1) - # echo "current=$CURRENT" >> $GITHUB_OUTPUT - # echo "latest=$LATEST" >> $GITHUB_OUTPUT - # - # - name: Apply update - # if: steps.upstream.outputs.current != steps.upstream.outputs.latest - # run: | - # set -e - # sed -i "s/tag: \"${{ steps.upstream.outputs.current }}\"/tag: \"${{ steps.upstream.outputs.latest }}\"/" values.yaml - # sed -i "s/^version: .*/version: ${{ steps.upstream.outputs.latest }}/" Chart.yaml - # sed -i "s/^appVersion: .*/appVersion: \"${{ steps.upstream.outputs.latest }}\"/" Chart.yaml - # git config user.name "Claude"; git config user.email "claude@cafepieters.com" - # git add values.yaml Chart.yaml - # git commit -m "chore: update upstream to ${{ steps.upstream.outputs.latest }}" - # git push origin main - # - # ▲▲▲ ここまで ▲▲▲ - # ------------------------------------------------------------------- - - - name: Get chart info - id: info - run: | - set -e - CHART_NAME=$(grep '^name:' Chart.yaml | head -1 | sed 's/^name:[[:space:]]*//; s/"//g; s/[[:space:]]*$//') - 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: Validate chart - run: helm lint --strict . - - - name: Check whether this version is already released - id: check - run: | - set -e - NAME="${{ steps.info.outputs.name }}" - VERSION="${{ steps.info.outputs.version }}" - - 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: | - set -e - helm package . - CHART_FILE=$(ls "${{ steps.info.outputs.name }}"-*.tgz | head -1) - echo "CHART_FILE=${CHART_FILE}" >> $GITHUB_ENV - echo "Packaged: ${CHART_FILE}" - - - name: Publish to Gitea Package Registry - if: steps.check.outputs.release_needed == 'true' - run: | - set -e - curl --fail-with-body \ - -u "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_TOKEN }}" \ - -X POST \ - --upload-file "${CHART_FILE}" \ - "${REGISTRY_URL}/api/packages/${OWNER}/helm/api/charts" - echo "✅ Published ${CHART_FILE} to Package Registry" - - - 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 - run: | - if [ "${{ steps.check.outputs.release_needed }}" = "true" ]; then - echo "✅ Weekly release done: secret-manager v${{ steps.info.outputs.version }}" - else - echo "ℹ️ Nothing to do: v${{ steps.info.outputs.version }} already published." - fi diff --git a/CLAUDE.md b/CLAUDE.md index 821ed81..3f8cf7e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,12 +37,11 @@ - リリース内容 = Package Registry 発行 + Git タグ `v` + Gitea リリース(`.tgz` 添付)。 タグ・リリースは既存なら skip(冪等)。 -### `.gitea/workflows/image-update-and-release.yaml`(週次) -- 毎週月曜 03:00 UTC(JST 12:00)+ 手動実行。 -- **上流イメージの自動追従はしない**(このチャートは Secret を生成するだけで - 追従対象イメージが無い)。バージョンは常に手動で `Chart.yaml` を更新する。 -- 役割は「push 側の取りこぼし対策」— `version` が未公開なら週次でリリースを実行する。 -- 将来サブチャート等の追従対象が増えたときの追加ポイントは同ファイル内にコメントで用意済み。 +### `.gitea/workflows/image-update-and-release.yaml` は持たない(組織ルールの例外) +- 組織共通の「各リポジトリ共通の2本」構成の例外。このチャートは Secret を生成するだけで + **追従対象の上流イメージが存在しない**ため、週次の自動更新ワークフロー自体を置かない。 +- バージョンは常に手動で `Chart.yaml` の `version` / `appVersion` を更新して判断する。 +- 将来サブチャート等の追従対象ができた場合は、このワークフローを新設して対応する。 ### 手動リリース(臨時) - 改修作業で臨時リリースが必要なら `version` 末尾にアルファベットを付与(例: `0.2.0` → `0.2.0-a`)。 @@ -62,6 +61,15 @@ ## チャート改修履歴 +### 週次ワークフローの削除(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` を「無条件公開」から diff --git a/README.md b/README.md index a8f728d..e4bfbba 100644 --- a/README.md +++ b/README.md @@ -310,20 +310,17 @@ Secret 更新時に自動でローリング再起動されます。 ## 自動化ワークフロー(Gitea Actions) -`.gitea/workflows/` に 2 本の CI がある。どちらも「`Chart.yaml` の `version` が -Package Registry に未公開のときだけリリースする」方式で、リリース内容は -**Package Registry への発行 + Git タグ `v` + Gitea リリース(`.tgz` 添付)**。 +`.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` + Gitea リリース +(`.tgz` 添付)**。 -| ワークフロー | 契機 | 動作 | -|---|---|---| -| `helm-release.yaml` | `main` への push(`Chart.yaml` / `values.yaml` / `values.schema.json` / `templates/**` 変更時)、手動実行 | `helm lint --strict` → 現在の `version` が未公開ならリリース。公開済みなら何もしない(README・examples だけの変更ではリリースされない)。 | -| `image-update-and-release.yaml` | 毎週月曜 03:00 UTC(JST 12:00)、手動実行 | 週次のセーフティネット。push 側がレジストリ障害等で取りこぼしていた場合に、未公開バージョンを週次でリリースする。 | - -> **上流イメージの自動追従はしない** — 他チャート(phpfpm・n8n 等)の -> `image-update-and-release.yaml` は Docker Hub の最新イメージを取得してバージョンを +> **上流イメージの週次自動追従は行わない** — 他チャート(phpfpm・n8n 等)は +> `image-update-and-release.yaml` で Docker Hub の最新イメージを毎週チェックしバージョンを > 自動採番するが、secret-manager は Secret を生成するだけで追従対象の上流イメージが -> 無いため、バージョンは常に手動で `Chart.yaml` を更新する。将来サブチャート等の -> 追従対象が増えた場合の追加ポイントは同ファイル内にコメントで用意してある。 +> 無いため、このワークフロー自体を持たない。バージョンは常に手動で `Chart.yaml` を更新する。 新しいバージョンを出す手順: `Chart.yaml` の `version` と `appVersion` を上げて `main` に push するだけ。あとは `helm-release.yaml` がリリースする。 @@ -353,6 +350,6 @@ Package Registry に未公開のときだけリリースする」方式で、リ - 初版。`distribution`(namespaces 複製 / reflector / reloader)、`common`、 `mail.providers`(SMTP/IMAP/POP3 + `smtp.env` + 任意 `msmtprc`)、`api.credentials`、 `generic.secrets`(任意 type)を実装。`values.schema.json`・`examples/` を同梱。 -- CI: `helm-release.yaml`(push 時・未公開バージョンのみリリース)と - `image-update-and-release.yaml`(週次リリースセーフティネット)を追加。 - どちらも Package Registry 発行 + Git タグ + Gitea リリースまで実施。 +- CI: `helm-release.yaml`(push 時・未公開バージョンのみリリース)を追加。 + Package Registry 発行 + Git タグ + Gitea リリースまで実施。上流イメージが無いため + 週次の自動更新ワークフローは持たない。