Skip to content

ci(renovate): self-host Renovate via GitHub App to escape Mend Cloud OOM#2350

Merged
s-hirano-ist merged 2 commits into
mainfrom
ci/self-host-renovate-app
Jun 3, 2026
Merged

ci(renovate): self-host Renovate via GitHub App to escape Mend Cloud OOM#2350
s-hirano-ist merged 2 commits into
mainfrom
ci/self-host-renovate-app

Conversation

@s-hirano-ist

@s-hirano-ist s-hirano-ist commented Jun 3, 2026

Copy link
Copy Markdown
Owner

なぜ

Mend Cloud 無料枠(1 job = 3GB cap)の Renovate が kernel-out-of-memory で落ちる。本モノレポ(pnpm@11 / lockfile 17,620行・600KB)の pnpm install / lockFileMaintenance が 3GB を超えるため。toolSettings.nodeMaxMemory / ignoreScripts を入れても頭打ち。

このリポジトリは PUBLIC + AGPL-3.0 なので、GitHub Actions(無料・無制限、runner 16GB RAM)の self-host に切り替えれば Mend のメモリ上限から完全に解放される。

過去に PAT ベースの self-host 版が存在したが、全 Dependabot 化で削除 → 「Dependabot が pnpm 11 非対応」で npm を Renovate へ差し戻した際に self-host を復活させず Mend Cloud に戻ったため OOM が再発していた。今回はより安全な 専用 GitHub App + 短命トークンで再構築する。

変更内容

  • 新規 .github/workflows/renovate.yaml
    • actions/create-github-app-token で短命トークン発行(App PR は ci.yaml を発火できる)
    • RENOVATE_PLATFORM_COMMIT: enabledVerified コミット(PAT 運用で必要だった gitAuthor 固定が不要)
    • RENOVATE_FORCEworkflow_dispatch 時は schedule(月曜朝)を自動バイパスして即時実行
    • issues / pull_request トリガーは Dashboard 更新による自走ループ回避のため意図的に除外
    • cron 0 16 * * *(01:00 JST)で週次「月曜11時前」と四半期「1日5時前」の両 schedule 窓を自動カバー
    • NODE_OPTIONS=6144(Renovate本体)+ nodeMaxMemory=4096(pnpm 子プロセス)で二重に OOM 防止
  • .github/renovate.json5: nodeMaxMemory 2048 → 4096、コメントを self-host 前提に更新(依存管理ポリシーは不変)
  • renovate-todo.md: GitHub App 作成 / Secrets 登録 / Mend 撤去 / 検証の手動セットアップ手順

