Files
secret-manager/.gitea/workflows/helm-release.yaml
T
claude 257699fbff
Helm Chart Release / release-chart (push) Successful in 7s
自動更新・リリースワークフローを2本体制に整備
他チャート(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

165 lines
6.5 KiB
YAML
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.
# .gitea/workflows/helm-release.yaml
# -------------------------------------------------------------------------
# secret-manager 用のチャート公開ワークフロー。
#
# 他リポジトリの「毎 push で無条件公開」する共通版とは異なり、この版は
# 「Chart.yaml の version が Package Registry に未公開のときだけリリースする」。
# 既に同じバージョンが公開済みなら何もしない(README や examples だけの
# 変更で push してもリリースは発生しない)。
#
# リリース = Package Registry への発行 + Git タグ + Gitea リリース(tgz 添付)。
# -------------------------------------------------------------------------
name: Helm Chart Release
on:
push:
branches:
- main
- master
paths:
- 'Chart.yaml'
- 'values.yaml'
- 'values.schema.json'
- 'templates/**'
- '.gitea/workflows/helm-release.yaml'
workflow_dispatch:
env:
REGISTRY_URL: https://git.cafepieters.com
OWNER: helmchart
jobs:
release-chart:
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
- 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 "================================"
echo "✅ Released secret-manager v${{ steps.info.outputs.version }}"
echo "================================"
echo "helm repo add cafepieters ${REGISTRY_URL}/api/packages/${OWNER}/helm"
echo "helm repo update"
echo "helm upgrade --install secrets cafepieters/secret-manager"
else
echo "ℹ️ No release: v${{ steps.info.outputs.version }} is already published."
echo " バージョンを上げたい場合は Chart.yaml の version / appVersion を更新して push してください。"
fi