マージ後に必要な手動ステップ(renovate-todo.md 参照)

  1. 専用 GitHub App 作成(Contents/PR/Issues: R/W)+ install
  2. Secrets 登録(RENOVATE_APP_ID / RENOVATE_APP_PRIVATE_KEY
  3. Settings → Allow auto-merge 有効化
  4. Mend Renovate App を撤去(重複 PR 防止)
  5. dry-run → 本実行で検証、旧 RENOVATE_TOKEN secret 削除

検証済み(ローカル)

  • actionlint: OK(renovate.yaml)
  • oxfmt --check: OK(renovate.json5)
  • renovate-config-validator: Config validated successfully

🤖 Generated with Claude Code

Summary by CodeRabbit

リリースノート

  • Chores
    • 依存関係の自動更新ツール(Renovate)をGitHub Actions上で実行するよう構成を更新しました。リソース管理の最適化と信頼性の向上により、定期的な依存関係の管理をより効率的に行えるようになります。

Mend Cloud の無料 Community 枠は 1 job = 3GB cap で、本モノレポ(pnpm@11 /
lockfile 17,620行)の install / lockFileMaintenance が kernel-out-of-memory で
落ちていた。toolSettings.nodeMaxMemory / ignoreScripts では頭打ちのため、
GitHub Actions の self-host (runner 16GB) へ移行する。

過去の PAT ベース self-host 版(全 Dependabot 化で削除済み)の知見を踏襲しつつ、
より安全な専用 GitHub App + 短命トークンで再構築:

- .github/workflows/renovate.yaml を新規追加
  - actions/create-github-app-token で短命トークン発行 (App PR は ci.yaml を発火)
  - RENOVATE_PLATFORM_COMMIT: enabled で Verified コミット (gitAuthor 固定不要)
  - RENOVATE_FORCE で workflow_dispatch 時は schedule(月曜朝) を自動バイパス
  - issues/pull_request トリガーは自走ループ回避のため意図的に除外
  - cron "0 16 * * *" (01:00 JST) で週次/四半期の両 schedule 窓を自動カバー
  - NODE_OPTIONS=6144 (Renovate本体) + nodeMaxMemory=4096 (pnpm) で二重 OOM 防止
- .github/renovate.json5: nodeMaxMemory 2048 -> 4096、コメントを self-host 前提に更新
- renovate-todo.md: GitHub App 作成 / Secrets 登録 / Mend 撤去 / 検証の手動手順

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
s-private Ready Ready Preview, Comment Jun 3, 2026 12:28pm

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@s-hirano-ist, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 55 minutes and 49 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 005f97b7-a890-490f-9dc4-a7b6094e2fe0

📥 Commits

Reviewing files that changed from the base of the PR and between 41e8b6c and 9d4fd00.

📒 Files selected for processing (1)
  • .github/workflows/renovate.yaml

Walkthrough

Renovateを Mend Cloud から GitHub Actions self-hosted へ移行するため、設定ファイルの更新、スケジュール実行とApp トークン発行を行うワークフローの新規作成、詳細な移行手順ドキュメントを追加。

Changes

Renovate self-hosted GitHub Actions 移行

Layer / File(s) Summary
Renovate設定ファイルの更新
.github/renovate.json5
pnpmライフサイクルスクリプトのメモリ消費対策コメントを self-hosted runner 戦略に更新し、toolSettings.nodeMaxMemory を 2048 から 4096 に引き上げ。
GitHub Actionsワークフロー実装
.github/workflows/renovate.yaml
cron(毎日 16:00 UTC)と workflow_dispatch 両方のトリガーを持つワークフローを新規作成。最小権限設定、actions/create-github-app-token による短命トークン発行、renovatebot/github-action による実行、concurrency 制御により単一実行を保証。
移行手順とドキュメント
renovate-todo.md
GitHub App の作成・権限設定、秘密鍵・App ID の登録、既存 Mend Renovate App の削除、移行後の検証観点(dry-run、PR 作成確認、CI 連動、automerge、重複なし),後片付け手順を記載。

Estimated Code Review Effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly Related PRs

  • s-hirano-ist/s-private#2306: このPRと同じく .github/workflows/renovate.yaml のワークフロー実装(トリガー、Renovateアクション設定、メモリ設定)に直接関連。
  • s-hirano-ist/s-private#2328: このPRの self-hosted Renovate ワークフロー追加と renovate.json5 設定更新と直接競合する可能性あり(既存 self-hosted 削除の試み)。

Poem

🐰 Renovate が GitHub Actions へ飛び立つ

Mend Cloud から self-hosted へ、
トークンと cron で定期実行、
メモリ増量でOOM回避ね、
手順書そろえて移行完了、
自動化の新しい明け方さ!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR タイトルは変更の主要な目的(Mend Cloud の OOM 問題を回避するため GitHub Actions 経由で Renovate を self-host する)を正確に表現しており、実装内容(GitHub App トークンの使用、メモリ制限設定、ワークフロー追加)と合致している。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/self-host-renovate-app

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

✅ Code Duplication Report

Summary

Metric Value
Total Lines 23,833
Duplicate Lines 0
Duplication Rate 0.00%
Threshold 10%
Duplicate Blocks 45

✅ Code duplication rate is within the acceptable threshold.

📊 Detailed Report

Console Output

$ jscpd
Clone found (typescript):
 - /home/runner/work/s-private/s-private/packages/core/shared-kernel/events/system-error-event.ts [51:18 - 64:2] (13 lines, 85 tokens)
   /home/runner/work/s-private/s-private/packages/core/shared-kernel/events/system-warning-event.ts [50:20 - 63:2]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-input.stories.tsx [5:22 - 14:7] (9 lines, 149 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx [5:25 - 14:7]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-input-with-button.stories.tsx [13:32 - 20:7] (7 lines, 107 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx [5:25 - 12:11]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx [6:30 - 15:15] (9 lines, 149 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx [5:25 - 14:7]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx [197:26 - 208:8] (11 lines, 95 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx [168:26 - 179:8]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx [230:26 - 245:44] (15 lines, 134 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx [168:26 - 212:43]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [45:29 - 56:31] (11 lines, 90 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [21:21 - 32:31]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [56:39 - 71:26] (15 lines, 84 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [32:30 - 45:29]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [71:26 - 90:25] (19 lines, 139 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [21:21 - 64:21]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [108:46 - 119:25] (11 lines, 72 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx [50:33 - 61:21]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/dropdown-menu.stories.tsx [37:29 - 51:6] (14 lines, 106 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/dropdown-menu.stories.tsx [21:21 - 35:2]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/drawer.stories.tsx [92:6 - 104:55] (12 lines, 123 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/drawer.stories.tsx [38:62 - 51:40]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/dialog.stories.tsx [67:27 - 82:6] (15 lines, 138 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/dialog.stories.tsx [23:21 - 38:6]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/command.stories.tsx [89:54 - 108:20] (19 lines, 133 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/command.stories.tsx [27:60 - 46:12]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/ui/card.stories.tsx [39:27 - 49:5] (10 lines, 89 tokens)
   /home/runner/work/s-private/s-private/packages/ui/ui/card.stories.tsx [19:21 - 29:5]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/generic-form-wrapper.stories.tsx [293:25 - 306:18] (13 lines, 78 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/generic-form-wrapper.stories.tsx [259:27 - 272:17]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/packages/ui/forms/generic-form-wrapper.stories.tsx [308:30 - 326:3] (18 lines, 164 tokens)
   /home/runner/work/s-private/s-private/packages/ui/forms/generic-form-wrapper.stories.tsx [273:22 - 291:3]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/layouts/nav/footer.stories.tsx [126:30 - 140:21] (14 lines, 118 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/layouts/nav/footer.stories.tsx [102:28 - 116:19]

Clone found (javascript):
 - /home/runner/work/s-private/s-private/app/src/components/common/layouts/cards/image-card-stack.tsx [23:16 - 50:25] (27 lines, 149 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/layouts/cards/link-card-stack.tsx [21:16 - 48:17]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/forms/actions/delete-button-with-modal.stories.tsx [95:65 - 107:15] (12 lines, 125 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/forms/actions/delete-button-with-modal.stories.tsx [75:4 - 87:16]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [161:62 - 166:45] (5 lines, 82 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [107:59 - 112:50]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [171:57 - 176:47] (5 lines, 82 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [107:59 - 112:50]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [181:56 - 186:45] (5 lines, 82 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/features/search/search-card.stories.tsx [107:59 - 112:50]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/common/display/image/image-stack.tsx [133:27 - 148:8] (15 lines, 174 tokens)
   /home/runner/work/s-private/s-private/app/src/components/common/display/image/image-stack.tsx [89:53 - 104:7]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/app/[locale]/book/[slug]/page.tsx [6:75 - 21:40] (15 lines, 124 tokens)
   /home/runner/work/s-private/s-private/app/src/app/[locale]/note/[slug]/page.tsx [6:67 - 21:34]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/app/[locale]/book/[slug]/page.tsx [21:40 - 33:33] (12 lines, 94 tokens)
   /home/runner/work/s-private/s-private/app/src/app/[locale]/note/[slug]/page.tsx [21:34 - 33:33]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/app/[locale]/(authenticated)/images/page.tsx [4:69 - 19:27] (15 lines, 139 tokens)
   /home/runner/work/s-private/s-private/app/src/app/[locale]/(authenticated)/images/viewer/page.tsx [2:77 - 17:31]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/images/repositories/images-query-repository.ts [36:10 - 47:7] (11 lines, 83 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [33:12 - 44:8]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/images/repositories/images-query-repository.ts [51:67 - 66:16] (15 lines, 126 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [45:39 - 60:16]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/books/repositories/books-query-repository.ts [50:13 - 62:7] (12 lines, 90 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [32:9 - 44:8]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/books/repositories/books-query-repository.ts [81:72 - 98:9] (17 lines, 137 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [45:40 - 62:9]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/articles/repositories/articles-query-repository.ts [47:9 - 58:13] (11 lines, 83 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [33:12 - 44:8]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/infrastructures/articles/repositories/articles-query-repository.ts [66:45 - 82:9] (16 lines, 126 tokens)
   /home/runner/work/s-private/s-private/app/src/infrastructures/notes/repositories/notes-query-repository.ts [46:42 - 68:9]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/images/server/images-counter.stories.tsx [17:45 - 37:3] (20 lines, 124 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-counter.stories.tsx [15:44 - 36:3]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/books/server/books-stack.stories.tsx [47:47 - 65:17] (18 lines, 108 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-stack.stories.tsx [68:37 - 86:15]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/books/server/books-stack.stories.tsx [69:5 - 86:17] (17 lines, 96 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-stack.stories.tsx [90:37 - 107:15]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/books/server/books-counter.stories.tsx [15:44 - 36:3] (21 lines, 125 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-counter.stories.tsx [15:44 - 36:3]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/books/client/books-form.tsx [13:38 - 23:20] (10 lines, 84 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/client/note-form.tsx [13:36 - 23:19]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/articles/server/articles-stack.tsx [1:1 - 11:30] (10 lines, 90 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-stack.tsx [1:1 - 11:27]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/articles/server/articles-stack.stories.tsx [85:33 - 120:15] (35 lines, 205 tokens)
   /home/runner/work/s-private/s-private/app/src/components/articles/server/articles-stack.stories.tsx [42:21 - 77:15]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/components/articles/server/articles-counter.stories.tsx [15:47 - 36:3] (21 lines, 125 tokens)
   /home/runner/work/s-private/s-private/app/src/components/notes/server/notes-counter.stories.tsx [15:44 - 36:3]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/application-services/books/delete-books.core.ts [36:23 - 49:24] (13 lines, 107 tokens)
   /home/runner/work/s-private/s-private/app/src/application-services/notes/delete-note.core.ts [36:22 - 49:24]

Clone found (typescript):
 - /home/runner/work/s-private/s-private/app/src/application-services/articles/delete-article.core.ts [36:25 - 49:27] (13 lines, 107 tokens)
   /home/runner/work/s-private/s-private/app/src/application-services/notes/delete-note.core.ts [36:22 - 49:24]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/app/error.tsx [2:1 - 18:8] (16 lines, 134 tokens)
   /home/runner/work/s-private/s-private/app/src/app/global-error.tsx [5:1 - 21:8]

Clone found (tsx):
 - /home/runner/work/s-private/s-private/app/src/app/error.tsx [23:5 - 36:3] (13 lines, 126 tokens)
   /home/runner/work/s-private/s-private/app/src/app/global-error.tsx [28:7 - 41:6]

┌────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐
│ Format     │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ typescript │ 151            │ 10316       │ 46164        │ 9            │ 121 (1.17%)      │ 944 (2.04%)       │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ tsx        │ 153            │ 11213       │ 74875        │ 35           │ 487 (4.34%)      │ 4087 (5.46%)      │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ javascript │ 103            │ 2304        │ 14197        │ 1            │ 27 (1.17%)       │ 149 (1.05%)       │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total:     │ 407            │ 23833       │ 135236       │ 45           │ 635 (2.66%)      │ 5180 (3.83%)      │
└────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 45 clones.
time: 877.207ms

💡 Auto-refactor with AI: npx skills add kucherenko/jscpd
🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page
💖 Sponsor jscpd → https://opencollective.com/jscpd

Duplicate Code Blocks

Duplicate 1

  • Lines: 14
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/core/shared-kernel/events/system-error-event.ts:51-64
  • Second occurrence: /home/runner/work/s-private/s-private/packages/core/shared-kernel/events/system-warning-event.ts:50-63

Duplicate 2

  • Lines: 10
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-input.stories.tsx:5-14
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx:5-14

Duplicate 3

  • Lines: 8
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-input-with-button.stories.tsx:13-20
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx:5-12

Duplicate 4

  • Lines: 10
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx:6-15
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-textarea.stories.tsx:5-14

Duplicate 5

  • Lines: 12
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx:197-208
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx:168-179

Duplicate 6

  • Lines: 16
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx:230-245
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/forms/fields/form-dropdown-input.stories.tsx:168-212

Duplicate 7

  • Lines: 12
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:45-56
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:21-32

Duplicate 8

  • Lines: 16
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:56-71
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:32-45

Duplicate 9

  • Lines: 20
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:71-90
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:21-64

Duplicate 10

  • Lines: 12
  • Tokens: N/A
  • First occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:108-119
  • Second occurrence: /home/runner/work/s-private/s-private/packages/ui/ui/pagination.stories.tsx:50-61

... and 35 more duplicate blocks. Run pnpm jscpd locally for the full report.


📦 Full Report: Download the complete jscpd report from GitHub Actions Artifacts

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 3, 2026

Copy link
Copy Markdown

Deploying s-private with  Cloudflare Pages  Cloudflare Pages

Latest commit: 9d4fd00
Status: ✅  Deploy successful!
Preview URL: https://a835df56.s-private.pages.dev
Branch Preview URL: https://ci-self-host-renovate-app.s-private.pages.dev

View logs

ghalint の github_app_should_limit_permissions に従い、create-github-app-token
の生成トークンを permission-contents/pull-requests/issues: write に限定する。
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 89.33% 1458 / 1632
🔵 Statements 88.87% 1558 / 1753
🔵 Functions 87.55% 436 / 498
🔵 Branches 74.69% 546 / 731
File CoverageNo changed files found.
Generated in workflow #3425 for commit 9d4fd00 by the Vitest Coverage Report Action

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/renovate.json5:
- Around line 24-28: Update the comment that currently reads "ubuntu-24.04, 7GB
RAM" to reflect the correct 16GB RAM value and ensure the RAM mention is
consistent with the settings referenced (NODE_OPTIONS and nodeMaxMemory); i.e.,
replace the 7GB text with 16GB so the comment aligns with the other references
to 16GB and the OOM-avoidance rationale for NODE_OPTIONS=6144 and
nodeMaxMemory=4096 remains coherent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: bbae0665-3d14-4648-9f71-e52626fcbbf0

📥 Commits

Reviewing files that changed from the base of the PR and between ac7447a and 41e8b6c.

📒 Files selected for processing (3)
  • .github/renovate.json5
  • .github/workflows/renovate.yaml
  • renovate-todo.md

Comment thread .github/renovate.json5
Comment on lines +24 to +28
// self-host runner (GitHub Actions / ubuntu-24.04, 7GB RAM) での pnpm メモリ上限。
// pnpm の Node プロセスに --max-old-space-size=4096(MB) を渡し、V8 ヒープを runner の
// 物理メモリより十分下で頭打ちにして OOM を回避する (.github/workflows/renovate.yaml)。
// Mend Cloud 無料枠の 3GB コンテナでは OOM Killer に殺されていたため self-host へ移行済み。
// モノレポ規模が増えて落ちるようなら branchConcurrentLimit を下げるか値を調整する。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

コメントの RAM 表記が他ファイルと矛盾しています。

ここでは ubuntu-24.04, 7GB RAM と記載していますが、.github/workflows/renovate.yaml(Line 63)と renovate-todo.md(Line 4)はいずれも 16GB と記載しています。GitHub ホストの標準 Linux runner は 16GB です。NODE_OPTIONS=6144nodeMaxMemory=4096 を同時に与える OOM 回避の根拠に直結する数値なので、正しい値(16GB)に統一してください。

📝 修正案
-	// self-host runner (GitHub Actions / ubuntu-24.04, 7GB RAM) での pnpm メモリ上限。
+	// self-host runner (GitHub Actions / ubuntu-24.04, 16GB RAM) での pnpm メモリ上限。
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// self-host runner (GitHub Actions / ubuntu-24.04, 7GB RAM) での pnpm メモリ上限。
// pnpm の Node プロセスに --max-old-space-size=4096(MB) を渡し、V8 ヒープを runner の
// 物理メモリより十分下で頭打ちにして OOM を回避する (.github/workflows/renovate.yaml)。
// Mend Cloud 無料枠の 3GB コンテナでは OOM Killer に殺されていたため self-host へ移行済み。
// モノレポ規模が増えて落ちるようなら branchConcurrentLimit を下げるか値を調整する。
// self-host runner (GitHub Actions / ubuntu-24.04, 16GB RAM) での pnpm メモリ上限。
// pnpm の Node プロセスに --max-old-space-size=4096(MB) を渡し、V8 ヒープを runner の
// 物理メモリより十分下で頭打ちにして OOM を回避する (.github/workflows/renovate.yaml)。
// Mend Cloud 無料枠の 3GB コンテナでは OOM Killer に殺されていたため self-host へ移行済み。
// モノレポ規模が増えて落ちるようなら branchConcurrentLimit を下げるか値を調整する。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/renovate.json5 around lines 24 - 28, Update the comment that
currently reads "ubuntu-24.04, 7GB RAM" to reflect the correct 16GB RAM value
and ensure the RAM mention is consistent with the settings referenced
(NODE_OPTIONS and nodeMaxMemory); i.e., replace the 7GB text with 16GB so the
comment aligns with the other references to 16GB and the OOM-avoidance rationale
for NODE_OPTIONS=6144 and nodeMaxMemory=4096 remains coherent.

@s-hirano-ist s-hirano-ist merged commit 4c1d3a1 into main Jun 3, 2026
21 checks passed
@s-hirano-ist s-hirano-ist deleted the ci/self-host-renovate-app branch June 3, 2026 22:42
s-hirano-ist added a commit that referenced this pull request Jun 3, 2026
self-host 移行の手動セットアップ手順は PR #2350 の説明と git 履歴に残っており、
リポジトリへ恒久的に置く必要がないため削除する。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant